From 506daaf7a4f8326a7356e31937e228169562dcd1 Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Thu, 13 Apr 2023 11:29:45 +0530 Subject: [PATCH 001/187] Initial commit --- .../src/main/resources/icons/yotpo.svg | 11 +++ .../src/main/resources/seed/oss_catalog.json | 37 +++++++ .../resources/seed/source_definitions.yaml | 8 ++ .../src/main/resources/seed/source_specs.yaml | 29 ++++++ .../connectors/source-yotpo/.dockerignore | 6 ++ .../connectors/source-yotpo/Dockerfile | 38 ++++++++ .../connectors/source-yotpo/README.md | 82 ++++++++++++++++ .../connectors/source-yotpo/__init__.py | 3 + .../source-yotpo/acceptance-test-config.yml | 36 +++++++ .../source-yotpo/acceptance-test-docker.sh | 3 + .../connectors/source-yotpo/build.gradle | 9 ++ .../integration_tests/__init__.py | 3 + .../integration_tests/abnormal_state.json | 9 ++ .../integration_tests/acceptance.py | 16 +++ .../integration_tests/configured_catalog.json | 22 +++++ .../integration_tests/expected_records.jsonl | 1 + .../integration_tests/invalid_config.json | 3 + .../integration_tests/sample_config.json | 3 + .../integration_tests/sample_state.json | 9 ++ .../connectors/source-yotpo/main.py | 13 +++ .../connectors/source-yotpo/requirements.txt | 2 + .../connectors/source-yotpo/setup.py | 29 ++++++ .../source-yotpo/source_yotpo/__init__.py | 8 ++ .../source-yotpo/source_yotpo/manifest.yaml | 97 +++++++++++++++++++ .../source_yotpo/schemas/reviews.json | 60 ++++++++++++ .../source_yotpo/schemas/webhooks.json | 30 ++++++ .../source-yotpo/source_yotpo/source.py | 18 ++++ .../source-yotpo/source_yotpo/spec.yaml | 24 +++++ docs/integrations/sources/yotpo.md | 65 +++++++++++++ 29 files changed, 674 insertions(+) create mode 100644 airbyte-config-oss/init-oss/src/main/resources/icons/yotpo.svg create mode 100644 airbyte-integrations/connectors/source-yotpo/.dockerignore create mode 100644 airbyte-integrations/connectors/source-yotpo/Dockerfile create mode 100644 airbyte-integrations/connectors/source-yotpo/README.md create mode 100644 airbyte-integrations/connectors/source-yotpo/__init__.py create mode 100644 airbyte-integrations/connectors/source-yotpo/acceptance-test-config.yml create mode 100755 airbyte-integrations/connectors/source-yotpo/acceptance-test-docker.sh create mode 100644 airbyte-integrations/connectors/source-yotpo/build.gradle create mode 100644 airbyte-integrations/connectors/source-yotpo/integration_tests/__init__.py create mode 100644 airbyte-integrations/connectors/source-yotpo/integration_tests/abnormal_state.json create mode 100644 airbyte-integrations/connectors/source-yotpo/integration_tests/acceptance.py create mode 100644 airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json create mode 100644 airbyte-integrations/connectors/source-yotpo/integration_tests/expected_records.jsonl create mode 100644 airbyte-integrations/connectors/source-yotpo/integration_tests/invalid_config.json create mode 100644 airbyte-integrations/connectors/source-yotpo/integration_tests/sample_config.json create mode 100644 airbyte-integrations/connectors/source-yotpo/integration_tests/sample_state.json create mode 100644 airbyte-integrations/connectors/source-yotpo/main.py create mode 100644 airbyte-integrations/connectors/source-yotpo/requirements.txt create mode 100644 airbyte-integrations/connectors/source-yotpo/setup.py create mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/__init__.py create mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml create mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews.json create mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/webhooks.json create mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/source.py create mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml create mode 100644 docs/integrations/sources/yotpo.md diff --git a/airbyte-config-oss/init-oss/src/main/resources/icons/yotpo.svg b/airbyte-config-oss/init-oss/src/main/resources/icons/yotpo.svg new file mode 100644 index 000000000000..7c095613e535 --- /dev/null +++ b/airbyte-config-oss/init-oss/src/main/resources/icons/yotpo.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json index 1f724199f054..c88672b1c49f 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json @@ -28402,6 +28402,43 @@ "allowedHosts": { "hosts": [ "api-metrica.yandex.net" ] } + }, { + "sourceDefinitionId": "", + "name": "Yotpo", + "dockerRepository": "airbyte/source-yotpo", + "dockerImageTag": "1.0.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/yotpo", + "icon": "yotpo.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/yotpo", + "connectionSpecification": { + "$schema": "https://json-schema.org/draft-07/schema#", + "title": "Yotpo Spec", + "type": "object", + "required": [ "auth_token", "counter_id", "start_date" ], + "additionalProperties": true, + "properties": { + "auth_token": { + "type": "string", + "title": "Authentication Token", + "description": "Your Yandex Metrica API access token", + "airbyte_secret": true, + "order": 0 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": [ "api.yotpo.com" ] + } }, { "sourceDefinitionId": "9c74c2d7-531a-4ebf-b6d8-6181f805ecdc", "name": "Younium", diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml index 9de994a9985a..bb0a0d63ee5e 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml @@ -2519,6 +2519,14 @@ allowedHosts: hosts: - api-metrica.yandex.net +- name: Yotpo + sourceDefinitionId: + dockerRepository: airbyte/source-yotpo + dockerImageTag: 0.1.0 + documentationUrl: https://docs.airbyte.com/integrations/sources/yotpo + icon: yotpo.svg + sourceType: api + releaseStage: alpha - name: Younium sourceDefinitionId: 9c74c2d7-531a-4ebf-b6d8-6181f805ecdc dockerRepository: airbyte/source-younium diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml index 384263fd8c76..81893445a2bd 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml @@ -18339,6 +18339,35 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] +- dockerImage: "airbyte/source-yotpo:0.1.0" + spec: + documentationUrl: "https://docs.airbyte.com/integrations/sources/yotpo" + connectionSpecification: + $schema: "http://json-schema.org/draft-07/schema#" + title: Yotpo Spec + type: object + required: + - access_token + - app_key + - date_from + additionalProperties: true + properties: + access_token: + title: Access Token + type: string + description: Access token recieved as a result of API call to https://api.yotpo.com/oauth/token (Ref- https://apidocs.yotpo.com/reference/yotpo-authentication) + airbyte_secret: true + app_key: + title: App Key + type: string + description: App key found at settings (Ref- https://settings.yotpo.com/#/general_settings) + date_from: + title: Date From Filter + type: string + description: Date time filter for incremental filter, Specify which date to extract from. + supportsNormalization: false + supportsDBT: false + supported_destination_sync_modes: [] - dockerImage: "airbyte/source-younium:0.1.0" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/younium" diff --git a/airbyte-integrations/connectors/source-yotpo/.dockerignore b/airbyte-integrations/connectors/source-yotpo/.dockerignore new file mode 100644 index 000000000000..7b7c00a7be1e --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/.dockerignore @@ -0,0 +1,6 @@ +* +!Dockerfile +!main.py +!source_yotpo +!setup.py +!secrets diff --git a/airbyte-integrations/connectors/source-yotpo/Dockerfile b/airbyte-integrations/connectors/source-yotpo/Dockerfile new file mode 100644 index 000000000000..2616324339ad --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/Dockerfile @@ -0,0 +1,38 @@ +FROM python:3.9.11-alpine3.15 as base + +# build and load all requirements +FROM base as builder +WORKDIR /airbyte/integration_code + +# upgrade pip to the latest version +RUN apk --no-cache upgrade \ + && pip install --upgrade pip \ + && apk --no-cache add tzdata build-base + + +COPY setup.py ./ +# install necessary packages to a temporary folder +RUN pip install --prefix=/install . + +# build a clean environment +FROM base +WORKDIR /airbyte/integration_code + +# copy all loaded and built libraries to a pure basic image +COPY --from=builder /install /usr/local +# add default timezone settings +COPY --from=builder /usr/share/zoneinfo/Etc/UTC /etc/localtime +RUN echo "Etc/UTC" > /etc/timezone + +# bash is installed for more convenient debugging. +RUN apk --no-cache add bash + +# copy payload code only +COPY main.py ./ +COPY source_yotpo ./source_yotpo + +ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" +ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] + +LABEL io.airbyte.version=0.1.0 +LABEL io.airbyte.name=airbyte/source-yotpo diff --git a/airbyte-integrations/connectors/source-yotpo/README.md b/airbyte-integrations/connectors/source-yotpo/README.md new file mode 100644 index 000000000000..d0ba27b612ed --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/README.md @@ -0,0 +1,82 @@ +# Yotpo Source + +This is the repository for the Yotpo configuration based source connector. +For information about how to use this connector within Airbyte, see [the documentation](https://docs.airbyte.com/integrations/sources/yotpo). + +## Local development + +#### Building via Gradle +You can also build the connector in Gradle. This is typically used in CI and not needed for your development workflow. + +To build using Gradle, from the Airbyte repository root, run: +``` +./gradlew :airbyte-integrations:connectors:source-yotpo:build +``` + +#### Create credentials +**If you are a community contributor**, follow the instructions in the [documentation](https://docs.airbyte.com/integrations/sources/yotpo) +to generate the necessary credentials. Then create a file `secrets/config.json` conforming to the `source_yotpo/spec.yaml` file. +Note that any directory named `secrets` is gitignored across the entire Airbyte repo, so there is no danger of accidentally checking in sensitive information. +See `integration_tests/sample_config.json` for a sample config file. + +**If you are an Airbyte core member**, copy the credentials in Lastpass under the secret name `source yotpo test creds` +and place them into `secrets/config.json`. + +### Locally running the connector docker image + +#### Build +First, make sure you build the latest Docker image: +``` +docker build . -t airbyte/source-yotpo:dev +``` + +You can also build the connector image via Gradle: +``` +./gradlew :airbyte-integrations:connectors:source-yotpo:airbyteDocker +``` +When building via Gradle, the docker image name and tag, respectively, are the values of the `io.airbyte.name` and `io.airbyte.version` `LABEL`s in +the Dockerfile. + +#### Run +Then run any of the connector commands as follows: +``` +docker run --rm airbyte/source-yotpo:dev spec +docker run --rm -v $(pwd)/secrets:/secrets airbyte/source-yotpo:dev check --config /secrets/config.json +docker run --rm -v $(pwd)/secrets:/secrets airbyte/source-yotpo:dev discover --config /secrets/config.json +docker run --rm -v $(pwd)/secrets:/secrets -v $(pwd)/integration_tests:/integration_tests airbyte/source-yotpo:dev read --config /secrets/config.json --catalog /integration_tests/configured_catalog.json +``` +## Testing + +#### Acceptance Tests +Customize `acceptance-test-config.yml` file to configure tests. See [Connector Acceptance Tests](https://docs.airbyte.com/connector-development/testing-connectors/connector-acceptance-tests-reference) for more information. +If your connector requires to create or destroy resources for use during acceptance tests create fixtures for it and place them inside integration_tests/acceptance.py. + +To run your integration tests with Docker, run: +``` +./acceptance-test-docker.sh +``` + +### Using gradle to run tests +All commands should be run from airbyte project root. +To run unit tests: +``` +./gradlew :airbyte-integrations:connectors:source-yotpo:unitTest +``` +To run acceptance and custom integration tests: +``` +./gradlew :airbyte-integrations:connectors:source-yotpo:integrationTest +``` + +## Dependency Management +All of your dependencies should go in `setup.py`, NOT `requirements.txt`. The requirements file is only used to connect internal Airbyte dependencies in the monorepo for local development. +We split dependencies between two groups, dependencies that are: +* required for your connector to work need to go to `MAIN_REQUIREMENTS` list. +* required for the testing need to go to `TEST_REQUIREMENTS` list + +### Publishing a new version of the connector +You've checked out the repo, implemented a million dollar feature, and you're ready to share your changes with the world. Now what? +1. Make sure your changes are passing unit and integration tests. +1. Bump the connector version in `Dockerfile` -- just increment the value of the `LABEL io.airbyte.version` appropriately (we use [SemVer](https://semver.org/)). +1. Create a Pull Request. +1. Pat yourself on the back for being an awesome contributor. +1. Someone from Airbyte will take a look at your PR and iterate with you to merge it into master. diff --git a/airbyte-integrations/connectors/source-yotpo/__init__.py b/airbyte-integrations/connectors/source-yotpo/__init__.py new file mode 100644 index 000000000000..c941b3045795 --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/__init__.py @@ -0,0 +1,3 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# diff --git a/airbyte-integrations/connectors/source-yotpo/acceptance-test-config.yml b/airbyte-integrations/connectors/source-yotpo/acceptance-test-config.yml new file mode 100644 index 000000000000..ecfcc4f72b63 --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/acceptance-test-config.yml @@ -0,0 +1,36 @@ +# See [Connector Acceptance Tests](https://docs.airbyte.com/connector-development/testing-connectors/connector-acceptance-tests-reference) +# for more information about how to configure these tests +connector_image: airbyte/source-yotpo:dev +acceptance_tests: + spec: + tests: + - spec_path: "source_yotpo/spec.yaml" + connection: + tests: + - config_path: "secrets/config.json" + status: "succeed" + - config_path: "integration_tests/invalid_config.json" + status: "failed" + discovery: + tests: + - config_path: "secrets/config.json" + basic_read: + tests: + - config_path: "secrets/config.json" + configured_catalog_path: "integration_tests/configured_catalog.json" + empty_streams: [] + expect_records: + path: "integration_tests/expected_records.jsonl" + extra_fields: no + exact_order: no + extra_records: yes + incremental: + tests: + - config_path: "secrets/config.json" + configured_catalog_path: "integration_tests/configured_catalog.json" + future_state: + future_state_path: "integration_tests/abnormal_state.json" + full_refresh: + tests: + - config_path: "secrets/config.json" + configured_catalog_path: "integration_tests/configured_catalog.json" diff --git a/airbyte-integrations/connectors/source-yotpo/acceptance-test-docker.sh b/airbyte-integrations/connectors/source-yotpo/acceptance-test-docker.sh new file mode 100755 index 000000000000..b6d65deeccb4 --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/acceptance-test-docker.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env sh + +source "$(git rev-parse --show-toplevel)/airbyte-integrations/bases/connector-acceptance-test/acceptance-test-docker.sh" diff --git a/airbyte-integrations/connectors/source-yotpo/build.gradle b/airbyte-integrations/connectors/source-yotpo/build.gradle new file mode 100644 index 000000000000..83058c6777f4 --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/build.gradle @@ -0,0 +1,9 @@ +plugins { + id 'airbyte-python' + id 'airbyte-docker' + id 'airbyte-connector-acceptance-test' +} + +airbytePython { + moduleDirectory 'source_yotpo' +} diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/__init__.py b/airbyte-integrations/connectors/source-yotpo/integration_tests/__init__.py new file mode 100644 index 000000000000..c941b3045795 --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/__init__.py @@ -0,0 +1,3 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/abnormal_state.json b/airbyte-integrations/connectors/source-yotpo/integration_tests/abnormal_state.json new file mode 100644 index 000000000000..d79c484ff6b4 --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/abnormal_state.json @@ -0,0 +1,9 @@ +[ + { + "type": "STREAM", + "stream": { + "stream_state": { "updated_at": "2099-04-12T18:13:36.000Z" }, + "stream_descriptor": { "name": "reviews" } + } + } +] diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/acceptance.py b/airbyte-integrations/connectors/source-yotpo/integration_tests/acceptance.py new file mode 100644 index 000000000000..9e6409236281 --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/acceptance.py @@ -0,0 +1,16 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + + +import pytest + +pytest_plugins = ("connector_acceptance_test.plugin",) + + +@pytest.fixture(scope="session", autouse=True) +def connector_setup(): + """This fixture is a placeholder for external resources that acceptance test might require.""" + # TODO: setup test dependencies if needed. otherwise remove the TODO comments + yield + # TODO: clean up test dependencies diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json new file mode 100644 index 000000000000..ec576442f20d --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json @@ -0,0 +1,22 @@ +{ + "streams": [ + { + "stream": { + "name": "reviews", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"] + }, + "sync_mode": "incremental", + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "webhooks", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + } + ] +} diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-yotpo/integration_tests/expected_records.jsonl new file mode 100644 index 000000000000..f11f7ca46cb6 --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/expected_records.jsonl @@ -0,0 +1 @@ +{"stream": "reviews", "data": {"id":460530094,"title":"Great Phone","content":"It’s really good","score":5,"votes_up":0,"votes_down":0,"created_at":"2023-04-13T05:06:00.000Z","updated_at":"2023-04-13T05:08:41.000Z","sentiment":0.960069,"sku":"19","name":"John S.","email":"moles57397@snowlash.com","reviewer_type":"verified_reviewer","deleted":false,"archived":false,"escalated":false,"is_incentivized":false}, "emitted_at": 1679051186833} diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/invalid_config.json b/airbyte-integrations/connectors/source-yotpo/integration_tests/invalid_config.json new file mode 100644 index 000000000000..34470dc18f00 --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/invalid_config.json @@ -0,0 +1,3 @@ +{ + "access_token": "" +} diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/sample_config.json b/airbyte-integrations/connectors/source-yotpo/integration_tests/sample_config.json new file mode 100644 index 000000000000..ccc9b992b901 --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/sample_config.json @@ -0,0 +1,3 @@ +{ + "access_token": "XXXXXXXXXXXXXXXXXXXXXXXXXX" +} diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/sample_state.json b/airbyte-integrations/connectors/source-yotpo/integration_tests/sample_state.json new file mode 100644 index 000000000000..e572e343696f --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/sample_state.json @@ -0,0 +1,9 @@ +[ + { + "type": "STREAM", + "stream": { + "stream_state": { "updated_at": "2023-04-12T18:13:36.000Z" }, + "stream_descriptor": { "name": "reviews" } + } + } +] diff --git a/airbyte-integrations/connectors/source-yotpo/main.py b/airbyte-integrations/connectors/source-yotpo/main.py new file mode 100644 index 000000000000..d456ca2abab3 --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/main.py @@ -0,0 +1,13 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + + +import sys + +from airbyte_cdk.entrypoint import launch +from source_yotpo import SourceYotpo + +if __name__ == "__main__": + source = SourceYotpo() + launch(source, sys.argv[1:]) diff --git a/airbyte-integrations/connectors/source-yotpo/requirements.txt b/airbyte-integrations/connectors/source-yotpo/requirements.txt new file mode 100644 index 000000000000..cc57334ef619 --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/requirements.txt @@ -0,0 +1,2 @@ +-e ../../bases/connector-acceptance-test +-e . diff --git a/airbyte-integrations/connectors/source-yotpo/setup.py b/airbyte-integrations/connectors/source-yotpo/setup.py new file mode 100644 index 000000000000..4714ade53c35 --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/setup.py @@ -0,0 +1,29 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + + +from setuptools import find_packages, setup + +MAIN_REQUIREMENTS = [ + "airbyte-cdk~=0.1", +] + +TEST_REQUIREMENTS = [ + "pytest~=6.2", + "pytest-mock~=3.6.1", + "connector-acceptance-test", +] + +setup( + name="source_yotpo", + description="Source implementation for Yotpo.", + author="Airbyte", + author_email="contact@airbyte.io", + packages=find_packages(), + install_requires=MAIN_REQUIREMENTS, + package_data={"": ["*.json", "*.yaml", "schemas/*.json", "schemas/shared/*.json"]}, + extras_require={ + "tests": TEST_REQUIREMENTS, + }, +) diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/__init__.py b/airbyte-integrations/connectors/source-yotpo/source_yotpo/__init__.py new file mode 100644 index 000000000000..ccbbe46ad976 --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/__init__.py @@ -0,0 +1,8 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + + +from .source import SourceYotpo + +__all__ = ["SourceYotpo"] diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml new file mode 100644 index 000000000000..d7cac7413daa --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml @@ -0,0 +1,97 @@ +version: "0.29.0" + +definitions: + requester: + type: HttpRequester + url_base: "https://api.yotpo.com/v1" + http_method: "GET" + authenticator: + type: BearerAuthenticator + api_token: "{{ config['access_token'] }}" + + base_stream: + type: DeclarativeStream + retriever: + type: SimpleRetriever + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + paginator: + type: NoPagination + requester: + $ref: "#/definitions/requester" + + reviews_stream: + type: DeclarativeStream + retriever: + type: SimpleRetriever + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: ["reviews"] + paginator: + type: NoPagination + requester: + type: HttpRequester + url_base: "https://api.yotpo.com/v1" + http_method: "GET" + request_parameters: + utoken: "{{ config['access_token'] }}" + authenticator: + type: BearerAuthenticator + api_token: "{{ config['access_token'] }}" + incremental_sync: + type: DatetimeBasedCursor + cursor_field: "updated_at" + datetime_format: "%Y-%m-%dT%H:%M:%S.%f%z" + cursor_granularity: "PT0.000001S" + lookback_window: "P31D" + start_datetime: + datetime: "{{ config['date_from'] }}" + datetime_format: "%Y-%m-%dT%H:%M:%S.%f%z" + end_datetime: + datetime: "{{ today_utc() }}" + datetime_format: "%Y-%m-%d" + step: "P1M" + name: "reviews" + primary_key: "id" + $parameters: + path: "/apps/{{ config['app_key'] }}/reviews" + + webhooks_stream: + type: DeclarativeStream + retriever: + type: SimpleRetriever + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: ["response"] + paginator: + type: NoPagination + requester: + type: HttpRequester + url_base: "https://api.yotpo.com/" + http_method: "GET" + request_parameters: + utoken: "{{ config['access_token'] }}" + authenticator: + type: BearerAuthenticator + api_token: "{{ config['access_token'] }}" + name: "webhooks" + $parameters: + path: "/apps/{{ config['app_key'] }}/webhooks" + +streams: + - "#/definitions/reviews_stream" + - "#/definitions/webhooks_stream" + +check: + type: CheckStream + stream_names: + - "reviews" + - "webhooks" + diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews.json new file mode 100644 index 000000000000..6d4eac1f090f --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews.json @@ -0,0 +1,60 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Reviews Schema", + "type": "object", + "properties": { + "id": { + "type": ["null", "number"] + }, + "title": { + "type": ["null", "string"] + }, + "content": { + "type": ["null", "string"] + }, + "score": { + "type": ["null", "number"] + }, + "votes_up": { + "type": ["null", "number"] + }, + "votes_down": { + "type": ["null", "number"] + }, + "created_at": { + "type": ["null", "string"], + "format": "date-time" + }, + "updated_at": { + "type": ["null", "string"], + "format": "date-time" + }, + "sentiment": { + "type": ["null", "number"] + }, + "sku": { + "type": ["null", "string"] + }, + "name": { + "type": ["null", "string"] + }, + "email": { + "type": ["null", "string"] + }, + "reviewer_type": { + "type": ["null", "string"] + }, + "deleted": { + "type": ["null", "boolean"] + }, + "archived": { + "type": ["null", "boolean"] + }, + "escalated": { + "type": ["null", "boolean"] + }, + "is_incentivized": { + "type": ["null", "boolean"] + } + } +} diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/webhooks.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/webhooks.json new file mode 100644 index 000000000000..6d7e0f0e0af9 --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/webhooks.json @@ -0,0 +1,30 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Webhooks Schema", + "type": "object", + "properties": { + "webhooks": { + "type": ["null", "array"], + "items": { + "type": ["null", "object"], + "properties": { + "id": { + "type": ["null", "number"] + }, + "webhook_event_id": { + "type": ["null", "number"] + }, + "webhook_event_name": { + "type": ["null", "string"] + }, + "url": { + "type": ["null", "string"] + }, + "version": { + "type": ["null", "number"] + } + } + } + } + } +} diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/source.py b/airbyte-integrations/connectors/source-yotpo/source_yotpo/source.py new file mode 100644 index 000000000000..dc275c06fdcd --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/source.py @@ -0,0 +1,18 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + +from airbyte_cdk.sources.declarative.yaml_declarative_source import YamlDeclarativeSource + +""" +This file provides the necessary constructs to interpret a provided declarative YAML configuration file into +source connector. + +WARNING: Do not modify this file. +""" + + +# Declarative Source +class SourceYotpo(YamlDeclarativeSource): + def __init__(self): + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml new file mode 100644 index 000000000000..1d31374cde73 --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml @@ -0,0 +1,24 @@ +documentationUrl: https://docs.airbyte.com/integrations/sources/pingdom +connectionSpecification: + $schema: http://json-schema.org/draft-07/schema# + title: Yotpo Spec + type: object + required: + - access_token + - app_key + - date_from + additionalProperties: true + properties: + access_token: + title: Access Token + type: string + description: Access token recieved as a result of API call to https://api.yotpo.com/oauth/token (Ref- https://apidocs.yotpo.com/reference/yotpo-authentication) + airbyte_secret: true + app_key: + title: App Key + type: string + description: App key found at settings (Ref- https://settings.yotpo.com/#/general_settings) + date_from: + title: Date From Filter + type: string + description: Date time filter for incremental filter, Specify which date to extract from. \ No newline at end of file diff --git a/docs/integrations/sources/yotpo.md b/docs/integrations/sources/yotpo.md new file mode 100644 index 000000000000..fe305d6b75a9 --- /dev/null +++ b/docs/integrations/sources/yotpo.md @@ -0,0 +1,65 @@ +# Yotpo + +This page contains the setup guide and reference information for the [Yotpo](https://apidocs.yotpo.com/reference/welcome) source + +## Prerequisites + +Access Token (which acts as bearer token) is mandate for this connector to work, It could be generated from the auth token call (ref - https://apidocs.yotpo.com/reference/yotpo-authentication). + +## Setup guide + +### Step 1: Set up Yotpo connection + +- Generate an Yotpo access token via auth endpoint (ref - https://apidocs.yotpo.com/reference/yotpo-authentication) +- Setup params (All params are required) +- Available params + - access_token: The generated access token + - app_key: Seen at the yotpo settings (ref - https://settings.yotpo.com/#/general_settings) + +## Step 2: Set up the Yotpo connector in Airbyte + +### For Airbyte Cloud: + +1. [Log into your Airbyte Cloud](https://cloud.airbyte.io/workspaces) account. +2. In the left navigation bar, click **Sources**. In the top-right corner, click **+new source**. +3. On the Set up the source page, enter the name for the Yotpo connector and select **Yotpo** from the Source type dropdown. +4. Enter your `api_key`. +5. Click **Set up source**. + +### For Airbyte OSS: + +1. Navigate to the Airbyte Open Source dashboard. +2. Set the name for your source. +3. Enter your `api_key`. +5. Click **Set up source**. + +## Supported sync modes + +The Yotpo source connector supports the following [sync modes](https://docs.airbyte.com/cloud/core-concepts#connection-sync-modes): + +| Feature | Supported? | +| :---------------------------- | :--------- | +| Full Refresh Sync | Yes | +| Incremental Sync | Yes | +| Replicate Incremental Deletes | No | +| SSL connection | Yes | +| Namespaces | No | + +## Supported Streams + +- reviews +- webhooks + +## API method example + +GET https://api.yotpo.com/v1/apps/APPAAAAAATTTTTTDDDDDD/reviews?utoken=abcdefghikjlimls + +## Performance considerations + +Yotpo [API reference](https://api.yotpo.com/v1/) has v1 at present. The connector as default uses v1 and changed according to different endpoints. + +## Changelog + +| Version | Date | Pull Request | Subject | +| :------ | :--------- | :----------------------------------------------------- | :------------- | +| 0.1.0 | 2023-04-14 | [Init](https://github.com/airbytehq/airbyte/pull/)| Initial commit | \ No newline at end of file From a4aa2512b97f69d4f0e60a8af89c6f37947eb208 Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Thu, 13 Apr 2023 11:40:57 +0530 Subject: [PATCH 002/187] Add stream top_reviews --- .../integration_tests/configured_catalog.json | 9 +++++++ .../source-yotpo/source_yotpo/manifest.yaml | 27 ++++++++++++++++++- .../source_yotpo/schemas/top_reviews.json | 26 ++++++++++++++++++ docs/integrations/sources/yotpo.md | 1 + 4 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json index ec576442f20d..423461ec8b2a 100644 --- a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json @@ -9,6 +9,15 @@ "sync_mode": "incremental", "destination_sync_mode": "append" }, + { + "stream": { + "name": "top_reviews", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, { "stream": { "name": "webhooks", diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml index d7cac7413daa..85845d0848d0 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml @@ -61,6 +61,30 @@ definitions: $parameters: path: "/apps/{{ config['app_key'] }}/reviews" + top_reviews_stream: + type: DeclarativeStream + retriever: + type: SimpleRetriever + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: ["reviews"] + paginator: + type: NoPagination + requester: + type: HttpRequester + url_base: "https://api.yotpo.com/" + http_method: "GET" + request_parameters: + utoken: "{{ config['access_token'] }}" + authenticator: + type: BearerAuthenticator + api_token: "{{ config['access_token'] }}" + name: "top_reviews" + $parameters: + path: "/apps/{{ config['app_key'] }}/top_reviews" + webhooks_stream: type: DeclarativeStream retriever: @@ -87,11 +111,12 @@ definitions: streams: - "#/definitions/reviews_stream" + - "#/definitions/top_reviews_stream" - "#/definitions/webhooks_stream" check: type: CheckStream stream_names: - "reviews" + - "top_reviews" - "webhooks" - diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json new file mode 100644 index 000000000000..a5021d309b7a --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json @@ -0,0 +1,26 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Top Reviews Schema", + "type": "object", + "properties": { + "image_url": { + "type": ["null", "string"] + }, + "score": { + "type": ["null", "number"] + }, + "title": { + "type": ["null", "string"] + }, + "content": { + "type": ["null", "string"] + }, + "product_url": { + "type": ["null", "string"] + }, + "created_at": { + "type": ["null", "string"], + "format": "date-time" + } + } +} diff --git a/docs/integrations/sources/yotpo.md b/docs/integrations/sources/yotpo.md index fe305d6b75a9..9aadc32279f8 100644 --- a/docs/integrations/sources/yotpo.md +++ b/docs/integrations/sources/yotpo.md @@ -48,6 +48,7 @@ The Yotpo source connector supports the following [sync modes](https://docs.airb ## Supported Streams - reviews +- top_reviews - webhooks ## API method example From b6f0a3d70c0b4e3d5cd0b7efff2974cfe5a845b0 Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Thu, 13 Apr 2023 13:28:36 +0530 Subject: [PATCH 003/187] Add new stream: privacy_data --- .../integration_tests/configured_catalog.json | 9 +++++++ .../source-yotpo/source_yotpo/manifest.yaml | 27 +++++++++++++++++++ .../source_yotpo/schemas/privacy_data.json | 10 +++++++ .../source-yotpo/source_yotpo/spec.yaml | 8 +++++- docs/integrations/sources/yotpo.md | 1 + 5 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_data.json diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json index 423461ec8b2a..72b72de37f63 100644 --- a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json @@ -1,5 +1,14 @@ { "streams": [ + { + "stream": { + "name": "privacy_data", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, { "stream": { "name": "reviews", diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml index 85845d0848d0..ef21492e6054 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml @@ -23,6 +23,31 @@ definitions: requester: $ref: "#/definitions/requester" + privacy_data_stream: + type: DeclarativeStream + retriever: + type: SimpleRetriever + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: ["response"] + paginator: + type: NoPagination + requester: + type: HttpRequester + url_base: "https://api.yotpo.com/privacy" + http_method: "GET" + request_parameters: + utoken: "{{ config['access_token'] }}" + email: "{{ config['email'] }}" + authenticator: + type: BearerAuthenticator + api_token: "{{ config['access_token'] }}" + name: "privacy_data" + $parameters: + path: "/data/exists" + reviews_stream: type: DeclarativeStream retriever: @@ -110,6 +135,7 @@ definitions: path: "/apps/{{ config['app_key'] }}/webhooks" streams: + - "#/definitions/privacy_data_stream" - "#/definitions/reviews_stream" - "#/definitions/top_reviews_stream" - "#/definitions/webhooks_stream" @@ -117,6 +143,7 @@ streams: check: type: CheckStream stream_names: + - "privacy_data" - "reviews" - "top_reviews" - "webhooks" diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_data.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_data.json new file mode 100644 index 000000000000..552feb4e7ef6 --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_data.json @@ -0,0 +1,10 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Privacy Data", + "type": "object", + "properties": { + "has_data": { + "type": ["null", "boolean"] + } + } +} diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml index 1d31374cde73..046e27710579 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml @@ -7,6 +7,7 @@ connectionSpecification: - access_token - app_key - date_from + - email additionalProperties: true properties: access_token: @@ -21,4 +22,9 @@ connectionSpecification: date_from: title: Date From Filter type: string - description: Date time filter for incremental filter, Specify which date to extract from. \ No newline at end of file + description: Date time filter for incremental filter, Specify which date to extract from. + email: + title: Registered email address + type: string + description: Email address registered with yotpo. + default: example@gmail.com \ No newline at end of file diff --git a/docs/integrations/sources/yotpo.md b/docs/integrations/sources/yotpo.md index 9aadc32279f8..73fe4aa5f641 100644 --- a/docs/integrations/sources/yotpo.md +++ b/docs/integrations/sources/yotpo.md @@ -47,6 +47,7 @@ The Yotpo source connector supports the following [sync modes](https://docs.airb ## Supported Streams +- privacy_data - reviews - top_reviews - webhooks From 0ca3b33c45998aa36226d47fcad76e27bcc761c5 Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Thu, 13 Apr 2023 14:00:51 +0530 Subject: [PATCH 004/187] add new stream: privacy user, refactor --- .../integration_tests/configured_catalog.json | 9 ++++ .../source-yotpo/source_yotpo/manifest.yaml | 44 ++++++++----------- .../source_yotpo/schemas/privacy_user.json | 13 ++++++ 3 files changed, 41 insertions(+), 25 deletions(-) create mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_user.json diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json index 72b72de37f63..a52846939dd6 100644 --- a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json @@ -9,6 +9,15 @@ "sync_mode": "full_refresh", "destination_sync_mode": "overwrite" }, + { + "stream": { + "name": "privacy_user", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, { "stream": { "name": "reviews", diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml index ef21492e6054..cbd11470f2b3 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml @@ -1,15 +1,15 @@ version: "0.29.0" definitions: - requester: + privacy_stream_requester: type: HttpRequester - url_base: "https://api.yotpo.com/v1" + url_base: "https://api.yotpo.com/privacy" http_method: "GET" - authenticator: - type: BearerAuthenticator - api_token: "{{ config['access_token'] }}" + request_parameters: + utoken: "{{ config['access_token'] }}" + email: "{{ config['email'] }}" - base_stream: + privacy_data_stream: type: DeclarativeStream retriever: type: SimpleRetriever @@ -17,13 +17,16 @@ definitions: type: RecordSelector extractor: type: DpathExtractor - field_path: [] + field_path: ["response"] paginator: type: NoPagination requester: - $ref: "#/definitions/requester" - - privacy_data_stream: + $ref: "#/definitions/privacy_stream_requester" + name: "privacy_data" + $parameters: + path: "/data/exists" + + privacy_user_stream: type: DeclarativeStream retriever: type: SimpleRetriever @@ -31,22 +34,14 @@ definitions: type: RecordSelector extractor: type: DpathExtractor - field_path: ["response"] + field_path: ["status"] paginator: type: NoPagination requester: - type: HttpRequester - url_base: "https://api.yotpo.com/privacy" - http_method: "GET" - request_parameters: - utoken: "{{ config['access_token'] }}" - email: "{{ config['email'] }}" - authenticator: - type: BearerAuthenticator - api_token: "{{ config['access_token'] }}" - name: "privacy_data" + $ref: "#/definitions/privacy_stream_requester" + name: "privacy_user" $parameters: - path: "/data/exists" + path: "/data" reviews_stream: type: DeclarativeStream @@ -127,15 +122,13 @@ definitions: http_method: "GET" request_parameters: utoken: "{{ config['access_token'] }}" - authenticator: - type: BearerAuthenticator - api_token: "{{ config['access_token'] }}" name: "webhooks" $parameters: path: "/apps/{{ config['app_key'] }}/webhooks" streams: - "#/definitions/privacy_data_stream" + - "#/definitions/privacy_user_stream" - "#/definitions/reviews_stream" - "#/definitions/top_reviews_stream" - "#/definitions/webhooks_stream" @@ -144,6 +137,7 @@ check: type: CheckStream stream_names: - "privacy_data" + - "privacy_user" - "reviews" - "top_reviews" - "webhooks" diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_user.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_user.json new file mode 100644 index 000000000000..7e2817c09be2 --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_user.json @@ -0,0 +1,13 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Privacy User", + "type": "object", + "properties": { + "code": { + "type": ["null", "number"] + }, + "message": { + "type": ["null", "string"] + } + } +} From cb6a1ef6205f8976e98c04a7fc7a4d62091ab9b9 Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Thu, 13 Apr 2023 14:30:03 +0530 Subject: [PATCH 005/187] Add new streams, update docs, update definitions --- .../src/main/resources/seed/oss_catalog.json | 32 +++++++++++++++---- .../src/main/resources/seed/source_specs.yaml | 12 ++++++- .../integration_tests/configured_catalog.json | 9 ++++++ .../source-yotpo/source_yotpo/manifest.yaml | 27 ++++++++++++++++ .../schemas/reviews_bottomline.json | 18 +++++++++++ .../source-yotpo/source_yotpo/spec.yaml | 6 +++- docs/integrations/sources/yotpo.md | 8 +++-- 7 files changed, 102 insertions(+), 10 deletions(-) create mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json index c88672b1c49f..ff8a38a89362 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json @@ -28416,15 +28416,35 @@ "$schema": "https://json-schema.org/draft-07/schema#", "title": "Yotpo Spec", "type": "object", - "required": [ "auth_token", "counter_id", "start_date" ], + "required": [ "access_token", "app_key", "date_from", "email" ], "additionalProperties": true, "properties": { - "auth_token": { + "access_token": { + "title": "Access Token", "type": "string", - "title": "Authentication Token", - "description": "Your Yandex Metrica API access token", - "airbyte_secret": true, - "order": 0 + "description": "Access token recieved as a result of API call to https://api.yotpo.com/oauth/token (Ref- https://apidocs.yotpo.com/reference/yotpo-authentication)", + "airbyte_secret": true + }, + "app_key": { + "title": "App Key", + "type": "string", + "description": "App key found at settings (Ref- https://settings.yotpo.com/#/general_settings)" + }, + "date_from": { + "title": "Date-From Filter", + "type": "string", + "description": "Date time filter for incremental filter, Specify which date to extract from.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}Z$", + "examples": [ + "2022-03-01T00:00:00.000Z" + ], + "format": "date-time" + }, + "email": { + "title": "Registered email address", + "type": "string", + "description": "Email address registered with yotpo.", + "default": "example@gmail.com" } } }, diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml index 81893445a2bd..6ad04de392d8 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml @@ -18350,6 +18350,7 @@ - access_token - app_key - date_from + - email additionalProperties: true properties: access_token: @@ -18362,9 +18363,18 @@ type: string description: App key found at settings (Ref- https://settings.yotpo.com/#/general_settings) date_from: - title: Date From Filter + title: Date-From Filter type: string description: Date time filter for incremental filter, Specify which date to extract from. + pattern: "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}Z$" + examples: + - "2022-03-01T00:00:00.000Z" + format: "date-time" + email: + title: Registered email address + type: string + description: Email address registered with yotpo. + default: example@gmail.com supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json index a52846939dd6..2d7be78bcee3 100644 --- a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json @@ -27,6 +27,15 @@ "sync_mode": "incremental", "destination_sync_mode": "append" }, + { + "stream": { + "name": "reviews_bottomline", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, { "stream": { "name": "top_reviews", diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml index cbd11470f2b3..251fef833a58 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml @@ -81,6 +81,31 @@ definitions: $parameters: path: "/apps/{{ config['app_key'] }}/reviews" + reviews_bottomline_stream: + type: DeclarativeStream + retriever: + type: SimpleRetriever + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: ["response"] + paginator: + type: NoPagination + requester: + type: HttpRequester + url_base: "https://api.yotpo.com" + http_method: "GET" + request_parameters: + utoken: "{{ config['access_token'] }}" + authenticator: + type: BearerAuthenticator + api_token: "{{ config['access_token'] }}" + name: "reviews_bottomline" + $parameters: + path: "/products/{{ config['app_key'] }}/yotpo_site_reviews/bottomline" + + top_reviews_stream: type: DeclarativeStream retriever: @@ -130,6 +155,7 @@ streams: - "#/definitions/privacy_data_stream" - "#/definitions/privacy_user_stream" - "#/definitions/reviews_stream" + - "#/definitions/reviews_bottomline_stream" - "#/definitions/top_reviews_stream" - "#/definitions/webhooks_stream" @@ -139,5 +165,6 @@ check: - "privacy_data" - "privacy_user" - "reviews" + - "reviews_bottomline" - "top_reviews" - "webhooks" diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json new file mode 100644 index 000000000000..8188f59bb5ae --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json @@ -0,0 +1,18 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Reviews Bottomline", + "type": "object", + "properties": { + "bottomline": { + "type": "object", + "properties": { + "average_score": { + "type": ["null", "number"] + }, + "total_reviews": { + "type": ["null", "number"] + } + } + } + } +} diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml index 046e27710579..c17a1ef8afc2 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml @@ -20,9 +20,13 @@ connectionSpecification: type: string description: App key found at settings (Ref- https://settings.yotpo.com/#/general_settings) date_from: - title: Date From Filter + title: Date-From Filter type: string description: Date time filter for incremental filter, Specify which date to extract from. + pattern: "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}Z$" + examples: + - "2022-03-01T00:00:00.000Z" + format: "date-time" email: title: Registered email address type: string diff --git a/docs/integrations/sources/yotpo.md b/docs/integrations/sources/yotpo.md index 73fe4aa5f641..63e6448c2f14 100644 --- a/docs/integrations/sources/yotpo.md +++ b/docs/integrations/sources/yotpo.md @@ -15,6 +15,8 @@ Access Token (which acts as bearer token) is mandate for this connector to work, - Available params - access_token: The generated access token - app_key: Seen at the yotpo settings (ref - https://settings.yotpo.com/#/general_settings) + - date_from: Date filter for eligible streams, enter + - email ## Step 2: Set up the Yotpo connector in Airbyte @@ -23,14 +25,14 @@ Access Token (which acts as bearer token) is mandate for this connector to work, 1. [Log into your Airbyte Cloud](https://cloud.airbyte.io/workspaces) account. 2. In the left navigation bar, click **Sources**. In the top-right corner, click **+new source**. 3. On the Set up the source page, enter the name for the Yotpo connector and select **Yotpo** from the Source type dropdown. -4. Enter your `api_key`. +4. Enter your `access_token`. 5. Click **Set up source**. ### For Airbyte OSS: 1. Navigate to the Airbyte Open Source dashboard. 2. Set the name for your source. -3. Enter your `api_key`. +3. Enter your `access_token`. 5. Click **Set up source**. ## Supported sync modes @@ -48,7 +50,9 @@ The Yotpo source connector supports the following [sync modes](https://docs.airb ## Supported Streams - privacy_data +- privacy_user - reviews +- reviews_bottomline - top_reviews - webhooks From a1c5cd0d1d50c5ff02ef576a00d0f4271276dd07 Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Thu, 13 Apr 2023 14:42:31 +0530 Subject: [PATCH 006/187] EOF --- .../connectors/source-yotpo/source_yotpo/spec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml index c17a1ef8afc2..8408215c011d 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml @@ -31,4 +31,4 @@ connectionSpecification: title: Registered email address type: string description: Email address registered with yotpo. - default: example@gmail.com \ No newline at end of file + default: example@gmail.com From db5c9476ef07c319c7e1c364b57b716dad1fa92a Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Sat, 15 Apr 2023 16:49:24 +0530 Subject: [PATCH 007/187] Update spec.yaml --- .../connectors/source-yotpo/source_yotpo/spec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml index 8408215c011d..b639af52aba4 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml @@ -1,4 +1,4 @@ -documentationUrl: https://docs.airbyte.com/integrations/sources/pingdom +documentationUrl: https://docs.airbyte.com/integrations/sources/yotpo connectionSpecification: $schema: http://json-schema.org/draft-07/schema# title: Yotpo Spec From 7e32be81455ec3e3de7e359746642173d27b5154 Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Mon, 17 Apr 2023 23:11:51 +0530 Subject: [PATCH 008/187] fix date_from, optimize manifest, update docs --- .../src/main/resources/seed/oss_catalog.json | 4 +- .../src/main/resources/seed/source_specs.yaml | 4 +- .../integration_tests/expected_records.jsonl | 2 +- .../integration_tests/invalid_config.json | 5 +- .../integration_tests/sample_config.json | 5 +- .../source-yotpo/source_yotpo/manifest.yaml | 56 +++++++++---------- .../source_yotpo/schemas/privacy_data.json | 1 + .../source_yotpo/schemas/privacy_user.json | 1 + .../source_yotpo/schemas/reviews.json | 4 ++ .../schemas/reviews_bottomline.json | 1 + .../source_yotpo/schemas/top_reviews.json | 1 + .../source_yotpo/schemas/webhooks.json | 1 + .../source-yotpo/source_yotpo/spec.yaml | 6 +- docs/integrations/sources/yotpo.md | 8 +-- 14 files changed, 55 insertions(+), 44 deletions(-) diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json index 66dc718b5496..97364d507cb5 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json @@ -28416,7 +28416,7 @@ "$schema": "https://json-schema.org/draft-07/schema#", "title": "Yotpo Spec", "type": "object", - "required": [ "access_token", "app_key", "date_from", "email" ], + "required": [ "access_token", "app_key", "start_date", "email" ], "additionalProperties": true, "properties": { "access_token": { @@ -28430,7 +28430,7 @@ "type": "string", "description": "App key found at settings (Ref- https://settings.yotpo.com/#/general_settings)" }, - "date_from": { + "start_date": { "title": "Date-From Filter", "type": "string", "description": "Date time filter for incremental filter, Specify which date to extract from.", diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml index 7581bb85df00..c72feec908da 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml @@ -18349,7 +18349,7 @@ required: - access_token - app_key - - date_from + - start_date - email additionalProperties: true properties: @@ -18362,7 +18362,7 @@ title: App Key type: string description: App key found at settings (Ref- https://settings.yotpo.com/#/general_settings) - date_from: + start_date: title: Date-From Filter type: string description: Date time filter for incremental filter, Specify which date to extract from. diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-yotpo/integration_tests/expected_records.jsonl index f11f7ca46cb6..b4a93e4c2d9f 100644 --- a/airbyte-integrations/connectors/source-yotpo/integration_tests/expected_records.jsonl +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/expected_records.jsonl @@ -1 +1 @@ -{"stream": "reviews", "data": {"id":460530094,"title":"Great Phone","content":"It’s really good","score":5,"votes_up":0,"votes_down":0,"created_at":"2023-04-13T05:06:00.000Z","updated_at":"2023-04-13T05:08:41.000Z","sentiment":0.960069,"sku":"19","name":"John S.","email":"moles57397@snowlash.com","reviewer_type":"verified_reviewer","deleted":false,"archived":false,"escalated":false,"is_incentivized":false}, "emitted_at": 1679051186833} +{"stream": "reviews", "data":{"id":460312221,"title":"Great Phone","content":"It’s really good","score":5,"votes_up":0,"votes_down":0,"created_at":"2023-04-12T18:13:47.000Z","updated_at":"2023-04-17T17:10:34.000Z","sentiment":0.960069,"sku":"13","name":"John S.","email":"john@shop.com","reviewer_type":"anonymous_user","deleted":false,"archived":false,"escalated":false,"is_incentivized":false}, "emitted_at": 1679051186833} diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/invalid_config.json b/airbyte-integrations/connectors/source-yotpo/integration_tests/invalid_config.json index 34470dc18f00..c266c8bd0766 100644 --- a/airbyte-integrations/connectors/source-yotpo/integration_tests/invalid_config.json +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/invalid_config.json @@ -1,3 +1,6 @@ { - "access_token": "" + "app_key": "", + "access_token": "", + "start_date": "2099-04-12T18:42:50.000Z", + "email": "" } diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/sample_config.json b/airbyte-integrations/connectors/source-yotpo/integration_tests/sample_config.json index ccc9b992b901..11b1fda38bac 100644 --- a/airbyte-integrations/connectors/source-yotpo/integration_tests/sample_config.json +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/sample_config.json @@ -1,3 +1,6 @@ { - "access_token": "XXXXXXXXXXXXXXXXXXXXXXXXXX" + "app_key": "XXXXXXXXXXXXXXXXXXX", + "access_token": "YYYYYYYYYYYYYYYY", + "start_date": "2020-04-12T18:42:50.000Z", + "email": "example@gmail.com" } diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml index 251fef833a58..aaa1e147f66f 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml @@ -1,6 +1,27 @@ version: "0.29.0" definitions: + + yotpo_stream_requester: + type: HttpRequester + url_base: "https://api.yotpo.com/v1" + http_method: "GET" + request_parameters: + utoken: "{{ config['access_token'] }}" + authenticator: + type: BearerAuthenticator + api_token: "{{ config['access_token'] }}" + + yotpo_stream_plain_requester: + type: HttpRequester + url_base: "https://api.yotpo.com" + http_method: "GET" + request_parameters: + utoken: "{{ config['access_token'] }}" + authenticator: + type: BearerAuthenticator + api_token: "{{ config['access_token'] }}" + privacy_stream_requester: type: HttpRequester url_base: "https://api.yotpo.com/privacy" @@ -55,14 +76,7 @@ definitions: paginator: type: NoPagination requester: - type: HttpRequester - url_base: "https://api.yotpo.com/v1" - http_method: "GET" - request_parameters: - utoken: "{{ config['access_token'] }}" - authenticator: - type: BearerAuthenticator - api_token: "{{ config['access_token'] }}" + $ref: "#/definitions/yotpo_stream_requester" incremental_sync: type: DatetimeBasedCursor cursor_field: "updated_at" @@ -70,7 +84,7 @@ definitions: cursor_granularity: "PT0.000001S" lookback_window: "P31D" start_datetime: - datetime: "{{ config['date_from'] }}" + datetime: "{{ config['start_date'] }}" datetime_format: "%Y-%m-%dT%H:%M:%S.%f%z" end_datetime: datetime: "{{ today_utc() }}" @@ -93,14 +107,7 @@ definitions: paginator: type: NoPagination requester: - type: HttpRequester - url_base: "https://api.yotpo.com" - http_method: "GET" - request_parameters: - utoken: "{{ config['access_token'] }}" - authenticator: - type: BearerAuthenticator - api_token: "{{ config['access_token'] }}" + $ref: "#/definitions/yotpo_stream_plain_requester" name: "reviews_bottomline" $parameters: path: "/products/{{ config['app_key'] }}/yotpo_site_reviews/bottomline" @@ -118,14 +125,7 @@ definitions: paginator: type: NoPagination requester: - type: HttpRequester - url_base: "https://api.yotpo.com/" - http_method: "GET" - request_parameters: - utoken: "{{ config['access_token'] }}" - authenticator: - type: BearerAuthenticator - api_token: "{{ config['access_token'] }}" + $ref: "#/definitions/yotpo_stream_plain_requester" name: "top_reviews" $parameters: path: "/apps/{{ config['app_key'] }}/top_reviews" @@ -142,11 +142,7 @@ definitions: paginator: type: NoPagination requester: - type: HttpRequester - url_base: "https://api.yotpo.com/" - http_method: "GET" - request_parameters: - utoken: "{{ config['access_token'] }}" + $ref: "#/definitions/yotpo_stream_plain_requester" name: "webhooks" $parameters: path: "/apps/{{ config['app_key'] }}/webhooks" diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_data.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_data.json index 552feb4e7ef6..3d6ecf69ffac 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_data.json +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_data.json @@ -1,6 +1,7 @@ { "$schema": "http://json-schema.org/draft-07/schema#", "title": "Privacy Data", + "additionalProperties": true, "type": "object", "properties": { "has_data": { diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_user.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_user.json index 7e2817c09be2..3603d55f04da 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_user.json +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_user.json @@ -1,6 +1,7 @@ { "$schema": "http://json-schema.org/draft-07/schema#", "title": "Privacy User", + "additionalProperties": true, "type": "object", "properties": { "code": { diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews.json index 6d4eac1f090f..3710a009987c 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews.json +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews.json @@ -1,6 +1,7 @@ { "$schema": "http://json-schema.org/draft-07/schema#", "title": "Reviews Schema", + "additionalProperties": true, "type": "object", "properties": { "id": { @@ -9,6 +10,9 @@ "title": { "type": ["null", "string"] }, + "incentive_type": { + "type": ["null", "string"] + }, "content": { "type": ["null", "string"] }, diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json index 8188f59bb5ae..796cda50d838 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json @@ -1,6 +1,7 @@ { "$schema": "http://json-schema.org/draft-07/schema#", "title": "Reviews Bottomline", + "additionalProperties": true, "type": "object", "properties": { "bottomline": { diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json index a5021d309b7a..a9048548d365 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json @@ -1,6 +1,7 @@ { "$schema": "http://json-schema.org/draft-07/schema#", "title": "Top Reviews Schema", + "additionalProperties": true, "type": "object", "properties": { "image_url": { diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/webhooks.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/webhooks.json index 6d7e0f0e0af9..e4fc677f852e 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/webhooks.json +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/webhooks.json @@ -1,6 +1,7 @@ { "$schema": "http://json-schema.org/draft-07/schema#", "title": "Webhooks Schema", + "additionalProperties": true, "type": "object", "properties": { "webhooks": { diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml index 8408215c011d..496dca04cc80 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml @@ -3,12 +3,12 @@ connectionSpecification: $schema: http://json-schema.org/draft-07/schema# title: Yotpo Spec type: object + additionalProperties: true required: - access_token - app_key - - date_from + - start_date - email - additionalProperties: true properties: access_token: title: Access Token @@ -19,7 +19,7 @@ connectionSpecification: title: App Key type: string description: App key found at settings (Ref- https://settings.yotpo.com/#/general_settings) - date_from: + start_date: title: Date-From Filter type: string description: Date time filter for incremental filter, Specify which date to extract from. diff --git a/docs/integrations/sources/yotpo.md b/docs/integrations/sources/yotpo.md index 63e6448c2f14..d4a6a19e42d1 100644 --- a/docs/integrations/sources/yotpo.md +++ b/docs/integrations/sources/yotpo.md @@ -15,8 +15,8 @@ Access Token (which acts as bearer token) is mandate for this connector to work, - Available params - access_token: The generated access token - app_key: Seen at the yotpo settings (ref - https://settings.yotpo.com/#/general_settings) - - date_from: Date filter for eligible streams, enter - - email + - start_date: Date filter for eligible streams, enter + - email: Registered email address ## Step 2: Set up the Yotpo connector in Airbyte @@ -25,14 +25,14 @@ Access Token (which acts as bearer token) is mandate for this connector to work, 1. [Log into your Airbyte Cloud](https://cloud.airbyte.io/workspaces) account. 2. In the left navigation bar, click **Sources**. In the top-right corner, click **+new source**. 3. On the Set up the source page, enter the name for the Yotpo connector and select **Yotpo** from the Source type dropdown. -4. Enter your `access_token`. +4. Enter your `access_token, app_key, start_date and email`. 5. Click **Set up source**. ### For Airbyte OSS: 1. Navigate to the Airbyte Open Source dashboard. 2. Set the name for your source. -3. Enter your `access_token`. +3. Enter your `access_token, app_key, start_date and email`. 5. Click **Set up source**. ## Supported sync modes From 5f00233a616b2130dfb001ec9a3f1d209ce9291b Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Mon, 17 Apr 2023 23:29:49 +0530 Subject: [PATCH 009/187] delete privacy streams, refactor webhooks --- .../integration_tests/configured_catalog.json | 18 --------- .../source-yotpo/source_yotpo/manifest.yaml | 39 +------------------ .../source_yotpo/schemas/privacy_data.json | 11 ------ .../source_yotpo/schemas/privacy_user.json | 14 ------- .../source_yotpo/schemas/webhooks.json | 38 +++++++----------- docs/integrations/sources/yotpo.md | 2 - 6 files changed, 16 insertions(+), 106 deletions(-) delete mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_data.json delete mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_user.json diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json index 2d7be78bcee3..6bbc5aec3ab5 100644 --- a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json @@ -1,23 +1,5 @@ { "streams": [ - { - "stream": { - "name": "privacy_data", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "privacy_user", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, { "stream": { "name": "reviews", diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml index aaa1e147f66f..f1eaf0233310 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml @@ -29,40 +29,7 @@ definitions: request_parameters: utoken: "{{ config['access_token'] }}" email: "{{ config['email'] }}" - - privacy_data_stream: - type: DeclarativeStream - retriever: - type: SimpleRetriever - record_selector: - type: RecordSelector - extractor: - type: DpathExtractor - field_path: ["response"] - paginator: - type: NoPagination - requester: - $ref: "#/definitions/privacy_stream_requester" - name: "privacy_data" - $parameters: - path: "/data/exists" - privacy_user_stream: - type: DeclarativeStream - retriever: - type: SimpleRetriever - record_selector: - type: RecordSelector - extractor: - type: DpathExtractor - field_path: ["status"] - paginator: - type: NoPagination - requester: - $ref: "#/definitions/privacy_stream_requester" - name: "privacy_user" - $parameters: - path: "/data" reviews_stream: type: DeclarativeStream @@ -138,7 +105,7 @@ definitions: type: RecordSelector extractor: type: DpathExtractor - field_path: ["response"] + field_path: ["response", "webhooks"] paginator: type: NoPagination requester: @@ -148,8 +115,6 @@ definitions: path: "/apps/{{ config['app_key'] }}/webhooks" streams: - - "#/definitions/privacy_data_stream" - - "#/definitions/privacy_user_stream" - "#/definitions/reviews_stream" - "#/definitions/reviews_bottomline_stream" - "#/definitions/top_reviews_stream" @@ -158,8 +123,6 @@ streams: check: type: CheckStream stream_names: - - "privacy_data" - - "privacy_user" - "reviews" - "reviews_bottomline" - "top_reviews" diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_data.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_data.json deleted file mode 100644 index 3d6ecf69ffac..000000000000 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_data.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Privacy Data", - "additionalProperties": true, - "type": "object", - "properties": { - "has_data": { - "type": ["null", "boolean"] - } - } -} diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_user.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_user.json deleted file mode 100644 index 3603d55f04da..000000000000 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_user.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Privacy User", - "additionalProperties": true, - "type": "object", - "properties": { - "code": { - "type": ["null", "number"] - }, - "message": { - "type": ["null", "string"] - } - } -} diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/webhooks.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/webhooks.json index e4fc677f852e..b93f4e074aea 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/webhooks.json +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/webhooks.json @@ -2,30 +2,22 @@ "$schema": "http://json-schema.org/draft-07/schema#", "title": "Webhooks Schema", "additionalProperties": true, - "type": "object", + "type": ["null", "object"], "properties": { - "webhooks": { - "type": ["null", "array"], - "items": { - "type": ["null", "object"], - "properties": { - "id": { - "type": ["null", "number"] - }, - "webhook_event_id": { - "type": ["null", "number"] - }, - "webhook_event_name": { - "type": ["null", "string"] - }, - "url": { - "type": ["null", "string"] - }, - "version": { - "type": ["null", "number"] - } - } - } + "id": { + "type": ["null", "number"] + }, + "webhook_event_id": { + "type": ["null", "number"] + }, + "webhook_event_name": { + "type": ["null", "string"] + }, + "url": { + "type": ["null", "string"] + }, + "version": { + "type": ["null", "number"] } } } diff --git a/docs/integrations/sources/yotpo.md b/docs/integrations/sources/yotpo.md index d4a6a19e42d1..21c25765ecac 100644 --- a/docs/integrations/sources/yotpo.md +++ b/docs/integrations/sources/yotpo.md @@ -49,8 +49,6 @@ The Yotpo source connector supports the following [sync modes](https://docs.airb ## Supported Streams -- privacy_data -- privacy_user - reviews - reviews_bottomline - top_reviews From 8ee1957e51080f864fbfdabd6d93bd3f9aafd39f Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Mon, 17 Apr 2023 23:44:52 +0530 Subject: [PATCH 010/187] add pagination --- .../source-yotpo/source_yotpo/manifest.yaml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml index f1eaf0233310..5c494f907fbb 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml @@ -41,7 +41,18 @@ definitions: type: DpathExtractor field_path: ["reviews"] paginator: - type: NoPagination + type: "DefaultPaginator" + page_size_option: + type: "RequestOption" + inject_into: "request_parameter" + field_name: "per_page" + pagination_strategy: + type: "PageIncrement" + page_size: 5 + page_token_option: + type: "RequestOption" + inject_into: "request_parameter" + field_name: "page" requester: $ref: "#/definitions/yotpo_stream_requester" incremental_sync: From 38e2fe1e27694e12a929a676139b78bfb6b8810c Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Tue, 18 Apr 2023 15:55:34 +0530 Subject: [PATCH 011/187] add streams raw_data, email_analytics --- .../source-yotpo/acceptance-test-config.yml | 4 +- .../integration_tests/configured_catalog.json | 18 +++++ .../source-yotpo/source_yotpo/manifest.yaml | 47 +++++++++++- .../source_yotpo/schemas/email_analytics.json | 18 +++++ .../source_yotpo/schemas/raw_data.json | 71 +++++++++++++++++++ 5 files changed, 155 insertions(+), 3 deletions(-) create mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/email_analytics.json create mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/raw_data.json diff --git a/airbyte-integrations/connectors/source-yotpo/acceptance-test-config.yml b/airbyte-integrations/connectors/source-yotpo/acceptance-test-config.yml index ecfcc4f72b63..a3b095b9bde1 100644 --- a/airbyte-integrations/connectors/source-yotpo/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-yotpo/acceptance-test-config.yml @@ -18,7 +18,9 @@ acceptance_tests: tests: - config_path: "secrets/config.json" configured_catalog_path: "integration_tests/configured_catalog.json" - empty_streams: [] + empty_streams: + - name: "raw_data" + bypass_reason: "Sandbox account cannot seed the endpoint" expect_records: path: "integration_tests/expected_records.jsonl" extra_fields: no diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json index 6bbc5aec3ab5..83e04cee3701 100644 --- a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json @@ -1,5 +1,23 @@ { "streams": [ + { + "stream": { + "name": "email_analytics", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "raw_data", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, { "stream": { "name": "reviews", diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml index 5c494f907fbb..7eece70ccc58 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml @@ -29,7 +29,13 @@ definitions: request_parameters: utoken: "{{ config['access_token'] }}" email: "{{ config['email'] }}" - + + analytics_stream_requester: + type: HttpRequester + url_base: "https://api.yotpo.com/analytics/v1" + http_method: "GET" + request_parameters: + utoken: "{{ config['access_token'] }}" reviews_stream: type: DeclarativeStream @@ -73,6 +79,40 @@ definitions: $parameters: path: "/apps/{{ config['app_key'] }}/reviews" + email_analytics_stream: + type: DeclarativeStream + retriever: + type: SimpleRetriever + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: ["date_series_points"] + paginator: + type: NoPagination + requester: + $ref: "#/definitions/analytics_stream_requester" + name: "email_analytics" + $parameters: + path: "/emails/{{ config['app_key'] }}/emails_sent?token={{ config['access_token'] }}" + + raw_data_stream: + type: DeclarativeStream + retriever: + type: SimpleRetriever + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: ["records"] + paginator: + type: NoPagination + requester: + $ref: "#/definitions/analytics_stream_requester" + name: "raw_data" + $parameters: + path: "/emails/{{ config['app_key'] }}/export/raw_data?token={{ config['access_token'] }}" + reviews_bottomline_stream: type: DeclarativeStream retriever: @@ -90,7 +130,6 @@ definitions: $parameters: path: "/products/{{ config['app_key'] }}/yotpo_site_reviews/bottomline" - top_reviews_stream: type: DeclarativeStream retriever: @@ -126,6 +165,8 @@ definitions: path: "/apps/{{ config['app_key'] }}/webhooks" streams: + - "#/definitions/email_analytics_stream" + - "#/definitions/raw_data_stream" - "#/definitions/reviews_stream" - "#/definitions/reviews_bottomline_stream" - "#/definitions/top_reviews_stream" @@ -134,6 +175,8 @@ streams: check: type: CheckStream stream_names: + - "email_analytics" + - "raw_data" - "reviews" - "reviews_bottomline" - "top_reviews" diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/email_analytics.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/email_analytics.json new file mode 100644 index 000000000000..5c28d57a89a3 --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/email_analytics.json @@ -0,0 +1,18 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Email Analytics", + "additionalProperties": true, + "type": "object", + "properties": { + "since": { + "type": ["null", "string"] + }, + "until": { + "type": ["null", "string"] + }, + "values": { + "type": ["null", "object"], + "properties": {} + } + } +} diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/raw_data.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/raw_data.json new file mode 100644 index 000000000000..ff2feeac9183 --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/raw_data.json @@ -0,0 +1,71 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Raw Data Schema", + "additionalProperties": true, + "type": "object", + "properties": { + "email_address": { + "type": ["null", "string"] + }, + "order_id": { + "type": ["null", "string"] + }, + "order_timestamp": { + "type": ["null", "string"] + }, + "product_id": { + "type": ["null", "string"] + }, + "sku": { + "type": ["null", "number"] + }, + "email_type": { + "type": ["null", "string"] + }, + "reminder_num": { + "type": ["null", "number"] + }, + "trr_bundle_id": { + "type": ["null", "string"] + }, + "trr_bundle_subject": { + "type": ["null", "string"] + }, + "review_type": { + "type": ["null", "string"] + }, + "coupon_code": { + "type": ["null", "number"] + }, + "email_sent_timestamp": { + "type": ["null", "string"] + }, + "opened_timestamp": { + "type": ["null", "string"] + }, + "clicked_through_timestamp": { + "type": ["null", "string"] + }, + "content_creation_timestamp": { + "type": ["null", "string"] + }, + "platform": { + "type": ["null", "string"] + }, + "invalid_address_timestamp": { + "type": ["null", "string"] + }, + "failed_timestamp": { + "type": ["null", "string"] + }, + "unsubscribed_timestamp": { + "type": ["null", "string"] + }, + "marked_spam_timestamp": { + "type": ["null", "string"] + }, + "arrived_early_timestamp": { + "type": ["null", "string"] + } + } +} From 976b1c511c5c8008c35e5e26f6d7fc7415f5b32f Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Tue, 18 Apr 2023 16:11:31 +0530 Subject: [PATCH 012/187] add streams unsubscribers, webhook_events --- .../source-yotpo/acceptance-test-config.yml | 2 + .../integration_tests/configured_catalog.json | 18 +++++++++ .../source-yotpo/source_yotpo/manifest.yaml | 38 +++++++++++++++++++ .../source_yotpo/schemas/unsubscribers.json | 20 ++++++++++ .../source_yotpo/schemas/webhook_events.json | 14 +++++++ docs/integrations/sources/yotpo.md | 4 ++ 6 files changed, 96 insertions(+) create mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/unsubscribers.json create mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/webhook_events.json diff --git a/airbyte-integrations/connectors/source-yotpo/acceptance-test-config.yml b/airbyte-integrations/connectors/source-yotpo/acceptance-test-config.yml index a3b095b9bde1..3d6623e9ee52 100644 --- a/airbyte-integrations/connectors/source-yotpo/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-yotpo/acceptance-test-config.yml @@ -21,6 +21,8 @@ acceptance_tests: empty_streams: - name: "raw_data" bypass_reason: "Sandbox account cannot seed the endpoint" + - name: "unsubscribers" + bypass_reason: "Sandbox account cannot seed the endpoint" expect_records: path: "integration_tests/expected_records.jsonl" extra_fields: no diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json index 83e04cee3701..5daffc44a90d 100644 --- a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json @@ -45,6 +45,15 @@ "sync_mode": "full_refresh", "destination_sync_mode": "overwrite" }, + { + "stream": { + "name": "unsubscribers", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, { "stream": { "name": "webhooks", @@ -53,6 +62,15 @@ }, "sync_mode": "full_refresh", "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "webhook_events", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" } ] } diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml index 7eece70ccc58..408fb61ed8b8 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml @@ -147,6 +147,40 @@ definitions: $parameters: path: "/apps/{{ config['app_key'] }}/top_reviews" + unsubscribers_stream: + type: DeclarativeStream + retriever: + type: SimpleRetriever + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: ["response", "unsubscribers"] + paginator: + type: NoPagination + requester: + $ref: "#/definitions/yotpo_stream_plain_requester" + name: "unsubscribers" + $parameters: + path: "/apps/{{ config['app_key'] }}/unsubscribers?utoken={{ config['access_token'] }}" + + webhook_events_stream: + type: DeclarativeStream + retriever: + type: SimpleRetriever + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: ["response", "webhook_events"] + paginator: + type: NoPagination + requester: + $ref: "#/definitions/yotpo_stream_plain_requester" + name: "webhook_events" + $parameters: + path: "/webhook_events?utoken={{ config['access_token'] }}" + webhooks_stream: type: DeclarativeStream retriever: @@ -171,6 +205,8 @@ streams: - "#/definitions/reviews_bottomline_stream" - "#/definitions/top_reviews_stream" - "#/definitions/webhooks_stream" + - "#/definitions/unsubscribers_stream" + - "#/definitions/webhook_events_stream" check: type: CheckStream @@ -180,4 +216,6 @@ check: - "reviews" - "reviews_bottomline" - "top_reviews" + - "unsubscribers" - "webhooks" + - "webhook_events" diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/unsubscribers.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/unsubscribers.json new file mode 100644 index 000000000000..e3426d28a71f --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/unsubscribers.json @@ -0,0 +1,20 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Unsubscribers Schema", + "additionalProperties": true, + "type": "object", + "properties": { + "id": { + "type": ["null", "number"] + }, + "user_email": { + "type": ["null", "string"] + }, + "email_type_id": { + "type": ["null", "number"] + }, + "unsubscribed_by_name": { + "type": ["null", "string"] + } + } +} diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/webhook_events.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/webhook_events.json new file mode 100644 index 000000000000..58ff83078426 --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/webhook_events.json @@ -0,0 +1,14 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Webhook events Schema", + "additionalProperties": true, + "type": "object", + "properties": { + "name": { + "type": ["null", "string"] + }, + "description": { + "type": ["null", "string"] + } + } +} diff --git a/docs/integrations/sources/yotpo.md b/docs/integrations/sources/yotpo.md index 21c25765ecac..eb9d657b4224 100644 --- a/docs/integrations/sources/yotpo.md +++ b/docs/integrations/sources/yotpo.md @@ -49,10 +49,14 @@ The Yotpo source connector supports the following [sync modes](https://docs.airb ## Supported Streams +- email_analytics +- raw_data - reviews - reviews_bottomline - top_reviews +- unsubscribers - webhooks +- webhook_events ## API method example From 7e2a453a31763e3929ae417286fe32d2e4703930 Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Sat, 22 Apr 2023 11:25:24 +0530 Subject: [PATCH 013/187] Fix pagination --- .../connectors/source-yotpo/source_yotpo/manifest.yaml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml index 408fb61ed8b8..f950261ad2b0 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml @@ -1,7 +1,6 @@ version: "0.29.0" definitions: - yotpo_stream_requester: type: HttpRequester url_base: "https://api.yotpo.com/v1" @@ -51,14 +50,14 @@ definitions: page_size_option: type: "RequestOption" inject_into: "request_parameter" - field_name: "per_page" + field_name: "count" pagination_strategy: - type: "PageIncrement" - page_size: 5 + type: "OffsetIncrement" + page_size: 1 page_token_option: type: "RequestOption" - inject_into: "request_parameter" field_name: "page" + inject_into: "request_parameter" requester: $ref: "#/definitions/yotpo_stream_requester" incremental_sync: From 9a2691a3c1165498f84174812b62a096e5c2238b Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Sat, 22 Apr 2023 15:18:14 +0530 Subject: [PATCH 014/187] revert doc --- docs/integrations/sources/yotpo.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/integrations/sources/yotpo.md b/docs/integrations/sources/yotpo.md index eb9d657b4224..037b1c09de38 100644 --- a/docs/integrations/sources/yotpo.md +++ b/docs/integrations/sources/yotpo.md @@ -52,8 +52,6 @@ The Yotpo source connector supports the following [sync modes](https://docs.airb - email_analytics - raw_data - reviews -- reviews_bottomline -- top_reviews - unsubscribers - webhooks - webhook_events From 11769ae9d28d06176feebd94f6a335f2d93d53bf Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Sat, 22 Apr 2023 22:16:58 +0530 Subject: [PATCH 015/187] Merge branch 'yotpo' of https://github.com/btkcodedev/airbyte into yotpo --- .../integration_tests/configured_catalog.json | 18 ---- .../source-yotpo/source_yotpo/manifest.yaml | 102 ++++++------------ .../schemas/reviews_bottomline.json | 19 ---- .../source_yotpo/schemas/top_reviews.json | 27 ----- 4 files changed, 34 insertions(+), 132 deletions(-) delete mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json delete mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json index 5daffc44a90d..4f5228e40e1d 100644 --- a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json @@ -27,24 +27,6 @@ "sync_mode": "incremental", "destination_sync_mode": "append" }, - { - "stream": { - "name": "reviews_bottomline", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "top_reviews", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, { "stream": { "name": "unsubscribers", diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml index f950261ad2b0..fe8bf6b187c4 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml @@ -21,6 +21,20 @@ definitions: type: BearerAuthenticator api_token: "{{ config['access_token'] }}" + yotpo_paginator: + type: "DefaultPaginator" + page_size_option: + type: "RequestOption" + inject_into: "request_parameter" + field_name: "count" + pagination_strategy: + type: "OffsetIncrement" + page_size: 1 + page_token_option: + type: "RequestOption" + field_name: "page" + inject_into: "request_parameter" + privacy_stream_requester: type: HttpRequester url_base: "https://api.yotpo.com/privacy" @@ -46,18 +60,7 @@ definitions: type: DpathExtractor field_path: ["reviews"] paginator: - type: "DefaultPaginator" - page_size_option: - type: "RequestOption" - inject_into: "request_parameter" - field_name: "count" - pagination_strategy: - type: "OffsetIncrement" - page_size: 1 - page_token_option: - type: "RequestOption" - field_name: "page" - inject_into: "request_parameter" + $ref: "#/definitions/yotpo_paginator" requester: $ref: "#/definitions/yotpo_stream_requester" incremental_sync: @@ -79,6 +82,9 @@ definitions: path: "/apps/{{ config['app_key'] }}/reviews" email_analytics_stream: + name: "email_analytics" + $parameters: + path: "/emails/{{ config['app_key'] }}/emails_sent" type: DeclarativeStream retriever: type: SimpleRetriever @@ -91,45 +97,12 @@ definitions: type: NoPagination requester: $ref: "#/definitions/analytics_stream_requester" - name: "email_analytics" - $parameters: - path: "/emails/{{ config['app_key'] }}/emails_sent?token={{ config['access_token'] }}" + raw_data_stream: - type: DeclarativeStream - retriever: - type: SimpleRetriever - record_selector: - type: RecordSelector - extractor: - type: DpathExtractor - field_path: ["records"] - paginator: - type: NoPagination - requester: - $ref: "#/definitions/analytics_stream_requester" name: "raw_data" $parameters: - path: "/emails/{{ config['app_key'] }}/export/raw_data?token={{ config['access_token'] }}" - - reviews_bottomline_stream: - type: DeclarativeStream - retriever: - type: SimpleRetriever - record_selector: - type: RecordSelector - extractor: - type: DpathExtractor - field_path: ["response"] - paginator: - type: NoPagination - requester: - $ref: "#/definitions/yotpo_stream_plain_requester" - name: "reviews_bottomline" - $parameters: - path: "/products/{{ config['app_key'] }}/yotpo_site_reviews/bottomline" - - top_reviews_stream: + path: "/emails/{{ config['app_key'] }}/export/raw_data" type: DeclarativeStream retriever: type: SimpleRetriever @@ -137,16 +110,16 @@ definitions: type: RecordSelector extractor: type: DpathExtractor - field_path: ["reviews"] + field_path: ["records"] paginator: type: NoPagination requester: - $ref: "#/definitions/yotpo_stream_plain_requester" - name: "top_reviews" - $parameters: - path: "/apps/{{ config['app_key'] }}/top_reviews" + $ref: "#/definitions/analytics_stream_requester" unsubscribers_stream: + name: "unsubscribers" + $parameters: + path: "/apps/{{ config['app_key'] }}/unsubscribers" type: DeclarativeStream retriever: type: SimpleRetriever @@ -156,14 +129,14 @@ definitions: type: DpathExtractor field_path: ["response", "unsubscribers"] paginator: - type: NoPagination + $ref: "#/definitions/yotpo_paginator" requester: $ref: "#/definitions/yotpo_stream_plain_requester" - name: "unsubscribers" - $parameters: - path: "/apps/{{ config['app_key'] }}/unsubscribers?utoken={{ config['access_token'] }}" webhook_events_stream: + name: "webhook_events" + $parameters: + path: "/webhook_events?utoken={{ config['access_token'] }}" type: DeclarativeStream retriever: type: SimpleRetriever @@ -173,14 +146,14 @@ definitions: type: DpathExtractor field_path: ["response", "webhook_events"] paginator: - type: NoPagination + $ref: "#/definitions/yotpo_paginator" requester: $ref: "#/definitions/yotpo_stream_plain_requester" - name: "webhook_events" - $parameters: - path: "/webhook_events?utoken={{ config['access_token'] }}" webhooks_stream: + name: "webhooks" + $parameters: + path: "/apps/{{ config['app_key'] }}/webhooks" type: DeclarativeStream retriever: type: SimpleRetriever @@ -190,19 +163,14 @@ definitions: type: DpathExtractor field_path: ["response", "webhooks"] paginator: - type: NoPagination + $ref: "#/definitions/yotpo_paginator" requester: $ref: "#/definitions/yotpo_stream_plain_requester" - name: "webhooks" - $parameters: - path: "/apps/{{ config['app_key'] }}/webhooks" streams: - "#/definitions/email_analytics_stream" - "#/definitions/raw_data_stream" - "#/definitions/reviews_stream" - - "#/definitions/reviews_bottomline_stream" - - "#/definitions/top_reviews_stream" - "#/definitions/webhooks_stream" - "#/definitions/unsubscribers_stream" - "#/definitions/webhook_events_stream" @@ -213,8 +181,6 @@ check: - "email_analytics" - "raw_data" - "reviews" - - "reviews_bottomline" - - "top_reviews" - "unsubscribers" - "webhooks" - "webhook_events" diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json deleted file mode 100644 index 796cda50d838..000000000000 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Reviews Bottomline", - "additionalProperties": true, - "type": "object", - "properties": { - "bottomline": { - "type": "object", - "properties": { - "average_score": { - "type": ["null", "number"] - }, - "total_reviews": { - "type": ["null", "number"] - } - } - } - } -} diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json deleted file mode 100644 index a9048548d365..000000000000 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Top Reviews Schema", - "additionalProperties": true, - "type": "object", - "properties": { - "image_url": { - "type": ["null", "string"] - }, - "score": { - "type": ["null", "number"] - }, - "title": { - "type": ["null", "string"] - }, - "content": { - "type": ["null", "string"] - }, - "product_url": { - "type": ["null", "string"] - }, - "created_at": { - "type": ["null", "string"], - "format": "date-time" - } - } -} From c1005f1707042d328b14720aef561e6a998bdb89 Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Sat, 22 Apr 2023 22:17:03 +0530 Subject: [PATCH 016/187] Revert "remove top_reviews and reviews_bottomline, Make common paginator" This reverts commit 6615288b6d2441d9fdde2d927a5eb77b5d788442. --- .../integration_tests/configured_catalog.json | 18 ++++ .../source-yotpo/source_yotpo/manifest.yaml | 102 ++++++++++++------ .../schemas/reviews_bottomline.json | 19 ++++ .../source_yotpo/schemas/top_reviews.json | 27 +++++ docs/integrations/sources/yotpo.md | 2 + 5 files changed, 134 insertions(+), 34 deletions(-) create mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json create mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json index 4f5228e40e1d..5daffc44a90d 100644 --- a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json @@ -27,6 +27,24 @@ "sync_mode": "incremental", "destination_sync_mode": "append" }, + { + "stream": { + "name": "reviews_bottomline", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "top_reviews", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, { "stream": { "name": "unsubscribers", diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml index fe8bf6b187c4..f950261ad2b0 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml @@ -21,20 +21,6 @@ definitions: type: BearerAuthenticator api_token: "{{ config['access_token'] }}" - yotpo_paginator: - type: "DefaultPaginator" - page_size_option: - type: "RequestOption" - inject_into: "request_parameter" - field_name: "count" - pagination_strategy: - type: "OffsetIncrement" - page_size: 1 - page_token_option: - type: "RequestOption" - field_name: "page" - inject_into: "request_parameter" - privacy_stream_requester: type: HttpRequester url_base: "https://api.yotpo.com/privacy" @@ -60,7 +46,18 @@ definitions: type: DpathExtractor field_path: ["reviews"] paginator: - $ref: "#/definitions/yotpo_paginator" + type: "DefaultPaginator" + page_size_option: + type: "RequestOption" + inject_into: "request_parameter" + field_name: "count" + pagination_strategy: + type: "OffsetIncrement" + page_size: 1 + page_token_option: + type: "RequestOption" + field_name: "page" + inject_into: "request_parameter" requester: $ref: "#/definitions/yotpo_stream_requester" incremental_sync: @@ -82,9 +79,6 @@ definitions: path: "/apps/{{ config['app_key'] }}/reviews" email_analytics_stream: - name: "email_analytics" - $parameters: - path: "/emails/{{ config['app_key'] }}/emails_sent" type: DeclarativeStream retriever: type: SimpleRetriever @@ -97,12 +91,11 @@ definitions: type: NoPagination requester: $ref: "#/definitions/analytics_stream_requester" - + name: "email_analytics" + $parameters: + path: "/emails/{{ config['app_key'] }}/emails_sent?token={{ config['access_token'] }}" raw_data_stream: - name: "raw_data" - $parameters: - path: "/emails/{{ config['app_key'] }}/export/raw_data" type: DeclarativeStream retriever: type: SimpleRetriever @@ -115,11 +108,45 @@ definitions: type: NoPagination requester: $ref: "#/definitions/analytics_stream_requester" + name: "raw_data" + $parameters: + path: "/emails/{{ config['app_key'] }}/export/raw_data?token={{ config['access_token'] }}" - unsubscribers_stream: - name: "unsubscribers" + reviews_bottomline_stream: + type: DeclarativeStream + retriever: + type: SimpleRetriever + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: ["response"] + paginator: + type: NoPagination + requester: + $ref: "#/definitions/yotpo_stream_plain_requester" + name: "reviews_bottomline" + $parameters: + path: "/products/{{ config['app_key'] }}/yotpo_site_reviews/bottomline" + + top_reviews_stream: + type: DeclarativeStream + retriever: + type: SimpleRetriever + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: ["reviews"] + paginator: + type: NoPagination + requester: + $ref: "#/definitions/yotpo_stream_plain_requester" + name: "top_reviews" $parameters: - path: "/apps/{{ config['app_key'] }}/unsubscribers" + path: "/apps/{{ config['app_key'] }}/top_reviews" + + unsubscribers_stream: type: DeclarativeStream retriever: type: SimpleRetriever @@ -129,14 +156,14 @@ definitions: type: DpathExtractor field_path: ["response", "unsubscribers"] paginator: - $ref: "#/definitions/yotpo_paginator" + type: NoPagination requester: $ref: "#/definitions/yotpo_stream_plain_requester" + name: "unsubscribers" + $parameters: + path: "/apps/{{ config['app_key'] }}/unsubscribers?utoken={{ config['access_token'] }}" webhook_events_stream: - name: "webhook_events" - $parameters: - path: "/webhook_events?utoken={{ config['access_token'] }}" type: DeclarativeStream retriever: type: SimpleRetriever @@ -146,14 +173,14 @@ definitions: type: DpathExtractor field_path: ["response", "webhook_events"] paginator: - $ref: "#/definitions/yotpo_paginator" + type: NoPagination requester: $ref: "#/definitions/yotpo_stream_plain_requester" + name: "webhook_events" + $parameters: + path: "/webhook_events?utoken={{ config['access_token'] }}" webhooks_stream: - name: "webhooks" - $parameters: - path: "/apps/{{ config['app_key'] }}/webhooks" type: DeclarativeStream retriever: type: SimpleRetriever @@ -163,14 +190,19 @@ definitions: type: DpathExtractor field_path: ["response", "webhooks"] paginator: - $ref: "#/definitions/yotpo_paginator" + type: NoPagination requester: $ref: "#/definitions/yotpo_stream_plain_requester" + name: "webhooks" + $parameters: + path: "/apps/{{ config['app_key'] }}/webhooks" streams: - "#/definitions/email_analytics_stream" - "#/definitions/raw_data_stream" - "#/definitions/reviews_stream" + - "#/definitions/reviews_bottomline_stream" + - "#/definitions/top_reviews_stream" - "#/definitions/webhooks_stream" - "#/definitions/unsubscribers_stream" - "#/definitions/webhook_events_stream" @@ -181,6 +213,8 @@ check: - "email_analytics" - "raw_data" - "reviews" + - "reviews_bottomline" + - "top_reviews" - "unsubscribers" - "webhooks" - "webhook_events" diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json new file mode 100644 index 000000000000..796cda50d838 --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json @@ -0,0 +1,19 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Reviews Bottomline", + "additionalProperties": true, + "type": "object", + "properties": { + "bottomline": { + "type": "object", + "properties": { + "average_score": { + "type": ["null", "number"] + }, + "total_reviews": { + "type": ["null", "number"] + } + } + } + } +} diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json new file mode 100644 index 000000000000..a9048548d365 --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json @@ -0,0 +1,27 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Top Reviews Schema", + "additionalProperties": true, + "type": "object", + "properties": { + "image_url": { + "type": ["null", "string"] + }, + "score": { + "type": ["null", "number"] + }, + "title": { + "type": ["null", "string"] + }, + "content": { + "type": ["null", "string"] + }, + "product_url": { + "type": ["null", "string"] + }, + "created_at": { + "type": ["null", "string"], + "format": "date-time" + } + } +} diff --git a/docs/integrations/sources/yotpo.md b/docs/integrations/sources/yotpo.md index 037b1c09de38..eb9d657b4224 100644 --- a/docs/integrations/sources/yotpo.md +++ b/docs/integrations/sources/yotpo.md @@ -52,6 +52,8 @@ The Yotpo source connector supports the following [sync modes](https://docs.airb - email_analytics - raw_data - reviews +- reviews_bottomline +- top_reviews - unsubscribers - webhooks - webhook_events From 29ee85743ec70c1e3f040907fdbb3bfa63805620 Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Sun, 23 Apr 2023 01:26:28 +0530 Subject: [PATCH 017/187] remove streams top_reviews, reviews_bottomline --- .../integration_tests/configured_catalog.json | 18 --------- .../source-yotpo/source_yotpo/manifest.yaml | 38 ------------------- docs/integrations/sources/yotpo.md | 2 - 3 files changed, 58 deletions(-) diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json index 5daffc44a90d..4f5228e40e1d 100644 --- a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json @@ -27,24 +27,6 @@ "sync_mode": "incremental", "destination_sync_mode": "append" }, - { - "stream": { - "name": "reviews_bottomline", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "top_reviews", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, { "stream": { "name": "unsubscribers", diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml index f950261ad2b0..bd4393f0f51a 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml @@ -112,40 +112,6 @@ definitions: $parameters: path: "/emails/{{ config['app_key'] }}/export/raw_data?token={{ config['access_token'] }}" - reviews_bottomline_stream: - type: DeclarativeStream - retriever: - type: SimpleRetriever - record_selector: - type: RecordSelector - extractor: - type: DpathExtractor - field_path: ["response"] - paginator: - type: NoPagination - requester: - $ref: "#/definitions/yotpo_stream_plain_requester" - name: "reviews_bottomline" - $parameters: - path: "/products/{{ config['app_key'] }}/yotpo_site_reviews/bottomline" - - top_reviews_stream: - type: DeclarativeStream - retriever: - type: SimpleRetriever - record_selector: - type: RecordSelector - extractor: - type: DpathExtractor - field_path: ["reviews"] - paginator: - type: NoPagination - requester: - $ref: "#/definitions/yotpo_stream_plain_requester" - name: "top_reviews" - $parameters: - path: "/apps/{{ config['app_key'] }}/top_reviews" - unsubscribers_stream: type: DeclarativeStream retriever: @@ -201,8 +167,6 @@ streams: - "#/definitions/email_analytics_stream" - "#/definitions/raw_data_stream" - "#/definitions/reviews_stream" - - "#/definitions/reviews_bottomline_stream" - - "#/definitions/top_reviews_stream" - "#/definitions/webhooks_stream" - "#/definitions/unsubscribers_stream" - "#/definitions/webhook_events_stream" @@ -213,8 +177,6 @@ check: - "email_analytics" - "raw_data" - "reviews" - - "reviews_bottomline" - - "top_reviews" - "unsubscribers" - "webhooks" - "webhook_events" diff --git a/docs/integrations/sources/yotpo.md b/docs/integrations/sources/yotpo.md index eb9d657b4224..037b1c09de38 100644 --- a/docs/integrations/sources/yotpo.md +++ b/docs/integrations/sources/yotpo.md @@ -52,8 +52,6 @@ The Yotpo source connector supports the following [sync modes](https://docs.airb - email_analytics - raw_data - reviews -- reviews_bottomline -- top_reviews - unsubscribers - webhooks - webhook_events From 8dfcadbadb430735b855a52eb883aae258561008 Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Sun, 23 Apr 2023 09:33:16 +0530 Subject: [PATCH 018/187] make common base and extractor --- .../source-yotpo/source_yotpo/manifest.yaml | 39 ++++++++++++------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml index bd4393f0f51a..edaca95b3326 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml @@ -1,6 +1,10 @@ version: "0.29.0" definitions: + yotpo_extractor: + type: DpathExtractor + field_path: ["reviews"] + yotpo_stream_requester: type: HttpRequester url_base: "https://api.yotpo.com/v1" @@ -36,30 +40,35 @@ definitions: request_parameters: utoken: "{{ config['access_token'] }}" - reviews_stream: + yotpo_paginator: + type: "DefaultPaginator" + page_size_option: + type: "RequestOption" + inject_into: "request_parameter" + field_name: "count" + pagination_strategy: + type: "OffsetIncrement" + page_size: 1 + page_token_option: + type: "RequestOption" + field_name: "page" + inject_into: "request_parameter" + + yotpo_base: type: DeclarativeStream retriever: type: SimpleRetriever record_selector: type: RecordSelector extractor: - type: DpathExtractor - field_path: ["reviews"] + $ref: "#/definitions/yotpo_extractor" paginator: - type: "DefaultPaginator" - page_size_option: - type: "RequestOption" - inject_into: "request_parameter" - field_name: "count" - pagination_strategy: - type: "OffsetIncrement" - page_size: 1 - page_token_option: - type: "RequestOption" - field_name: "page" - inject_into: "request_parameter" + $ref: "#/definitions/yotpo_paginator" requester: $ref: "#/definitions/yotpo_stream_requester" + + reviews_stream: + $ref: "#/definitions/yotpo_base" incremental_sync: type: DatetimeBasedCursor cursor_field: "updated_at" From 9295a4679cd65a55aa3826ca39899805a2072bd3 Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Sun, 23 Apr 2023 12:25:50 +0530 Subject: [PATCH 019/187] refactor, Checkpoint for full test passed --- .../integration_tests/abnormal_state.json | 2 +- .../integration_tests/expected_records.jsonl | 2 +- .../integration_tests/sample_state.json | 2 +- .../source-yotpo/source_yotpo/manifest.yaml | 34 +++++++++---------- .../schemas/reviews_bottomline.json | 19 ----------- .../source_yotpo/schemas/top_reviews.json | 27 --------------- 6 files changed, 19 insertions(+), 67 deletions(-) delete mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json delete mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/abnormal_state.json b/airbyte-integrations/connectors/source-yotpo/integration_tests/abnormal_state.json index d79c484ff6b4..c044edae2326 100644 --- a/airbyte-integrations/connectors/source-yotpo/integration_tests/abnormal_state.json +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/abnormal_state.json @@ -2,7 +2,7 @@ { "type": "STREAM", "stream": { - "stream_state": { "updated_at": "2099-04-12T18:13:36.000Z" }, + "stream_state": { "created_at": "2099-04-12T18:13:36.000Z" }, "stream_descriptor": { "name": "reviews" } } } diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-yotpo/integration_tests/expected_records.jsonl index b4a93e4c2d9f..b1a5d4649bc6 100644 --- a/airbyte-integrations/connectors/source-yotpo/integration_tests/expected_records.jsonl +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/expected_records.jsonl @@ -1 +1 @@ -{"stream": "reviews", "data":{"id":460312221,"title":"Great Phone","content":"It’s really good","score":5,"votes_up":0,"votes_down":0,"created_at":"2023-04-12T18:13:47.000Z","updated_at":"2023-04-17T17:10:34.000Z","sentiment":0.960069,"sku":"13","name":"John S.","email":"john@shop.com","reviewer_type":"anonymous_user","deleted":false,"archived":false,"escalated":false,"is_incentivized":false}, "emitted_at": 1679051186833} +{"stream": "reviews", "data":{"id":463555946,"title":"Great Phone","content":"It’s really good","score":5,"votes_up":0,"votes_down":0,"created_at":"2023-04-23T06:14:19.000Z","updated_at":"2023-04-23T06:16:57.000Z","sentiment":0.960069,"sku":"23","name":"John S.","email":"moles57397@snowlash.com","reviewer_type":"verified_reviewer","deleted":false,"archived":false,"escalated":false,"is_incentivized":false}, "emitted_at": 1679051186823} diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/sample_state.json b/airbyte-integrations/connectors/source-yotpo/integration_tests/sample_state.json index e572e343696f..0c018bd01cfc 100644 --- a/airbyte-integrations/connectors/source-yotpo/integration_tests/sample_state.json +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/sample_state.json @@ -2,7 +2,7 @@ { "type": "STREAM", "stream": { - "stream_state": { "updated_at": "2023-04-12T18:13:36.000Z" }, + "stream_state": { "created_at": "2023-04-12T18:13:36.000Z" }, "stream_descriptor": { "name": "reviews" } } } diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml index edaca95b3326..92bfe6504ccc 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml @@ -3,7 +3,7 @@ version: "0.29.0" definitions: yotpo_extractor: type: DpathExtractor - field_path: ["reviews"] + field_path: ["{{ parameters['extractorPath'] }}"] yotpo_stream_requester: type: HttpRequester @@ -25,14 +25,6 @@ definitions: type: BearerAuthenticator api_token: "{{ config['access_token'] }}" - privacy_stream_requester: - type: HttpRequester - url_base: "https://api.yotpo.com/privacy" - http_method: "GET" - request_parameters: - utoken: "{{ config['access_token'] }}" - email: "{{ config['email'] }}" - analytics_stream_requester: type: HttpRequester url_base: "https://api.yotpo.com/analytics/v1" @@ -68,10 +60,14 @@ definitions: $ref: "#/definitions/yotpo_stream_requester" reviews_stream: + $parameters: + extractorPath: "reviews" + paginatorAvailability: "true" + path: "/apps/{{ config['app_key'] }}/reviews" $ref: "#/definitions/yotpo_base" incremental_sync: type: DatetimeBasedCursor - cursor_field: "updated_at" + cursor_field: "created_at" datetime_format: "%Y-%m-%dT%H:%M:%S.%f%z" cursor_granularity: "PT0.000001S" lookback_window: "P31D" @@ -84,10 +80,12 @@ definitions: step: "P1M" name: "reviews" primary_key: "id" - $parameters: - path: "/apps/{{ config['app_key'] }}/reviews" email_analytics_stream: + $parameters: + extractorPath: "date_series_points" + paginatorAvailability: "false" + path: "/emails/{{ config['app_key'] }}/emails_sent" type: DeclarativeStream retriever: type: SimpleRetriever @@ -101,10 +99,12 @@ definitions: requester: $ref: "#/definitions/analytics_stream_requester" name: "email_analytics" - $parameters: - path: "/emails/{{ config['app_key'] }}/emails_sent?token={{ config['access_token'] }}" raw_data_stream: + $parameters: + extractorPath: "records" + paginatorAvailability: "false" + path: "/emails/{{ config['app_key'] }}/export/raw_data" type: DeclarativeStream retriever: type: SimpleRetriever @@ -118,8 +118,6 @@ definitions: requester: $ref: "#/definitions/analytics_stream_requester" name: "raw_data" - $parameters: - path: "/emails/{{ config['app_key'] }}/export/raw_data?token={{ config['access_token'] }}" unsubscribers_stream: type: DeclarativeStream @@ -136,7 +134,7 @@ definitions: $ref: "#/definitions/yotpo_stream_plain_requester" name: "unsubscribers" $parameters: - path: "/apps/{{ config['app_key'] }}/unsubscribers?utoken={{ config['access_token'] }}" + path: "/apps/{{ config['app_key'] }}/unsubscribers" webhook_events_stream: type: DeclarativeStream @@ -153,7 +151,7 @@ definitions: $ref: "#/definitions/yotpo_stream_plain_requester" name: "webhook_events" $parameters: - path: "/webhook_events?utoken={{ config['access_token'] }}" + path: "/webhook_events" webhooks_stream: type: DeclarativeStream diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json deleted file mode 100644 index 796cda50d838..000000000000 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Reviews Bottomline", - "additionalProperties": true, - "type": "object", - "properties": { - "bottomline": { - "type": "object", - "properties": { - "average_score": { - "type": ["null", "number"] - }, - "total_reviews": { - "type": ["null", "number"] - } - } - } - } -} diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json deleted file mode 100644 index a9048548d365..000000000000 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Top Reviews Schema", - "additionalProperties": true, - "type": "object", - "properties": { - "image_url": { - "type": ["null", "string"] - }, - "score": { - "type": ["null", "number"] - }, - "title": { - "type": ["null", "string"] - }, - "content": { - "type": ["null", "string"] - }, - "product_url": { - "type": ["null", "string"] - }, - "created_at": { - "type": ["null", "string"], - "format": "date-time" - } - } -} From 4e738c7e721857aa7065c0b977803782272bb73d Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Mon, 24 Apr 2023 00:06:30 +0530 Subject: [PATCH 020/187] refactor base, requester, paginator --- .../source-yotpo/acceptance-test-config.yml | 4 + .../source-yotpo/source_yotpo/manifest.yaml | 121 ++++++------------ 2 files changed, 41 insertions(+), 84 deletions(-) diff --git a/airbyte-integrations/connectors/source-yotpo/acceptance-test-config.yml b/airbyte-integrations/connectors/source-yotpo/acceptance-test-config.yml index 3d6623e9ee52..1d6d15b88725 100644 --- a/airbyte-integrations/connectors/source-yotpo/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-yotpo/acceptance-test-config.yml @@ -23,6 +23,10 @@ acceptance_tests: bypass_reason: "Sandbox account cannot seed the endpoint" - name: "unsubscribers" bypass_reason: "Sandbox account cannot seed the endpoint" + - name: "webhooks" + bypass_reason: "Sandbox account cannot seed the endpoint" + - name: "webhook_events" + bypass_reason: "Sandbox account cannot seed the endpoint" expect_records: path: "integration_tests/expected_records.jsonl" extra_fields: no diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml index 92bfe6504ccc..64fdf9e9e908 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml @@ -7,27 +7,7 @@ definitions: yotpo_stream_requester: type: HttpRequester - url_base: "https://api.yotpo.com/v1" - http_method: "GET" - request_parameters: - utoken: "{{ config['access_token'] }}" - authenticator: - type: BearerAuthenticator - api_token: "{{ config['access_token'] }}" - - yotpo_stream_plain_requester: - type: HttpRequester - url_base: "https://api.yotpo.com" - http_method: "GET" - request_parameters: - utoken: "{{ config['access_token'] }}" - authenticator: - type: BearerAuthenticator - api_token: "{{ config['access_token'] }}" - - analytics_stream_requester: - type: HttpRequester - url_base: "https://api.yotpo.com/analytics/v1" + url_base: "{{ parameters['requesterUrl'] }}" http_method: "GET" request_parameters: utoken: "{{ config['access_token'] }}" @@ -59,11 +39,25 @@ definitions: requester: $ref: "#/definitions/yotpo_stream_requester" + yotpo_base_without_pagination: + type: DeclarativeStream + retriever: + type: SimpleRetriever + record_selector: + type: RecordSelector + extractor: + $ref: "#/definitions/yotpo_extractor" + paginator: + type: NoPagination + requester: + $ref: "#/definitions/yotpo_stream_requester" + reviews_stream: $parameters: extractorPath: "reviews" paginatorAvailability: "true" path: "/apps/{{ config['app_key'] }}/reviews" + requesterUrl: "https://api.yotpo.com/v1" $ref: "#/definitions/yotpo_base" incremental_sync: type: DatetimeBasedCursor @@ -86,18 +80,8 @@ definitions: extractorPath: "date_series_points" paginatorAvailability: "false" path: "/emails/{{ config['app_key'] }}/emails_sent" - type: DeclarativeStream - retriever: - type: SimpleRetriever - record_selector: - type: RecordSelector - extractor: - type: DpathExtractor - field_path: ["date_series_points"] - paginator: - type: NoPagination - requester: - $ref: "#/definitions/analytics_stream_requester" + requesterUrl: "https://api.yotpo.com/analytics/v1" + $ref: "#/definitions/yotpo_base_without_pagination" name: "email_analytics" raw_data_stream: @@ -105,70 +89,39 @@ definitions: extractorPath: "records" paginatorAvailability: "false" path: "/emails/{{ config['app_key'] }}/export/raw_data" - type: DeclarativeStream - retriever: - type: SimpleRetriever - record_selector: - type: RecordSelector - extractor: - type: DpathExtractor - field_path: ["records"] - paginator: - type: NoPagination - requester: - $ref: "#/definitions/analytics_stream_requester" + requesterUrl: "https://api.yotpo.com/analytics/v1" + $ref: "#/definitions/yotpo_base_without_pagination" name: "raw_data" unsubscribers_stream: - type: DeclarativeStream - retriever: - type: SimpleRetriever - record_selector: - type: RecordSelector - extractor: - type: DpathExtractor - field_path: ["response", "unsubscribers"] - paginator: - type: NoPagination - requester: - $ref: "#/definitions/yotpo_stream_plain_requester" - name: "unsubscribers" $parameters: + extractorPath: | + "response", "unsubscribers" + paginatorAvailability: "true" + requesterUrl: "https://api.yotpo.com" path: "/apps/{{ config['app_key'] }}/unsubscribers" + $ref: "#/definitions/yotpo_base" + name: "unsubscribers" webhook_events_stream: - type: DeclarativeStream - retriever: - type: SimpleRetriever - record_selector: - type: RecordSelector - extractor: - type: DpathExtractor - field_path: ["response", "webhook_events"] - paginator: - type: NoPagination - requester: - $ref: "#/definitions/yotpo_stream_plain_requester" - name: "webhook_events" $parameters: + extractorPath: | + "response", "webhook_events" + paginatorAvailability: "false" + requesterUrl: "https://api.yotpo.com" path: "/webhook_events" + $ref: "#/definitions/yotpo_base_without_pagination" + name: "webhook_events" webhooks_stream: - type: DeclarativeStream - retriever: - type: SimpleRetriever - record_selector: - type: RecordSelector - extractor: - type: DpathExtractor - field_path: ["response", "webhooks"] - paginator: - type: NoPagination - requester: - $ref: "#/definitions/yotpo_stream_plain_requester" - name: "webhooks" $parameters: + extractorPath: | + "response", "webhooks" + paginatorAvailability: "false" + requesterUrl: "https://api.yotpo.com" path: "/apps/{{ config['app_key'] }}/webhooks" + $ref: "#/definitions/yotpo_base_without_pagination" + name: "webhooks" streams: - "#/definitions/email_analytics_stream" From 2464cf9c1c06dfeca1d2a230b01329d1697af7e1 Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Mon, 24 Apr 2023 00:07:33 +0530 Subject: [PATCH 021/187] remove extra paginator property --- .../connectors/source-yotpo/source_yotpo/manifest.yaml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml index 64fdf9e9e908..518ebaf4bbca 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml @@ -55,7 +55,6 @@ definitions: reviews_stream: $parameters: extractorPath: "reviews" - paginatorAvailability: "true" path: "/apps/{{ config['app_key'] }}/reviews" requesterUrl: "https://api.yotpo.com/v1" $ref: "#/definitions/yotpo_base" @@ -78,7 +77,6 @@ definitions: email_analytics_stream: $parameters: extractorPath: "date_series_points" - paginatorAvailability: "false" path: "/emails/{{ config['app_key'] }}/emails_sent" requesterUrl: "https://api.yotpo.com/analytics/v1" $ref: "#/definitions/yotpo_base_without_pagination" @@ -87,7 +85,6 @@ definitions: raw_data_stream: $parameters: extractorPath: "records" - paginatorAvailability: "false" path: "/emails/{{ config['app_key'] }}/export/raw_data" requesterUrl: "https://api.yotpo.com/analytics/v1" $ref: "#/definitions/yotpo_base_without_pagination" @@ -97,7 +94,6 @@ definitions: $parameters: extractorPath: | "response", "unsubscribers" - paginatorAvailability: "true" requesterUrl: "https://api.yotpo.com" path: "/apps/{{ config['app_key'] }}/unsubscribers" $ref: "#/definitions/yotpo_base" @@ -107,7 +103,6 @@ definitions: $parameters: extractorPath: | "response", "webhook_events" - paginatorAvailability: "false" requesterUrl: "https://api.yotpo.com" path: "/webhook_events" $ref: "#/definitions/yotpo_base_without_pagination" @@ -117,7 +112,6 @@ definitions: $parameters: extractorPath: | "response", "webhooks" - paginatorAvailability: "false" requesterUrl: "https://api.yotpo.com" path: "/apps/{{ config['app_key'] }}/webhooks" $ref: "#/definitions/yotpo_base_without_pagination" From dab3d79bbcc509a7268f3c6b759eb63ff42cc3b8 Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Mon, 24 Apr 2023 00:34:38 +0530 Subject: [PATCH 022/187] Update oss_catalog.json --- .../src/main/resources/seed/oss_catalog.json | 58176 ++++++++-------- 1 file changed, 29088 insertions(+), 29088 deletions(-) diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json index 6bfafd35410b..46ddbb304c26 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json @@ -1,29088 +1,29088 @@ -{ - "destinations": [ { - "destinationDefinitionId": "b4c5d105-31fd-4817-96b6-cb923bfc04cb", - "name": "Azure Blob Storage", - "dockerRepository": "airbyte/destination-azure-blob-storage", - "dockerImageTag": "0.2.0", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/azureblobstorage", - "icon": "azureblobstorage.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/azureblobstorage", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "AzureBlobStorage Destination Spec", - "type": "object", - "required": [ "azure_blob_storage_account_name", "azure_blob_storage_account_key", "format" ], - "additionalProperties": false, - "properties": { - "azure_blob_storage_endpoint_domain_name": { - "title": "Endpoint Domain Name", - "type": "string", - "default": "blob.core.windows.net", - "description": "This is Azure Blob Storage endpoint domain name. Leave default value (or leave it empty if run container from command line) to use Microsoft native from example.", - "examples": [ "blob.core.windows.net" ] - }, - "azure_blob_storage_container_name": { - "title": "Azure blob storage container (Bucket) Name", - "type": "string", - "description": "The name of the Azure blob storage container. If not exists - will be created automatically. May be empty, then will be created automatically airbytecontainer+timestamp", - "examples": [ "airbytetescontainername" ] - }, - "azure_blob_storage_account_name": { - "title": "Azure Blob Storage account name", - "type": "string", - "description": "The account's name of the Azure Blob Storage.", - "examples": [ "airbyte5storage" ] - }, - "azure_blob_storage_account_key": { - "title": "Azure Blob Storage account key", - "description": "The Azure blob storage account key.", - "airbyte_secret": true, - "type": "string", - "examples": [ "Z8ZkZpteggFx394vm+PJHnGTvdRncaYS+JhLKdj789YNmD+iyGTnG+PV+POiuYNhBg/ACS+LKjd%4FG3FHGN12Nd==" ] - }, - "azure_blob_storage_output_buffer_size": { - "title": "Azure Blob Storage output buffer size (Megabytes)", - "type": "integer", - "description": "The amount of megabytes to buffer for the output stream to Azure. This will impact memory footprint on workers, but may need adjustment for performance and appropriate block size in Azure.", - "minimum": 1, - "maximum": 2047, - "default": 5, - "examples": [ 5 ] - }, - "azure_blob_storage_spill_size": { - "title": "Azure Blob Storage file spill size", - "type": "integer", - "description": "The amount of megabytes after which the connector should spill the records in a new blob object. Make sure to configure size greater than individual records. Enter 0 if not applicable", - "default": 500, - "examples": [ 500 ] - }, - "format": { - "title": "Output Format", - "type": "object", - "description": "Output data format", - "oneOf": [ { - "title": "CSV: Comma-Separated Values", - "required": [ "format_type", "flattening" ], - "properties": { - "format_type": { - "type": "string", - "const": "CSV" - }, - "flattening": { - "type": "string", - "title": "Normalization (Flattening)", - "description": "Whether the input json data should be normalized (flattened) in the output CSV. Please refer to docs for details.", - "default": "No flattening", - "enum": [ "No flattening", "Root level flattening" ] - } - } - }, { - "title": "JSON Lines: newline-delimited JSON", - "required": [ "format_type" ], - "properties": { - "format_type": { - "type": "string", - "const": "JSONL" - } - } - } ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "resourceRequirements": { - "jobSpecific": [ { - "jobType": "sync", - "resourceRequirements": { - "memory_request": "1Gi", - "memory_limit": "1Gi" - } - } ] - } - }, { - "destinationDefinitionId": "0eeee7fb-518f-4045-bacc-9619e31c43ea", - "name": "Amazon SQS", - "dockerRepository": "airbyte/destination-amazon-sqs", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/amazon-sqs", - "icon": "awssqs.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/amazon-sqs", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Destination Amazon Sqs", - "type": "object", - "required": [ "queue_url", "region" ], - "additionalProperties": false, - "properties": { - "queue_url": { - "title": "Queue URL", - "description": "URL of the SQS Queue", - "type": "string", - "examples": [ "https://sqs.eu-west-1.amazonaws.com/1234567890/my-example-queue" ], - "order": 0 - }, - "region": { - "title": "AWS Region", - "description": "AWS Region of the SQS Queue", - "type": "string", - "enum": [ "us-east-1", "us-east-2", "us-west-1", "us-west-2", "af-south-1", "ap-east-1", "ap-south-1", "ap-northeast-1", "ap-northeast-2", "ap-northeast-3", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "cn-north-1", "cn-northwest-1", "eu-central-1", "eu-north-1", "eu-south-1", "eu-west-1", "eu-west-2", "eu-west-3", "sa-east-1", "me-south-1", "us-gov-east-1", "us-gov-west-1" ], - "order": 1 - }, - "message_delay": { - "title": "Message Delay", - "description": "Modify the Message Delay of the individual message from the Queue's default (seconds).", - "type": "integer", - "examples": [ "15" ], - "order": 2 - }, - "access_key": { - "title": "AWS IAM Access Key ID", - "description": "The Access Key ID of the AWS IAM Role to use for sending messages", - "type": "string", - "examples": [ "xxxxxHRNxxx3TBxxxxxx" ], - "order": 3, - "airbyte_secret": true - }, - "secret_key": { - "title": "AWS IAM Secret Key", - "description": "The Secret Key of the AWS IAM Role to use for sending messages", - "type": "string", - "examples": [ "hu+qE5exxxxT6o/ZrKsxxxxxxBhxxXLexxxxxVKz" ], - "order": 4, - "airbyte_secret": true - }, - "message_body_key": { - "title": "Message Body Key", - "description": "Use this property to extract the contents of the named key in the input record to use as the SQS message body. If not set, the entire content of the input record data is used as the message body.", - "type": "string", - "examples": [ "myDataPath" ], - "order": 5 - }, - "message_group_id": { - "title": "Message Group Id", - "description": "The tag that specifies that a message belongs to a specific message group. This parameter applies only to, and is REQUIRED by, FIFO queues.", - "type": "string", - "examples": [ "my-fifo-group" ], - "order": 6 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "05c161bf-ca73-4d48-b524-d392be417002", - "name": "Apache Doris", - "dockerRepository": "airbyte/destination-doris", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/doris", - "icon": "apachedoris.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/destinations/doris", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Doris Destination Spec", - "type": "object", - "required": [ "host", "httpport", "queryport", "username", "database" ], - "properties": { - "host": { - "title": "Host", - "description": "Hostname of the database", - "type": "string", - "order": 0 - }, - "httpport": { - "title": "HttpPort", - "description": "Http Port of the database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 8030, - "examples": [ "8030" ], - "order": 1 - }, - "queryport": { - "title": "QueryPort", - "description": "Query(SQL) Port of the database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 9030, - "examples": [ "9030" ], - "order": 2 - }, - "database": { - "title": "DataBase Name", - "description": "Name of the database.", - "type": "string", - "order": 3 - }, - "username": { - "title": "UserName", - "description": "Username to use to access the database.", - "type": "string", - "order": 4 - }, - "password": { - "title": "Password", - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 5 - } - } - }, - "supportsIncremental": false, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "append", "overwrite" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "df65a8f3-9908-451b-aa9b-445462803560", - "name": "Apache Iceberg", - "dockerRepository": "airbyte/destination-iceberg", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/iceberg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/iceberg", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Iceberg Destination Spec", - "type": "object", - "required": [ "catalog_config", "storage_config", "format_config" ], - "properties": { - "catalog_config": { - "title": "Iceberg catalog config", - "type": "object", - "description": "Catalog config of Iceberg.", - "oneOf": [ { - "title": "HiveCatalog: Use Apache Hive MetaStore", - "required": [ "catalog_type", "hive_thrift_uri" ], - "properties": { - "catalog_type": { - "title": "Catalog Type", - "type": "string", - "default": "Hive", - "enum": [ "Hive" ], - "order": 0 - }, - "hive_thrift_uri": { - "title": "Hive Metastore thrift uri", - "type": "string", - "description": "Hive MetaStore thrift server uri of iceberg catalog.", - "examples": [ "host:port" ], - "order": 1 - }, - "database": { - "title": "Default database", - "description": "The default database tables are written to if the source does not specify a namespace. The usual value for this field is \"default\".", - "type": "string", - "default": "default", - "examples": [ "default" ], - "order": 2 - } - } - }, { - "title": "HadoopCatalog: Use hierarchical file systems as same as storage config", - "description": "A Hadoop catalog doesn’t need to connect to a Hive MetaStore, but can only be used with HDFS or similar file systems that support atomic rename.", - "required": [ "catalog_type" ], - "properties": { - "catalog_type": { - "title": "Catalog Type", - "type": "string", - "default": "Hadoop", - "enum": [ "Hadoop" ], - "order": 0 - }, - "database": { - "title": "Default database", - "description": "The default database tables are written to if the source does not specify a namespace. The usual value for this field is \"default\".", - "type": "string", - "default": "default", - "examples": [ "default" ], - "order": 1 - } - } - }, { - "title": "JdbcCatalog: Use relational database", - "description": "Using a table in a relational database to manage Iceberg tables through JDBC. Read more here. Supporting: PostgreSQL", - "required": [ "catalog_type" ], - "properties": { - "catalog_type": { - "title": "Catalog Type", - "type": "string", - "default": "Jdbc", - "enum": [ "Jdbc" ], - "order": 0 - }, - "database": { - "title": "Default schema", - "description": "The default schema tables are written to if the source does not specify a namespace. The usual value for this field is \"public\".", - "type": "string", - "default": "public", - "examples": [ "public" ], - "order": 1 - }, - "jdbc_url": { - "title": "Jdbc url", - "type": "string", - "examples": [ "jdbc:postgresql://{host}:{port}/{database}" ], - "order": 2 - }, - "username": { - "title": "User", - "description": "Username to use to access the database.", - "type": "string", - "order": 3 - }, - "password": { - "title": "Password", - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 4 - }, - "ssl": { - "title": "SSL Connection", - "description": "Encrypt data using SSL. When activating SSL, please select one of the connection modes.", - "type": "boolean", - "default": false, - "order": 5 - }, - "catalog_schema": { - "title": "schema for Iceberg catalog", - "description": "Iceberg catalog metadata tables are written to catalog schema. The usual value for this field is \"public\".", - "type": "string", - "default": "public", - "examples": [ "public" ], - "order": 6 - } - } - } ], - "order": 0 - }, - "storage_config": { - "title": "Storage config", - "type": "object", - "description": "Storage config of Iceberg.", - "oneOf": [ { - "title": "S3", - "type": "object", - "description": "S3 object storage", - "required": [ "storage_type", "access_key_id", "secret_access_key", "s3_warehouse_uri" ], - "properties": { - "storage_type": { - "title": "Storage Type", - "type": "string", - "default": "S3", - "enum": [ "S3" ], - "order": 0 - }, - "access_key_id": { - "type": "string", - "description": "The access key ID to access the S3 bucket. Airbyte requires Read and Write permissions to the given bucket. Read more here.", - "title": "S3 Key ID", - "airbyte_secret": true, - "examples": [ "A012345678910EXAMPLE" ], - "order": 0 - }, - "secret_access_key": { - "type": "string", - "description": "The corresponding secret to the access key ID. Read more here", - "title": "S3 Access Key", - "airbyte_secret": true, - "examples": [ "a012345678910ABCDEFGH/AbCdEfGhEXAMPLEKEY" ], - "order": 1 - }, - "s3_warehouse_uri": { - "title": "S3 Warehouse Uri for Iceberg", - "type": "string", - "description": "The Warehouse Uri for Iceberg", - "examples": [ "s3a://my-bucket/path/to/warehouse", "s3://my-bucket/path/to/warehouse" ], - "order": 2 - }, - "s3_bucket_region": { - "title": "S3 Bucket Region", - "type": "string", - "default": "", - "description": "The region of the S3 bucket. See here for all region codes.", - "enum": [ "", "us-east-1", "us-east-2", "us-west-1", "us-west-2", "af-south-1", "ap-east-1", "ap-south-1", "ap-northeast-1", "ap-northeast-2", "ap-northeast-3", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "cn-north-1", "cn-northwest-1", "eu-central-1", "eu-north-1", "eu-south-1", "eu-west-1", "eu-west-2", "eu-west-3", "sa-east-1", "me-south-1", "us-gov-east-1", "us-gov-west-1" ], - "order": 3 - }, - "s3_endpoint": { - "title": "Endpoint", - "type": "string", - "default": "", - "description": "Your S3 endpoint url. Read more here", - "examples": [ "http://localhost:9000", "localhost:9000" ], - "order": 4 - }, - "s3_path_style_access": { - "type": "boolean", - "description": "Use path style access", - "examples": [ true, false ], - "default": true, - "order": 5 - } - } - } ], - "order": 1 - }, - "format_config": { - "title": "File format", - "type": "object", - "required": [ "format" ], - "description": "File format of Iceberg storage.", - "properties": { - "format": { - "title": "File storage format", - "type": "string", - "default": "Parquet", - "description": "", - "enum": [ "Parquet", "Avro" ], - "order": 0 - }, - "flush_batch_size": { - "title": "Data file flushing batch size", - "description": "Iceberg data file flush batch size. Incoming rows write to cache firstly; When cache size reaches this 'batch size', flush into real Iceberg data file.", - "type": "integer", - "default": 10000, - "order": 1 - }, - "auto_compact": { - "title": "Auto compact data files", - "description": "Auto compact data files when stream close", - "type": "boolean", - "default": false, - "order": 2 - }, - "compact_target_file_size_in_mb": { - "title": "Target size of compacted data file", - "description": "Specify the target size of Iceberg data file when performing a compaction action. ", - "type": "integer", - "default": 100, - "order": 3 - } - }, - "order": 2 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "99878c90-0fbd-46d3-9d98-ffde879d17fc", - "name": "AWS Datalake", - "dockerRepository": "airbyte/destination-aws-datalake", - "dockerImageTag": "0.1.3", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/aws-datalake", - "icon": "awsdatalake.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/aws-datalake", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "AWS Datalake Destination Spec", - "type": "object", - "required": [ "credentials", "region", "bucket_name", "lakeformation_database_name" ], - "additionalProperties": false, - "properties": { - "aws_account_id": { - "type": "string", - "title": "AWS Account Id", - "description": "target aws account id", - "examples": [ "111111111111" ], - "order": 1 - }, - "credentials": { - "title": "Authentication mode", - "description": "Choose How to Authenticate to AWS.", - "type": "object", - "oneOf": [ { - "type": "object", - "title": "IAM Role", - "required": [ "role_arn", "credentials_title" ], - "properties": { - "credentials_title": { - "type": "string", - "title": "Credentials Title", - "description": "Name of the credentials", - "const": "IAM Role", - "enum": [ "IAM Role" ], - "default": "IAM Role", - "order": 0 - }, - "role_arn": { - "title": "Target Role Arn", - "type": "string", - "description": "Will assume this role to write data to s3", - "airbyte_secret": false - } - } - }, { - "type": "object", - "title": "IAM User", - "required": [ "credentials_title", "aws_access_key_id", "aws_secret_access_key" ], - "properties": { - "credentials_title": { - "type": "string", - "title": "Credentials Title", - "description": "Name of the credentials", - "const": "IAM User", - "enum": [ "IAM User" ], - "default": "IAM User", - "order": 0 - }, - "aws_access_key_id": { - "title": "Access Key Id", - "type": "string", - "description": "AWS User Access Key Id", - "airbyte_secret": true - }, - "aws_secret_access_key": { - "title": "Secret Access Key", - "type": "string", - "description": "Secret Access Key", - "airbyte_secret": true - } - } - } ], - "order": 2 - }, - "region": { - "title": "S3 Bucket Region", - "type": "string", - "default": "", - "description": "The region of the S3 bucket. See here for all region codes.", - "enum": [ "", "us-east-1", "us-east-2", "us-west-1", "us-west-2", "af-south-1", "ap-east-1", "ap-south-1", "ap-northeast-1", "ap-northeast-2", "ap-northeast-3", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "cn-north-1", "cn-northwest-1", "eu-central-1", "eu-north-1", "eu-south-1", "eu-west-1", "eu-west-2", "eu-west-3", "sa-east-1", "me-south-1", "us-gov-east-1", "us-gov-west-1" ], - "order": 3 - }, - "bucket_name": { - "title": "S3 Bucket Name", - "type": "string", - "description": "The name of the S3 bucket. Read more here.", - "order": 4 - }, - "bucket_prefix": { - "title": "Target S3 Bucket Prefix", - "type": "string", - "description": "S3 prefix", - "order": 5 - }, - "lakeformation_database_name": { - "title": "Lake Formation Database Name", - "type": "string", - "description": "The default database this destination will use to create tables in per stream. Can be changed per connection by customizing the namespace.", - "order": 6 - }, - "lakeformation_database_default_tag_key": { - "title": "Lake Formation Database Tag Key", - "description": "Add a default tag key to databases created by this destination", - "examples": [ "pii_level" ], - "type": "string", - "order": 7 - }, - "lakeformation_database_default_tag_values": { - "title": "Lake Formation Database Tag Values", - "description": "Add default values for the `Tag Key` to databases created by this destination. Comma separate for multiple values.", - "examples": [ "private,public" ], - "type": "string", - "order": 8 - }, - "lakeformation_governed_tables": { - "title": "Lake Formation Governed Tables", - "description": "Whether to create tables as LF governed tables.", - "type": "boolean", - "default": false, - "order": 9 - }, - "format": { - "title": "Output Format *", - "type": "object", - "description": "Format of the data output.", - "oneOf": [ { - "title": "JSON Lines: Newline-delimited JSON", - "required": [ "format_type" ], - "properties": { - "format_type": { - "title": "Format Type *", - "type": "string", - "enum": [ "JSONL" ], - "default": "JSONL" - }, - "compression_codec": { - "title": "Compression Codec (Optional)", - "description": "The compression algorithm used to compress data.", - "type": "string", - "enum": [ "UNCOMPRESSED", "GZIP" ], - "default": "UNCOMPRESSED" - } - } - }, { - "title": "Parquet: Columnar Storage", - "required": [ "format_type" ], - "properties": { - "format_type": { - "title": "Format Type *", - "type": "string", - "enum": [ "Parquet" ], - "default": "Parquet" - }, - "compression_codec": { - "title": "Compression Codec (Optional)", - "description": "The compression algorithm used to compress data.", - "type": "string", - "enum": [ "UNCOMPRESSED", "SNAPPY", "GZIP", "ZSTD" ], - "default": "SNAPPY" - } - } - } ], - "order": 10 - }, - "partitioning": { - "title": "Choose how to partition data", - "description": "Partition data by cursor fields when a cursor field is a date", - "type": "string", - "enum": [ "NO PARTITIONING", "DATE", "YEAR", "MONTH", "DAY", "YEAR/MONTH", "YEAR/MONTH/DAY" ], - "default": "NO PARTITIONING", - "order": 11 - }, - "glue_catalog_float_as_decimal": { - "title": "Glue Catalog: Float as Decimal", - "description": "Cast float/double as decimal(38,18). This can help achieve higher accuracy and represent numbers correctly as received from the source.", - "type": "boolean", - "default": false, - "order": 12 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "22f6c74f-5699-40ff-833c-4a879ea40133", - "name": "BigQuery", - "dockerRepository": "airbyte/destination-bigquery", - "dockerImageTag": "1.3.0", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/bigquery", - "icon": "bigquery.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/bigquery", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "BigQuery Destination Spec", - "type": "object", - "required": [ "project_id", "dataset_location", "dataset_id" ], - "additionalProperties": true, - "properties": { - "project_id": { - "type": "string", - "description": "The GCP project ID for the project containing the target BigQuery dataset. Read more here.", - "title": "Project ID", - "order": 0 - }, - "dataset_location": { - "type": "string", - "description": "The location of the dataset. Warning: Changes made after creation will not be applied. Read more here.", - "title": "Dataset Location", - "order": 1, - "enum": [ "US", "EU", "asia-east1", "asia-east2", "asia-northeast1", "asia-northeast2", "asia-northeast3", "asia-south1", "asia-south2", "asia-southeast1", "asia-southeast2", "australia-southeast1", "australia-southeast2", "europe-central1", "europe-central2", "europe-north1", "europe-southwest1", "europe-west1", "europe-west2", "europe-west3", "europe-west4", "europe-west6", "europe-west7", "europe-west8", "europe-west9", "me-west1", "northamerica-northeast1", "northamerica-northeast2", "southamerica-east1", "southamerica-west1", "us-central1", "us-east1", "us-east2", "us-east3", "us-east4", "us-east5", "us-west1", "us-west2", "us-west3", "us-west4" ] - }, - "dataset_id": { - "type": "string", - "description": "The default BigQuery Dataset ID that tables are replicated to if the source does not specify a namespace. Read more here.", - "title": "Default Dataset ID", - "order": 2 - }, - "loading_method": { - "type": "object", - "title": "Loading Method", - "description": "Loading method used to send select the way data will be uploaded to BigQuery.
Standard Inserts - Direct uploading using SQL INSERT statements. This method is extremely inefficient and provided only for quick testing. In almost all cases, you should use staging.
GCS Staging - Writes large batches of records to a file, uploads the file to GCS, then uses COPY INTO table to upload the file. Recommended for most workloads for better speed and scalability. Read more about GCS Staging here.", - "order": 3, - "oneOf": [ { - "title": "Standard Inserts", - "required": [ "method" ], - "properties": { - "method": { - "type": "string", - "const": "Standard" - } - } - }, { - "title": "GCS Staging", - "required": [ "method", "gcs_bucket_name", "gcs_bucket_path", "credential" ], - "properties": { - "method": { - "type": "string", - "const": "GCS Staging", - "order": 0 - }, - "credential": { - "title": "Credential", - "description": "An HMAC key is a type of credential and can be associated with a service account or a user account in Cloud Storage. Read more here.", - "type": "object", - "order": 1, - "oneOf": [ { - "title": "HMAC key", - "required": [ "credential_type", "hmac_key_access_id", "hmac_key_secret" ], - "properties": { - "credential_type": { - "type": "string", - "const": "HMAC_KEY", - "order": 0 - }, - "hmac_key_access_id": { - "type": "string", - "description": "HMAC key access ID. When linked to a service account, this ID is 61 characters long; when linked to a user account, it is 24 characters long.", - "title": "HMAC Key Access ID", - "airbyte_secret": true, - "examples": [ "1234567890abcdefghij1234" ], - "order": 1 - }, - "hmac_key_secret": { - "type": "string", - "description": "The corresponding secret for the access ID. It is a 40-character base-64 encoded string.", - "title": "HMAC Key Secret", - "airbyte_secret": true, - "examples": [ "1234567890abcdefghij1234567890ABCDEFGHIJ" ], - "order": 2 - } - } - } ] - }, - "gcs_bucket_name": { - "title": "GCS Bucket Name", - "type": "string", - "description": "The name of the GCS bucket. Read more here.", - "examples": [ "airbyte_sync" ], - "order": 2 - }, - "gcs_bucket_path": { - "title": "GCS Bucket Path", - "description": "Directory under the GCS bucket where data will be written.", - "type": "string", - "examples": [ "data_sync/test" ], - "order": 3 - }, - "keep_files_in_gcs-bucket": { - "type": "string", - "description": "This upload method is supposed to temporary store records in GCS bucket. By this select you can chose if these records should be removed from GCS when migration has finished. The default \"Delete all tmp files from GCS\" value is used if not set explicitly.", - "title": "GCS Tmp Files Afterward Processing", - "default": "Delete all tmp files from GCS", - "enum": [ "Delete all tmp files from GCS", "Keep all tmp files in GCS" ], - "order": 4 - }, - "file_buffer_count": { - "title": "File Buffer Count", - "type": "integer", - "minimum": 10, - "maximum": 50, - "default": 10, - "description": "Number of file buffers allocated for writing data. Increasing this number is beneficial for connections using Change Data Capture (CDC) and up to the number of streams within a connection. Increasing the number of file buffers past the maximum number of streams has deteriorating effects", - "examples": [ "10" ], - "order": 5 - } - } - } ] - }, - "credentials_json": { - "type": "string", - "description": "The contents of the JSON service account key. Check out the docs if you need help generating this key. Default credentials will be used if this field is left empty.", - "title": "Service Account Key JSON (Required for cloud, optional for open-source)", - "airbyte_secret": true, - "order": 4, - "always_show": true - }, - "transformation_priority": { - "type": "string", - "description": "Interactive run type means that the query is executed as soon as possible, and these queries count towards concurrent rate limit and daily limit. Read more about interactive run type here. Batch queries are queued and started as soon as idle resources are available in the BigQuery shared resource pool, which usually occurs within a few minutes. Batch queries don’t count towards your concurrent rate limit. Read more about batch queries here. The default \"interactive\" value is used if not set explicitly.", - "title": "Transformation Query Run Type", - "default": "interactive", - "enum": [ "interactive", "batch" ], - "order": 5 - }, - "big_query_client_buffer_size_mb": { - "title": "Google BigQuery Client Chunk Size", - "description": "Google BigQuery client's chunk (buffer) size (MIN=1, MAX = 15) for each table. The size that will be written by a single RPC. Written data will be buffered and only flushed upon reaching this size or closing the channel. The default 15MB value is used if not set explicitly. Read more here.", - "type": "integer", - "minimum": 1, - "maximum": 15, - "default": 15, - "examples": [ "15" ], - "order": 6 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": true, - "supportsDBT": true, - "supported_destination_sync_modes": [ "overwrite", "append", "append_dedup" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "resourceRequirements": { - "jobSpecific": [ { - "jobType": "sync", - "resourceRequirements": { - "memory_request": "1Gi", - "memory_limit": "1Gi" - } - } ] - }, - "normalizationConfig": { - "normalizationRepository": "airbyte/normalization", - "normalizationTag": "0.4.0", - "normalizationIntegrationType": "bigquery" - }, - "supportsDbt": true - }, { - "destinationDefinitionId": "079d5540-f236-4294-ba7c-ade8fd918496", - "name": "BigQuery (denormalized typed struct)", - "dockerRepository": "airbyte/destination-bigquery-denormalized", - "dockerImageTag": "1.3.0", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/bigquery", - "icon": "bigquery.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/bigquery", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "BigQuery Denormalized Typed Struct Destination Spec", - "type": "object", - "required": [ "project_id", "dataset_id" ], - "additionalProperties": true, - "properties": { - "project_id": { - "type": "string", - "description": "The GCP project ID for the project containing the target BigQuery dataset. Read more here.", - "title": "Project ID", - "order": 0 - }, - "dataset_id": { - "type": "string", - "description": "The default BigQuery Dataset ID that tables are replicated to if the source does not specify a namespace. Read more here.", - "title": "Default Dataset ID", - "order": 1 - }, - "loading_method": { - "type": "object", - "title": "Loading Method", - "description": "Loading method used to send select the way data will be uploaded to BigQuery.
Standard Inserts - Direct uploading using SQL INSERT statements. This method is extremely inefficient and provided only for quick testing. In almost all cases, you should use staging.
GCS Staging - Writes large batches of records to a file, uploads the file to GCS, then uses COPY INTO table to upload the file. Recommended for most workloads for better speed and scalability. Read more about GCS Staging here.", - "order": 2, - "oneOf": [ { - "title": "Standard Inserts", - "required": [ "method" ], - "properties": { - "method": { - "type": "string", - "const": "Standard" - } - } - }, { - "title": "GCS Staging", - "type": "object", - "required": [ "method", "gcs_bucket_name", "gcs_bucket_path", "credential" ], - "properties": { - "method": { - "type": "string", - "const": "GCS Staging", - "order": 0 - }, - "credential": { - "title": "Credential", - "description": "An HMAC key is a type of credential and can be associated with a service account or a user account in Cloud Storage. Read more here.", - "type": "object", - "order": 1, - "oneOf": [ { - "title": "HMAC key", - "order": 0, - "required": [ "credential_type", "hmac_key_access_id", "hmac_key_secret" ], - "properties": { - "credential_type": { - "type": "string", - "const": "HMAC_KEY", - "order": 0 - }, - "hmac_key_access_id": { - "type": "string", - "description": "HMAC key access ID. When linked to a service account, this ID is 61 characters long; when linked to a user account, it is 24 characters long.", - "title": "HMAC Key Access ID", - "airbyte_secret": true, - "examples": [ "1234567890abcdefghij1234" ], - "order": 1 - }, - "hmac_key_secret": { - "type": "string", - "description": "The corresponding secret for the access ID. It is a 40-character base-64 encoded string.", - "title": "HMAC Key Secret", - "airbyte_secret": true, - "examples": [ "1234567890abcdefghij1234567890ABCDEFGHIJ" ], - "order": 2 - } - } - } ] - }, - "gcs_bucket_name": { - "title": "GCS Bucket Name", - "type": "string", - "description": "The name of the GCS bucket. Read more here.", - "examples": [ "airbyte_sync" ], - "order": 2 - }, - "gcs_bucket_path": { - "title": "GCS Bucket Path", - "description": "Directory under the GCS bucket where data will be written. Read more here.", - "type": "string", - "examples": [ "data_sync/test" ], - "order": 3 - }, - "keep_files_in_gcs-bucket": { - "type": "string", - "description": "This upload method is supposed to temporary store records in GCS bucket. By this select you can chose if these records should be removed from GCS when migration has finished. The default \"Delete all tmp files from GCS\" value is used if not set explicitly.", - "title": "GCS Tmp Files Afterward Processing", - "default": "Delete all tmp files from GCS", - "enum": [ "Delete all tmp files from GCS", "Keep all tmp files in GCS" ], - "order": 4 - }, - "file_buffer_count": { - "title": "File Buffer Count", - "type": "integer", - "minimum": 10, - "maximum": 50, - "default": 10, - "description": "Number of file buffers allocated for writing data. Increasing this number is beneficial for connections using Change Data Capture (CDC) and up to the number of streams within a connection. Increasing the number of file buffers past the maximum number of streams has deteriorating effects", - "examples": [ "10" ], - "order": 5 - } - } - } ] - }, - "credentials_json": { - "type": "string", - "description": "The contents of the JSON service account key. Check out the docs if you need help generating this key. Default credentials will be used if this field is left empty.", - "title": "Service Account Key JSON (Required for cloud, optional for open-source)", - "airbyte_secret": true, - "order": 3, - "always_show": true - }, - "dataset_location": { - "type": "string", - "description": "The location of the dataset. Warning: Changes made after creation will not be applied. The default \"US\" value is used if not set explicitly. Read more here.", - "title": "Dataset Location", - "default": "US", - "order": 4, - "enum": [ "US", "EU", "asia-east1", "asia-east2", "asia-northeast1", "asia-northeast2", "asia-northeast3", "asia-south1", "asia-south2", "asia-southeast1", "asia-southeast2", "australia-southeast1", "australia-southeast2", "europe-central1", "europe-central2", "europe-north1", "europe-southwest1", "europe-west1", "europe-west2", "europe-west3", "europe-west4", "europe-west6", "europe-west7", "europe-west8", "europe-west9", "me-west1", "northamerica-northeast1", "northamerica-northeast2", "southamerica-east1", "southamerica-west1", "us-central1", "us-east1", "us-east2", "us-east3", "us-east4", "us-east5", "us-west1", "us-west2", "us-west3", "us-west4" ] - }, - "big_query_client_buffer_size_mb": { - "title": "Google BigQuery Client Chunk Size", - "description": "Google BigQuery client's chunk (buffer) size (MIN=1, MAX = 15) for each table. The size that will be written by a single RPC. Written data will be buffered and only flushed upon reaching this size or closing the channel. The default 15MB value is used if not set explicitly. Read more here.", - "type": "integer", - "minimum": 1, - "maximum": 15, - "default": 15, - "examples": [ "15" ], - "order": 5 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "resourceRequirements": { - "jobSpecific": [ { - "jobType": "sync", - "resourceRequirements": { - "memory_request": "1Gi", - "memory_limit": "1Gi" - } - } ] - } - }, { - "destinationDefinitionId": "707456df-6f4f-4ced-b5c6-03f73bcad1c5", - "name": "Cassandra", - "dockerRepository": "airbyte/destination-cassandra", - "dockerImageTag": "0.1.4", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/cassandra", - "icon": "cassandra.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/cassandra", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Cassandra Destination Spec", - "type": "object", - "required": [ "keyspace", "username", "password", "address", "port" ], - "additionalProperties": true, - "properties": { - "keyspace": { - "title": "Keyspace", - "description": "Default Cassandra keyspace to create data in.", - "type": "string", - "order": 0 - }, - "username": { - "title": "Username", - "description": "Username to use to access Cassandra.", - "type": "string", - "order": 1 - }, - "password": { - "title": "Password", - "description": "Password associated with Cassandra.", - "type": "string", - "airbyte_secret": true, - "order": 2 - }, - "address": { - "title": "Address", - "description": "Address to connect to.", - "type": "string", - "examples": [ "localhost,127.0.0.1" ], - "order": 3 - }, - "port": { - "title": "Port", - "description": "Port of Cassandra.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 9042, - "order": 4 - }, - "datacenter": { - "title": "Datacenter", - "description": "Datacenter of the cassandra cluster.", - "type": "string", - "default": "datacenter1", - "order": 5 - }, - "replication": { - "title": "Replication factor", - "type": "integer", - "description": "Indicates to how many nodes the data should be replicated to.", - "default": 1, - "order": 6 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "e088acb6-9780-4568-880c-54c2dd7f431b", - "name": "Cumul.io", - "dockerRepository": "airbyte/destination-cumulio", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/cumulio", - "icon": "cumulio.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/cumulio", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Destination Cumulio", - "type": "object", - "required": [ "api_host", "api_key", "api_token" ], - "additionalProperties": true, - "properties": { - "api_host": { - "title": "Cumul.io API Host URL", - "description": "URL of the Cumul.io API (e.g. 'https://api.cumul.io', 'https://api.us.cumul.io', or VPC-specific API url). Defaults to 'https://api.cumul.io'.", - "default": "https://api.cumul.io", - "type": "string", - "order": 0 - }, - "api_key": { - "title": "Cumul.io API Key", - "description": "An API key generated in Cumul.io's platform (can be generated here: https://app.cumul.io/start/profile/integration).", - "type": "string", - "airbyte_secret": true, - "order": 1 - }, - "api_token": { - "title": "Cumul.io API Token", - "description": "The corresponding API token generated in Cumul.io's platform (can be generated here: https://app.cumul.io/start/profile/integration).", - "type": "string", - "airbyte_secret": true, - "order": 2 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "81740ce8-d764-4ea7-94df-16bb41de36ae", - "name": "Chargify (Keen)", - "dockerRepository": "airbyte/destination-keen", - "dockerImageTag": "0.2.4", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/keen", - "icon": "chargify.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/keen", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Keen Spec", - "type": "object", - "required": [ "project_id", "api_key" ], - "additionalProperties": false, - "properties": { - "project_id": { - "description": "To get Keen Project ID, navigate to the Access tab from the left-hand, side panel and check the Project Details section.", - "title": "Project ID", - "type": "string", - "examples": [ "58b4acc22ba938934e888322e" ] - }, - "api_key": { - "title": "API Key", - "description": "To get Keen Master API Key, navigate to the Access tab from the left-hand, side panel and check the Project Details section.", - "type": "string", - "examples": [ "ABCDEFGHIJKLMNOPRSTUWXYZ" ], - "airbyte_secret": true - }, - "infer_timestamp": { - "title": "Infer Timestamp", - "description": "Allow connector to guess keen.timestamp value based on the streamed data.", - "type": "boolean", - "default": true - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "ce0d828e-1dc4-496c-b122-2da42e637e48", - "name": "Clickhouse", - "dockerRepository": "airbyte/destination-clickhouse", - "dockerImageTag": "0.2.3", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/clickhouse", - "icon": "clickhouse.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/clickhouse", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "ClickHouse Destination Spec", - "type": "object", - "required": [ "host", "port", "database", "username" ], - "additionalProperties": true, - "properties": { - "host": { - "title": "Host", - "description": "Hostname of the database.", - "type": "string", - "order": 0 - }, - "port": { - "title": "Port", - "description": "HTTP port of the database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 8123, - "examples": [ "8123" ], - "order": 1 - }, - "database": { - "title": "DB Name", - "description": "Name of the database.", - "type": "string", - "order": 2 - }, - "username": { - "title": "User", - "description": "Username to use to access the database.", - "type": "string", - "order": 3 - }, - "password": { - "title": "Password", - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 4 - }, - "jdbc_url_params": { - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", - "title": "JDBC URL Params", - "type": "string", - "order": 5 - }, - "ssl": { - "title": "SSL Connection", - "description": "Encrypt data using SSL.", - "type": "boolean", - "default": false, - "order": 6 - }, - "tunnel_method": { - "type": "object", - "title": "SSH Tunnel Method", - "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", - "oneOf": [ { - "title": "No Tunnel", - "required": [ "tunnel_method" ], - "properties": { - "tunnel_method": { - "description": "No ssh tunnel needed to connect to database", - "type": "string", - "const": "NO_TUNNEL", - "order": 0 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host.", - "type": "string", - "order": 3 - }, - "ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - }, { - "title": "Password Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host", - "type": "string", - "order": 3 - }, - "tunnel_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 4 - } - } - } ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": true, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append", "append_dedup" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "normalizationConfig": { - "normalizationRepository": "airbyte/normalization-clickhouse", - "normalizationTag": "0.4.0", - "normalizationIntegrationType": "clickhouse" - }, - "supportsDbt": false - }, { - "destinationDefinitionId": "0fb07be9-7c3b-4336-850d-5efc006152ee", - "name": "Cloudflare R2", - "dockerRepository": "airbyte/destination-r2", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/r2", - "icon": "cloudflare-r2.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/r2", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "R2 Destination Spec", - "type": "object", - "required": [ "account_id", "access_key_id", "secret_access_key", "s3_bucket_name", "s3_bucket_path", "format" ], - "properties": { - "account_id": { - "type": "string", - "description": "Cloudflare account ID", - "title": "Cloudflare account ID", - "examples": [ "12345678aa1a1a11111aaa1234567abc" ], - "order": 0 - }, - "access_key_id": { - "type": "string", - "description": "The access key ID to access the R2 bucket. Airbyte requires Read and Write permissions to the given bucket. Read more here.", - "title": "R2 Key ID", - "airbyte_secret": true, - "examples": [ "A012345678910EXAMPLE" ], - "order": 1 - }, - "secret_access_key": { - "type": "string", - "description": "The corresponding secret to the access key ID. Read more here", - "title": "R2 Access Key", - "airbyte_secret": true, - "examples": [ "a012345678910ABCDEFGHAbCdEfGhEXAMPLEKEY" ], - "order": 2 - }, - "s3_bucket_name": { - "title": "R2 Bucket Name", - "type": "string", - "description": "The name of the R2 bucket. Read more here.", - "examples": [ "r2_sync" ], - "order": 3 - }, - "s3_bucket_path": { - "title": "R2 Bucket Path", - "description": "Directory under the R2 bucket where data will be written.", - "type": "string", - "examples": [ "data_sync/test" ], - "order": 4 - }, - "format": { - "title": "Output Format", - "type": "object", - "description": "Format of the data output. See here for more details", - "oneOf": [ { - "title": "Avro: Apache Avro", - "required": [ "format_type", "compression_codec" ], - "properties": { - "format_type": { - "title": "Format Type", - "type": "string", - "enum": [ "Avro" ], - "default": "Avro", - "order": 0 - }, - "compression_codec": { - "title": "Compression Codec", - "description": "The compression algorithm used to compress data. Default to no compression.", - "type": "object", - "oneOf": [ { - "title": "No Compression", - "required": [ "codec" ], - "properties": { - "codec": { - "type": "string", - "enum": [ "no compression" ], - "default": "no compression" - } - } - }, { - "title": "Deflate", - "required": [ "codec", "compression_level" ], - "properties": { - "codec": { - "type": "string", - "enum": [ "Deflate" ], - "default": "Deflate" - }, - "compression_level": { - "title": "Deflate Level", - "description": "0: no compression & fastest, 9: best compression & slowest.", - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 9 - } - } - }, { - "title": "bzip2", - "required": [ "codec" ], - "properties": { - "codec": { - "type": "string", - "enum": [ "bzip2" ], - "default": "bzip2" - } - } - }, { - "title": "xz", - "required": [ "codec", "compression_level" ], - "properties": { - "codec": { - "type": "string", - "enum": [ "xz" ], - "default": "xz" - }, - "compression_level": { - "title": "Compression Level", - "description": "See here for details.", - "type": "integer", - "default": 6, - "minimum": 0, - "maximum": 9 - } - } - }, { - "title": "zstandard", - "required": [ "codec", "compression_level" ], - "properties": { - "codec": { - "type": "string", - "enum": [ "zstandard" ], - "default": "zstandard" - }, - "compression_level": { - "title": "Compression Level", - "description": "Negative levels are 'fast' modes akin to lz4 or snappy, levels above 9 are generally for archival purposes, and levels above 18 use a lot of memory.", - "type": "integer", - "default": 3, - "minimum": -5, - "maximum": 22 - }, - "include_checksum": { - "title": "Include Checksum", - "description": "If true, include a checksum with each data block.", - "type": "boolean", - "default": false - } - } - }, { - "title": "snappy", - "required": [ "codec" ], - "properties": { - "codec": { - "type": "string", - "enum": [ "snappy" ], - "default": "snappy" - } - } - } ], - "order": 1 - } - } - }, { - "title": "CSV: Comma-Separated Values", - "required": [ "format_type", "flattening" ], - "properties": { - "format_type": { - "title": "Format Type", - "type": "string", - "enum": [ "CSV" ], - "default": "CSV" - }, - "flattening": { - "type": "string", - "title": "Normalization (Flattening)", - "description": "Whether the input json data should be normalized (flattened) in the output CSV. Please refer to docs for details.", - "default": "No flattening", - "enum": [ "No flattening", "Root level flattening" ] - }, - "compression": { - "title": "Compression", - "type": "object", - "description": "Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \".csv.gz\").", - "oneOf": [ { - "title": "No Compression", - "requires": [ "compression_type" ], - "properties": { - "compression_type": { - "type": "string", - "enum": [ "No Compression" ], - "default": "No Compression" - } - } - }, { - "title": "GZIP", - "requires": [ "compression_type" ], - "properties": { - "compression_type": { - "type": "string", - "enum": [ "GZIP" ], - "default": "GZIP" - } - } - } ] - } - } - }, { - "title": "JSON Lines: Newline-delimited JSON", - "required": [ "format_type" ], - "properties": { - "format_type": { - "title": "Format Type", - "type": "string", - "enum": [ "JSONL" ], - "default": "JSONL" - }, - "compression": { - "title": "Compression", - "type": "object", - "description": "Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \".jsonl.gz\").", - "oneOf": [ { - "title": "No Compression", - "requires": "compression_type", - "properties": { - "compression_type": { - "type": "string", - "enum": [ "No Compression" ], - "default": "No Compression" - } - } - }, { - "title": "GZIP", - "requires": "compression_type", - "properties": { - "compression_type": { - "type": "string", - "enum": [ "GZIP" ], - "default": "GZIP" - } - } - } ] - } - } - } ], - "order": 5 - }, - "s3_path_format": { - "title": "R2 Path Format", - "description": "Format string on how data will be organized inside the R2 bucket directory. Read more here", - "type": "string", - "examples": [ "${NAMESPACE}/${STREAM_NAME}/${YEAR}_${MONTH}_${DAY}_${EPOCH}_" ], - "order": 6 - }, - "file_name_pattern": { - "type": "string", - "description": "The pattern allows you to set the file-name format for the R2 staging file(s)", - "title": "R2 Filename pattern", - "examples": [ "{date}", "{date:yyyy_MM}", "{timestamp}", "{part_number}", "{sync_id}" ], - "order": 7 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "3eb4d99c-11fa-4561-a259-fc88e0c2f8f4", - "name": "Convex", - "dockerRepository": "airbyte/destination-convex", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.io/integrations/destinations/convex", - "icon": "convex.svg", - "spec": { - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Convex", - "type": "object", - "required": [ "deployment_url", "access_key" ], - "properties": { - "deployment_url": { - "type": "string", - "title": "Deployment Url", - "examples": [ "https://murky-swan-635.convex.cloud", "https://cluttered-owl-337.convex.cloud" ] - }, - "access_key": { - "type": "string", - "title": "Access Key", - "description": "API access key used to retrieve data from Convex.", - "airbyte_secret": true - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append", "append_dedup" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "4528e960-6f7b-4412-8555-7e0097e1da17", - "name": "Starburst Galaxy", - "dockerRepository": "airbyte/destination-starburst-galaxy", - "dockerImageTag": "0.0.1", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/starburst-galaxy", - "icon": "starburst-galaxy.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/starburst-galaxy", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Starburst Galaxy Destination Spec", - "type": "object", - "required": [ "accept_terms", "server_hostname", "username", "password", "catalog", "staging_object_store" ], - "properties": { - "accept_terms": { - "title": "Agree to the Starburst Galaxy terms & conditions", - "type": "boolean", - "description": "You must agree to the Starburst Galaxy terms & conditions to use this connector.", - "default": false, - "order": 1 - }, - "server_hostname": { - "title": "Hostname", - "type": "string", - "description": "Starburst Galaxy cluster hostname.", - "examples": [ "abc-12345678-wxyz.trino.galaxy-demo.io" ], - "order": 2 - }, - "port": { - "title": "Port", - "type": "string", - "description": "Starburst Galaxy cluster port.", - "default": "443", - "examples": [ "443" ], - "order": 3 - }, - "username": { - "title": "User", - "type": "string", - "description": "Starburst Galaxy user.", - "examples": [ "user@example.com" ], - "order": 4 - }, - "password": { - "title": "Password", - "type": "string", - "description": "Starburst Galaxy password for the specified user.", - "examples": [ "password" ], - "airbyte_secret": true, - "order": 5 - }, - "catalog": { - "title": "Amazon S3 catalog", - "type": "string", - "description": "Name of the Starburst Galaxy Amazon S3 catalog.", - "examples": [ "sample_s3_catalog" ], - "order": 6 - }, - "catalog_schema": { - "title": "Amazon S3 catalog schema", - "type": "string", - "description": "The default Starburst Galaxy Amazon S3 catalog schema where tables are written to if the source does not specify a namespace. Defaults to \"public\".", - "default": "public", - "examples": [ "public" ], - "order": 7 - }, - "staging_object_store": { - "title": "Staging object store", - "type": "object", - "description": "Temporary storage on which temporary Iceberg table is created.", - "oneOf": [ { - "title": "Amazon S3", - "required": [ "object_store_type", "s3_bucket_name", "s3_bucket_path", "s3_bucket_region", "s3_access_key_id", "s3_secret_access_key" ], - "properties": { - "object_store_type": { - "type": "string", - "enum": [ "S3" ], - "default": "S3", - "order": 1 - }, - "s3_bucket_name": { - "title": "S3 bucket name", - "type": "string", - "description": "Name of the S3 bucket", - "examples": [ "airbyte_staging" ], - "order": 1 - }, - "s3_bucket_path": { - "title": "S3 bucket path", - "type": "string", - "description": "Directory in the S3 bucket where staging data is stored.", - "examples": [ "temp_airbyte__sync/test" ], - "order": 2 - }, - "s3_bucket_region": { - "title": "S3 bucket region", - "type": "string", - "default": "us-east-1", - "description": "The region of the S3 bucket.", - "enum": [ "ap-northeast-1", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "eu-central-1", "eu-west-1", "eu-west-2", "eu-west-3", "us-east-1", "us-east-2", "us-west-1", "us-west-2" ], - "order": 3 - }, - "s3_access_key_id": { - "title": "Access key", - "type": "string", - "description": "Access key with access to the bucket. Airbyte requires read and write permissions to a given bucket.", - "examples": [ "A012345678910EXAMPLE" ], - "airbyte_secret": true, - "order": 4 - }, - "s3_secret_access_key": { - "title": "Secret key", - "type": "string", - "description": "Secret key used with the specified access key.", - "examples": [ "a012345678910ABCDEFGH/AbCdEfGhEXAMPLEKEY" ], - "airbyte_secret": true, - "order": 5 - } - } - } ], - "order": 8 - }, - "purge_staging_table": { - "title": "Purge staging Iceberg table", - "type": "boolean", - "description": "Defaults to 'true'. Switch to 'false' for debugging purposes.", - "default": true, - "order": 9 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "072d5540-f236-4294-ba7c-ade8fd918496", - "name": "Databricks Lakehouse", - "dockerRepository": "airbyte/destination-databricks", - "dockerImageTag": "1.0.2", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/databricks", - "icon": "databricks.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/databricks", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Databricks Lakehouse Destination Spec", - "type": "object", - "required": [ "accept_terms", "databricks_server_hostname", "databricks_http_path", "databricks_personal_access_token", "data_source" ], - "properties": { - "accept_terms": { - "title": "Agree to the Databricks JDBC Driver Terms & Conditions", - "type": "boolean", - "description": "You must agree to the Databricks JDBC Driver Terms & Conditions to use this connector.", - "default": false, - "order": 1 - }, - "databricks_server_hostname": { - "title": "Server Hostname", - "type": "string", - "description": "Databricks Cluster Server Hostname.", - "examples": [ "abc-12345678-wxyz.cloud.databricks.com" ], - "order": 2 - }, - "databricks_http_path": { - "title": "HTTP Path", - "type": "string", - "description": "Databricks Cluster HTTP Path.", - "examples": [ "sql/protocolvx/o/1234567489/0000-1111111-abcd90" ], - "order": 3 - }, - "databricks_port": { - "title": "Port", - "type": "string", - "description": "Databricks Cluster Port.", - "default": "443", - "examples": [ "443" ], - "order": 4 - }, - "databricks_personal_access_token": { - "title": "Access Token", - "type": "string", - "description": "Databricks Personal Access Token for making authenticated requests.", - "examples": [ "dapi0123456789abcdefghij0123456789AB" ], - "airbyte_secret": true, - "order": 5 - }, - "database": { - "title": "Databricks catalog", - "description": "The name of the catalog. If not specified otherwise, the \"hive_metastore\" will be used.", - "type": "string", - "order": 6 - }, - "schema": { - "title": "Default Schema", - "description": "The default schema tables are written. If not specified otherwise, the \"default\" will be used.", - "type": "string", - "examples": [ "default" ], - "default": "default", - "order": 7 - }, - "data_source": { - "title": "Data Source", - "type": "object", - "description": "Storage on which the delta lake is built.", - "default": "MANAGED_TABLES_STORAGE", - "order": 8, - "oneOf": [ { - "title": "[Recommended] Managed tables", - "required": [ "data_source_type" ], - "properties": { - "data_source_type": { - "type": "string", - "const": "MANAGED_TABLES_STORAGE", - "order": 0 - } - } - }, { - "title": "Amazon S3", - "required": [ "data_source_type", "s3_bucket_name", "s3_bucket_path", "s3_bucket_region", "s3_access_key_id", "s3_secret_access_key" ], - "properties": { - "data_source_type": { - "type": "string", - "const": "S3_STORAGE", - "order": 1 - }, - "s3_bucket_name": { - "title": "S3 Bucket Name", - "type": "string", - "description": "The name of the S3 bucket to use for intermittent staging of the data.", - "examples": [ "airbyte.staging" ], - "order": 2 - }, - "s3_bucket_path": { - "title": "S3 Bucket Path", - "type": "string", - "description": "The directory under the S3 bucket where data will be written.", - "examples": [ "data_sync/test" ], - "order": 3 - }, - "s3_bucket_region": { - "title": "S3 Bucket Region", - "type": "string", - "default": "", - "description": "The region of the S3 staging bucket to use if utilising a copy strategy.", - "enum": [ "", "us-east-1", "us-east-2", "us-west-1", "us-west-2", "af-south-1", "ap-east-1", "ap-south-1", "ap-northeast-1", "ap-northeast-2", "ap-northeast-3", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "cn-north-1", "cn-northwest-1", "eu-central-1", "eu-north-1", "eu-south-1", "eu-west-1", "eu-west-2", "eu-west-3", "sa-east-1", "me-south-1", "us-gov-east-1", "us-gov-west-1" ], - "order": 4 - }, - "s3_access_key_id": { - "type": "string", - "description": "The Access Key Id granting allow one to access the above S3 staging bucket. Airbyte requires Read and Write permissions to the given bucket.", - "title": "S3 Access Key ID", - "examples": [ "A012345678910EXAMPLE" ], - "airbyte_secret": true, - "order": 5 - }, - "s3_secret_access_key": { - "title": "S3 Secret Access Key", - "type": "string", - "description": "The corresponding secret to the above access key id.", - "examples": [ "a012345678910ABCDEFGH/AbCdEfGhEXAMPLEKEY" ], - "airbyte_secret": true, - "order": 6 - }, - "file_name_pattern": { - "type": "string", - "description": "The pattern allows you to set the file-name format for the S3 staging file(s)", - "title": "S3 Filename pattern", - "examples": [ "{date}", "{date:yyyy_MM}", "{timestamp}", "{part_number}", "{sync_id}" ], - "order": 7 - } - } - }, { - "title": "Azure Blob Storage", - "required": [ "data_source_type", "azure_blob_storage_account_name", "azure_blob_storage_container_name", "azure_blob_storage_sas_token" ], - "properties": { - "data_source_type": { - "type": "string", - "const": "AZURE_BLOB_STORAGE", - "order": 0 - }, - "azure_blob_storage_endpoint_domain_name": { - "title": "Endpoint Domain Name", - "type": "string", - "default": "blob.core.windows.net", - "description": "This is Azure Blob Storage endpoint domain name. Leave default value (or leave it empty if run container from command line) to use Microsoft native from example.", - "examples": [ "blob.core.windows.net" ], - "order": 1 - }, - "azure_blob_storage_account_name": { - "title": "Azure Blob Storage Account Name", - "type": "string", - "description": "The account's name of the Azure Blob Storage.", - "examples": [ "airbyte5storage" ], - "order": 2 - }, - "azure_blob_storage_container_name": { - "title": "Azure Blob Storage Container Name", - "type": "string", - "description": "The name of the Azure blob storage container.", - "examples": [ "airbytetestcontainername" ], - "order": 3 - }, - "azure_blob_storage_sas_token": { - "title": "SAS Token", - "type": "string", - "airbyte_secret": true, - "description": "Shared access signature (SAS) token to grant limited access to objects in your storage account.", - "examples": [ "?sv=2016-05-31&ss=b&srt=sco&sp=rwdl&se=2018-06-27T10:05:50Z&st=2017-06-27T02:05:50Z&spr=https,http&sig=bgqQwoXwxzuD2GJfagRg7VOS8hzNr3QLT7rhS8OFRLQ%3D" ], - "order": 4 - } - } - } ] - }, - "purge_staging_data": { - "title": "Purge Staging Files and Tables", - "type": "boolean", - "description": "Default to 'true'. Switch it to 'false' for debugging purpose.", - "default": true, - "order": 9 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "8ccd8909-4e99-4141-b48d-4984b70b2d89", - "name": "DynamoDB", - "dockerRepository": "airbyte/destination-dynamodb", - "dockerImageTag": "0.1.7", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/dynamodb", - "icon": "dynamodb.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/dynamodb", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "DynamoDB Destination Spec", - "type": "object", - "required": [ "dynamodb_table_name_prefix", "dynamodb_region", "access_key_id", "secret_access_key" ], - "additionalProperties": false, - "properties": { - "dynamodb_endpoint": { - "title": "Endpoint", - "type": "string", - "default": "", - "description": "This is your DynamoDB endpoint url.(if you are working with AWS DynamoDB, just leave empty).", - "examples": [ "http://localhost:9000" ] - }, - "dynamodb_table_name_prefix": { - "title": "Table name prefix", - "type": "string", - "description": "The prefix to use when naming DynamoDB tables.", - "examples": [ "airbyte_sync" ] - }, - "dynamodb_region": { - "title": "DynamoDB Region", - "type": "string", - "default": "", - "description": "The region of the DynamoDB.", - "enum": [ "", "us-east-1", "us-east-2", "us-west-1", "us-west-2", "af-south-1", "ap-east-1", "ap-south-1", "ap-northeast-1", "ap-northeast-2", "ap-northeast-3", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "cn-north-1", "cn-northwest-1", "eu-central-1", "eu-north-1", "eu-south-1", "eu-west-1", "eu-west-2", "eu-west-3", "sa-east-1", "me-south-1", "us-gov-east-1", "us-gov-west-1" ] - }, - "access_key_id": { - "type": "string", - "description": "The access key id to access the DynamoDB. Airbyte requires Read and Write permissions to the DynamoDB.", - "title": "DynamoDB Key Id", - "airbyte_secret": true, - "examples": [ "A012345678910EXAMPLE" ] - }, - "secret_access_key": { - "type": "string", - "description": "The corresponding secret to the access key id.", - "title": "DynamoDB Access Key", - "airbyte_secret": true, - "examples": [ "a012345678910ABCDEFGH/AbCdEfGhEXAMPLEKEY" ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "2eb65e87-983a-4fd7-b3e3-9d9dc6eb8537", - "name": "E2E Testing", - "dockerRepository": "airbyte/destination-e2e-test", - "dockerImageTag": "0.2.4", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/e2e-test", - "icon": "airbyte.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/e2e-test", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "E2E Test Destination Spec", - "type": "object", - "oneOf": [ { - "title": "Logging", - "required": [ "type", "logging_config" ], - "properties": { - "type": { - "type": "string", - "const": "LOGGING", - "default": "LOGGING" - }, - "logging_config": { - "title": "Logging Configuration", - "type": "object", - "description": "Configurate how the messages are logged.", - "oneOf": [ { - "title": "First N Entries", - "description": "Log first N entries per stream.", - "type": "object", - "required": [ "logging_type", "max_entry_count" ], - "properties": { - "logging_type": { - "type": "string", - "enum": [ "FirstN" ], - "default": "FirstN" - }, - "max_entry_count": { - "title": "N", - "description": "Number of entries to log. This destination is for testing only. So it won't make sense to log infinitely. The maximum is 1,000 entries.", - "type": "number", - "default": 100, - "examples": [ 100 ], - "minimum": 1, - "maximum": 1000 - } - } - }, { - "title": "Every N-th Entry", - "description": "For each stream, log every N-th entry with a maximum cap.", - "type": "object", - "required": [ "logging_type", "nth_entry_to_log", "max_entry_count" ], - "properties": { - "logging_type": { - "type": "string", - "enum": [ "EveryNth" ], - "default": "EveryNth" - }, - "nth_entry_to_log": { - "title": "N", - "description": "The N-th entry to log for each stream. N starts from 1. For example, when N = 1, every entry is logged; when N = 2, every other entry is logged; when N = 3, one out of three entries is logged.", - "type": "number", - "example": [ 3 ], - "minimum": 1, - "maximum": 1000 - }, - "max_entry_count": { - "title": "Max Log Entries", - "description": "Max number of entries to log. This destination is for testing only. So it won't make sense to log infinitely. The maximum is 1,000 entries.", - "type": "number", - "default": 100, - "examples": [ 100 ], - "minimum": 1, - "maximum": 1000 - } - } - }, { - "title": "Random Sampling", - "description": "For each stream, randomly log a percentage of the entries with a maximum cap.", - "type": "object", - "required": [ "logging_type", "sampling_ratio", "max_entry_count" ], - "properties": { - "logging_type": { - "type": "string", - "enum": [ "RandomSampling" ], - "default": "RandomSampling" - }, - "sampling_ratio": { - "title": "Sampling Ratio", - "description": "A positive floating number smaller than 1.", - "type": "number", - "default": 0.001, - "examples": [ 0.001 ], - "minimum": 0, - "maximum": 1 - }, - "seed": { - "title": "Random Number Generator Seed", - "description": "When the seed is unspecified, the current time millis will be used as the seed.", - "type": "number", - "examples": [ 1900 ] - }, - "max_entry_count": { - "title": "Max Log Entries", - "description": "Max number of entries to log. This destination is for testing only. So it won't make sense to log infinitely. The maximum is 1,000 entries.", - "type": "number", - "default": 100, - "examples": [ 100 ], - "minimum": 1, - "maximum": 1000 - } - } - } ] - } - } - }, { - "title": "Silent", - "required": [ "type" ], - "properties": { - "type": { - "type": "string", - "const": "SILENT", - "default": "SILENT" - } - } - }, { - "title": "Throttled", - "required": [ "type", "millis_per_record" ], - "properties": { - "type": { - "type": "string", - "const": "THROTTLED", - "default": "THROTTLED" - }, - "millis_per_record": { - "description": "Number of milli-second to pause in between records.", - "type": "integer" - } - } - }, { - "title": "Failing", - "required": [ "type", "num_messages" ], - "properties": { - "type": { - "type": "string", - "const": "FAILING", - "default": "FAILING" - }, - "num_messages": { - "description": "Number of messages after which to fail.", - "type": "integer" - } - } - } ] - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false - }, { - "destinationDefinitionId": "68f351a7-2745-4bef-ad7f-996b8e51bb8c", - "name": "ElasticSearch", - "dockerRepository": "airbyte/destination-elasticsearch", - "dockerImageTag": "0.1.6", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/elasticsearch", - "icon": "elasticsearch.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/elasticsearch", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Elasticsearch Connection Configuration", - "type": "object", - "required": [ "endpoint" ], - "additionalProperties": false, - "properties": { - "endpoint": { - "title": "Server Endpoint", - "type": "string", - "description": "The full url of the Elasticsearch server" - }, - "upsert": { - "type": "boolean", - "title": "Upsert Records", - "description": "If a primary key identifier is defined in the source, an upsert will be performed using the primary key value as the elasticsearch doc id. Does not support composite primary keys.", - "default": true - }, - "ca_certificate": { - "type": "string", - "title": "CA certificate", - "description": "CA certificate", - "airbyte_secret": true, - "multiline": true - }, - "authenticationMethod": { - "title": "Authentication Method", - "type": "object", - "description": "The type of authentication to be used", - "oneOf": [ { - "title": "None", - "additionalProperties": false, - "description": "No authentication will be used", - "required": [ "method" ], - "properties": { - "method": { - "type": "string", - "const": "none" - } - } - }, { - "title": "Api Key/Secret", - "additionalProperties": false, - "description": "Use a api key and secret combination to authenticate", - "required": [ "method", "apiKeyId", "apiKeySecret" ], - "properties": { - "method": { - "type": "string", - "const": "secret" - }, - "apiKeyId": { - "title": "API Key ID", - "description": "The Key ID to used when accessing an enterprise Elasticsearch instance.", - "type": "string" - }, - "apiKeySecret": { - "title": "API Key Secret", - "description": "The secret associated with the API Key ID.", - "type": "string", - "airbyte_secret": true - } - } - }, { - "title": "Username/Password", - "additionalProperties": false, - "description": "Basic auth header with a username and password", - "required": [ "method", "username", "password" ], - "properties": { - "method": { - "type": "string", - "const": "basic" - }, - "username": { - "title": "Username", - "description": "Basic auth username to access a secure Elasticsearch server", - "type": "string" - }, - "password": { - "title": "Password", - "description": "Basic auth password to access a secure Elasticsearch server", - "type": "string", - "airbyte_secret": true - } - } - } ] - }, - "tunnel_method": { - "type": "object", - "title": "SSH Tunnel Method", - "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", - "oneOf": [ { - "title": "No Tunnel", - "required": [ "tunnel_method" ], - "properties": { - "tunnel_method": { - "description": "No ssh tunnel needed to connect to database", - "type": "string", - "const": "NO_TUNNEL", - "order": 0 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host.", - "type": "string", - "order": 3 - }, - "ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - }, { - "title": "Password Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host", - "type": "string", - "order": 3 - }, - "tunnel_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 4 - } - } - } ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ], - "supportsNamespaces": true - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "bb6071d9-6f34-4766-bec2-d1d4ed81a653", - "name": "Exasol", - "dockerRepository": "airbyte/destination-exasol", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/exasol", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/exasol", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Exasol Destination Spec", - "type": "object", - "required": [ "host", "port", "username", "schema" ], - "additionalProperties": true, - "properties": { - "host": { - "title": "Host", - "description": "Hostname of the database.", - "type": "string", - "order": 0 - }, - "port": { - "title": "Port", - "description": "Port of the database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 8563, - "examples": [ "8563" ], - "order": 1 - }, - "certificateFingerprint": { - "title": "Certificate Fingerprint", - "description": "Fingerprint of the Exasol server's TLS certificate", - "type": "string", - "examples": [ "ABC123..." ], - "order": 2 - }, - "username": { - "title": "User", - "description": "Username to use to access the database.", - "type": "string", - "order": 3 - }, - "password": { - "title": "Password", - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 4 - }, - "schema": { - "title": "Schema Name", - "description": "Schema Name", - "type": "string", - "order": 5 - }, - "jdbc_url_params": { - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol ';'. (example: key1=value1;key2=value2;key3=value3).", - "title": "JDBC URL Params", - "type": "string", - "order": 6 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "18081484-02a5-4662-8dba-b270b582f321", - "name": "Firebolt", - "dockerRepository": "airbyte/destination-firebolt", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/firebolt", - "icon": "firebolt.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/firebolt", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Firebolt Spec", - "type": "object", - "required": [ "username", "password", "database" ], - "additionalProperties": false, - "properties": { - "username": { - "type": "string", - "title": "Username", - "description": "Firebolt email address you use to login.", - "examples": [ "username@email.com" ], - "order": 0 - }, - "password": { - "type": "string", - "title": "Password", - "description": "Firebolt password.", - "airbyte_secret": true, - "order": 1 - }, - "account": { - "type": "string", - "title": "Account", - "description": "Firebolt account to login." - }, - "host": { - "type": "string", - "title": "Host", - "description": "The host name of your Firebolt database.", - "examples": [ "api.app.firebolt.io" ] - }, - "database": { - "type": "string", - "title": "Database", - "description": "The database to connect to." - }, - "engine": { - "type": "string", - "title": "Engine", - "description": "Engine name or url to connect to." - }, - "loading_method": { - "type": "object", - "title": "Loading Method", - "description": "Loading method used to select the way data will be uploaded to Firebolt", - "oneOf": [ { - "title": "SQL Inserts", - "additionalProperties": false, - "required": [ "method" ], - "properties": { - "method": { - "type": "string", - "const": "SQL" - } - } - }, { - "title": "External Table via S3", - "additionalProperties": false, - "required": [ "method", "s3_bucket", "s3_region", "aws_key_id", "aws_key_secret" ], - "properties": { - "method": { - "type": "string", - "const": "S3" - }, - "s3_bucket": { - "type": "string", - "title": "S3 bucket name", - "description": "The name of the S3 bucket." - }, - "s3_region": { - "type": "string", - "title": "S3 region name", - "description": "Region name of the S3 bucket.", - "examples": [ "us-east-1" ] - }, - "aws_key_id": { - "type": "string", - "title": "AWS Key ID", - "airbyte_secret": true, - "description": "AWS access key granting read and write access to S3." - }, - "aws_key_secret": { - "type": "string", - "title": "AWS Key Secret", - "airbyte_secret": true, - "description": "Corresponding secret part of the AWS Key" - } - } - } ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": true, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "supportsDbt": true - }, { - "destinationDefinitionId": "ca8f6566-e555-4b40-943a-545bf123117a", - "name": "Google Cloud Storage (GCS)", - "dockerRepository": "airbyte/destination-gcs", - "dockerImageTag": "0.2.16", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/gcs", - "icon": "googlecloudstorage.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/gcs", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "GCS Destination Spec", - "type": "object", - "required": [ "gcs_bucket_name", "gcs_bucket_path", "credential", "format" ], - "properties": { - "gcs_bucket_name": { - "title": "GCS Bucket Name", - "order": 1, - "type": "string", - "description": "You can find the bucket name in the App Engine Admin console Application Settings page, under the label Google Cloud Storage Bucket. Read more here.", - "examples": [ "airbyte_sync" ] - }, - "gcs_bucket_path": { - "title": "GCS Bucket Path", - "description": "GCS Bucket Path string Subdirectory under the above bucket to sync the data into.", - "order": 2, - "type": "string", - "examples": [ "data_sync/test" ] - }, - "gcs_bucket_region": { - "title": "GCS Bucket Region", - "type": "string", - "order": 3, - "default": "us", - "description": "Select a Region of the GCS Bucket. Read more here.", - "enum": [ "northamerica-northeast1", "northamerica-northeast2", "us-central1", "us-east1", "us-east4", "us-west1", "us-west2", "us-west3", "us-west4", "southamerica-east1", "southamerica-west1", "europe-central2", "europe-north1", "europe-west1", "europe-west2", "europe-west3", "europe-west4", "europe-west6", "asia-east1", "asia-east2", "asia-northeast1", "asia-northeast2", "asia-northeast3", "asia-south1", "asia-south2", "asia-southeast1", "asia-southeast2", "australia-southeast1", "australia-southeast2", "asia", "eu", "us", "asia1", "eur4", "nam4" ] - }, - "credential": { - "title": "Authentication", - "description": "An HMAC key is a type of credential and can be associated with a service account or a user account in Cloud Storage. Read more here.", - "type": "object", - "order": 0, - "oneOf": [ { - "title": "HMAC Key", - "required": [ "credential_type", "hmac_key_access_id", "hmac_key_secret" ], - "properties": { - "credential_type": { - "type": "string", - "enum": [ "HMAC_KEY" ], - "default": "HMAC_KEY" - }, - "hmac_key_access_id": { - "type": "string", - "description": "When linked to a service account, this ID is 61 characters long; when linked to a user account, it is 24 characters long. Read more here.", - "title": "Access ID", - "airbyte_secret": true, - "order": 0, - "examples": [ "1234567890abcdefghij1234" ] - }, - "hmac_key_secret": { - "type": "string", - "description": "The corresponding secret for the access ID. It is a 40-character base-64 encoded string. Read more here.", - "title": "Secret", - "airbyte_secret": true, - "order": 1, - "examples": [ "1234567890abcdefghij1234567890ABCDEFGHIJ" ] - } - } - } ] - }, - "format": { - "title": "Output Format", - "type": "object", - "description": "Output data format. One of the following formats must be selected - AVRO format, PARQUET format, CSV format, or JSONL format.", - "order": 4, - "oneOf": [ { - "title": "Avro: Apache Avro", - "required": [ "format_type", "compression_codec" ], - "properties": { - "format_type": { - "type": "string", - "enum": [ "Avro" ], - "default": "Avro" - }, - "compression_codec": { - "title": "Compression Codec", - "description": "The compression algorithm used to compress data. Default to no compression.", - "type": "object", - "oneOf": [ { - "title": "No Compression", - "required": [ "codec" ], - "properties": { - "codec": { - "type": "string", - "enum": [ "no compression" ], - "default": "no compression" - } - } - }, { - "title": "Deflate", - "required": [ "codec" ], - "properties": { - "codec": { - "type": "string", - "enum": [ "Deflate" ], - "default": "Deflate" - }, - "compression_level": { - "title": "Deflate level", - "description": "0: no compression & fastest, 9: best compression & slowest.", - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 9 - } - } - }, { - "title": "bzip2", - "required": [ "codec" ], - "properties": { - "codec": { - "type": "string", - "enum": [ "bzip2" ], - "default": "bzip2" - } - } - }, { - "title": "xz", - "required": [ "codec" ], - "properties": { - "codec": { - "type": "string", - "enum": [ "xz" ], - "default": "xz" - }, - "compression_level": { - "title": "Compression Level", - "description": "The presets 0-3 are fast presets with medium compression. The presets 4-6 are fairly slow presets with high compression. The default preset is 6. The presets 7-9 are like the preset 6 but use bigger dictionaries and have higher compressor and decompressor memory requirements. Unless the uncompressed size of the file exceeds 8 MiB, 16 MiB, or 32 MiB, it is waste of memory to use the presets 7, 8, or 9, respectively. Read more here for details.", - "type": "integer", - "default": 6, - "minimum": 0, - "maximum": 9 - } - } - }, { - "title": "zstandard", - "required": [ "codec" ], - "properties": { - "codec": { - "type": "string", - "enum": [ "zstandard" ], - "default": "zstandard" - }, - "compression_level": { - "title": "Compression Level", - "description": "Negative levels are 'fast' modes akin to lz4 or snappy, levels above 9 are generally for archival purposes, and levels above 18 use a lot of memory.", - "type": "integer", - "default": 3, - "minimum": -5, - "maximum": 22 - }, - "include_checksum": { - "title": "Include Checksum", - "description": "If true, include a checksum with each data block.", - "type": "boolean", - "default": false - } - } - }, { - "title": "snappy", - "required": [ "codec" ], - "properties": { - "codec": { - "type": "string", - "enum": [ "snappy" ], - "default": "snappy" - } - } - } ] - } - } - }, { - "title": "CSV: Comma-Separated Values", - "required": [ "format_type" ], - "properties": { - "format_type": { - "type": "string", - "enum": [ "CSV" ], - "default": "CSV" - }, - "flattening": { - "type": "string", - "title": "Normalization", - "description": "Whether the input JSON data should be normalized (flattened) in the output CSV. Please refer to docs for details.", - "default": "No flattening", - "enum": [ "No flattening", "Root level flattening" ] - }, - "compression": { - "title": "Compression", - "type": "object", - "description": "Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \".csv.gz\").", - "oneOf": [ { - "title": "No Compression", - "requires": [ "compression_type" ], - "properties": { - "compression_type": { - "type": "string", - "enum": [ "No Compression" ], - "default": "No Compression" - } - } - }, { - "title": "GZIP", - "requires": [ "compression_type" ], - "properties": { - "compression_type": { - "type": "string", - "enum": [ "GZIP" ], - "default": "GZIP" - } - } - } ] - } - } - }, { - "title": "JSON Lines: newline-delimited JSON", - "required": [ "format_type" ], - "properties": { - "format_type": { - "type": "string", - "enum": [ "JSONL" ], - "default": "JSONL" - }, - "compression": { - "title": "Compression", - "type": "object", - "description": "Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \".jsonl.gz\").", - "oneOf": [ { - "title": "No Compression", - "requires": "compression_type", - "properties": { - "compression_type": { - "type": "string", - "enum": [ "No Compression" ], - "default": "No Compression" - } - } - }, { - "title": "GZIP", - "requires": "compression_type", - "properties": { - "compression_type": { - "type": "string", - "enum": [ "GZIP" ], - "default": "GZIP" - } - } - } ] - } - } - }, { - "title": "Parquet: Columnar Storage", - "required": [ "format_type" ], - "properties": { - "format_type": { - "type": "string", - "enum": [ "Parquet" ], - "default": "Parquet" - }, - "compression_codec": { - "title": "Compression Codec", - "description": "The compression algorithm used to compress data pages.", - "type": "string", - "default": "UNCOMPRESSED", - "enum": [ "UNCOMPRESSED", "SNAPPY", "GZIP", "LZO", "BROTLI", "LZ4", "ZSTD" ] - }, - "block_size_mb": { - "title": "Block Size (Row Group Size) (MB)", - "description": "This is the size of a row group being buffered in memory. It limits the memory usage when writing. Larger values will improve the IO when reading, but consume more memory when writing. Default: 128 MB.", - "type": "integer", - "default": 128, - "examples": [ 128 ] - }, - "max_padding_size_mb": { - "title": "Max Padding Size (MB)", - "description": "Maximum size allowed as padding to align row groups. This is also the minimum size of a row group. Default: 8 MB.", - "type": "integer", - "default": 8, - "examples": [ 8 ] - }, - "page_size_kb": { - "title": "Page Size (KB)", - "description": "The page size is for compression. A block is composed of pages. A page is the smallest unit that must be read fully to access a single record. If this value is too small, the compression will deteriorate. Default: 1024 KB.", - "type": "integer", - "default": 1024, - "examples": [ 1024 ] - }, - "dictionary_page_size_kb": { - "title": "Dictionary Page Size (KB)", - "description": "There is one dictionary page per column per row group when dictionary encoding is used. The dictionary page size works like the page size but for dictionary. Default: 1024 KB.", - "type": "integer", - "default": 1024, - "examples": [ 1024 ] - }, - "dictionary_encoding": { - "title": "Dictionary Encoding", - "description": "Default: true.", - "type": "boolean", - "default": true - } - } - } ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ], - "$schema": "http://json-schema.org/draft-07/schema#" - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "resourceRequirements": { - "jobSpecific": [ { - "jobType": "sync", - "resourceRequirements": { - "memory_request": "1Gi", - "memory_limit": "1Gi" - } - } ] - } - }, { - "destinationDefinitionId": "27dc7500-6d1b-40b1-8b07-e2f2aea3c9f4", - "name": "Google Firestore", - "dockerRepository": "airbyte/destination-firestore", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/firestore", - "icon": "firestore.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/firestore", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Destination Google Firestore", - "type": "object", - "required": [ "project_id" ], - "additionalProperties": false, - "properties": { - "project_id": { - "type": "string", - "description": "The GCP project ID for the project containing the target BigQuery dataset.", - "title": "Project ID" - }, - "credentials_json": { - "type": "string", - "description": "The contents of the JSON service account key. Check out the docs if you need help generating this key. Default credentials will be used if this field is left empty.", - "title": "Credentials JSON", - "airbyte_secret": true - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "append", "overwrite" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "356668e2-7e34-47f3-a3b0-67a8a481b692", - "name": "Google PubSub", - "dockerRepository": "airbyte/destination-pubsub", - "dockerImageTag": "0.2.0", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/pubsub", - "icon": "googlepubsub.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/pubsub", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Google PubSub Destination Spec", - "type": "object", - "required": [ "project_id", "topic_id", "credentials_json", "ordering_enabled", "batching_enabled" ], - "additionalProperties": true, - "properties": { - "project_id": { - "type": "string", - "description": "The GCP project ID for the project containing the target PubSub.", - "title": "Project ID" - }, - "topic_id": { - "type": "string", - "description": "The PubSub topic ID in the given GCP project ID.", - "title": "PubSub Topic ID" - }, - "credentials_json": { - "type": "string", - "description": "The contents of the JSON service account key. Check out the docs if you need help generating this key.", - "title": "Credentials JSON", - "airbyte_secret": true - }, - "ordering_enabled": { - "title": "Message Ordering Enabled", - "description": "If TRUE PubSub publisher will have message ordering enabled. Every message will have an ordering key of stream", - "type": "boolean", - "default": false - }, - "batching_enabled": { - "type": "boolean", - "title": "Message Batching Enabled", - "description": "If TRUE messages will be buffered instead of sending them one by one", - "default": false - }, - "batching_delay_threshold": { - "type": "integer", - "title": "Message Batching: Delay Threshold", - "description": "Number of ms before the buffer is flushed", - "default": 1, - "minimum": 1 - }, - "batching_element_count_threshold": { - "type": "integer", - "title": "Message Batching: Element Count Threshold", - "description": "Number of messages before the buffer is flushed", - "default": 1, - "minimum": 1 - }, - "batching_request_bytes_threshold": { - "type": "integer", - "title": "Message Batching: Request Bytes Threshold", - "description": "Number of bytes before the buffer is flushed", - "default": 1, - "minimum": 1 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "9f760101-60ae-462f-9ee6-b7a9dafd454d", - "name": "Kafka", - "dockerRepository": "airbyte/destination-kafka", - "dockerImageTag": "0.1.10", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/kafka", - "icon": "kafka.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/kafka", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Kafka Destination Spec", - "type": "object", - "required": [ "bootstrap_servers", "topic_pattern", "protocol", "acks", "enable_idempotence", "compression_type", "batch_size", "linger_ms", "max_in_flight_requests_per_connection", "client_dns_lookup", "buffer_memory", "max_request_size", "retries", "socket_connection_setup_timeout_ms", "socket_connection_setup_timeout_max_ms", "max_block_ms", "request_timeout_ms", "delivery_timeout_ms", "send_buffer_bytes", "receive_buffer_bytes" ], - "additionalProperties": true, - "properties": { - "bootstrap_servers": { - "title": "Bootstrap Servers", - "description": "A list of host/port pairs to use for establishing the initial connection to the Kafka cluster. The client will make use of all servers irrespective of which servers are specified here for bootstrapping—this list only impacts the initial hosts used to discover the full set of servers. This list should be in the form host1:port1,host2:port2,.... Since these servers are just used for the initial connection to discover the full cluster membership (which may change dynamically), this list need not contain the full set of servers (you may want more than one, though, in case a server is down).", - "type": "string", - "examples": [ "kafka-broker1:9092,kafka-broker2:9092" ] - }, - "topic_pattern": { - "title": "Topic Pattern", - "description": "Topic pattern in which the records will be sent. You can use patterns like '{namespace}' and/or '{stream}' to send the message to a specific topic based on these values. Notice that the topic name will be transformed to a standard naming convention.", - "type": "string", - "examples": [ "sample.topic", "{namespace}.{stream}.sample" ] - }, - "test_topic": { - "title": "Test Topic", - "description": "Topic to test if Airbyte can produce messages.", - "type": "string", - "examples": [ "test.topic" ] - }, - "sync_producer": { - "title": "Sync Producer", - "description": "Wait synchronously until the record has been sent to Kafka.", - "type": "boolean", - "default": false - }, - "protocol": { - "title": "Protocol", - "type": "object", - "description": "Protocol used to communicate with brokers.", - "oneOf": [ { - "title": "PLAINTEXT", - "required": [ "security_protocol" ], - "properties": { - "security_protocol": { - "type": "string", - "enum": [ "PLAINTEXT" ], - "default": "PLAINTEXT" - } - } - }, { - "title": "SASL PLAINTEXT", - "required": [ "security_protocol", "sasl_mechanism", "sasl_jaas_config" ], - "properties": { - "security_protocol": { - "type": "string", - "enum": [ "SASL_PLAINTEXT" ], - "default": "SASL_PLAINTEXT" - }, - "sasl_mechanism": { - "title": "SASL Mechanism", - "description": "SASL mechanism used for client connections. This may be any mechanism for which a security provider is available.", - "type": "string", - "default": "PLAIN", - "enum": [ "PLAIN" ] - }, - "sasl_jaas_config": { - "title": "SASL JAAS Config", - "description": "JAAS login context parameters for SASL connections in the format used by JAAS configuration files.", - "type": "string", - "default": "", - "airbyte_secret": true - } - } - }, { - "title": "SASL SSL", - "required": [ "security_protocol", "sasl_mechanism", "sasl_jaas_config" ], - "properties": { - "security_protocol": { - "type": "string", - "enum": [ "SASL_SSL" ], - "default": "SASL_SSL" - }, - "sasl_mechanism": { - "title": "SASL Mechanism", - "description": "SASL mechanism used for client connections. This may be any mechanism for which a security provider is available.", - "type": "string", - "default": "GSSAPI", - "enum": [ "GSSAPI", "OAUTHBEARER", "SCRAM-SHA-256", "SCRAM-SHA-512", "PLAIN" ] - }, - "sasl_jaas_config": { - "title": "SASL JAAS Config", - "description": "JAAS login context parameters for SASL connections in the format used by JAAS configuration files.", - "type": "string", - "default": "", - "airbyte_secret": true - } - } - } ] - }, - "client_id": { - "title": "Client ID", - "description": "An ID string to pass to the server when making requests. The purpose of this is to be able to track the source of requests beyond just ip/port by allowing a logical application name to be included in server-side request logging.", - "type": "string", - "examples": [ "airbyte-producer" ] - }, - "acks": { - "title": "ACKs", - "description": "The number of acknowledgments the producer requires the leader to have received before considering a request complete. This controls the durability of records that are sent.", - "type": "string", - "default": "1", - "enum": [ "0", "1", "all" ] - }, - "enable_idempotence": { - "title": "Enable Idempotence", - "description": "When set to 'true', the producer will ensure that exactly one copy of each message is written in the stream. If 'false', producer retries due to broker failures, etc., may write duplicates of the retried message in the stream.", - "type": "boolean", - "default": false - }, - "compression_type": { - "title": "Compression Type", - "description": "The compression type for all data generated by the producer.", - "type": "string", - "default": "none", - "enum": [ "none", "gzip", "snappy", "lz4", "zstd" ] - }, - "batch_size": { - "title": "Batch Size", - "description": "The producer will attempt to batch records together into fewer requests whenever multiple records are being sent to the same partition.", - "type": "integer", - "examples": [ 16384 ] - }, - "linger_ms": { - "title": "Linger ms", - "description": "The producer groups together any records that arrive in between request transmissions into a single batched request.", - "type": "string", - "examples": [ 0 ] - }, - "max_in_flight_requests_per_connection": { - "title": "Max in Flight Requests per Connection", - "description": "The maximum number of unacknowledged requests the client will send on a single connection before blocking. Can be greater than 1, and the maximum value supported with idempotency is 5.", - "type": "integer", - "examples": [ 5 ] - }, - "client_dns_lookup": { - "title": "Client DNS Lookup", - "description": "Controls how the client uses DNS lookups. If set to use_all_dns_ips, connect to each returned IP address in sequence until a successful connection is established. After a disconnection, the next IP is used. Once all IPs have been used once, the client resolves the IP(s) from the hostname again. If set to resolve_canonical_bootstrap_servers_only, resolve each bootstrap address into a list of canonical names. After the bootstrap phase, this behaves the same as use_all_dns_ips. If set to default (deprecated), attempt to connect to the first IP address returned by the lookup, even if the lookup returns multiple IP addresses.", - "type": "string", - "default": "use_all_dns_ips", - "enum": [ "default", "use_all_dns_ips", "resolve_canonical_bootstrap_servers_only", "use_all_dns_ips" ] - }, - "buffer_memory": { - "title": "Buffer Memory", - "description": "The total bytes of memory the producer can use to buffer records waiting to be sent to the server.", - "type": "string", - "examples": 33554432 - }, - "max_request_size": { - "title": "Max Request Size", - "description": "The maximum size of a request in bytes.", - "type": "integer", - "examples": [ 1048576 ] - }, - "retries": { - "title": "Retries", - "description": "Setting a value greater than zero will cause the client to resend any record whose send fails with a potentially transient error.", - "type": "integer", - "examples": [ 2147483647 ] - }, - "socket_connection_setup_timeout_ms": { - "title": "Socket Connection Setup Timeout", - "description": "The amount of time the client will wait for the socket connection to be established.", - "type": "string", - "examples": [ 10000 ] - }, - "socket_connection_setup_timeout_max_ms": { - "title": "Socket Connection Setup Max Timeout", - "description": "The maximum amount of time the client will wait for the socket connection to be established. The connection setup timeout will increase exponentially for each consecutive connection failure up to this maximum.", - "type": "string", - "examples": [ 30000 ] - }, - "max_block_ms": { - "title": "Max Block ms", - "description": "The configuration controls how long the KafkaProducer's send(), partitionsFor(), initTransactions(), sendOffsetsToTransaction(), commitTransaction() and abortTransaction() methods will block.", - "type": "string", - "examples": [ 60000 ] - }, - "request_timeout_ms": { - "title": "Request Timeout", - "description": "The configuration controls the maximum amount of time the client will wait for the response of a request. If the response is not received before the timeout elapses the client will resend the request if necessary or fail the request if retries are exhausted.", - "type": "integer", - "examples": [ 30000 ] - }, - "delivery_timeout_ms": { - "title": "Delivery Timeout", - "description": "An upper bound on the time to report success or failure after a call to 'send()' returns.", - "type": "integer", - "examples": [ 120000 ] - }, - "send_buffer_bytes": { - "title": "Send Buffer bytes", - "description": "The size of the TCP send buffer (SO_SNDBUF) to use when sending data. If the value is -1, the OS default will be used.", - "type": "integer", - "examples": [ 131072 ] - }, - "receive_buffer_bytes": { - "title": "Receive Buffer bytes", - "description": "The size of the TCP receive buffer (SO_RCVBUF) to use when reading data. If the value is -1, the OS default will be used.", - "type": "integer", - "examples": [ 32768 ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "6d1d66d4-26ab-4602-8d32-f85894b04955", - "name": "Kinesis", - "dockerRepository": "airbyte/destination-kinesis", - "dockerImageTag": "0.1.5", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/kinesis", - "icon": "kinesis.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/kinesis", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Kinesis Destination Spec", - "type": "object", - "required": [ "endpoint", "region", "shardCount", "accessKey", "privateKey", "bufferSize" ], - "additionalProperties": true, - "properties": { - "endpoint": { - "title": "Endpoint", - "description": "AWS Kinesis endpoint.", - "type": "string", - "examples": [ "kinesis.us‑west‑1.amazonaws.com" ], - "order": 0 - }, - "region": { - "title": "Region", - "description": "AWS region. Your account determines the Regions that are available to you.", - "type": "string", - "examples": [ "us‑west‑1" ], - "order": 1 - }, - "shardCount": { - "title": "Shard Count", - "description": "Number of shards to which the data should be streamed.", - "type": "integer", - "default": 5, - "order": 2 - }, - "accessKey": { - "title": "Access Key", - "description": "Generate the AWS Access Key for current user.", - "airbyte_secret": true, - "type": "string", - "order": 3 - }, - "privateKey": { - "title": "Private Key", - "description": "The AWS Private Key - a string of numbers and letters that are unique for each account, also known as a \"recovery phrase\".", - "airbyte_secret": true, - "type": "string", - "order": 4 - }, - "bufferSize": { - "title": "Buffer Size", - "description": "Buffer size for storing kinesis records before being batch streamed.", - "type": "integer", - "minimum": 1, - "maximum": 500, - "default": 100, - "order": 5 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "8be1cf83-fde1-477f-a4ad-318d23c9f3c6", - "name": "Local CSV", - "dockerRepository": "airbyte/destination-csv", - "dockerImageTag": "1.0.0", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/local-csv", - "icon": "file-csv.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/local-csv", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "CSV Destination Spec", - "type": "object", - "required": [ "destination_path" ], - "additionalProperties": true, - "properties": { - "destination_path": { - "description": "Path to the directory where csv files will be written. The destination uses the local mount \"/local\" and any data files will be placed inside that local mount. For more information check out our docs", - "type": "string", - "examples": [ "/local" ] - }, - "delimiter_type": { - "type": "object", - "title": "Delimiter", - "description": "The character delimiting individual cells in the CSV data.", - "oneOf": [ { - "title": "Comma", - "required": [ "delimiter" ], - "properties": { - "delimiter": { - "type": "string", - "const": "\\u002c" - } - } - }, { - "title": "Semicolon", - "required": [ "delimiter" ], - "properties": { - "delimiter": { - "type": "string", - "const": "\\u003b" - } - } - }, { - "title": "Pipe", - "required": [ "delimiter" ], - "properties": { - "delimiter": { - "type": "string", - "const": "\\u007c" - } - } - }, { - "title": "Tab", - "required": [ "delimiter" ], - "properties": { - "delimiter": { - "type": "string", - "const": "\\u0009" - } - } - }, { - "title": "Space", - "required": [ "delimiter" ], - "properties": { - "delimiter": { - "type": "string", - "const": "\\u0020" - } - } - } ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "a625d593-bba5-4a1c-a53d-2d246268a816", - "name": "Local JSON", - "dockerRepository": "airbyte/destination-local-json", - "dockerImageTag": "0.2.11", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/local-json", - "icon": "file-json.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/local-json", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Local Json Destination Spec", - "type": "object", - "required": [ "destination_path" ], - "additionalProperties": false, - "properties": { - "destination_path": { - "description": "Path to the directory where json files will be written. The files will be placed inside that local mount. For more information check out our docs", - "title": "Destination Path", - "type": "string", - "examples": [ "/json_data" ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "f3802bc4-5406-4752-9e8d-01e504ca8194", - "name": "MQTT", - "dockerRepository": "airbyte/destination-mqtt", - "dockerImageTag": "0.1.3", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mqtt", - "icon": "mqtt.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mqtt", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "MQTT Destination Spec", - "type": "object", - "required": [ "broker_host", "broker_port", "use_tls", "topic_pattern", "publisher_sync", "connect_timeout", "automatic_reconnect", "clean_session", "message_retained", "message_qos" ], - "additionalProperties": true, - "properties": { - "broker_host": { - "title": "MQTT broker host", - "description": "Host of the broker to connect to.", - "type": "string" - }, - "broker_port": { - "title": "MQTT broker port", - "description": "Port of the broker.", - "type": "integer" - }, - "use_tls": { - "title": "Use TLS", - "description": "Whether to use TLS encryption on the connection.", - "type": "boolean", - "default": false - }, - "username": { - "title": "Username", - "description": "User name to use for the connection.", - "type": "string" - }, - "password": { - "title": "Password", - "description": "Password to use for the connection.", - "type": "string", - "airbyte_secret": true - }, - "topic_pattern": { - "title": "Topic pattern", - "description": "Topic pattern in which the records will be sent. You can use patterns like '{namespace}' and/or '{stream}' to send the message to a specific topic based on these values. Notice that the topic name will be transformed to a standard naming convention.", - "type": "string", - "examples": [ "sample.topic", "{namespace}/{stream}/sample" ] - }, - "topic_test": { - "title": "Test topic", - "description": "Topic to test if Airbyte can produce messages.", - "type": "string", - "examples": [ "test/topic" ] - }, - "client": { - "title": "Client ID", - "description": "A client identifier that is unique on the server being connected to.", - "type": "string", - "examples": [ "airbyte-client1" ] - }, - "publisher_sync": { - "title": "Sync publisher", - "description": "Wait synchronously until the record has been sent to the broker.", - "type": "boolean", - "default": false - }, - "connect_timeout": { - "title": "Connect timeout", - "description": " Maximum time interval (in seconds) the client will wait for the network connection to the MQTT server to be established.", - "type": "integer", - "default": 30 - }, - "automatic_reconnect": { - "title": "Automatic reconnect", - "description": "Whether the client will automatically attempt to reconnect to the server if the connection is lost.", - "type": "boolean", - "default": true - }, - "clean_session": { - "title": "Clean session", - "description": "Whether the client and server should remember state across restarts and reconnects.", - "type": "boolean", - "default": true - }, - "message_retained": { - "title": "Message retained", - "description": "Whether or not the publish message should be retained by the messaging engine.", - "type": "boolean", - "default": false - }, - "message_qos": { - "title": "Message QoS", - "description": "Quality of service used for each message to be delivered.", - "default": "AT_LEAST_ONCE", - "enum": [ "AT_MOST_ONCE", "AT_LEAST_ONCE", "EXACTLY_ONCE" ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "d4353156-9217-4cad-8dd7-c108fd4f74cf", - "name": "MS SQL Server", - "dockerRepository": "airbyte/destination-mssql", - "dockerImageTag": "0.1.23", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mssql", - "icon": "mssql.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mssql", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "MS SQL Server Destination Spec", - "type": "object", - "required": [ "host", "port", "username", "database", "schema" ], - "properties": { - "host": { - "title": "Host", - "description": "The host name of the MSSQL database.", - "type": "string", - "order": 0 - }, - "port": { - "title": "Port", - "description": "The port of the MSSQL database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 1433, - "examples": [ "1433" ], - "order": 1 - }, - "database": { - "title": "DB Name", - "description": "The name of the MSSQL database.", - "type": "string", - "order": 2 - }, - "schema": { - "title": "Default Schema", - "description": "The default schema tables are written to if the source does not specify a namespace. The usual value for this field is \"public\".", - "type": "string", - "examples": [ "public" ], - "default": "public", - "order": 3 - }, - "username": { - "title": "User", - "description": "The username which is used to access the database.", - "type": "string", - "order": 4 - }, - "password": { - "title": "Password", - "description": "The password associated with this username.", - "type": "string", - "airbyte_secret": true, - "order": 5 - }, - "jdbc_url_params": { - "title": "JDBC URL Params", - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", - "type": "string", - "order": 6 - }, - "ssl_method": { - "title": "SSL Method", - "type": "object", - "description": "The encryption method which is used to communicate with the database.", - "order": 7, - "oneOf": [ { - "title": "Unencrypted", - "description": "The data transfer will not be encrypted.", - "required": [ "ssl_method" ], - "type": "object", - "properties": { - "ssl_method": { - "type": "string", - "const": "unencrypted", - "enum": [ "unencrypted" ], - "default": "unencrypted" - } - } - }, { - "title": "Encrypted (trust server certificate)", - "description": "Use the certificate provided by the server without verification. (For testing purposes only!)", - "required": [ "ssl_method" ], - "type": "object", - "properties": { - "ssl_method": { - "type": "string", - "const": "encrypted_trust_server_certificate", - "enum": [ "encrypted_trust_server_certificate" ], - "default": "encrypted_trust_server_certificate" - } - } - }, { - "title": "Encrypted (verify certificate)", - "description": "Verify and use the certificate provided by the server.", - "required": [ "ssl_method", "trustStoreName", "trustStorePassword" ], - "type": "object", - "properties": { - "ssl_method": { - "type": "string", - "const": "encrypted_verify_certificate", - "enum": [ "encrypted_verify_certificate" ], - "default": "encrypted_verify_certificate" - }, - "hostNameInCertificate": { - "title": "Host Name In Certificate", - "type": "string", - "description": "Specifies the host name of the server. The value of this property must match the subject property of the certificate.", - "order": 8 - } - } - } ] - }, - "tunnel_method": { - "type": "object", - "title": "SSH Tunnel Method", - "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", - "oneOf": [ { - "title": "No Tunnel", - "required": [ "tunnel_method" ], - "properties": { - "tunnel_method": { - "description": "No ssh tunnel needed to connect to database", - "type": "string", - "const": "NO_TUNNEL", - "order": 0 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host.", - "type": "string", - "order": 3 - }, - "ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - }, { - "title": "Password Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host", - "type": "string", - "order": 3 - }, - "tunnel_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 4 - } - } - } ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": true, - "supportsDBT": true, - "supported_destination_sync_modes": [ "overwrite", "append", "append_dedup" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "normalizationConfig": { - "normalizationRepository": "airbyte/normalization-mssql", - "normalizationTag": "0.4.0", - "normalizationIntegrationType": "mssql" - }, - "supportsDbt": true - }, { - "destinationDefinitionId": "af7c921e-5892-4ff2-b6c1-4a5ab258fb7e", - "name": "MeiliSearch", - "dockerRepository": "airbyte/destination-meilisearch", - "dockerImageTag": "1.0.0", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/meilisearch", - "icon": "meilisearch.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/meilisearch", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Destination Meilisearch", - "type": "object", - "required": [ "host" ], - "additionalProperties": false, - "properties": { - "host": { - "title": "Host", - "description": "Hostname of the MeiliSearch instance.", - "type": "string", - "order": 0 - }, - "api_key": { - "title": "API Key", - "airbyte_secret": true, - "description": "MeiliSearch API Key. See the docs for more information on how to obtain this key.", - "type": "string", - "order": 1 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "8b746512-8c2e-6ac1-4adc-b59faafd473c", - "name": "MongoDB", - "dockerRepository": "airbyte/destination-mongodb", - "dockerImageTag": "0.1.9", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mongodb", - "icon": "mongodb.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mongodb", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "MongoDB Destination Spec", - "type": "object", - "required": [ "database", "auth_type" ], - "properties": { - "instance_type": { - "description": "MongoDb instance to connect to. For MongoDB Atlas and Replica Set TLS connection is used by default.", - "title": "MongoDb Instance Type", - "type": "object", - "order": 0, - "oneOf": [ { - "title": "Standalone MongoDb Instance", - "required": [ "instance", "host", "port" ], - "properties": { - "instance": { - "type": "string", - "enum": [ "standalone" ], - "default": "standalone" - }, - "host": { - "title": "Host", - "type": "string", - "description": "The Host of a Mongo database to be replicated.", - "order": 0 - }, - "port": { - "title": "Port", - "type": "integer", - "description": "The Port of a Mongo database to be replicated.", - "minimum": 0, - "maximum": 65536, - "default": 27017, - "examples": [ "27017" ], - "order": 1 - }, - "tls": { - "title": "TLS Connection", - "type": "boolean", - "description": "Indicates whether TLS encryption protocol will be used to connect to MongoDB. It is recommended to use TLS connection if possible. For more information see documentation.", - "default": false, - "order": 2 - } - } - }, { - "title": "Replica Set", - "required": [ "instance", "server_addresses" ], - "properties": { - "instance": { - "type": "string", - "enum": [ "replica" ], - "default": "replica" - }, - "server_addresses": { - "title": "Server addresses", - "type": "string", - "description": "The members of a replica set. Please specify `host`:`port` of each member seperated by comma.", - "examples": [ "host1:27017,host2:27017,host3:27017" ], - "order": 0 - }, - "replica_set": { - "title": "Replica Set", - "type": "string", - "description": "A replica set name.", - "order": 1 - } - } - }, { - "title": "MongoDB Atlas", - "required": [ "instance", "cluster_url" ], - "properties": { - "instance": { - "type": "string", - "enum": [ "atlas" ], - "default": "atlas" - }, - "cluster_url": { - "title": "Cluster URL", - "type": "string", - "description": "URL of a cluster to connect to.", - "order": 0 - } - } - } ] - }, - "database": { - "title": "DB Name", - "description": "Name of the database.", - "type": "string", - "order": 2 - }, - "auth_type": { - "title": "Authorization type", - "type": "object", - "description": "Authorization type.", - "oneOf": [ { - "title": "None", - "description": "None.", - "required": [ "authorization" ], - "type": "object", - "properties": { - "authorization": { - "type": "string", - "const": "none" - } - } - }, { - "title": "Login/Password", - "description": "Login/Password.", - "required": [ "authorization", "username", "password" ], - "type": "object", - "properties": { - "authorization": { - "type": "string", - "const": "login/password" - }, - "username": { - "title": "User", - "description": "Username to use to access the database.", - "type": "string", - "order": 1 - }, - "password": { - "title": "Password", - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 2 - } - } - } ] - }, - "tunnel_method": { - "type": "object", - "title": "SSH Tunnel Method", - "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", - "oneOf": [ { - "title": "No Tunnel", - "required": [ "tunnel_method" ], - "properties": { - "tunnel_method": { - "description": "No ssh tunnel needed to connect to database", - "type": "string", - "const": "NO_TUNNEL", - "order": 0 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host.", - "type": "string", - "order": 3 - }, - "ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - }, { - "title": "Password Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host", - "type": "string", - "order": 3 - }, - "tunnel_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 4 - } - } - } ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "ca81ee7c-3163-4246-af40-094cc31e5e42", - "name": "MySQL", - "dockerRepository": "airbyte/destination-mysql", - "dockerImageTag": "0.1.20", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mysql", - "icon": "mysql.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mysql", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "MySQL Destination Spec", - "type": "object", - "required": [ "host", "port", "username", "database" ], - "additionalProperties": true, - "properties": { - "host": { - "title": "Host", - "description": "Hostname of the database.", - "type": "string", - "order": 0 - }, - "port": { - "title": "Port", - "description": "Port of the database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 3306, - "examples": [ "3306" ], - "order": 1 - }, - "database": { - "title": "DB Name", - "description": "Name of the database.", - "type": "string", - "order": 2 - }, - "username": { - "title": "User", - "description": "Username to use to access the database.", - "type": "string", - "order": 3 - }, - "password": { - "title": "Password", - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 4 - }, - "ssl": { - "title": "SSL Connection", - "description": "Encrypt data using SSL.", - "type": "boolean", - "default": true, - "order": 5 - }, - "jdbc_url_params": { - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", - "title": "JDBC URL Params", - "type": "string", - "order": 6 - }, - "tunnel_method": { - "type": "object", - "title": "SSH Tunnel Method", - "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", - "oneOf": [ { - "title": "No Tunnel", - "required": [ "tunnel_method" ], - "properties": { - "tunnel_method": { - "description": "No ssh tunnel needed to connect to database", - "type": "string", - "const": "NO_TUNNEL", - "order": 0 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host.", - "type": "string", - "order": 3 - }, - "ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - }, { - "title": "Password Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host", - "type": "string", - "order": 3 - }, - "tunnel_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 4 - } - } - } ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": true, - "supportsDBT": true, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "normalizationConfig": { - "normalizationRepository": "airbyte/normalization-mysql", - "normalizationTag": "0.4.0", - "normalizationIntegrationType": "mysql" - }, - "supportsDbt": true - }, { - "destinationDefinitionId": "3986776d-2319-4de9-8af8-db14c0996e72", - "name": "Oracle", - "dockerRepository": "airbyte/destination-oracle", - "dockerImageTag": "0.1.19", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/oracle", - "icon": "oracle.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/oracle", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Oracle Destination Spec", - "type": "object", - "required": [ "host", "port", "username", "sid" ], - "additionalProperties": true, - "properties": { - "host": { - "title": "Host", - "description": "The hostname of the database.", - "type": "string", - "order": 0 - }, - "port": { - "title": "Port", - "description": "The port of the database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 1521, - "examples": [ "1521" ], - "order": 1 - }, - "sid": { - "title": "SID", - "description": "The System Identifier uniquely distinguishes the instance from any other instance on the same computer.", - "type": "string", - "order": 2 - }, - "username": { - "title": "User", - "description": "The username to access the database. This user must have CREATE USER privileges in the database.", - "type": "string", - "order": 3 - }, - "password": { - "title": "Password", - "description": "The password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 4 - }, - "jdbc_url_params": { - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", - "title": "JDBC URL Params", - "type": "string", - "order": 5 - }, - "schema": { - "title": "Default Schema", - "description": "The default schema is used as the target schema for all statements issued from the connection that do not explicitly specify a schema name. The usual value for this field is \"airbyte\". In Oracle, schemas and users are the same thing, so the \"user\" parameter is used as the login credentials and this is used for the default Airbyte message schema.", - "type": "string", - "examples": [ "airbyte" ], - "default": "airbyte", - "order": 6 - }, - "encryption": { - "title": "Encryption", - "type": "object", - "description": "The encryption method which is used when communicating with the database.", - "order": 7, - "oneOf": [ { - "title": "Unencrypted", - "description": "Data transfer will not be encrypted.", - "required": [ "encryption_method" ], - "properties": { - "encryption_method": { - "type": "string", - "const": "unencrypted", - "enum": [ "unencrypted" ], - "default": "unencrypted" - } - } - }, { - "title": "Native Network Encryption (NNE)", - "description": "The native network encryption gives you the ability to encrypt database connections, without the configuration overhead of TCP/IP and SSL/TLS and without the need to open and listen on different ports.", - "required": [ "encryption_method" ], - "properties": { - "encryption_method": { - "type": "string", - "const": "client_nne", - "enum": [ "client_nne" ], - "default": "client_nne" - }, - "encryption_algorithm": { - "type": "string", - "description": "This parameter defines the database encryption algorithm.", - "title": "Encryption Algorithm", - "default": "AES256", - "enum": [ "AES256", "RC4_56", "3DES168" ] - } - } - }, { - "title": "TLS Encrypted (verify certificate)", - "description": "Verify and use the certificate provided by the server.", - "required": [ "encryption_method", "ssl_certificate" ], - "properties": { - "encryption_method": { - "type": "string", - "const": "encrypted_verify_certificate", - "enum": [ "encrypted_verify_certificate" ], - "default": "encrypted_verify_certificate" - }, - "ssl_certificate": { - "title": "SSL PEM file", - "description": "Privacy Enhanced Mail (PEM) files are concatenated certificate containers frequently used in certificate installations.", - "type": "string", - "airbyte_secret": true, - "multiline": true - } - } - } ] - }, - "tunnel_method": { - "type": "object", - "title": "SSH Tunnel Method", - "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", - "oneOf": [ { - "title": "No Tunnel", - "required": [ "tunnel_method" ], - "properties": { - "tunnel_method": { - "description": "No ssh tunnel needed to connect to database", - "type": "string", - "const": "NO_TUNNEL", - "order": 0 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host.", - "type": "string", - "order": 3 - }, - "ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - }, { - "title": "Password Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host", - "type": "string", - "order": 3 - }, - "tunnel_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 4 - } - } - } ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "normalizationConfig": { - "normalizationRepository": "airbyte/normalization-oracle", - "normalizationTag": "0.4.0", - "normalizationIntegrationType": "oracle" - }, - "supportsDbt": true - }, { - "destinationDefinitionId": "25c5221d-dce2-4163-ade9-739ef790f503", - "name": "Postgres", - "dockerRepository": "airbyte/destination-postgres", - "dockerImageTag": "0.3.27", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/postgres", - "icon": "postgresql.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/postgres", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Postgres Destination Spec", - "type": "object", - "required": [ "host", "port", "username", "database", "schema" ], - "additionalProperties": true, - "properties": { - "host": { - "title": "Host", - "description": "Hostname of the database.", - "type": "string", - "order": 0 - }, - "port": { - "title": "Port", - "description": "Port of the database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 5432, - "examples": [ "5432" ], - "order": 1 - }, - "database": { - "title": "DB Name", - "description": "Name of the database.", - "type": "string", - "order": 2 - }, - "schema": { - "title": "Default Schema", - "description": "The default schema tables are written to if the source does not specify a namespace. The usual value for this field is \"public\".", - "type": "string", - "examples": [ "public" ], - "default": "public", - "order": 3 - }, - "username": { - "title": "User", - "description": "Username to use to access the database.", - "type": "string", - "order": 4 - }, - "password": { - "title": "Password", - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 5 - }, - "ssl": { - "title": "SSL Connection", - "description": "Encrypt data using SSL. When activating SSL, please select one of the connection modes.", - "type": "boolean", - "default": false, - "order": 6 - }, - "ssl_mode": { - "title": "SSL modes", - "description": "SSL connection modes. \n disable - Chose this mode to disable encryption of communication between Airbyte and destination database\n allow - Chose this mode to enable encryption only when required by the source database\n prefer - Chose this mode to allow unencrypted connection only if the source database does not support encryption\n require - Chose this mode to always require encryption. If the source database server does not support encryption, connection will fail\n verify-ca - Chose this mode to always require encryption and to verify that the source database server has a valid SSL certificate\n verify-full - This is the most secure mode. Chose this mode to always require encryption and to verify the identity of the source database server\n See more information - in the docs.", - "type": "object", - "order": 7, - "oneOf": [ { - "title": "disable", - "additionalProperties": false, - "description": "Disable SSL.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "disable", - "enum": [ "disable" ], - "default": "disable", - "order": 0 - } - } - }, { - "title": "allow", - "additionalProperties": false, - "description": "Allow SSL mode.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "allow", - "enum": [ "allow" ], - "default": "allow", - "order": 0 - } - } - }, { - "title": "prefer", - "additionalProperties": false, - "description": "Prefer SSL mode.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "prefer", - "enum": [ "prefer" ], - "default": "prefer", - "order": 0 - } - } - }, { - "title": "require", - "additionalProperties": false, - "description": "Require SSL mode.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "require", - "enum": [ "require" ], - "default": "require", - "order": 0 - } - } - }, { - "title": "verify-ca", - "additionalProperties": false, - "description": "Verify-ca SSL mode.", - "required": [ "mode", "ca_certificate" ], - "properties": { - "mode": { - "type": "string", - "const": "verify-ca", - "enum": [ "verify-ca" ], - "default": "verify-ca", - "order": 0 - }, - "ca_certificate": { - "type": "string", - "title": "CA certificate", - "description": "CA certificate", - "airbyte_secret": true, - "multiline": true, - "order": 1 - }, - "client_key_password": { - "type": "string", - "title": "Client key password", - "description": "Password for keystorage. This field is optional. If you do not add it - the password will be generated automatically.", - "airbyte_secret": true, - "order": 4 - } - } - }, { - "title": "verify-full", - "additionalProperties": false, - "description": "Verify-full SSL mode.", - "required": [ "mode", "ca_certificate", "client_certificate", "client_key" ], - "properties": { - "mode": { - "type": "string", - "const": "verify-full", - "enum": [ "verify-full" ], - "default": "verify-full", - "order": 0 - }, - "ca_certificate": { - "type": "string", - "title": "CA certificate", - "description": "CA certificate", - "airbyte_secret": true, - "multiline": true, - "order": 1 - }, - "client_certificate": { - "type": "string", - "title": "Client certificate", - "description": "Client certificate", - "airbyte_secret": true, - "multiline": true, - "order": 2 - }, - "client_key": { - "type": "string", - "title": "Client key", - "description": "Client key", - "airbyte_secret": true, - "multiline": true, - "order": 3 - }, - "client_key_password": { - "type": "string", - "title": "Client key password", - "description": "Password for keystorage. This field is optional. If you do not add it - the password will be generated automatically.", - "airbyte_secret": true, - "order": 4 - } - } - } ] - }, - "jdbc_url_params": { - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", - "title": "JDBC URL Params", - "type": "string", - "order": 8 - }, - "tunnel_method": { - "type": "object", - "title": "SSH Tunnel Method", - "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", - "oneOf": [ { - "title": "No Tunnel", - "required": [ "tunnel_method" ], - "properties": { - "tunnel_method": { - "description": "No ssh tunnel needed to connect to database", - "type": "string", - "const": "NO_TUNNEL", - "order": 0 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host.", - "type": "string", - "order": 3 - }, - "ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - }, { - "title": "Password Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host", - "type": "string", - "order": 3 - }, - "tunnel_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 4 - } - } - } ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": true, - "supportsDBT": true, - "supported_destination_sync_modes": [ "overwrite", "append", "append_dedup" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "normalizationConfig": { - "normalizationRepository": "airbyte/normalization", - "normalizationTag": "0.4.0", - "normalizationIntegrationType": "postgres" - }, - "supportsDbt": true - }, { - "destinationDefinitionId": "2340cbba-358e-11ec-8d3d-0242ac130203", - "name": "Pulsar", - "dockerRepository": "airbyte/destination-pulsar", - "dockerImageTag": "0.1.3", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/pulsar", - "icon": "pulsar.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/pulsar", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Pulsar Destination Spec", - "type": "object", - "required": [ "brokers", "use_tls", "topic_type", "topic_tenant", "topic_namespace", "topic_pattern", "compression_type", "send_timeout_ms", "max_pending_messages", "max_pending_messages_across_partitions", "batching_enabled", "batching_max_messages", "batching_max_publish_delay", "block_if_queue_full" ], - "additionalProperties": true, - "properties": { - "brokers": { - "title": "Pulsar brokers", - "description": "A list of host/port pairs to use for establishing the initial connection to the Pulsar cluster.", - "type": "string", - "examples": [ "broker1:6650,broker2:6650" ] - }, - "use_tls": { - "title": "Use TLS", - "description": "Whether to use TLS encryption on the connection.", - "type": "boolean", - "default": false - }, - "topic_type": { - "title": "Topic type", - "description": "It identifies type of topic. Pulsar supports two kind of topics: persistent and non-persistent. In persistent topic, all messages are durably persisted on disk (that means on multiple disks unless the broker is standalone), whereas non-persistent topic does not persist message into storage disk.", - "type": "string", - "default": "persistent", - "enum": [ "persistent", "non-persistent" ] - }, - "topic_tenant": { - "title": "Topic tenant", - "description": "The topic tenant within the instance. Tenants are essential to multi-tenancy in Pulsar, and spread across clusters.", - "type": "string", - "default": "public", - "examples": [ "public" ] - }, - "topic_namespace": { - "title": "Topic namespace", - "description": "The administrative unit of the topic, which acts as a grouping mechanism for related topics. Most topic configuration is performed at the namespace level. Each tenant has one or multiple namespaces.", - "type": "string", - "default": "default", - "examples": [ "default" ] - }, - "topic_pattern": { - "title": "Topic pattern", - "description": "Topic pattern in which the records will be sent. You can use patterns like '{namespace}' and/or '{stream}' to send the message to a specific topic based on these values. Notice that the topic name will be transformed to a standard naming convention.", - "type": "string", - "examples": [ "sample.topic", "{namespace}.{stream}.sample" ] - }, - "topic_test": { - "title": "Test topic", - "description": "Topic to test if Airbyte can produce messages.", - "type": "string", - "examples": [ "test.topic" ] - }, - "producer_name": { - "title": "Producer name", - "description": "Name for the producer. If not filled, the system will generate a globally unique name which can be accessed with.", - "type": "string", - "examples": [ "airbyte-producer" ] - }, - "producer_sync": { - "title": "Sync producer", - "description": "Wait synchronously until the record has been sent to Pulsar.", - "type": "boolean", - "default": false - }, - "compression_type": { - "title": "Compression type", - "description": "Compression type for the producer.", - "type": "string", - "default": "NONE", - "enum": [ "NONE", "LZ4", "ZLIB", "ZSTD", "SNAPPY" ] - }, - "send_timeout_ms": { - "title": "Message send timeout", - "description": "If a message is not acknowledged by a server before the send-timeout expires, an error occurs (in ms).", - "type": "integer", - "default": 30000 - }, - "max_pending_messages": { - "title": "Max pending messages", - "description": "The maximum size of a queue holding pending messages.", - "type": "integer", - "default": 1000 - }, - "max_pending_messages_across_partitions": { - "title": "Max pending messages across partitions", - "description": "The maximum number of pending messages across partitions.", - "type": "integer", - "default": 50000 - }, - "batching_enabled": { - "title": "Enable batching", - "description": "Control whether automatic batching of messages is enabled for the producer.", - "type": "boolean", - "default": true - }, - "batching_max_messages": { - "title": "Batching max messages", - "description": "Maximum number of messages permitted in a batch.", - "type": "integer", - "default": 1000 - }, - "batching_max_publish_delay": { - "title": "Batching max publish delay", - "description": " Time period in milliseconds within which the messages sent will be batched.", - "type": "integer", - "default": 1 - }, - "block_if_queue_full": { - "title": "Block if queue is full", - "description": "If the send operation should block when the outgoing message queue is full.", - "type": "boolean", - "default": false - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "e06ad785-ad6f-4647-b2e8-3027a5c59454", - "name": "RabbitMQ", - "dockerRepository": "airbyte/destination-rabbitmq", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/rabbitmq", - "icon": "pulsar.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/rabbitmq", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Destination Rabbitmq", - "type": "object", - "required": [ "host", "routing_key" ], - "additionalProperties": false, - "properties": { - "ssl": { - "type": "boolean", - "description": "SSL enabled.", - "default": true - }, - "host": { - "type": "string", - "description": "The RabbitMQ host name." - }, - "port": { - "type": "integer", - "description": "The RabbitMQ port." - }, - "virtual_host": { - "type": "string", - "description": "The RabbitMQ virtual host name." - }, - "username": { - "type": "string", - "description": "The username to connect." - }, - "password": { - "type": "string", - "title": "Password", - "description": "The password to connect.", - "airbyte_secret": true - }, - "exchange": { - "type": "string", - "description": "The exchange name." - }, - "routing_key": { - "type": "string", - "description": "The routing key." - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "d4d3fef9-e319-45c2-881a-bd02ce44cc9f", - "name": "Redis", - "dockerRepository": "airbyte/destination-redis", - "dockerImageTag": "0.1.4", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/redis", - "icon": "redis.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/redis", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Redis Destination Spec", - "type": "object", - "required": [ "host", "username", "port", "cache_type" ], - "additionalProperties": false, - "properties": { - "host": { - "title": "Host", - "description": "Redis host to connect to.", - "type": "string", - "examples": [ "localhost,127.0.0.1" ], - "order": 1 - }, - "port": { - "title": "Port", - "description": "Port of Redis.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 6379, - "order": 2 - }, - "username": { - "title": "Username", - "description": "Username associated with Redis.", - "type": "string", - "order": 3 - }, - "password": { - "title": "Password", - "description": "Password associated with Redis.", - "type": "string", - "airbyte_secret": true, - "order": 4 - }, - "ssl": { - "title": "SSL Connection", - "type": "boolean", - "description": "Indicates whether SSL encryption protocol will be used to connect to Redis. It is recommended to use SSL connection if possible.", - "default": false, - "order": 5 - }, - "ssl_mode": { - "title": "SSL Modes", - "description": "SSL connection modes. \n
  • verify-full - This is the most secure mode. Always require encryption and verifies the identity of the source database server", - "type": "object", - "order": 6, - "oneOf": [ { - "title": "disable", - "additionalProperties": false, - "description": "Disable SSL.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "disable", - "enum": [ "disable" ], - "default": "disable", - "order": 0 - } - } - }, { - "title": "verify-full", - "additionalProperties": false, - "description": "Verify-full SSL mode.", - "required": [ "mode", "ca_certificate", "client_certificate", "client_key" ], - "properties": { - "mode": { - "type": "string", - "const": "verify-full", - "enum": [ "verify-full" ], - "default": "verify-full", - "order": 0 - }, - "ca_certificate": { - "type": "string", - "title": "CA Certificate", - "description": "CA certificate", - "airbyte_secret": true, - "multiline": true, - "order": 1 - }, - "client_certificate": { - "type": "string", - "title": "Client Certificate", - "description": "Client certificate", - "airbyte_secret": true, - "multiline": true, - "order": 2 - }, - "client_key": { - "type": "string", - "title": "Client Key", - "description": "Client key", - "airbyte_secret": true, - "multiline": true, - "order": 3 - }, - "client_key_password": { - "type": "string", - "title": "Client key password", - "description": "Password for keystorage. If you do not add it - the password will be generated automatically.", - "airbyte_secret": true, - "order": 4 - } - } - } ] - }, - "cache_type": { - "title": "Cache type", - "type": "string", - "default": "hash", - "description": "Redis cache type to store data in.", - "enum": [ "hash" ], - "order": 7 - }, - "tunnel_method": { - "type": "object", - "title": "SSH Tunnel Method", - "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", - "oneOf": [ { - "title": "No Tunnel", - "required": [ "tunnel_method" ], - "properties": { - "tunnel_method": { - "description": "No ssh tunnel needed to connect to database", - "type": "string", - "const": "NO_TUNNEL", - "order": 0 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host.", - "type": "string", - "order": 3 - }, - "ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - }, { - "title": "Password Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host", - "type": "string", - "order": 3 - }, - "tunnel_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 4 - } - } - } ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "f7a7d195-377f-cf5b-70a5-be6b819019dc", - "name": "Redshift", - "dockerRepository": "airbyte/destination-redshift", - "dockerImageTag": "0.4.5", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/redshift", - "icon": "redshift.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/redshift", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Redshift Destination Spec", - "type": "object", - "required": [ "host", "port", "database", "username", "password", "schema" ], - "additionalProperties": true, - "properties": { - "host": { - "description": "Host Endpoint of the Redshift Cluster (must include the cluster-id, region and end with .redshift.amazonaws.com)", - "type": "string", - "title": "Host", - "order": 1 - }, - "port": { - "description": "Port of the database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 5439, - "examples": [ "5439" ], - "title": "Port", - "order": 2 - }, - "username": { - "description": "Username to use to access the database.", - "type": "string", - "title": "Username", - "order": 3 - }, - "password": { - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "title": "Password", - "order": 4 - }, - "database": { - "description": "Name of the database.", - "type": "string", - "title": "Database", - "order": 5 - }, - "schema": { - "description": "The default schema tables are written to if the source does not specify a namespace. Unless specifically configured, the usual value for this field is \"public\".", - "type": "string", - "examples": [ "public" ], - "default": "public", - "title": "Default Schema", - "order": 6 - }, - "jdbc_url_params": { - "title": "JDBC URL Params", - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", - "type": "string", - "order": 7 - }, - "uploading_method": { - "title": "Uploading Method", - "type": "object", - "description": "The method how the data will be uploaded to the database.", - "order": 8, - "oneOf": [ { - "title": "Standard", - "required": [ "method" ], - "properties": { - "method": { - "type": "string", - "const": "Standard" - } - } - }, { - "title": "S3 Staging", - "required": [ "method", "s3_bucket_name", "s3_bucket_region", "access_key_id", "secret_access_key" ], - "properties": { - "method": { - "type": "string", - "const": "S3 Staging" - }, - "s3_bucket_name": { - "title": "S3 Bucket Name", - "type": "string", - "description": "The name of the staging S3 bucket to use if utilising a COPY strategy. COPY is recommended for production workloads for better speed and scalability. See AWS docs for more details.", - "examples": [ "airbyte.staging" ] - }, - "s3_bucket_path": { - "title": "S3 Bucket Path", - "type": "string", - "description": "The directory under the S3 bucket where data will be written. If not provided, then defaults to the root directory. See path's name recommendations for more details.", - "examples": [ "data_sync/test" ] - }, - "s3_bucket_region": { - "title": "S3 Bucket Region", - "type": "string", - "default": "", - "description": "The region of the S3 staging bucket to use if utilising a COPY strategy. See AWS docs for details.", - "enum": [ "", "us-east-1", "us-east-2", "us-west-1", "us-west-2", "af-south-1", "ap-east-1", "ap-south-1", "ap-northeast-1", "ap-northeast-2", "ap-northeast-3", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "cn-north-1", "cn-northwest-1", "eu-central-1", "eu-north-1", "eu-south-1", "eu-west-1", "eu-west-2", "eu-west-3", "sa-east-1", "me-south-1" ] - }, - "file_name_pattern": { - "type": "string", - "description": "The pattern allows you to set the file-name format for the S3 staging file(s)", - "title": "S3 Filename pattern", - "examples": [ "{date}", "{date:yyyy_MM}", "{timestamp}", "{part_number}", "{sync_id}" ], - "order": 8 - }, - "access_key_id": { - "type": "string", - "description": "This ID grants access to the above S3 staging bucket. Airbyte requires Read and Write permissions to the given bucket. See AWS docs on how to generate an access key ID and secret access key.", - "title": "S3 Key Id", - "airbyte_secret": true - }, - "secret_access_key": { - "type": "string", - "description": "The corresponding secret to the above access key id. See AWS docs on how to generate an access key ID and secret access key.", - "title": "S3 Access Key", - "airbyte_secret": true - }, - "purge_staging_data": { - "title": "Purge Staging Files and Tables", - "type": "boolean", - "description": "Whether to delete the staging files from S3 after completing the sync. See docs for details.", - "default": true - }, - "encryption": { - "title": "Encryption", - "type": "object", - "description": "How to encrypt the staging data", - "default": { - "encryption_type": "none" - }, - "oneOf": [ { - "title": "No encryption", - "description": "Staging data will be stored in plaintext.", - "type": "object", - "required": [ "encryption_type" ], - "properties": { - "encryption_type": { - "type": "string", - "const": "none", - "enum": [ "none" ], - "default": "none" - } - } - }, { - "title": "AES-CBC envelope encryption", - "description": "Staging data will be encrypted using AES-CBC envelope encryption.", - "type": "object", - "required": [ "encryption_type" ], - "properties": { - "encryption_type": { - "type": "string", - "const": "aes_cbc_envelope", - "enum": [ "aes_cbc_envelope" ], - "default": "aes_cbc_envelope" - }, - "key_encrypting_key": { - "type": "string", - "title": "Key", - "description": "The key, base64-encoded. Must be either 128, 192, or 256 bits. Leave blank to have Airbyte generate an ephemeral key for each sync.", - "airbyte_secret": true - } - } - } ] - }, - "file_buffer_count": { - "title": "File Buffer Count", - "type": "integer", - "minimum": 10, - "maximum": 50, - "default": 10, - "description": "Number of file buffers allocated for writing data. Increasing this number is beneficial for connections using Change Data Capture (CDC) and up to the number of streams within a connection. Increasing the number of file buffers past the maximum number of streams has deteriorating effects", - "examples": [ "10" ] - } - } - } ] - }, - "tunnel_method": { - "type": "object", - "title": "SSH Tunnel Method", - "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", - "oneOf": [ { - "title": "No Tunnel", - "required": [ "tunnel_method" ], - "properties": { - "tunnel_method": { - "description": "No ssh tunnel needed to connect to database", - "type": "string", - "const": "NO_TUNNEL", - "order": 0 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host.", - "type": "string", - "order": 3 - }, - "ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - }, { - "title": "Password Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host", - "type": "string", - "order": 3 - }, - "tunnel_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 4 - } - } - } ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": true, - "supportsDBT": true, - "supported_destination_sync_modes": [ "overwrite", "append", "append_dedup" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "resourceRequirements": { - "jobSpecific": [ { - "jobType": "sync", - "resourceRequirements": { - "memory_request": "1Gi", - "memory_limit": "1Gi" - } - } ] - }, - "normalizationConfig": { - "normalizationRepository": "airbyte/normalization-redshift", - "normalizationTag": "0.4.0", - "normalizationIntegrationType": "redshift" - }, - "supportsDbt": true - }, { - "destinationDefinitionId": "825c5ee3-ed9a-4dd1-a2b6-79ed722f7b13", - "name": "Redpanda", - "dockerRepository": "airbyte/destination-redpanda", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/redpanda", - "icon": "redpanda.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/redpanda", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Redpanda destination connector", - "type": "object", - "required": [ "bootstrap_servers", "buffer_memory", "compression_type", "retries", "batch_size" ], - "properties": { - "bootstrap_servers": { - "title": "Bootstrap Servers", - "description": "A list of host/port pairs to use for establishing the initial connection to the Redpanda cluster. The client will make use of all servers irrespective of which servers are specified here for bootstrapping—this list only impacts the initial hosts used to discover the full set of servers. This list should be in the form host1:port1,host2:port2,.... Since these servers are just used for the initial connection to discover the full cluster membership (which may change dynamically), this list need not contain the full set of servers (you may want more than one, though, in case a server is down).", - "type": "string", - "examples": [ "redpanda-broker1:9092,redpanda-broker2:9092" ] - }, - "buffer_memory": { - "title": "Buffer Memory", - "description": "The total bytes of memory the producer can use to buffer records waiting to be sent to the server.", - "type": "string", - "examples": 33554432 - }, - "compression_type": { - "title": "Compression Type", - "description": "The compression type for all data generated by the producer.", - "type": "string", - "default": "none", - "enum": [ "none", "gzip", "snappy", "lz4", "zstd" ] - }, - "batch_size": { - "title": "Batch Size", - "description": "The producer will attempt to batch records together into fewer requests whenever multiple records are being sent to the same partition.", - "type": "integer", - "examples": [ 16384 ] - }, - "retries": { - "title": "Retries", - "description": "Setting a value greater than zero will cause the client to resend any record whose send fails with a potentially transient error.", - "type": "integer", - "examples": [ 2147483647 ] - }, - "topic_num_partitions": { - "title": "Number of topic partitions", - "description": "The number of topic partitions which will be created on topic creation", - "type": "integer", - "examples": [ 10 ] - }, - "topic_replication_factor": { - "title": "Topic replication factor", - "description": "The number of topics to which messages will be replicated", - "type": "integer", - "examples": [ 10 ] - }, - "socket_connection_setup_timeout_ms": { - "title": "Socket Connection Setup Timeout", - "description": "The amount of time the client will wait for the socket connection to be established.", - "type": "integer", - "examples": [ 10000 ] - }, - "socket_connection_setup_timeout_max_ms": { - "title": "Socket Connection Setup Max Timeout", - "description": "The maximum amount of time the client will wait for the socket connection to be established. The connection setup timeout will increase exponentially for each consecutive connection failure up to this maximum.", - "type": "integer", - "examples": [ 30000 ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "2c9d93a7-9a17-4789-9de9-f46f0097eb70", - "name": "Rockset", - "dockerRepository": "airbyte/destination-rockset", - "dockerImageTag": "0.1.4", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/rockset", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/rockset", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Rockset Destination Spec", - "type": "object", - "required": [ "api_key", "workspace" ], - "additionalProperties": false, - "properties": { - "api_key": { - "title": "Api Key", - "description": "Rockset api key", - "type": "string", - "order": 0, - "airbyte_secret": true - }, - "workspace": { - "title": "Workspace", - "description": "The Rockset workspace in which collections will be created + written to.", - "type": "string", - "examples": [ "commons", "my_workspace" ], - "default": "commons", - "airbyte_secret": false, - "order": 1 - }, - "api_server": { - "title": "Api Server", - "description": "Rockset api URL", - "type": "string", - "airbyte_secret": false, - "default": "https://api.rs2.usw2.rockset.com", - "pattern": "^https:\\/\\/.*.rockset.com$", - "order": 2 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "append", "overwrite" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "4816b78f-1489-44c1-9060-4b19d5fa9362", - "name": "S3", - "dockerRepository": "airbyte/destination-s3", - "dockerImageTag": "0.3.23", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/s3", - "icon": "s3.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/s3", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "S3 Destination Spec", - "type": "object", - "required": [ "s3_bucket_name", "s3_bucket_path", "s3_bucket_region", "format" ], - "properties": { - "access_key_id": { - "type": "string", - "description": "The access key ID to access the S3 bucket. Airbyte requires Read and Write permissions to the given bucket. Read more here.", - "title": "S3 Key ID", - "airbyte_secret": true, - "examples": [ "A012345678910EXAMPLE" ], - "order": 0 - }, - "secret_access_key": { - "type": "string", - "description": "The corresponding secret to the access key ID. Read more here", - "title": "S3 Access Key", - "airbyte_secret": true, - "examples": [ "a012345678910ABCDEFGH/AbCdEfGhEXAMPLEKEY" ], - "order": 1 - }, - "s3_bucket_name": { - "title": "S3 Bucket Name", - "type": "string", - "description": "The name of the S3 bucket. Read more here.", - "examples": [ "airbyte_sync" ], - "order": 2 - }, - "s3_bucket_path": { - "title": "S3 Bucket Path", - "description": "Directory under the S3 bucket where data will be written. Read more here", - "type": "string", - "examples": [ "data_sync/test" ], - "order": 3 - }, - "s3_bucket_region": { - "title": "S3 Bucket Region", - "type": "string", - "default": "", - "description": "The region of the S3 bucket. See here for all region codes.", - "enum": [ "", "us-east-1", "us-east-2", "us-west-1", "us-west-2", "af-south-1", "ap-east-1", "ap-south-1", "ap-northeast-1", "ap-northeast-2", "ap-northeast-3", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "cn-north-1", "cn-northwest-1", "eu-central-1", "eu-north-1", "eu-south-1", "eu-west-1", "eu-west-2", "eu-west-3", "sa-east-1", "me-south-1", "us-gov-east-1", "us-gov-west-1" ], - "order": 4 - }, - "format": { - "title": "Output Format", - "type": "object", - "description": "Format of the data output. See here for more details", - "oneOf": [ { - "title": "Avro: Apache Avro", - "required": [ "format_type", "compression_codec" ], - "properties": { - "format_type": { - "title": "Format Type", - "type": "string", - "enum": [ "Avro" ], - "default": "Avro", - "order": 0 - }, - "compression_codec": { - "title": "Compression Codec", - "description": "The compression algorithm used to compress data. Default to no compression.", - "type": "object", - "oneOf": [ { - "title": "No Compression", - "required": [ "codec" ], - "properties": { - "codec": { - "type": "string", - "enum": [ "no compression" ], - "default": "no compression" - } - } - }, { - "title": "Deflate", - "required": [ "codec", "compression_level" ], - "properties": { - "codec": { - "type": "string", - "enum": [ "Deflate" ], - "default": "Deflate" - }, - "compression_level": { - "title": "Deflate Level", - "description": "0: no compression & fastest, 9: best compression & slowest.", - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 9 - } - } - }, { - "title": "bzip2", - "required": [ "codec" ], - "properties": { - "codec": { - "type": "string", - "enum": [ "bzip2" ], - "default": "bzip2" - } - } - }, { - "title": "xz", - "required": [ "codec", "compression_level" ], - "properties": { - "codec": { - "type": "string", - "enum": [ "xz" ], - "default": "xz" - }, - "compression_level": { - "title": "Compression Level", - "description": "See here for details.", - "type": "integer", - "default": 6, - "minimum": 0, - "maximum": 9 - } - } - }, { - "title": "zstandard", - "required": [ "codec", "compression_level" ], - "properties": { - "codec": { - "type": "string", - "enum": [ "zstandard" ], - "default": "zstandard" - }, - "compression_level": { - "title": "Compression Level", - "description": "Negative levels are 'fast' modes akin to lz4 or snappy, levels above 9 are generally for archival purposes, and levels above 18 use a lot of memory.", - "type": "integer", - "default": 3, - "minimum": -5, - "maximum": 22 - }, - "include_checksum": { - "title": "Include Checksum", - "description": "If true, include a checksum with each data block.", - "type": "boolean", - "default": false - } - } - }, { - "title": "snappy", - "required": [ "codec" ], - "properties": { - "codec": { - "type": "string", - "enum": [ "snappy" ], - "default": "snappy" - } - } - } ], - "order": 1 - } - } - }, { - "title": "CSV: Comma-Separated Values", - "required": [ "format_type", "flattening" ], - "properties": { - "format_type": { - "title": "Format Type", - "type": "string", - "enum": [ "CSV" ], - "default": "CSV" - }, - "flattening": { - "type": "string", - "title": "Flattening", - "description": "Whether the input json data should be normalized (flattened) in the output CSV. Please refer to docs for details.", - "default": "No flattening", - "enum": [ "No flattening", "Root level flattening" ] - }, - "compression": { - "title": "Compression", - "type": "object", - "description": "Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \".csv.gz\").", - "oneOf": [ { - "title": "No Compression", - "requires": [ "compression_type" ], - "properties": { - "compression_type": { - "type": "string", - "enum": [ "No Compression" ], - "default": "No Compression" - } - } - }, { - "title": "GZIP", - "requires": [ "compression_type" ], - "properties": { - "compression_type": { - "type": "string", - "enum": [ "GZIP" ], - "default": "GZIP" - } - } - } ] - } - } - }, { - "title": "JSON Lines: Newline-delimited JSON", - "required": [ "format_type" ], - "properties": { - "format_type": { - "title": "Format Type", - "type": "string", - "enum": [ "JSONL" ], - "default": "JSONL" - }, - "flattening": { - "type": "string", - "title": "Flattening", - "description": "Whether the input json data should be normalized (flattened) in the output JSON Lines. Please refer to docs for details.", - "default": "No flattening", - "enum": [ "No flattening", "Root level flattening" ] - }, - "compression": { - "title": "Compression", - "type": "object", - "description": "Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \".jsonl.gz\").", - "oneOf": [ { - "title": "No Compression", - "requires": "compression_type", - "properties": { - "compression_type": { - "type": "string", - "enum": [ "No Compression" ], - "default": "No Compression" - } - } - }, { - "title": "GZIP", - "requires": "compression_type", - "properties": { - "compression_type": { - "type": "string", - "enum": [ "GZIP" ], - "default": "GZIP" - } - } - } ] - } - } - }, { - "title": "Parquet: Columnar Storage", - "required": [ "format_type" ], - "properties": { - "format_type": { - "title": "Format Type", - "type": "string", - "enum": [ "Parquet" ], - "default": "Parquet" - }, - "compression_codec": { - "title": "Compression Codec", - "description": "The compression algorithm used to compress data pages.", - "type": "string", - "enum": [ "UNCOMPRESSED", "SNAPPY", "GZIP", "LZO", "BROTLI", "LZ4", "ZSTD" ], - "default": "UNCOMPRESSED" - }, - "block_size_mb": { - "title": "Block Size (Row Group Size) (MB)", - "description": "This is the size of a row group being buffered in memory. It limits the memory usage when writing. Larger values will improve the IO when reading, but consume more memory when writing. Default: 128 MB.", - "type": "integer", - "default": 128, - "examples": [ 128 ] - }, - "max_padding_size_mb": { - "title": "Max Padding Size (MB)", - "description": "Maximum size allowed as padding to align row groups. This is also the minimum size of a row group. Default: 8 MB.", - "type": "integer", - "default": 8, - "examples": [ 8 ] - }, - "page_size_kb": { - "title": "Page Size (KB)", - "description": "The page size is for compression. A block is composed of pages. A page is the smallest unit that must be read fully to access a single record. If this value is too small, the compression will deteriorate. Default: 1024 KB.", - "type": "integer", - "default": 1024, - "examples": [ 1024 ] - }, - "dictionary_page_size_kb": { - "title": "Dictionary Page Size (KB)", - "description": "There is one dictionary page per column per row group when dictionary encoding is used. The dictionary page size works like the page size but for dictionary. Default: 1024 KB.", - "type": "integer", - "default": 1024, - "examples": [ 1024 ] - }, - "dictionary_encoding": { - "title": "Dictionary Encoding", - "description": "Default: true.", - "type": "boolean", - "default": true - } - } - } ], - "order": 5 - }, - "s3_endpoint": { - "title": "Endpoint", - "type": "string", - "default": "", - "description": "Your S3 endpoint url. Read more here", - "examples": [ "http://localhost:9000" ], - "order": 6 - }, - "s3_path_format": { - "title": "S3 Path Format", - "description": "Format string on how data will be organized inside the S3 bucket directory. Read more here", - "type": "string", - "examples": [ "${NAMESPACE}/${STREAM_NAME}/${YEAR}_${MONTH}_${DAY}_${EPOCH}_" ], - "order": 7 - }, - "file_name_pattern": { - "type": "string", - "description": "The pattern allows you to set the file-name format for the S3 staging file(s)", - "title": "S3 Filename pattern", - "examples": [ "{date}", "{date:yyyy_MM}", "{timestamp}", "{part_number}", "{sync_id}" ], - "order": 8 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "resourceRequirements": { - "jobSpecific": [ { - "jobType": "sync", - "resourceRequirements": { - "memory_request": "1Gi", - "memory_limit": "1Gi" - } - } ] - } - }, { - "destinationDefinitionId": "471e5cab-8ed1-49f3-ba11-79c687784737", - "name": "S3 Glue", - "dockerRepository": "airbyte/destination-s3-glue", - "dockerImageTag": "0.1.6", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/s3-glue", - "icon": "s3-glue.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/s3-glue", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "S3 Destination Spec", - "type": "object", - "required": [ "s3_bucket_name", "s3_bucket_path", "s3_bucket_region", "format", "glue_database", "glue_serialization_library" ], - "properties": { - "access_key_id": { - "type": "string", - "description": "The access key ID to access the S3 bucket. Airbyte requires Read and Write permissions to the given bucket. Read more here.", - "title": "S3 Key ID", - "airbyte_secret": true, - "examples": [ "A012345678910EXAMPLE" ], - "order": 0 - }, - "secret_access_key": { - "type": "string", - "description": "The corresponding secret to the access key ID. Read more here", - "title": "S3 Access Key", - "airbyte_secret": true, - "examples": [ "a012345678910ABCDEFGH/AbCdEfGhEXAMPLEKEY" ], - "order": 1 - }, - "s3_bucket_name": { - "title": "S3 Bucket Name", - "type": "string", - "description": "The name of the S3 bucket. Read more here.", - "examples": [ "airbyte_sync" ], - "order": 2 - }, - "s3_bucket_path": { - "title": "S3 Bucket Path", - "description": "Directory under the S3 bucket where data will be written. Read more here", - "type": "string", - "examples": [ "data_sync/test" ], - "order": 3 - }, - "s3_bucket_region": { - "title": "S3 Bucket Region", - "type": "string", - "default": "", - "description": "The region of the S3 bucket. See here for all region codes.", - "enum": [ "", "us-east-1", "us-east-2", "us-west-1", "us-west-2", "af-south-1", "ap-east-1", "ap-south-1", "ap-northeast-1", "ap-northeast-2", "ap-northeast-3", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "cn-north-1", "cn-northwest-1", "eu-central-1", "eu-north-1", "eu-south-1", "eu-west-1", "eu-west-2", "eu-west-3", "sa-east-1", "me-south-1", "us-gov-east-1", "us-gov-west-1" ], - "order": 4 - }, - "format": { - "title": "Output Format", - "type": "object", - "description": "Format of the data output. See here for more details", - "oneOf": [ { - "title": "JSON Lines: Newline-delimited JSON", - "required": [ "format_type" ], - "properties": { - "format_type": { - "title": "Format Type", - "type": "string", - "enum": [ "JSONL" ], - "default": "JSONL" - }, - "compression": { - "title": "Compression", - "type": "object", - "description": "Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \".jsonl.gz\").", - "oneOf": [ { - "title": "No Compression", - "requires": "compression_type", - "properties": { - "compression_type": { - "type": "string", - "enum": [ "No Compression" ], - "default": "No Compression" - } - } - }, { - "title": "GZIP", - "requires": "compression_type", - "properties": { - "compression_type": { - "type": "string", - "enum": [ "GZIP" ], - "default": "GZIP" - } - } - } ] - }, - "flattening": { - "type": "string", - "title": "Flattening", - "description": "Whether the input json data should be normalized (flattened) in the output JSON Lines. Please refer to docs for details.", - "default": "Root level flattening", - "enum": [ "No flattening", "Root level flattening" ] - } - } - } ], - "order": 5 - }, - "s3_endpoint": { - "title": "Endpoint", - "type": "string", - "default": "", - "description": "Your S3 endpoint url. Read more here", - "examples": [ "http://localhost:9000" ], - "order": 6 - }, - "s3_path_format": { - "title": "S3 Path Format", - "description": "Format string on how data will be organized inside the S3 bucket directory. Read more here", - "type": "string", - "examples": [ "${NAMESPACE}/${STREAM_NAME}/${YEAR}_${MONTH}_${DAY}_${EPOCH}_" ], - "order": 7 - }, - "file_name_pattern": { - "type": "string", - "description": "The pattern allows you to set the file-name format for the S3 staging file(s)", - "title": "S3 Filename pattern", - "examples": [ "{date}", "{date:yyyy_MM}", "{timestamp}", "{part_number}", "{sync_id}" ], - "order": 8 - }, - "glue_database": { - "type": "string", - "description": "Name of the glue database for creating the tables, leave blank if no integration", - "title": "Glue database name", - "examples": [ "airbyte_database" ], - "order": 9 - }, - "glue_serialization_library": { - "title": "Serialization Library", - "description": "The library that your query engine will use for reading and writing data in your lake.", - "type": "string", - "enum": [ "org.openx.data.jsonserde.JsonSerDe", "org.apache.hive.hcatalog.data.JsonSerDe" ], - "default": "org.openx.data.jsonserde.JsonSerDe", - "order": 10 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "50a559a7-6323-4e33-8aa0-51dfd9dfadac", - "name": "SelectDB", - "dockerRepository": "airbyte/destination-selectdb", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/selectdb", - "icon": "select.db", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/selectdb", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "SelectDB Destination Spec", - "type": "object", - "required": [ "load_url", "jdbc_url", "cluster_name", "user_name", "password", "database" ], - "properties": { - "load_url": { - "title": "loadURL", - "description": "load host and port: xxx.privatelink.aliyun.com:47057", - "type": "string", - "order": 0 - }, - "jdbc_url": { - "title": "jdbcURL", - "description": "jdbc host and port: xxx.privatelink.aliyun.com:30523", - "type": "string", - "order": 1 - }, - "cluster_name": { - "title": "ClusterName", - "description": "clusterName of SelectDB", - "type": "string", - "order": 2 - }, - "user_name": { - "title": "UserName", - "description": "Username to use to access the database.", - "type": "string", - "order": 3 - }, - "password": { - "title": "Password", - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 4 - }, - "database": { - "title": "DataBase Name", - "description": "Name of the database.", - "type": "string", - "order": 5 - } - } - }, - "supportsIncremental": false, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "append", "overwrite" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "e9810f61-4bab-46d2-bb22-edfc902e0644", - "name": "SFTP-JSON", - "dockerRepository": "airbyte/destination-sftp-json", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/sftp-json", - "icon": "sftp.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/sftp-json", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Destination SFTP JSON", - "type": "object", - "required": [ "host", "username", "password", "destination_path" ], - "additionalProperties": false, - "properties": { - "host": { - "title": "Host", - "description": "Hostname of the SFTP server.", - "type": "string", - "order": 0 - }, - "port": { - "title": "Port", - "description": "Port of the SFTP server.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ 22 ], - "order": 1 - }, - "username": { - "title": "User", - "description": "Username to use to access the SFTP server.", - "type": "string", - "order": 2 - }, - "password": { - "title": "Password", - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 3 - }, - "destination_path": { - "title": "Destination path", - "type": "string", - "description": "Path to the directory where json files will be written.", - "examples": [ "/json_data" ], - "order": 4 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "424892c4-daac-4491-b35d-c6688ba547ba", - "name": "Snowflake", - "dockerRepository": "airbyte/destination-snowflake", - "dockerImageTag": "0.4.61", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/snowflake", - "icon": "snowflake.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/snowflake", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Snowflake Destination Spec", - "type": "object", - "required": [ "host", "role", "warehouse", "database", "schema", "username" ], - "additionalProperties": true, - "properties": { - "host": { - "description": "Enter your Snowflake account's locator (in the format ...snowflakecomputing.com)", - "examples": [ "accountname.us-east-2.aws.snowflakecomputing.com", "accountname.snowflakecomputing.com" ], - "type": "string", - "title": "Host", - "pattern": "^(http(s)?:\\/\\/)?([^./?#]+\\.)?([^./?#]+\\.)?([^./?#]+\\.)?([^./?#]+\\.snowflakecomputing\\.com)$", - "pattern_descriptor": "{account_name}.snowflakecomputing.com or {accountname}.{aws_location}.aws.snowflakecomputing.com", - "order": 0 - }, - "role": { - "description": "Enter the role that you want to use to access Snowflake", - "examples": [ "AIRBYTE_ROLE" ], - "type": "string", - "title": "Role", - "order": 1 - }, - "warehouse": { - "description": "Enter the name of the warehouse that you want to sync data into", - "examples": [ "AIRBYTE_WAREHOUSE" ], - "type": "string", - "title": "Warehouse", - "order": 2 - }, - "database": { - "description": "Enter the name of the database you want to sync data into", - "examples": [ "AIRBYTE_DATABASE" ], - "type": "string", - "title": "Database", - "order": 3 - }, - "schema": { - "description": "Enter the name of the default schema", - "examples": [ "AIRBYTE_SCHEMA" ], - "type": "string", - "title": "Default Schema", - "order": 4 - }, - "username": { - "description": "Enter the name of the user you want to use to access the database", - "examples": [ "AIRBYTE_USER" ], - "type": "string", - "title": "Username", - "order": 5 - }, - "credentials": { - "title": "Authorization Method", - "description": "", - "type": "object", - "oneOf": [ { - "title": "OAuth2.0", - "type": "object", - "order": 0, - "required": [ "access_token", "refresh_token" ], - "properties": { - "auth_type": { - "type": "string", - "const": "OAuth2.0", - "enum": [ "OAuth2.0" ], - "default": "OAuth2.0", - "order": 0 - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "Enter your application's Client ID", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "Enter your application's Client secret", - "airbyte_secret": true - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "Enter you application's Access Token", - "airbyte_secret": true - }, - "refresh_token": { - "type": "string", - "title": "Refresh Token", - "description": "Enter your application's Refresh Token", - "airbyte_secret": true - } - } - }, { - "title": "Key Pair Authentication", - "type": "object", - "order": 1, - "required": [ "private_key" ], - "properties": { - "auth_type": { - "type": "string", - "const": "Key Pair Authentication", - "enum": [ "Key Pair Authentication" ], - "default": "Key Pair Authentication", - "order": 0 - }, - "private_key": { - "type": "string", - "title": "Private Key", - "description": "RSA Private key to use for Snowflake connection. See the docs for more information on how to obtain this key.", - "multiline": true, - "airbyte_secret": true - }, - "private_key_password": { - "type": "string", - "title": "Passphrase", - "description": "Passphrase for private key", - "airbyte_secret": true - } - } - }, { - "title": "Username and Password", - "type": "object", - "required": [ "password" ], - "order": 2, - "properties": { - "auth_type": { - "type": "string", - "const": "Username and Password", - "enum": [ "Username and Password" ], - "default": "Username and Password", - "order": 0 - }, - "password": { - "description": "Enter the password associated with the username.", - "type": "string", - "airbyte_secret": true, - "title": "Password", - "order": 1 - } - } - } ], - "order": 6 - }, - "jdbc_url_params": { - "description": "Enter the additional properties to pass to the JDBC URL string when connecting to the database (formatted as key=value pairs separated by the symbol &). Example: key1=value1&key2=value2&key3=value3", - "title": "JDBC URL Params", - "type": "string", - "order": 7 - }, - "loading_method": { - "type": "object", - "title": "Data Staging Method", - "description": "Select a data staging method", - "order": 8, - "oneOf": [ { - "title": "Select another option", - "description": "Select another option", - "required": [ "method" ], - "properties": { - "method": { - "title": "", - "description": "", - "type": "string", - "enum": [ "Standard" ], - "default": "Standard" - } - } - }, { - "title": "[Recommended] Internal Staging", - "description": "Recommended for large production workloads for better speed and scalability.", - "required": [ "method" ], - "properties": { - "method": { - "title": "", - "description": "", - "type": "string", - "enum": [ "Internal Staging" ], - "default": "Internal Staging" - } - } - }, { - "title": "AWS S3 Staging", - "description": "Recommended for large production workloads for better speed and scalability.", - "required": [ "method", "s3_bucket_name", "access_key_id", "secret_access_key" ], - "properties": { - "method": { - "title": "", - "description": "", - "type": "string", - "enum": [ "S3 Staging" ], - "default": "S3 Staging", - "order": 0 - }, - "s3_bucket_name": { - "title": "S3 Bucket Name", - "type": "string", - "description": "Enter your S3 bucket name", - "examples": [ "airbyte.staging" ], - "order": 1 - }, - "s3_bucket_region": { - "title": "S3 Bucket Region", - "type": "string", - "default": "", - "description": "Enter the region where your S3 bucket resides", - "enum": [ "", "us-east-1", "us-east-2", "us-west-1", "us-west-2", "af-south-1", "ap-east-1", "ap-south-1", "ap-northeast-1", "ap-northeast-2", "ap-northeast-3", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "cn-north-1", "cn-northwest-1", "eu-central-1", "eu-west-1", "eu-west-2", "eu-west-3", "eu-south-1", "eu-north-1", "sa-east-1", "me-south-1" ], - "order": 2 - }, - "access_key_id": { - "type": "string", - "description": "Enter your AWS access key ID. Airbyte requires Read and Write permissions on your S3 bucket ", - "title": "AWS access key ID", - "airbyte_secret": true, - "order": 3 - }, - "secret_access_key": { - "type": "string", - "description": "Enter your AWS secret access key", - "title": "AWS secret access key", - "airbyte_secret": true, - "order": 4 - }, - "purge_staging_data": { - "title": "Purge Staging Files and Tables", - "type": "boolean", - "description": "Toggle to delete staging files from the S3 bucket after a successful sync", - "default": true, - "order": 5 - }, - "encryption": { - "title": "Encryption", - "type": "object", - "description": "Choose a data encryption method for the staging data", - "default": { - "encryption_type": "none" - }, - "order": 6, - "oneOf": [ { - "title": "No encryption", - "description": "Staging data will be stored in plaintext.", - "type": "object", - "required": [ "encryption_type" ], - "properties": { - "encryption_type": { - "type": "string", - "const": "none", - "enum": [ "none" ], - "default": "none" - } - } - }, { - "title": "AES-CBC envelope encryption", - "description": "Staging data will be encrypted using AES-CBC envelope encryption.", - "type": "object", - "required": [ "encryption_type" ], - "properties": { - "encryption_type": { - "type": "string", - "const": "aes_cbc_envelope", - "enum": [ "aes_cbc_envelope" ], - "default": "aes_cbc_envelope" - }, - "key_encrypting_key": { - "type": "string", - "title": "Key", - "description": "The key, base64-encoded. Must be either 128, 192, or 256 bits. Leave blank to have Airbyte generate an ephemeral key for each sync.", - "airbyte_secret": true - } - } - } ] - }, - "file_name_pattern": { - "type": "string", - "description": "The pattern allows you to set the file-name format for the S3 staging file(s)", - "title": "S3 Filename pattern", - "examples": [ "{date}", "{date:yyyy_MM}", "{timestamp}", "{part_number}", "{sync_id}" ], - "order": 7 - } - } - }, { - "title": "Google Cloud Storage Staging", - "description": "Recommended for large production workloads for better speed and scalability.", - "required": [ "method", "project_id", "bucket_name", "credentials_json" ], - "properties": { - "method": { - "title": "", - "description": "", - "type": "string", - "enum": [ "GCS Staging" ], - "default": "GCS Staging", - "order": 0 - }, - "project_id": { - "title": "Google Cloud project ID", - "type": "string", - "description": "Enter the Google Cloud project ID", - "examples": [ "my-project" ], - "order": 1 - }, - "bucket_name": { - "title": "Cloud Storage bucket name", - "type": "string", - "description": "Enter the Cloud Storage bucket name", - "examples": [ "airbyte-staging" ], - "order": 2 - }, - "credentials_json": { - "title": "Google Application Credentials", - "type": "string", - "description": "Enter your Google Cloud service account key in the JSON format with read/write access to your Cloud Storage staging bucket", - "airbyte_secret": true, - "multiline": true, - "order": 3 - } - } - }, { - "title": "Azure Blob Storage Staging", - "description": "Recommended for large production workloads for better speed and scalability.", - "required": [ "method", "azure_blob_storage_account_name", "azure_blob_storage_container_name", "azure_blob_storage_sas_token" ], - "properties": { - "method": { - "title": "", - "description": "", - "type": "string", - "enum": [ "Azure Blob Staging" ], - "default": "Azure Blob Staging", - "order": 0 - }, - "azure_blob_storage_endpoint_domain_name": { - "title": "Azure Blob Storage Endpoint", - "type": "string", - "default": "blob.core.windows.net", - "description": "Enter the Azure Blob Storage endpoint domain name", - "examples": [ "blob.core.windows.net" ], - "order": 1 - }, - "azure_blob_storage_account_name": { - "title": "Azure Blob Storage account name", - "type": "string", - "description": "Enter your Azure Blob Storage account name", - "examples": [ "airbyte5storage" ], - "order": 2 - }, - "azure_blob_storage_container_name": { - "title": "Azure Blob Storage Container Name", - "type": "string", - "description": "Enter your Azure Blob Storage container name", - "examples": [ "airbytetestcontainername" ], - "order": 3 - }, - "azure_blob_storage_sas_token": { - "title": "SAS Token", - "type": "string", - "airbyte_secret": true, - "description": "Enter the Shared access signature (SAS) token to grant Snowflake limited access to objects in your Azure Blob Storage account", - "examples": [ "?sv=2016-05-31&ss=b&srt=sco&sp=rwdl&se=2018-06-27T10:05:50Z&st=2017-06-27T02:05:50Z&spr=https,http&sig=bgqQwoXwxzuD2GJfagRg7VOS8hzNr3QLT7rhS8OFRLQ%3D" ], - "order": 4 - } - } - } ] - }, - "file_buffer_count": { - "title": "File Buffer Count", - "type": "integer", - "minimum": 10, - "maximum": 50, - "default": 10, - "description": "Number of file buffers allocated for writing data. Increasing this number is beneficial for connections using Change Data Capture (CDC) and up to the number of streams within a connection. Increasing the number of file buffers past the maximum number of streams has deteriorating effects", - "examples": [ "10" ], - "order": 9 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": true, - "supportsDBT": true, - "supported_destination_sync_modes": [ "overwrite", "append", "append_dedup" ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "auth_type" ], - "predicate_value": "OAuth2.0", - "oauth_config_specification": { - "oauth_user_input_from_connector_config_specification": { - "type": "object", - "properties": { - "host": { - "type": "string", - "path_in_connector_config": [ "host" ] - } - } - }, - "complete_oauth_output_specification": { - "type": "object", - "properties": { - "access_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "access_token" ] - }, - "refresh_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "refresh_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "resourceRequirements": { - "jobSpecific": [ { - "jobType": "sync", - "resourceRequirements": { - "memory_request": "1Gi", - "memory_limit": "1Gi" - } - } ] - }, - "normalizationConfig": { - "normalizationRepository": "airbyte/normalization-snowflake", - "normalizationTag": "0.4.0", - "normalizationIntegrationType": "snowflake" - }, - "supportsDbt": true - }, { - "destinationDefinitionId": "294a4790-429b-40ae-9516-49826b9702e1", - "name": "MariaDB ColumnStore", - "dockerRepository": "airbyte/destination-mariadb-columnstore", - "dockerImageTag": "0.1.7", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mariadb-columnstore", - "icon": "mariadb.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mariadb-columnstore", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "MariaDB Columnstore Destination Spec", - "type": "object", - "required": [ "host", "port", "username", "database" ], - "additionalProperties": true, - "properties": { - "host": { - "title": "Host", - "description": "The Hostname of the database.", - "type": "string", - "order": 0 - }, - "port": { - "title": "Port", - "description": "The Port of the database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 3306, - "examples": [ "3306" ], - "order": 1 - }, - "database": { - "title": "Database", - "description": "Name of the database.", - "type": "string", - "order": 2 - }, - "username": { - "title": "Username", - "description": "The Username which is used to access the database.", - "type": "string", - "order": 3 - }, - "password": { - "title": "Password", - "description": "The Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 4 - }, - "jdbc_url_params": { - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", - "title": "JDBC URL Params", - "type": "string", - "order": 5 - }, - "tunnel_method": { - "type": "object", - "title": "SSH Tunnel Method", - "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", - "oneOf": [ { - "title": "No Tunnel", - "required": [ "tunnel_method" ], - "properties": { - "tunnel_method": { - "description": "No ssh tunnel needed to connect to database", - "type": "string", - "const": "NO_TUNNEL", - "order": 0 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host.", - "type": "string", - "order": 3 - }, - "ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - }, { - "title": "Password Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host", - "type": "string", - "order": 3 - }, - "tunnel_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 4 - } - } - } ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "eebd85cf-60b2-4af6-9ba0-edeca01437b0", - "name": "Streamr", - "dockerRepository": "ghcr.io/devmate-cloud/streamr-airbyte-connectors", - "dockerImageTag": "0.0.1", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/streamr", - "icon": "streamr.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/streamr", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Destination Streamr", - "type": "object", - "required": [ "privateKey", "streamId" ], - "additionalProperties": false, - "properties": { - "privateKey": { - "type": "string", - "description": "You private key on Streamr", - "airbyte_secret": true - }, - "streamId": { - "type": "string", - "description": "Your full Stream ID", - "examples": [ "0x0d0102474519cd2fc1b3e3f962a87e39cbcbead2/test-streamr" ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "append", "append_dedup" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "3dc6f384-cd6b-4be3-ad16-a41450899bf0", - "name": "Scylla", - "dockerRepository": "airbyte/destination-scylla", - "dockerImageTag": "0.1.3", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/scylla", - "icon": "scylla.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/scylla", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Scylla Destination Spec", - "type": "object", - "required": [ "keyspace", "username", "password", "address", "port" ], - "additionalProperties": true, - "properties": { - "keyspace": { - "title": "Keyspace", - "description": "Default Scylla keyspace to create data in.", - "type": "string", - "order": 0 - }, - "username": { - "title": "Username", - "description": "Username to use to access Scylla.", - "type": "string", - "order": 1 - }, - "password": { - "title": "Password", - "description": "Password associated with Scylla.", - "type": "string", - "airbyte_secret": true, - "order": 2 - }, - "address": { - "title": "Address", - "description": "Address to connect to.", - "type": "string", - "order": 3 - }, - "port": { - "title": "Port", - "description": "Port of Scylla.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 9042, - "order": 4 - }, - "replication": { - "title": "Replication factor", - "type": "integer", - "description": "Indicates to how many nodes the data should be replicated to.", - "default": 1, - "order": 5 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "a4cbd2d1-8dbe-4818-b8bc-b90ad782d12a", - "name": "Google Sheets", - "dockerRepository": "airbyte/destination-google-sheets", - "dockerImageTag": "0.1.2", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/google-sheets", - "icon": "google-sheets.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/google-sheets", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Destination Google Sheets", - "type": "object", - "required": [ "spreadsheet_id", "credentials" ], - "additionalProperties": false, - "properties": { - "spreadsheet_id": { - "type": "string", - "title": "Spreadsheet Link", - "description": "The link to your spreadsheet. See this guide for more details.", - "examples": [ "https://docs.google.com/spreadsheets/d/1hLd9Qqti3UyLXZB2aFfUWDT7BG/edit" ] - }, - "credentials": { - "type": "object", - "title": "Authentication via Google (OAuth)", - "description": "Google API Credentials for connecting to Google Sheets and Google Drive APIs", - "required": [ "client_id", "client_secret", "refresh_token" ], - "properties": { - "client_id": { - "title": "Client ID", - "type": "string", - "description": "The Client ID of your Google Sheets developer application.", - "airbyte_secret": true - }, - "client_secret": { - "title": "Client Secret", - "type": "string", - "description": "The Client Secret of your Google Sheets developer application.", - "airbyte_secret": true - }, - "refresh_token": { - "title": "Refresh Token", - "type": "string", - "description": "The token for obtaining new access token.", - "airbyte_secret": true - } - } - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append", "append_dedup" ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ "credentials" ], - "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], - "oauthFlowOutputParameters": [ [ "refresh_token" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "b76be0a6-27dc-4560-95f6-2623da0bd7b6", - "name": "Local SQLite", - "dockerRepository": "airbyte/destination-sqlite", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/local-sqlite", - "icon": "sqlite.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/sqlite", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Destination Sqlite", - "type": "object", - "required": [ "destination_path" ], - "additionalProperties": false, - "properties": { - "destination_path": { - "type": "string", - "description": "Path to the sqlite.db file. The file will be placed inside that local mount. For more information check out our docs", - "example": "/local/sqlite.db" - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "06ec60c7-7468-45c0-91ac-174f6e1a788b", - "name": "TiDB", - "dockerRepository": "airbyte/destination-tidb", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/tidb", - "icon": "tidb.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/tidb", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "TiDB Destination Spec", - "type": "object", - "required": [ "host", "port", "username", "database" ], - "additionalProperties": true, - "properties": { - "host": { - "title": "Host", - "description": "Hostname of the database.", - "type": "string", - "order": 0 - }, - "port": { - "title": "Port", - "description": "Port of the database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 4000, - "examples": [ "4000" ], - "order": 1 - }, - "database": { - "title": "Database", - "description": "Name of the database.", - "type": "string", - "order": 2 - }, - "username": { - "title": "User", - "description": "Username to use to access the database.", - "type": "string", - "order": 3 - }, - "password": { - "title": "Password", - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "default": "", - "order": 4 - }, - "ssl": { - "title": "SSL Connection", - "description": "Encrypt data using SSL.", - "type": "boolean", - "default": false, - "order": 5 - }, - "jdbc_url_params": { - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", - "title": "JDBC URL Params", - "type": "string", - "order": 6 - }, - "tunnel_method": { - "type": "object", - "title": "SSH Tunnel Method", - "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", - "oneOf": [ { - "title": "No Tunnel", - "required": [ "tunnel_method" ], - "properties": { - "tunnel_method": { - "description": "No ssh tunnel needed to connect to database", - "type": "string", - "const": "NO_TUNNEL", - "order": 0 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host.", - "type": "string", - "order": 3 - }, - "ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - }, { - "title": "Password Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host", - "type": "string", - "order": 3 - }, - "tunnel_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 4 - } - } - } ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": true, - "supportsDBT": true, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "normalizationConfig": { - "normalizationRepository": "airbyte/normalization-tidb", - "normalizationTag": "0.4.0", - "normalizationIntegrationType": "tidb" - }, - "supportsDbt": true - }, { - "destinationDefinitionId": "36be8dc6-9851-49af-b776-9d4c30e4ab6a", - "name": "Typesense", - "dockerRepository": "airbyte/destination-typesense", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/typesense", - "icon": "typesense.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/typesense", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Destination Typesense", - "type": "object", - "required": [ "api_key", "host" ], - "additionalProperties": false, - "properties": { - "api_key": { - "title": "API Key", - "type": "string", - "description": "Typesense API Key", - "order": 0 - }, - "host": { - "title": "Host", - "type": "string", - "description": "Hostname of the Typesense instance without protocol.", - "order": 1 - }, - "port": { - "title": "Port", - "type": "string", - "description": "Port of the Typesense instance. Ex: 8108, 80, 443. Default is 443", - "order": 2 - }, - "protocol": { - "title": "Protocol", - "type": "string", - "description": "Protocol of the Typesense instance. Ex: http or https. Default is https", - "order": 3 - }, - "batch_size": { - "title": "Batch size", - "type": "string", - "description": "How many documents should be imported together. Default 1000", - "order": 4 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "2300fdcf-a532-419f-9f24-a014336e7966", - "name": "YugabyteDB", - "dockerRepository": "airbyte/destination-yugabytedb", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/yugabytedb", - "icon": "yugabytedb.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/destinations/yugabytedb", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Yugabytedb destination spec", - "type": "object", - "required": [ "host", "port", "username", "database", "schema" ], - "additionalProperties": true, - "properties": { - "host": { - "title": "Host", - "description": "The Hostname of the database.", - "type": "string", - "order": 0 - }, - "port": { - "title": "Port", - "description": "The Port of the database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 3306, - "examples": [ "3306" ], - "order": 1 - }, - "database": { - "title": "Database", - "description": "Name of the database.", - "type": "string", - "order": 2 - }, - "username": { - "title": "Username", - "description": "The Username which is used to access the database.", - "type": "string", - "order": 4 - }, - "schema": { - "title": "Default Schema", - "description": "The default schema tables are written to if the source does not specify a namespace. The usual value for this field is \"public\".", - "type": "string", - "examples": [ "public" ], - "default": "public", - "order": 3 - }, - "password": { - "title": "Password", - "description": "The Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 5 - }, - "jdbc_url_params": { - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", - "title": "JDBC URL Params", - "type": "string", - "order": 6 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "302e4d8e-08d3-4098-acd4-ac67ca365b88", - "name": "Databend", - "dockerRepository": "airbyte/destination-databend", - "dockerImageTag": "0.1.2", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/databend", - "icon": "databend.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/databend", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Destination Databend", - "type": "object", - "required": [ "host", "username", "database" ], - "additionalProperties": true, - "properties": { - "host": { - "title": "Host", - "description": "Hostname of the database.", - "type": "string", - "order": 0 - }, - "port": { - "title": "Port", - "description": "Port of the database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 443, - "examples": [ "443" ], - "order": 2 - }, - "database": { - "title": "DB Name", - "description": "Name of the database.", - "type": "string", - "order": 3 - }, - "table": { - "title": "Default Table", - "description": "The default table was written to.", - "type": "string", - "examples": [ "default" ], - "default": "default", - "order": 4 - }, - "username": { - "title": "User", - "description": "Username to use to access the database.", - "type": "string", - "order": 5 - }, - "password": { - "title": "Password", - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 6 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "58e6f9da-904e-11ed-a1eb-0242ac120002", - "name": "Teradata Vantage", - "dockerRepository": "airbyte/destination-teradata", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.io/integrations/destinations/teradata", - "icon": "teradata.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/destinations/teradata", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Teradata Destination Spec", - "type": "object", - "required": [ "host", "username" ], - "additionalProperties": true, - "properties": { - "host": { - "title": "Host", - "description": "Hostname of the database.", - "type": "string", - "order": 0 - }, - "username": { - "title": "User", - "description": "Username to use to access the database.", - "type": "string", - "order": 1 - }, - "password": { - "title": "Password", - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 2 - }, - "schema": { - "title": "Default Schema", - "description": "The default schema tables are written to if the source does not specify a namespace. The usual value for this field is \"public\".", - "type": "string", - "examples": [ "airbyte_td" ], - "default": "airbyte_td", - "order": 3 - }, - "ssl": { - "title": "SSL Connection", - "description": "Encrypt data using SSL. When activating SSL, please select one of the connection modes.", - "type": "boolean", - "default": false, - "order": 5 - }, - "ssl_mode": { - "title": "SSL modes", - "description": "SSL connection modes. \n disable - Chose this mode to disable encryption of communication between Airbyte and destination database\n allow - Chose this mode to enable encryption only when required by the destination database\n prefer - Chose this mode to allow unencrypted connection only if the destination database does not support encryption\n require - Chose this mode to always require encryption. If the destination database server does not support encryption, connection will fail\n verify-ca - Chose this mode to always require encryption and to verify that the destination database server has a valid SSL certificate\n verify-full - This is the most secure mode. Chose this mode to always require encryption and to verify the identity of the destination database server\n See more information - in the docs.", - "type": "object", - "order": 6, - "oneOf": [ { - "title": "disable", - "additionalProperties": false, - "description": "Disable SSL.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "disable", - "enum": [ "disable" ], - "default": "disable", - "order": 0 - } - } - }, { - "title": "allow", - "additionalProperties": false, - "description": "Allow SSL mode.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "allow", - "enum": [ "allow" ], - "default": "allow", - "order": 0 - } - } - }, { - "title": "prefer", - "additionalProperties": false, - "description": "Prefer SSL mode.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "prefer", - "enum": [ "prefer" ], - "default": "prefer", - "order": 0 - } - } - }, { - "title": "require", - "additionalProperties": false, - "description": "Require SSL mode.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "require", - "enum": [ "require" ], - "default": "require", - "order": 0 - } - } - }, { - "title": "verify-ca", - "additionalProperties": false, - "description": "Verify-ca SSL mode.", - "required": [ "mode", "ssl_ca_certificate" ], - "properties": { - "mode": { - "type": "string", - "const": "verify-ca", - "enum": [ "verify-ca" ], - "default": "verify-ca", - "order": 0 - }, - "ssl_ca_certificate": { - "type": "string", - "title": "CA certificate", - "description": "Specifies the file name of a PEM file that contains Certificate Authority (CA) certificates for use with SSLMODE=verify-ca.\n See more information - in the docs.", - "airbyte_secret": true, - "multiline": true, - "order": 1 - } - } - }, { - "title": "verify-full", - "additionalProperties": false, - "description": "Verify-full SSL mode.", - "required": [ "mode", "ssl_ca_certificate" ], - "properties": { - "mode": { - "type": "string", - "const": "verify-full", - "enum": [ "verify-full" ], - "default": "verify-full", - "order": 0 - }, - "ssl_ca_certificate": { - "type": "string", - "title": "CA certificate", - "description": "Specifies the file name of a PEM file that contains Certificate Authority (CA) certificates for use with SSLMODE=verify-full.\n See more information - in the docs.", - "airbyte_secret": true, - "multiline": true, - "order": 1 - } - } - } ] - }, - "jdbc_url_params": { - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", - "title": "JDBC URL Params", - "type": "string", - "order": 7 - } - } - }, - "supportsIncremental": false, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "7b7d7a0d-954c-45a0-bcfc-39a634b97736", - "name": "Weaviate", - "dockerRepository": "airbyte/destination-weaviate", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/weaviate", - "icon": "weaviate.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/weaviate", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Destination Weaviate", - "type": "object", - "required": [ "url" ], - "additionalProperties": false, - "properties": { - "url": { - "type": "string", - "description": "The URL to the weaviate instance", - "examples": [ "http://localhost:8080", "https://your-instance.semi.network" ] - }, - "username": { - "type": "string", - "description": "Username used with OIDC authentication", - "examples": [ "xyz@weaviate.io" ] - }, - "password": { - "type": "string", - "description": "Password used with OIDC authentication", - "airbyte_secret": true - }, - "batch_size": { - "type": "integer", - "description": "Batch size for writing to Weaviate", - "default": 100 - }, - "vectors": { - "type": "string", - "description": "Comma separated list of strings of `stream_name.vector_column_name` to specify which field holds the vectors.", - "examples": [ "my_table.my_vector_column, another_table.vector", "mytable.vector" ] - }, - "id_schema": { - "type": "string", - "description": "Comma separated list of strings of `stream_name.id_column_name` to specify which field holds the ID of the record.", - "examples": [ "my_table.my_id_column, another_table.id", "users.user_id" ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "append", "overwrite" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "94bd199c-2ff0-4aa2-b98e-17f0acb72610", - "name": "DuckDB", - "dockerRepository": "airbyte/destination-duckdb", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.io/integrations/destinations/duckdb", - "icon": "duckdb.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/destinations/duckdb", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "DuckDB Destination Spec", - "type": "object", - "required": [ "destination_path" ], - "additionalProperties": false, - "properties": { - "destination_path": { - "type": "string", - "description": "Path to the destination.duckdb file. The file will be placed inside that local mount. For more information check out our docs", - "example": "/local/destination.duckdb" - }, - "schema": { - "type": "string", - "description": "database schema, default for duckdb is main", - "example": "main" - } - } - }, - "supportsIncremental": true, - "supportsNormalization": true, - "supportsDBT": true, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - } ], - "sources": [ { - "sourceDefinitionId": "9f32dab3-77cb-45a1-9d33-347aa5fbe363", - "name": "ActiveCampaign", - "dockerRepository": "airbyte/source-activecampaign", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/activecampaign", - "icon": "activecampaign.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/activecampaign", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Activecampaign Spec", - "type": "object", - "required": [ "api_key", "account_username" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "description": "API Key", - "airbyte_secret": true - }, - "account_username": { - "type": "string", - "description": "Account Username" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "d3b7fa46-111b-419a-998a-d7f046f6d66d", - "name": "Adjust", - "dockerRepository": "airbyte/source-adjust", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/adjust", - "icon": "adjust.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://raw.githubusercontent.com/appchoose/airbyte/feature/source-adjust/docs/integrations/sources/adjust.md", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Adjust reporting API connector.", - "properties": { - "additional_metrics": { - "description": "Metrics names that are not pre-defined, such as cohort metrics or app specific metrics.", - "items": { - "type": "string" - }, - "order": 3, - "title": "Additional metrics for ingestion", - "type": "array" - }, - "api_token": { - "airbyte_secret": true, - "description": "Adjust API key, see https://help.adjust.com/en/article/report-service-api-authentication", - "order": 0, - "title": "API Token", - "type": "string" - }, - "dimensions": { - "description": "Dimensions allow a user to break down metrics into groups using one or several parameters. For example, the number of installs by date, country and network. See https://help.adjust.com/en/article/reports-endpoint#dimensions for more information about the dimensions.", - "items": { - "enum": [ "os_name", "device_type", "app", "app_token", "store_id", "store_type", "app_network", "currency", "currency_code", "network", "campaign", "campaign_network", "campaign_id_network", "adgroup", "adgroup_network", "adgroup_id_network", "source_network", "source_id_network", "creative", "creative_network", "creative_id_network", "country", "country_code", "region", "partner_name", "partner_id" ], - "type": "string" - }, - "minItems": 1, - "order": 4, - "title": "Dimensions", - "type": "array", - "uniqueItems": true - }, - "ingest_start": { - "description": "Data ingest start date.", - "format": "date", - "order": 1, - "title": "Ingest Start Date", - "type": "string" - }, - "metrics": { - "description": "Select at least one metric to query.", - "items": { - "enum": [ "network_cost", "network_cost_diff", "network_clicks", "network_impressions", "network_installs", "network_installs_diff", "network_ecpc", "network_ecpi", "network_ecpm", "arpdau_ad", "arpdau", "arpdau_iap", "ad_impressions", "ad_rpm", "ad_revenue", "cohort_ad_revenue", "cost", "adjust_cost", "all_revenue", "cohort_all_revenue", "daus", "maus", "waus", "base_sessions", "ctr", "click_conversion_rate", "click_cost", "clicks", "paid_clicks", "deattributions", "ecpc", "gdpr_forgets", "gross_profit", "cohort_gross_profit", "impression_conversion_rate", "impression_cost", "impressions", "paid_impressions", "install_cost", "installs", "paid_installs", "installs_per_mile", "limit_ad_tracking_installs", "limit_ad_tracking_install_rate", "limit_ad_tracking_reattribution_rate", "limit_ad_tracking_reattributions", "non_organic_installs", "organic_installs", "roas_ad", "roas", "roas_iap", "reattributions", "return_on_investment", "revenue", "cohort_revenue", "revenue_events", "revenue_to_cost", "sessions", "events", "ecpi_all", "ecpi", "ecpm" ], - "type": "string" - }, - "minItems": 1, - "order": 2, - "title": "Metrics to ingest", - "type": "array", - "uniqueItems": true - }, - "until_today": { - "default": false, - "description": "Syncs data up until today. Useful when running daily incremental syncs, and duplicates are not desired.", - "order": 5, - "title": "Until Today", - "type": "boolean" - } - }, - "required": [ "api_token", "ingest_start", "metrics", "dimensions" ], - "title": "Adjust Spec", - "type": "object" - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "912eb6b7-a893-4a5b-b1c0-36ebbe2de8cd", - "name": "Aircall", - "dockerRepository": "airbyte/source-aircall", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/aircall", - "icon": "aircall.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/aircall", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Aircall Spec", - "type": "object", - "required": [ "api_id", "api_token", "start_date" ], - "additionalProperties": true, - "properties": { - "api_id": { - "title": "API ID", - "type": "string", - "description": "App ID found at settings https://dashboard.aircall.io/integrations/api-keys", - "airbyte_secret": true - }, - "api_token": { - "title": "API Token", - "type": "string", - "description": "App token found at settings (Ref- https://dashboard.aircall.io/integrations/api-keys)", - "airbyte_secret": true - }, - "start_date": { - "title": "Date-From Filter", - "type": "string", - "description": "Date time filter for incremental filter, Specify which date to extract from.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}Z$", - "examples": [ "2022-03-01T00:00:00.000Z" ], - "format": "date-time" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "14c6e7ea-97ed-4f5e-a7b5-25e9a80b8212", - "name": "Airtable", - "dockerRepository": "airbyte/source-airtable", - "dockerImageTag": "3.0.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/airtable", - "icon": "airtable.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/airtable", - "connectionSpecification": { - "$schema": "https://json-schema.org/draft-07/schema#", - "title": "Airtable Source Spec", - "type": "object", - "additionalProperties": true, - "properties": { - "credentials": { - "title": "Authentication", - "type": "object", - "oneOf": [ { - "type": "object", - "title": "OAuth2.0", - "required": [ "client_id", "client_secret", "refresh_token" ], - "properties": { - "auth_method": { - "type": "string", - "const": "oauth2.0" - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "The client ID of the Airtable developer application.", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "title": "Client secret", - "description": "The client secret the Airtable developer application.", - "airbyte_secret": true - }, - "access_token": { - "type": "string", - "description": "Access Token for making authenticated requests.", - "airbyte_secret": true - }, - "token_expiry_date": { - "type": "string", - "description": "The date-time when the access token should be refreshed.", - "format": "date-time" - }, - "refresh_token": { - "type": "string", - "title": "Refresh token", - "description": "The key to refresh the expired access token.", - "airbyte_secret": true - } - } - }, { - "title": "Personal Access Token", - "type": "object", - "required": [ "api_key" ], - "properties": { - "auth_method": { - "type": "string", - "const": "api_key" - }, - "api_key": { - "type": "string", - "description": "The Personal Access Token for the Airtable account. See the Support Guide for more information on how to obtain this token.", - "title": "Personal Access Token", - "airbyte_secret": true, - "examples": [ "key1234567890" ] - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "auth_method" ], - "predicate_value": "oauth2.0", - "oauth_config_specification": { - "complete_oauth_output_specification": { - "type": "object", - "properties": { - "access_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "access_token" ] - }, - "refresh_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "refresh_token" ] - }, - "token_expiry_date": { - "type": "string", - "format": "date-time", - "path_in_connector_config": [ "credentials", "token_expiry_date" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "api.airtable.com", "airtable.com" ] - } - }, { - "sourceDefinitionId": "81ca39dc-4534-4dd2-b848-b0cfd2c11fce", - "name": "Aha", - "dockerRepository": "airbyte/source-aha", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/aha", - "icon": "aha.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/aha", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Aha Spec", - "type": "object", - "required": [ "api_key", "url" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "description": "API Key", - "title": "API Bearer Token" - }, - "url": { - "type": "string", - "description": "URL", - "title": "Aha Url Instance" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "db385323-9333-4fec-bec3-9e0ca9326c90", - "name": "Alpha Vantage", - "dockerRepository": "airbyte/source-alpha-vantage", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/alpha-vantage", - "icon": "alpha-vantage.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/alpha-vantage", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Alpha Vantage Spec", - "type": "object", - "required": [ "api_key", "symbol" ], - "properties": { - "api_key": { - "title": "API Key", - "type": "string", - "description": "API Key", - "airbyte_secret": true, - "order": 0 - }, - "symbol": { - "title": "Symbol", - "type": "string", - "description": "Stock symbol (with exchange code)", - "examples": [ "AAPL", "TSCO.LON" ], - "order": 1 - }, - "interval": { - "title": "Interval", - "type": "string", - "description": "Time-series data point interval. Required for intraday endpoints.\n", - "enum": [ "1min", "5min", "15min", "30min", "60min" ], - "default": "1min", - "order": 2 - }, - "adjusted": { - "title": "Adjusted?", - "type": "boolean", - "description": "Whether to return adjusted data. Only applicable to intraday endpoints.\n", - "default": false, - "order": 3 - }, - "outputsize": { - "title": "Output Size", - "type": "string", - "description": "Whether to return full or compact data (the last 100 data points).\n", - "enum": [ "compact", "full" ], - "default": "compact", - "order": 4 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "1fa90628-2b9e-11ed-a261-0242ac120002", - "name": "AlloyDB for PostgreSQL", - "dockerRepository": "airbyte/source-alloydb", - "dockerImageTag": "2.0.23", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/alloydb", - "icon": "alloydb.svg", - "sourceType": "database", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/postgres", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Postgres Source Spec", - "type": "object", - "required": [ "host", "port", "database", "username" ], - "properties": { - "host": { - "title": "Host", - "description": "Hostname of the database.", - "type": "string", - "order": 0, - "group": "db" - }, - "port": { - "title": "Port", - "description": "Port of the database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 5432, - "examples": [ "5432" ], - "order": 1, - "group": "db" - }, - "database": { - "title": "Database Name", - "description": "Name of the database.", - "type": "string", - "order": 2, - "group": "db" - }, - "schemas": { - "title": "Schemas", - "description": "The list of schemas (case sensitive) to sync from. Defaults to public.", - "type": "array", - "items": { - "type": "string" - }, - "minItems": 0, - "uniqueItems": true, - "default": [ "public" ], - "order": 3, - "group": "db" - }, - "username": { - "title": "Username", - "description": "Username to access the database.", - "type": "string", - "order": 4, - "group": "auth" - }, - "password": { - "title": "Password", - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 5, - "group": "auth", - "always_show": true - }, - "jdbc_url_params": { - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (Eg. key1=value1&key2=value2&key3=value3). For more information read about JDBC URL parameters.", - "title": "JDBC URL Parameters (Advanced)", - "type": "string", - "order": 6, - "group": "advanced", - "pattern_descriptor": "key1=value1&key2=value2" - }, - "ssl_mode": { - "title": "SSL Modes", - "description": "SSL connection modes. \n Read more in the docs.", - "type": "object", - "order": 8, - "group": "security", - "oneOf": [ { - "title": "disable", - "additionalProperties": true, - "description": "Disables encryption of communication between Airbyte and source database.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "disable", - "order": 0 - } - } - }, { - "title": "allow", - "additionalProperties": true, - "description": "Enables encryption only when required by the source database.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "allow", - "order": 0 - } - } - }, { - "title": "prefer", - "additionalProperties": true, - "description": "Allows unencrypted connection only if the source database does not support encryption.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "prefer", - "order": 0 - } - } - }, { - "title": "require", - "additionalProperties": true, - "description": "Always require encryption. If the source database server does not support encryption, connection will fail.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "require", - "order": 0 - } - } - }, { - "title": "verify-ca", - "additionalProperties": true, - "description": "Always require encryption and verifies that the source database server has a valid SSL certificate.", - "required": [ "mode", "ca_certificate" ], - "properties": { - "mode": { - "type": "string", - "const": "verify-ca", - "order": 0 - }, - "ca_certificate": { - "type": "string", - "title": "CA Certificate", - "description": "CA certificate", - "airbyte_secret": true, - "multiline": true, - "order": 1 - }, - "client_certificate": { - "type": "string", - "title": "Client Certificate", - "description": "Client certificate", - "airbyte_secret": true, - "multiline": true, - "order": 2, - "always_show": true - }, - "client_key": { - "type": "string", - "title": "Client Key", - "description": "Client key", - "airbyte_secret": true, - "multiline": true, - "order": 3, - "always_show": true - }, - "client_key_password": { - "type": "string", - "title": "Client key password", - "description": "Password for keystorage. If you do not add it - the password will be generated automatically.", - "airbyte_secret": true, - "order": 4 - } - } - }, { - "title": "verify-full", - "additionalProperties": true, - "description": "This is the most secure mode. Always require encryption and verifies the identity of the source database server.", - "required": [ "mode", "ca_certificate" ], - "properties": { - "mode": { - "type": "string", - "const": "verify-full", - "order": 0 - }, - "ca_certificate": { - "type": "string", - "title": "CA Certificate", - "description": "CA certificate", - "airbyte_secret": true, - "multiline": true, - "order": 1 - }, - "client_certificate": { - "type": "string", - "title": "Client Certificate", - "description": "Client certificate", - "airbyte_secret": true, - "multiline": true, - "order": 2, - "always_show": true - }, - "client_key": { - "type": "string", - "title": "Client Key", - "description": "Client key", - "airbyte_secret": true, - "multiline": true, - "order": 3, - "always_show": true - }, - "client_key_password": { - "type": "string", - "title": "Client key password", - "description": "Password for keystorage. If you do not add it - the password will be generated automatically.", - "airbyte_secret": true, - "order": 4 - } - } - } ] - }, - "replication_method": { - "type": "object", - "title": "Replication Method", - "description": "Replication method for extracting data from the database.", - "order": 9, - "group": "advanced", - "oneOf": [ { - "title": "Standard", - "description": "Standard replication requires no setup on the DB side but will not be able to represent deletions incrementally.", - "required": [ "method" ], - "properties": { - "method": { - "type": "string", - "const": "Standard", - "order": 0 - } - } - }, { - "title": "Logical Replication (CDC)", - "description": "Logical replication uses the Postgres write-ahead log (WAL) to detect inserts, updates, and deletes. This needs to be configured on the source database itself. Only available on Postgres 10 and above. Read the docs.", - "required": [ "method", "replication_slot", "publication" ], - "additionalProperties": true, - "properties": { - "method": { - "type": "string", - "const": "CDC", - "order": 1 - }, - "plugin": { - "type": "string", - "title": "Plugin", - "description": "A logical decoding plugin installed on the PostgreSQL server.", - "enum": [ "pgoutput" ], - "default": "pgoutput", - "order": 2 - }, - "replication_slot": { - "type": "string", - "title": "Replication Slot", - "description": "A plugin logical replication slot. Read about replication slots.", - "order": 3 - }, - "publication": { - "type": "string", - "title": "Publication", - "description": "A Postgres publication used for consuming changes. Read about publications and replication identities.", - "order": 4 - }, - "initial_waiting_seconds": { - "type": "integer", - "title": "Initial Waiting Time in Seconds (Advanced)", - "description": "The amount of time the connector will wait when it launches to determine if there is new data to sync or not. Defaults to 300 seconds. Valid range: 120 seconds to 1200 seconds. Read about initial waiting time.", - "default": 300, - "order": 5, - "min": 120, - "max": 1200 - }, - "lsn_commit_behaviour": { - "type": "string", - "title": "LSN commit behaviour", - "description": "Determines when Airbtye should flush the LSN of processed WAL logs in the source database. `After loading Data in the destination` is default. If `While reading Data` is selected, in case of a downstream failure (while loading data into the destination), next sync would result in a full sync.", - "enum": [ "While reading Data", "After loading Data in the destination" ], - "default": "After loading Data in the destination", - "order": 6 - } - } - } ] - }, - "tunnel_method": { - "type": "object", - "title": "SSH Tunnel Method", - "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", - "oneOf": [ { - "title": "No Tunnel", - "required": [ "tunnel_method" ], - "properties": { - "tunnel_method": { - "description": "No ssh tunnel needed to connect to database", - "type": "string", - "const": "NO_TUNNEL", - "order": 0 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host.", - "type": "string", - "order": 3 - }, - "ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - }, { - "title": "Password Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host", - "type": "string", - "order": 3 - }, - "tunnel_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 4 - } - } - } ], - "group": "security" - } - }, - "groups": [ { - "id": "db" - }, { - "id": "auth" - }, { - "id": "security", - "title": "Security" - }, { - "id": "advanced", - "title": "Advanced" - } ] - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "${host}", "${tunnel_method.tunnel_host}" ] - } - }, { - "sourceDefinitionId": "6ff047c0-f5d5-4ce5-8c81-204a830fa7e1", - "name": "AWS CloudTrail", - "dockerRepository": "airbyte/source-aws-cloudtrail", - "dockerImageTag": "0.1.5", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/aws-cloudtrail", - "icon": "awscloudtrail.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/aws-cloudtrail", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Aws CloudTrail Spec", - "type": "object", - "required": [ "aws_key_id", "aws_secret_key", "aws_region_name", "start_date" ], - "additionalProperties": true, - "properties": { - "aws_key_id": { - "type": "string", - "title": "Key ID", - "description": "AWS CloudTrail Access Key ID. See the docs for more information on how to obtain this key.", - "airbyte_secret": true - }, - "aws_secret_key": { - "type": "string", - "title": "Secret Key", - "description": "AWS CloudTrail Access Key ID. See the docs for more information on how to obtain this key.", - "airbyte_secret": true - }, - "aws_region_name": { - "type": "string", - "title": "Region Name", - "description": "The default AWS Region to use, for example, us-west-1 or us-west-2. When specifying a Region inline during client initialization, this property is named region_name." - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "The date you would like to replicate data. Data in AWS CloudTrail is available for last 90 days only. Format: YYYY-MM-DD.", - "examples": [ "2021-01-01" ], - "default": "1970-01-01", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "format": "date" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "c6b0a29e-1da9-4512-9002-7bfd0cba2246", - "name": "Amazon Ads", - "dockerRepository": "airbyte/source-amazon-ads", - "dockerImageTag": "1.0.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/amazon-ads", - "icon": "amazonads.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/amazon-ads", - "connectionSpecification": { - "title": "Amazon Ads Spec", - "type": "object", - "properties": { - "auth_type": { - "title": "Auth Type", - "const": "oauth2.0", - "order": 0, - "type": "string" - }, - "client_id": { - "title": "Client ID", - "description": "The client ID of your Amazon Ads developer application. See the docs for more information.", - "order": 1, - "type": "string" - }, - "client_secret": { - "title": "Client Secret", - "description": "The client secret of your Amazon Ads developer application. See the docs for more information.", - "airbyte_secret": true, - "order": 2, - "type": "string" - }, - "refresh_token": { - "title": "Refresh Token", - "description": "Amazon Ads refresh token. See the docs for more information on how to obtain this token.", - "airbyte_secret": true, - "order": 3, - "type": "string" - }, - "region": { - "title": "Region", - "description": "Region to pull data from (EU/NA/FE). See docs for more details.", - "enum": [ "NA", "EU", "FE" ], - "type": "string", - "default": "NA", - "order": 4 - }, - "start_date": { - "title": "Start Date", - "description": "The Start date for collecting reports, should not be more than 60 days in the past. In YYYY-MM-DD format", - "examples": [ "2022-10-10", "2022-10-22" ], - "order": 5, - "type": "string" - }, - "profiles": { - "title": "Profile IDs", - "description": "Profile IDs you want to fetch data for. See docs for more details.", - "order": 6, - "type": "array", - "items": { - "type": "integer" - } - }, - "state_filter": { - "title": "State Filter", - "description": "Reflects the state of the Display, Product, and Brand Campaign streams as enabled, paused, or archived. If you do not populate this field, it will be ignored completely.", - "items": { - "type": "string", - "enum": [ "enabled", "paused", "archived" ] - }, - "type": "array", - "uniqueItems": true, - "order": 7 - }, - "look_back_window": { - "title": "Look Back Window", - "description": "The amount of days to go back in time to get the updated data from Amazon Ads", - "examples": [ 3, 10 ], - "type": "integer", - "default": 3, - "order": 8 - }, - "report_record_types": { - "title": "Report Record Types", - "description": "Optional configuration which accepts an array of string of record types. Leave blank for default behaviour to pull all report types. Use this config option only if you want to pull specific report type(s). See docs for more details", - "items": { - "type": "string", - "enum": [ "adGroups", "asins", "asins_keywords", "asins_targets", "campaigns", "keywords", "productAds", "targets" ] - }, - "type": "array", - "uniqueItems": true, - "order": 9 - } - }, - "required": [ "client_id", "client_secret", "refresh_token" ], - "additionalProperties": true - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "auth_type" ], - "predicate_value": "oauth2.0", - "oauth_config_specification": { - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": true, - "properties": { - "refresh_token": { - "type": "string", - "path_in_connector_config": [ "refresh_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": true, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": true, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "api.amazon.com", "advertising-api.amazon.com", "advertising-api-eu.amazon.com", "advertising-api-fe.amazon.com" ] - } - }, { - "sourceDefinitionId": "e55879a8-0ef8-4557-abcf-ab34c53ec460", - "name": "Amazon Seller Partner", - "dockerRepository": "airbyte/source-amazon-seller-partner", - "dockerImageTag": "1.0.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/amazon-seller-partner", - "icon": "amazonsellerpartner.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/amazon-seller-partner", - "changelogUrl": "https://docs.airbyte.com/integrations/sources/amazon-seller-partner", - "connectionSpecification": { - "title": "Amazon Seller Partner Spec", - "type": "object", - "properties": { - "app_id": { - "title": "App Id", - "description": "Your Amazon App ID", - "airbyte_secret": true, - "order": 0, - "type": "string" - }, - "auth_type": { - "title": "Auth Type", - "const": "oauth2.0", - "order": 1, - "type": "string" - }, - "lwa_app_id": { - "title": "LWA Client Id", - "description": "Your Login with Amazon Client ID.", - "order": 2, - "type": "string" - }, - "lwa_client_secret": { - "title": "LWA Client Secret", - "description": "Your Login with Amazon Client Secret.", - "airbyte_secret": true, - "order": 3, - "type": "string" - }, - "refresh_token": { - "title": "Refresh Token", - "description": "The Refresh Token obtained via OAuth flow authorization.", - "airbyte_secret": true, - "order": 4, - "type": "string" - }, - "aws_access_key": { - "title": "AWS Access Key", - "description": "Specifies the AWS access key used as part of the credentials to authenticate the user.", - "airbyte_secret": true, - "order": 5, - "type": "string" - }, - "aws_secret_key": { - "title": "AWS Secret Access Key", - "description": "Specifies the AWS secret key used as part of the credentials to authenticate the user.", - "airbyte_secret": true, - "order": 6, - "type": "string" - }, - "role_arn": { - "title": "Role ARN", - "description": "Specifies the Amazon Resource Name (ARN) of an IAM role that you want to use to perform operations requested using this profile. (Needs permission to 'Assume Role' STS).", - "airbyte_secret": true, - "order": 7, - "type": "string" - }, - "replication_start_date": { - "title": "Start Date", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2017-01-25T00:00:00Z" ], - "order": 8, - "type": "string" - }, - "replication_end_date": { - "title": "End Date", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data after this date will not be replicated.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$|^$", - "examples": [ "2017-01-25T00:00:00Z" ], - "order": 9, - "type": "string" - }, - "period_in_days": { - "title": "Period In Days", - "description": "Will be used for stream slicing for initial full_refresh sync when no updated state is present for reports that support sliced incremental sync.", - "default": 90, - "maximum": 90, - "examples": [ "1", "10", "30", "60", "90" ], - "order": 10, - "type": "integer" - }, - "report_options": { - "title": "Report Options", - "description": "Additional information passed to reports. This varies by report type. Must be a valid json string.", - "examples": [ "{\"GET_BRAND_ANALYTICS_SEARCH_TERMS_REPORT\": {\"reportPeriod\": \"WEEK\"}}", "{\"GET_SOME_REPORT\": {\"custom\": \"true\"}}" ], - "order": 11, - "type": "string" - }, - "max_wait_seconds": { - "title": "Max wait time for reports (in seconds)", - "description": "Sometimes report can take up to 30 minutes to generate. This will set the limit for how long to wait for a successful report.", - "default": 500, - "examples": [ "500", "1980" ], - "order": 12, - "type": "integer" - }, - "aws_environment": { - "title": "AWSEnvironment", - "description": "An enumeration.", - "enum": [ "PRODUCTION", "SANDBOX" ], - "type": "string" - }, - "region": { - "title": "AWSRegion", - "description": "An enumeration.", - "enum": [ "AE", "AU", "BE", "BR", "CA", "DE", "EG", "ES", "FR", "GB", "IN", "IT", "JP", "MX", "NL", "PL", "SA", "SE", "SG", "TR", "UK", "US" ], - "type": "string" - } - }, - "required": [ "app_id", "lwa_app_id", "lwa_client_secret", "refresh_token", "replication_start_date", "aws_environment", "region" ], - "additionalProperties": true, - "definitions": { - "AWSEnvironment": { - "title": "AWSEnvironment", - "description": "An enumeration.", - "enum": [ "PRODUCTION", "SANDBOX" ], - "type": "string" - }, - "AWSRegion": { - "title": "AWSRegion", - "description": "An enumeration.", - "enum": [ "AE", "AU", "BE", "BR", "CA", "DE", "EG", "ES", "FR", "GB", "IN", "IT", "JP", "MX", "NL", "PL", "SA", "SE", "SG", "TR", "UK", "US" ], - "type": "string" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "auth_type" ], - "predicate_value": "oauth2.0", - "oauth_config_specification": { - "oauth_user_input_from_connector_config_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "app_id": { - "type": "string", - "path_in_connector_config": [ "app_id" ] - } - } - }, - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "refresh_token": { - "type": "string", - "path_in_connector_config": [ "refresh_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "lwa_app_id": { - "type": "string" - }, - "lwa_client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "lwa_app_id": { - "type": "string", - "path_in_connector_config": [ "lwa_app_id" ] - }, - "lwa_client_secret": { - "type": "string", - "path_in_connector_config": [ "lwa_client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "983fd355-6bf3-4709-91b5-37afa391eeb6", - "name": "Amazon SQS", - "dockerRepository": "airbyte/source-amazon-sqs", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/amazon-sqs", - "icon": "awssqs.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/amazon-sqs", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Amazon SQS Source Spec", - "type": "object", - "required": [ "queue_url", "region", "delete_messages" ], - "additionalProperties": false, - "properties": { - "queue_url": { - "title": "Queue URL", - "description": "URL of the SQS Queue", - "type": "string", - "examples": [ "https://sqs.eu-west-1.amazonaws.com/1234567890/my-example-queue" ], - "order": 0 - }, - "region": { - "title": "AWS Region", - "description": "AWS Region of the SQS Queue", - "type": "string", - "enum": [ "us-east-1", "us-east-2", "us-west-1", "us-west-2", "af-south-1", "ap-east-1", "ap-south-1", "ap-northeast-1", "ap-northeast-2", "ap-northeast-3", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "cn-north-1", "cn-northwest-1", "eu-central-1", "eu-north-1", "eu-south-1", "eu-west-1", "eu-west-2", "eu-west-3", "sa-east-1", "me-south-1", "us-gov-east-1", "us-gov-west-1" ], - "order": 1 - }, - "delete_messages": { - "title": "Delete Messages After Read", - "description": "If Enabled, messages will be deleted from the SQS Queue after being read. If Disabled, messages are left in the queue and can be read more than once. WARNING: Enabling this option can result in data loss in cases of failure, use with caution, see documentation for more detail. ", - "type": "boolean", - "default": false, - "order": 2 - }, - "max_batch_size": { - "title": "Max Batch Size", - "description": "Max amount of messages to get in one batch (10 max)", - "type": "integer", - "examples": [ "5" ], - "order": 3 - }, - "max_wait_time": { - "title": "Max Wait Time", - "description": "Max amount of time in seconds to wait for messages in a single poll (20 max)", - "type": "integer", - "examples": [ "5" ], - "order": 4 - }, - "attributes_to_return": { - "title": "Message Attributes To Return", - "description": "Comma separated list of Mesage Attribute names to return", - "type": "string", - "examples": [ "attr1,attr2" ], - "order": 5 - }, - "visibility_timeout": { - "title": "Message Visibility Timeout", - "description": "Modify the Visibility Timeout of the individual message from the Queue's default (seconds).", - "type": "integer", - "examples": [ "15" ], - "order": 6 - }, - "access_key": { - "title": "AWS IAM Access Key ID", - "description": "The Access Key ID of the AWS IAM Role to use for pulling messages", - "type": "string", - "examples": [ "xxxxxHRNxxx3TBxxxxxx" ], - "airbyte_secret": true, - "order": 7 - }, - "secret_key": { - "title": "AWS IAM Secret Key", - "description": "The Secret Key of the AWS IAM Role to use for pulling messages", - "type": "string", - "examples": [ "hu+qE5exxxxT6o/ZrKsxxxxxxBhxxXLexxxxxVKz" ], - "airbyte_secret": true, - "order": 8 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "fa9f58c6-2d03-4237-aaa4-07d75e0c1396", - "name": "Amplitude", - "dockerRepository": "airbyte/source-amplitude", - "dockerImageTag": "0.2.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/amplitude", - "icon": "amplitude.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/amplitude", - "connectionSpecification": { - "$schema": "https://json-schema.org/draft-07/schema#", - "title": "Amplitude Spec", - "type": "object", - "required": [ "api_key", "secret_key", "start_date" ], - "additionalProperties": true, - "properties": { - "data_region": { - "type": "string", - "title": "Data region", - "description": "Amplitude data region server", - "enum": [ "Standard Server", "EU Residency Server" ], - "default": "Standard Server" - }, - "api_key": { - "type": "string", - "title": "API Key", - "description": "Amplitude API Key. See the setup guide for more information on how to obtain this key.", - "airbyte_secret": true - }, - "secret_key": { - "type": "string", - "title": "Secret Key", - "description": "Amplitude Secret Key. See the setup guide for more information on how to obtain this key.", - "airbyte_secret": true - }, - "start_date": { - "type": "string", - "title": "Replication Start Date", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "description": "UTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.", - "examples": [ "2021-01-25T00:00:00Z" ] - }, - "request_time_range": { - "type": "integer", - "title": "Request time range", - "description": "According to Considerations too big time range in request can cause a timeout error. In this case, set shorter time interval in hours.", - "default": 24, - "minimum": 1, - "maximum": 8760 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "amplitude.com", "analytics.eu.amplitude.com" ] - } - }, { - "sourceDefinitionId": "47f17145-fe20-4ef5-a548-e29b048adf84", - "name": "Apify Dataset", - "dockerRepository": "airbyte/source-apify-dataset", - "dockerImageTag": "0.1.11", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/apify-dataset", - "icon": "apify.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/apify-dataset", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Apify Dataset Spec", - "type": "object", - "required": [ "datasetId" ], - "additionalProperties": false, - "properties": { - "datasetId": { - "type": "string", - "title": "Dataset ID", - "description": "ID of the dataset you would like to load to Airbyte." - }, - "clean": { - "type": "boolean", - "title": "Clean", - "description": "If set to true, only clean items will be downloaded from the dataset. See description of what clean means in Apify API docs. If not sure, set clean to false." - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "b4375641-e270-41d3-9c20-4f9cecad87a8", - "name": "Appfollow", - "dockerRepository": "airbyte/source-appfollow", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/appfollow", - "icon": "appfollow.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/appfollow", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Appfollow Spec", - "type": "object", - "required": [ "ext_id", "country", "cid", "api_secret" ], - "additionalProperties": true, - "properties": { - "ext_id": { - "type": "string", - "title": "app external id", - "description": "for App Store — this is 9-10 digits identification number; for Google Play — this is bundle name;" - }, - "cid": { - "type": "string", - "title": "client id", - "description": "client id provided by Appfollow" - }, - "api_secret": { - "type": "string", - "title": "api secret", - "description": "api secret provided by Appfollow", - "airbyte_secret": true - }, - "country": { - "type": "string", - "title": "country", - "description": "getting data by Country" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "e59c8416-c2fa-4bd3-9e95-52677ea281c1", - "name": "Apple Search Ads", - "dockerRepository": "airbyte/source-apple-search-ads", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/apple-search-ads", - "icon": "apple.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/apple-search-ads", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Apple Search Ads Spec", - "type": "object", - "required": [ "org_id", "client_id", "client_secret", "start_date" ], - "additionalProperties": true, - "properties": { - "org_id": { - "type": "integer", - "title": "Org Id", - "description": "The identifier of the organization that owns the campaign. Your Org Id is the same as your account in the Apple Search Ads UI." - }, - "client_id": { - "type": "string", - "title": "Client Id", - "description": "A user identifier for the token request. See here", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "A string that authenticates the user’s setup request. See here", - "airbyte_secret": true - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "Start getting data from that date.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "2020-01-01" ] - }, - "end_date": { - "type": "string", - "title": "End Date", - "description": "Data is retrieved until that date (included)", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "2021-01-01" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "16447954-e6a8-4593-b140-43dea13bc457", - "name": "AppsFlyer", - "dockerRepository": "airbyte/source-appsflyer", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/appsflyer", - "icon": "appsflyer.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Appsflyer Spec", - "type": "object", - "required": [ "app_id", "api_token", "start_date" ], - "additionalProperties": false, - "properties": { - "app_id": { - "type": "string", - "description": "App identifier as found in AppsFlyer." - }, - "api_token": { - "type": "string", - "description": "Pull API token for authentication. If you change the account admin, the token changes, and you must update scripts with the new token. Get the API token in the Dashboard.", - "airbyte_secret": true - }, - "start_date": { - "type": "string", - "description": "The default value to use if no bookmark exists for an endpoint. Raw Reports historical lookback is limited to 90 days.", - "examples": [ "2021-11-16", "2021-11-16 15:00:00" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}( [0-9]{2}:[0-9]{2}:[0-9]{2})?$" - }, - "timezone": { - "type": "string", - "description": "Time zone in which date times are stored. The project timezone may be found in the App settings in the AppsFlyer console.", - "default": "UTC", - "examples": [ "US/Pacific", "UTC" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "2af123bf-0aaf-4e0d-9784-cb497f23741a", - "name": "Appstore", - "dockerRepository": "airbyte/source-appstore-singer", - "dockerImageTag": "0.2.6", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/appstore", - "icon": "appstore.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/appstore", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Source Appstore Singer Spec", - "type": "object", - "required": [ "key_id", "private_key", "issuer_id", "vendor", "start_date" ], - "additionalProperties": false, - "properties": { - "key_id": { - "type": "string", - "title": "Key ID", - "description": "Appstore Key ID. See the docs for more information on how to obtain this key." - }, - "private_key": { - "type": "string", - "title": "Private Key", - "description": "Appstore Private Key. See the docs for more information on how to obtain this key.", - "airbyte_secret": true, - "multiline": true - }, - "issuer_id": { - "type": "string", - "title": "Issuer ID", - "description": "Appstore Issuer ID. See the docs for more information on how to obtain this ID." - }, - "vendor": { - "type": "string", - "title": "Vendor ID", - "description": "Appstore Vendor ID. See the docs for more information on how to obtain this ID." - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", - "examples": [ "2020-11-16T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "d0243522-dccf-4978-8ba0-37ed47a0bdbf", - "name": "Asana", - "dockerRepository": "airbyte/source-asana", - "dockerImageTag": "0.1.5", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/asana", - "icon": "asana.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Asana Spec", - "type": "object", - "additionalProperties": true, - "properties": { - "credentials": { - "title": "Authentication mechanism", - "description": "Choose how to authenticate to Github", - "type": "object", - "oneOf": [ { - "type": "object", - "title": "Authenticate with Personal Access Token", - "required": [ "personal_access_token" ], - "properties": { - "option_title": { - "type": "string", - "title": "Credentials title", - "description": "PAT Credentials", - "const": "PAT Credentials" - }, - "personal_access_token": { - "type": "string", - "title": "Personal Access Token", - "description": "Asana Personal Access Token (generate yours here).", - "airbyte_secret": true - } - } - }, { - "type": "object", - "title": "Authenticate via Asana (Oauth)", - "required": [ "client_id", "client_secret", "refresh_token" ], - "properties": { - "option_title": { - "type": "string", - "title": "Credentials title", - "description": "OAuth Credentials", - "const": "OAuth Credentials" - }, - "client_id": { - "type": "string", - "title": "", - "description": "", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "title": "", - "description": "", - "airbyte_secret": true - }, - "refresh_token": { - "type": "string", - "title": "", - "description": "", - "airbyte_secret": true - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ "credentials", "1" ], - "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], - "oauthFlowOutputParameters": [ [ "refresh_token" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta" - }, { - "sourceDefinitionId": "4e8c9fa0-3634-499b-b948-11581b5c3efa", - "name": "Ashby", - "dockerRepository": "airbyte/source-ashby", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/ashby", - "icon": "ashby.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://developers.ashbyhq.com/reference/introduction", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Ashby Spec", - "type": "object", - "required": [ "api_key", "start_date" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "title": "Ashby API key", - "description": "The Ashby API Key, see doc here.", - "airbyte_secret": true - }, - "start_date": { - "type": "string", - "title": "Start date", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", - "examples": [ "2017-01-25T00:00:00Z" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "6c504e48-14aa-4221-9a72-19cf5ff1ae78", - "name": "Auth0", - "dockerRepository": "airbyte/source-auth0", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/auth0", - "icon": "auth0.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://auth0.com/docs/api/management/v2/", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Auth0 Management API Spec", - "type": "object", - "required": [ "base_url", "credentials" ], - "additionalProperties": true, - "properties": { - "base_url": { - "type": "string", - "title": "Base URL", - "examples": [ "https://dev-yourOrg.us.auth0.com/" ], - "description": "The Authentication API is served over HTTPS. All URLs referenced in the documentation have the following base `https://YOUR_DOMAIN`" - }, - "credentials": { - "title": "Authentication Method", - "type": "object", - "oneOf": [ { - "type": "object", - "title": "OAuth2 Confidential Application", - "required": [ "auth_type", "client_id", "client_secret", "audience" ], - "properties": { - "auth_type": { - "type": "string", - "title": "Authentication Method", - "const": "oauth2_confidential_application", - "order": 0 - }, - "client_id": { - "title": "Client ID", - "description": "Your application's Client ID. You can find this value on the application's settings tab after you login the admin portal.", - "type": "string", - "examples": [ "Client_ID" ] - }, - "client_secret": { - "title": "Client Secret", - "description": "Your application's Client Secret. You can find this value on the application's settings tab after you login the admin portal.", - "type": "string", - "examples": [ "Client_Secret" ], - "airbyte_secret": true - }, - "audience": { - "title": "Audience", - "description": "The audience for the token, which is your API. You can find this in the Identifier field on your API's settings tab", - "type": "string", - "examples": [ "https://dev-yourOrg.us.auth0.com/api/v2/" ] - } - } - }, { - "type": "object", - "title": "OAuth2 Access Token", - "required": [ "access_token", "auth_type" ], - "properties": { - "auth_type": { - "type": "string", - "title": "Authentication Method", - "const": "oauth2_access_token", - "order": 0 - }, - "access_token": { - "title": "OAuth2 Access Token", - "description": "Also called API Access Token The access token used to call the Auth0 Management API Token. It's a JWT that contains specific grant permissions knowns as scopes.", - "type": "string", - "airbyte_secret": true - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "798ae795-5189-42b6-b64e-3cb91db93338", - "name": "Azure Table Storage", - "dockerRepository": "airbyte/source-azure-table", - "dockerImageTag": "0.1.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/azure-table", - "icon": "azureblobstorage.svg", - "sourceType": "database", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Azure Data Table Spec", - "type": "object", - "required": [ "storage_account_name", "storage_access_key" ], - "properties": { - "storage_account_name": { - "title": "Account Name", - "type": "string", - "description": "The name of your storage account.", - "order": 0, - "airbyte_secret": false - }, - "storage_access_key": { - "title": "Access Key", - "type": "string", - "description": "Azure Table Storage Access Key. See the docs for more information on how to obtain this key.", - "order": 1, - "airbyte_secret": true - }, - "storage_endpoint_suffix": { - "title": "Endpoint Suffix", - "type": "string", - "description": "Azure Table Storage service account URL suffix. See the docs for more information on how to obtain endpoint suffix", - "order": 2, - "default": "core.windows.net", - "examples": [ "core.windows.net", "core.chinacloudapi.cn" ], - "airbyte_secret": false - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "fdaaba68-4875-4ed9-8fcd-4ae1e0a25093", - "name": "Azure Blob Storage", - "dockerRepository": "airbyte/source-azure-blob-storage", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/azure-blob-storage", - "icon": "azureblobstorage.svg", - "sourceType": "file", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/azureblobstorage", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "AzureBlobStorage Source Spec", - "type": "object", - "required": [ "azure_blob_storage_account_name", "azure_blob_storage_account_key", "azure_blob_storage_container_name", "format" ], - "additionalProperties": true, - "properties": { - "azure_blob_storage_endpoint": { - "title": "Endpoint Domain Name", - "type": "string", - "default": "blob.core.windows.net", - "description": "This is Azure Blob Storage endpoint domain name. Leave default value (or leave it empty if run container from command line) to use Microsoft native from example.", - "examples": [ "blob.core.windows.net" ] - }, - "azure_blob_storage_container_name": { - "title": "Azure blob storage container (Bucket) Name", - "type": "string", - "description": "The name of the Azure blob storage container.", - "examples": [ "airbytetescontainername" ] - }, - "azure_blob_storage_account_name": { - "title": "Azure Blob Storage account name", - "type": "string", - "description": "The account's name of the Azure Blob Storage.", - "examples": [ "airbyte5storage" ] - }, - "azure_blob_storage_account_key": { - "title": "Azure Blob Storage account key", - "description": "The Azure blob storage account key.", - "airbyte_secret": true, - "type": "string", - "examples": [ "Z8ZkZpteggFx394vm+PJHnGTvdRncaYS+JhLKdj789YNmD+iyGTnG+PV+POiuYNhBg/ACS+LKjd%4FG3FHGN12Nd==" ] - }, - "azure_blob_storage_blobs_prefix": { - "title": "Azure Blob Storage blobs prefix", - "description": "The Azure blob storage prefix to be applied", - "type": "string", - "examples": [ "FolderA/FolderB/" ] - }, - "azure_blob_storage_schema_inference_limit": { - "title": "Azure Blob Storage schema inference limit", - "description": "The Azure blob storage blobs to scan for inferring the schema, useful on large amounts of data with consistent structure", - "type": "integer", - "examples": [ "500" ] - }, - "format": { - "title": "Input Format", - "type": "object", - "description": "Input data format", - "oneOf": [ { - "title": "JSON Lines: newline-delimited JSON", - "required": [ "format_type" ], - "properties": { - "format_type": { - "type": "string", - "const": "JSONL" - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "971c3e1e-78a5-411e-ad56-c4052b50876b", - "name": "Babelforce", - "dockerRepository": "airbyte/source-babelforce", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/babelforce", - "icon": "babelforce.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Babelforce Spec", - "type": "object", - "required": [ "region", "access_key_id", "access_token" ], - "additionalProperties": false, - "properties": { - "region": { - "type": "string", - "title": "Region", - "default": "services", - "description": "Babelforce region", - "enum": [ "services", "us-east", "ap-southeast" ], - "order": 1 - }, - "access_key_id": { - "type": "string", - "title": "Access Key ID", - "description": "The Babelforce access key ID", - "airbyte_secret": true, - "order": 2 - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "The Babelforce access token", - "airbyte_secret": true, - "order": 3 - }, - "date_created_from": { - "type": "integer", - "title": "Date Created from", - "description": "Timestamp in Unix the replication from Babelforce API will start from. For example 1651363200 which corresponds to 2022-05-01 00:00:00.", - "examples": [ 1651363200 ], - "order": 4 - }, - "date_created_to": { - "type": "integer", - "title": "Date Created to", - "description": "Timestamp in Unix the replication from Babelforce will be up to. For example 1651363200 which corresponds to 2022-05-01 00:00:00.", - "examples": [ 1651363200 ], - "order": 5 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "90916976-a132-4ce9-8bce-82a03dd58788", - "name": "BambooHR", - "dockerRepository": "airbyte/source-bamboo-hr", - "dockerImageTag": "0.2.2", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/bamboo-hr", - "icon": "bamboohr.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/bamboo-hr", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Bamboo HR Spec", - "type": "object", - "required": [ "subdomain", "api_key" ], - "additionalProperties": true, - "properties": { - "subdomain": { - "type": "string", - "description": "Sub Domain of bamboo hr" - }, - "api_key": { - "type": "string", - "description": "Api key of bamboo hr", - "airbyte_secret": true - }, - "custom_reports_fields": { - "type": "string", - "default": "", - "description": "Comma-separated list of fields to include in custom reports." - }, - "custom_reports_include_default_fields": { - "type": "boolean", - "default": true, - "description": "If true, the custom reports endpoint will include the default fields defined here: https://documentation.bamboohr.com/docs/list-of-field-names." - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "59c5501b-9f95-411e-9269-7143c939adbd", - "name": "BigCommerce", - "dockerRepository": "airbyte/source-bigcommerce", - "dockerImageTag": "0.1.10", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/bigcommerce", - "icon": "bigcommerce.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/bigcommerce", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "BigCommerce Source CDK Specifications", - "type": "object", - "required": [ "start_date", "store_hash", "access_token" ], - "additionalProperties": true, - "properties": { - "start_date": { - "type": "string", - "title": "Start Date", - "description": "The date you would like to replicate data. Format: YYYY-MM-DD.", - "examples": [ "2021-01-01" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" - }, - "store_hash": { - "type": "string", - "title": "Store Hash", - "description": "The hash code of the store. For https://api.bigcommerce.com/stores/HASH_CODE/v3/, The store's hash code is 'HASH_CODE'." - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "Access Token for making authenticated requests.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "bfd1ddf8-ae8a-4620-b1d7-55597d2ba08c", - "name": "BigQuery", - "dockerRepository": "airbyte/source-bigquery", - "dockerImageTag": "0.2.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/bigquery", - "icon": "bigquery.svg", - "sourceType": "database", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/bigquery", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "BigQuery Source Spec", - "type": "object", - "required": [ "project_id", "credentials_json" ], - "properties": { - "project_id": { - "type": "string", - "description": "The GCP project ID for the project containing the target BigQuery dataset.", - "title": "Project ID" - }, - "dataset_id": { - "type": "string", - "description": "The dataset ID to search for tables and views. If you are only loading data from one dataset, setting this option could result in much faster schema discovery.", - "title": "Default Dataset ID" - }, - "credentials_json": { - "type": "string", - "description": "The contents of your Service Account Key JSON file. See the docs for more information on how to obtain this key.", - "title": "Credentials JSON", - "airbyte_secret": true - } - } - }, - "supportsIncremental": true, - "supportsNormalization": true, - "supportsDBT": true, - "supported_destination_sync_modes": [ ], - "supported_sync_modes": [ "overwrite", "append", "append_dedup" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "47f25999-dd5e-4636-8c39-e7cea2453331", - "name": "Bing Ads", - "dockerRepository": "airbyte/source-bing-ads", - "dockerImageTag": "0.1.19", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/bing-ads", - "icon": "bingads.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/bing-ads", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Bing Ads Spec", - "type": "object", - "required": [ "developer_token", "client_id", "refresh_token", "reports_start_date" ], - "additionalProperties": true, - "properties": { - "auth_method": { - "type": "string", - "const": "oauth2.0" - }, - "tenant_id": { - "type": "string", - "title": "Tenant ID", - "description": "The Tenant ID of your Microsoft Advertising developer application. Set this to \"common\" unless you know you need a different value.", - "airbyte_secret": true, - "default": "common", - "order": 0 - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "The Client ID of your Microsoft Advertising developer application.", - "airbyte_secret": true, - "order": 1 - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "The Client Secret of your Microsoft Advertising developer application.", - "default": "", - "airbyte_secret": true, - "order": 2 - }, - "refresh_token": { - "type": "string", - "title": "Refresh Token", - "description": "Refresh Token to renew the expired Access Token.", - "airbyte_secret": true, - "order": 3 - }, - "developer_token": { - "type": "string", - "title": "Developer Token", - "description": "Developer token associated with user. See more info in the docs.", - "airbyte_secret": true, - "order": 4 - }, - "reports_start_date": { - "type": "string", - "title": "Reports replication start date", - "format": "date", - "default": "2020-01-01", - "description": "The start date from which to begin replicating report data. Any data generated before this date will not be replicated in reports. This is a UTC date in YYYY-MM-DD format.", - "order": 5 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "auth_method" ], - "predicate_value": "oauth2.0", - "oauth_config_specification": { - "oauth_user_input_from_connector_config_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "tenant_id": { - "type": "string", - "path_in_connector_config": [ "tenant_id" ] - } - } - }, - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "refresh_token": { - "type": "string", - "path_in_connector_config": [ "refresh_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "bingads.microsoft.com", "login.microsoftonline.com", "login.live.com", "login.windows-ppe.net", "ads.microsoft.com", "api.ads.microsoft.com" ] - } - }, { - "sourceDefinitionId": "63cea06f-1c75-458d-88fe-ad48c7cb27fd", - "name": "Braintree", - "dockerRepository": "airbyte/source-braintree", - "dockerImageTag": "0.1.4", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/braintree", - "icon": "braintree.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/braintree", - "connectionSpecification": { - "title": "Braintree Spec", - "type": "object", - "properties": { - "merchant_id": { - "title": "Merchant ID", - "description": "The unique identifier for your entire gateway account. See the docs for more information on how to obtain this ID.", - "name": "Merchant ID", - "type": "string" - }, - "public_key": { - "title": "Public Key", - "description": "Braintree Public Key. See the docs for more information on how to obtain this key.", - "name": "Public Key", - "type": "string" - }, - "private_key": { - "title": "Private Key", - "description": "Braintree Private Key. See the docs for more information on how to obtain this key.", - "name": "Private Key", - "airbyte_secret": true, - "type": "string" - }, - "start_date": { - "title": "Start Date", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", - "name": "Start Date", - "examples": [ "2020", "2020-12-30", "2020-11-22 20:20:05" ], - "type": "string", - "format": "date-time" - }, - "environment": { - "title": "Environment", - "description": "Environment specifies where the data will come from.", - "name": "Environment", - "examples": [ "sandbox", "production", "qa", "development" ], - "enum": [ "Development", "Sandbox", "Qa", "Production" ], - "type": "string" - } - }, - "required": [ "merchant_id", "public_key", "private_key", "environment" ] - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "7c37685e-8512-4901-addf-9afbef6c0de9", - "name": "Breezometer", - "dockerRepository": "airbyte/source-breezometer", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/breezometer", - "icon": "breezometer.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/breezometer", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Breezometer Spec", - "type": "object", - "required": [ "api_key", "latitude", "longitude" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "tittle": "API Key", - "description": "Your API Access Key. See here.", - "airbyte_secret": true - }, - "latitude": { - "type": "string", - "tittle": "Latitude", - "description": "Latitude of the monitored location.", - "examples": [ "54.675003" ] - }, - "longitude": { - "type": "string", - "tittle": "Longitude", - "description": "Longitude of the monitored location.", - "examples": [ "-113.550282" ] - }, - "days_to_forecast": { - "type": "integer", - "tittle": "Days to Forecast", - "description": "Number of days to forecast. Minimum 1, maximum 3. Valid for Polen and Weather Forecast streams.", - "examples": [ 3 ] - }, - "hours_to_forecast": { - "type": "integer", - "tittle": "Hours to Forecast", - "description": "Number of hours to forecast. Minimum 1, maximum 96. Valid for Air Quality Forecast stream.", - "examples": [ 30 ] - }, - "historic_hours": { - "type": "integer", - "tittle": "Historic Hours", - "description": "Number of hours retireve from Air Quality History stream. Minimum 1, maximum 720.", - "examples": [ 30 ] - }, - "radius": { - "type": "integer", - "tittle": "Radius", - "description": "Desired radius from the location provided. Minimum 5, maximum 100. Valid for Wildfires streams.", - "examples": [ 50 ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "dc98a6ad-2dd1-47b6-9529-2ec35820f9c6", - "name": "CallRail", - "dockerRepository": "airbyte/source-callrail", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/callrail", - "icon": "callrail.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/callrail", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Call Rail Spec", - "type": "object", - "required": [ "api_key", "account_id", "start_date" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "description": "API access key", - "airbyte_secret": true - }, - "account_id": { - "type": "string", - "description": "Account ID", - "airbyte_secret": true - }, - "start_date": { - "type": "string", - "description": "Start getting data from that date.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "%Y-%m-%d" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "bb1a6d31-6879-4819-a2bd-3eed299ea8e2", - "name": "Cart.com", - "dockerRepository": "airbyte/source-cart", - "dockerImageTag": "0.2.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/cart", - "icon": "cart.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/cart", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Cart.com Spec", - "type": "object", - "required": [ "start_date" ], - "additionalProperties": true, - "properties": { - "credentials": { - "title": "Authorization Method", - "description": "", - "type": "object", - "oneOf": [ { - "title": "Central API Router", - "type": "object", - "order": 0, - "required": [ "auth_type", "user_name", "user_secret", "site_id" ], - "properties": { - "auth_type": { - "type": "string", - "const": "CENTRAL_API_ROUTER", - "order": 0 - }, - "user_name": { - "type": "string", - "title": "User Name", - "description": "Enter your application's User Name", - "airbyte_secret": true, - "order": 1 - }, - "user_secret": { - "type": "string", - "title": "User Secret", - "description": "Enter your application's User Secret", - "airbyte_secret": true, - "order": 2 - }, - "site_id": { - "type": "string", - "title": "Site ID", - "description": "You can determine a site provisioning site Id by hitting https://site.com/store/sitemonitor.aspx and reading the response param PSID", - "airbyte_secret": true, - "order": 3 - } - } - }, { - "title": "Single Store Access Token", - "type": "object", - "order": 1, - "required": [ "auth_type", "access_token", "store_name" ], - "properties": { - "auth_type": { - "type": "string", - "const": "SINGLE_STORE_ACCESS_TOKEN", - "order": 0 - }, - "access_token": { - "type": "string", - "title": "Access Token", - "airbyte_secret": true, - "order": 1, - "description": "Access Token for making authenticated requests." - }, - "store_name": { - "type": "string", - "title": "Store Name", - "order": 2, - "description": "The name of Cart.com Online Store. All API URLs start with https://[mystorename.com]/api/v1/, where [mystorename.com] is the domain name of your store." - } - } - } ] - }, - "start_date": { - "title": "Start Date", - "type": "string", - "description": "The date from which you'd like to replicate the data", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2021-01-01T00:00:00Z" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "686473f1-76d9-4994-9cc7-9b13da46147c", - "name": "Chargebee", - "dockerRepository": "airbyte/source-chargebee", - "dockerImageTag": "0.2.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/chargebee", - "icon": "chargebee.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://apidocs.chargebee.com/docs/api", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Chargebee Spec", - "type": "object", - "required": [ "site", "site_api_key", "start_date", "product_catalog" ], - "additionalProperties": true, - "properties": { - "site_api_key": { - "type": "string", - "title": "API Key", - "description": "Chargebee API Key. See the docs for more information on how to obtain this key.", - "airbyte_secret": true, - "order": 0 - }, - "site": { - "type": "string", - "title": "Site", - "description": "The site prefix for your Chargebee instance.", - "examples": [ "airbyte-test" ], - "order": 1 - }, - "start_date": { - "type": "string", - "format": "date-time", - "title": "Start Date", - "description": "UTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2021-01-25T00:00:00Z" ], - "order": 2 - }, - "product_catalog": { - "type": "string", - "title": "Product Catalog", - "description": "Product Catalog version of your Chargebee site. Instructions on how to find your version you may find here under `API Version` section.", - "enum": [ "1.0", "2.0" ], - "order": 3 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "*.chargebee.com" ] - } - }, { - "sourceDefinitionId": "9b2d3607-7222-4709-9fa2-c2abdebbdd88", - "name": "Chargify", - "dockerRepository": "airbyte/source-chargify", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/chargify", - "icon": "chargify.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/chargify", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Chargify Spec", - "type": "object", - "required": [ "api_key", "domain" ], - "additionalProperties": false, - "properties": { - "api_key": { - "type": "string", - "description": "Chargify API Key.", - "airbyte_secret": true - }, - "domain": { - "type": "string", - "description": "Chargify domain. Normally this domain follows the following format companyname.chargify.com" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "b6604cbd-1b12-4c08-8767-e140d0fb0877", - "name": "Chartmogul", - "dockerRepository": "airbyte/source-chartmogul", - "dockerImageTag": "0.2.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/chartmogul", - "icon": "chartmogul.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/chartmogul", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Chartmogul Spec", - "type": "object", - "required": [ "api_key", "start_date", "interval" ], - "properties": { - "api_key": { - "type": "string", - "title": "API key", - "description": "Your Chartmogul API key. See the docs for info on how to obtain this.", - "airbyte_secret": true, - "order": 0 - }, - "start_date": { - "type": "string", - "title": "Start date", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. When feasible, any data before this date will not be replicated.", - "examples": [ "2017-01-25T00:00:00Z" ], - "order": 1, - "format": "date-time" - }, - "interval": { - "type": "string", - "title": "Interval", - "description": "Some APIs such as Metrics require intervals to cluster data.", - "enum": [ "day", "week", "month", "quarter" ], - "default": "month", - "order": 2 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "api.chartmogul.com" ] - } - }, { - "sourceDefinitionId": "bad83517-5e54-4a3d-9b53-63e85fbd4d7c", - "name": "ClickHouse", - "dockerRepository": "airbyte/source-clickhouse", - "dockerImageTag": "0.1.17", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/clickhouse", - "icon": "clickhouse.svg", - "sourceType": "database", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/clickhouse", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "ClickHouse Source Spec", - "type": "object", - "required": [ "host", "port", "database", "username" ], - "properties": { - "host": { - "description": "The host endpoint of the Clickhouse cluster.", - "title": "Host", - "type": "string", - "order": 0 - }, - "port": { - "description": "The port of the database.", - "title": "Port", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 8123, - "examples": [ "8123" ], - "order": 1 - }, - "database": { - "description": "The name of the database.", - "title": "Database", - "type": "string", - "examples": [ "default" ], - "order": 2 - }, - "username": { - "description": "The username which is used to access the database.", - "title": "Username", - "type": "string", - "order": 3 - }, - "password": { - "description": "The password associated with this username.", - "title": "Password", - "type": "string", - "airbyte_secret": true, - "order": 4 - }, - "jdbc_url_params": { - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (Eg. key1=value1&key2=value2&key3=value3). For more information read about JDBC URL parameters.", - "title": "JDBC URL Parameters (Advanced)", - "type": "string", - "order": 5 - }, - "ssl": { - "title": "SSL Connection", - "description": "Encrypt data using SSL.", - "type": "boolean", - "default": true, - "order": 6 - }, - "tunnel_method": { - "type": "object", - "title": "SSH Tunnel Method", - "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", - "oneOf": [ { - "title": "No Tunnel", - "required": [ "tunnel_method" ], - "properties": { - "tunnel_method": { - "description": "No ssh tunnel needed to connect to database", - "type": "string", - "const": "NO_TUNNEL", - "order": 0 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host.", - "type": "string", - "order": 3 - }, - "ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - }, { - "title": "Password Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host", - "type": "string", - "order": 3 - }, - "tunnel_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 4 - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "allowedHosts": { - "hosts": [ "${host}", "${tunnel_method.tunnel_host}" ] - } - }, { - "sourceDefinitionId": "311a7a27-3fb5-4f7e-8265-5e4afe258b66", - "name": "ClickUp", - "dockerRepository": "airbyte/source-clickup-api", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/click-up", - "icon": "clickup.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "ClickUp Api Spec", - "type": "object", - "required": [ "api_token" ], - "additionalProperties": true, - "properties": { - "api_token": { - "type": "string", - "description": "Every ClickUp API call required authentication. This field is your personal API token. See here.", - "airbyte_secret": true - }, - "team_id": { - "type": "string", - "description": "The ID of your team in ClickUp. Retrieve it from the `/team` of the ClickUp API. See here." - }, - "space_id": { - "type": "string", - "description": "The ID of your space in your workspace. Retrieve it from the `/team/{team_id}/space` of the ClickUp API. See here." - }, - "folder_id": { - "type": "string", - "description": "The ID of your folder in your space. Retrieve it from the `/space/{space_id}/folder` of the ClickUp API. See here." - }, - "list_id": { - "type": "string", - "description": "The ID of your list in your folder. Retrieve it from the `/folder/{folder_id}/list` of the ClickUp API. See here." - }, - "include_closed_tasks": { - "title": "Include Closed Tasks", - "type": "boolean", - "default": false, - "description": "Include or exclude closed tasks. By default, they are excluded. See here." - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "dfffecb7-9a13-43e9-acdc-b92af7997ca9", - "name": "Close.com", - "dockerRepository": "airbyte/source-close-com", - "dockerImageTag": "0.2.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/close-com", - "icon": "close.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/close-com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Close.com Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "description": "Close.com API key (usually starts with 'api_'; find yours here).", - "airbyte_secret": true - }, - "start_date": { - "type": "string", - "description": "The start date to sync data. Leave blank for full sync. Format: YYYY-MM-DD.", - "examples": [ "2021-01-01" ], - "default": "2021-01-01", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "format": "date-time" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "api.close.com" ] - } - }, { - "sourceDefinitionId": "9cdd4183-d0ba-40c3-aad3-6f46d4103974", - "name": "CoinGecko Coins", - "dockerRepository": "airbyte/source-coingecko-coins", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/coingecko-coins", - "icon": "coingeckocoins.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "CoinGecko Coins Spec", - "type": "object", - "required": [ "coin_id", "vs_currency", "days", "start_date" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "description": "API Key (for pro users)", - "airbyte_secret": true, - "order": 0 - }, - "coin_id": { - "type": "string", - "description": "CoinGecko coin ID (e.g. bitcoin). Can be retrieved from the\n`/coins/list` endpoint.\n", - "order": 1 - }, - "vs_currency": { - "type": "string", - "description": "The target currency of market data (e.g. usd, eur, jpy, etc.)\n", - "order": 2 - }, - "days": { - "type": "string", - "description": "The number of days of data for market chart.\n", - "enum": [ "1", "7", "14", "30", "90", "180", "365", "max" ], - "default": "30", - "order": 3 - }, - "start_date": { - "type": "string", - "description": "The start date for the historical data stream in dd-mm-yyyy format.\n", - "format": "date", - "pattern": "^[0-9]{2}-[0-9]{2}-[0-9]{4}$", - "order": 4 - }, - "end_date": { - "type": "string", - "description": "The end date for the historical data stream in dd-mm-yyyy format.\n", - "format": "date", - "pattern": "^[0-9]{2}-[0-9]{2}-[0-9]{4}$", - "order": 5 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "9fa5862c-da7c-11eb-8d19-0242ac130003", - "name": "Cockroachdb", - "dockerRepository": "airbyte/source-cockroachdb", - "dockerImageTag": "0.1.22", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/cockroachdb", - "icon": "cockroachdb.svg", - "sourceType": "database", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/cockroachdb", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Cockroach Source Spec", - "type": "object", - "required": [ "host", "port", "database", "username" ], - "properties": { - "host": { - "title": "Host", - "description": "Hostname of the database.", - "type": "string", - "order": 0 - }, - "port": { - "title": "Port", - "description": "Port of the database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 5432, - "examples": [ "5432" ], - "order": 1 - }, - "database": { - "title": "DB Name", - "description": "Name of the database.", - "type": "string", - "order": 2 - }, - "username": { - "title": "User", - "description": "Username to use to access the database.", - "type": "string", - "order": 3 - }, - "password": { - "title": "Password", - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 4 - }, - "jdbc_url_params": { - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (Eg. key1=value1&key2=value2&key3=value3). For more information read about JDBC URL parameters.", - "title": "JDBC URL Parameters (Advanced)", - "type": "string", - "order": 5 - }, - "ssl": { - "title": "Connect using SSL", - "description": "Encrypt client/server communications for increased security.", - "type": "boolean", - "default": false, - "order": 6 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "allowedHosts": { - "hosts": [ "${host}" ] - } - }, { - "sourceDefinitionId": "27f910fd-f832-4b2e-bcfd-6ab342e434d8", - "name": "Coda", - "dockerRepository": "airbyte/source-coda", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/coda", - "icon": "coda.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/coda", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Required attributes for hitting apis", - "type": "object", - "required": [ "auth_token" ], - "additionalProperties": true, - "properties": { - "auth_token": { - "title": "Authentication token", - "type": "string", - "description": "Bearer token", - "airbyte_secret": true, - "order": 0 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "919984ef-53a2-479b-8ffe-9c1ddb9fc3f3", - "name": "Coin API", - "dockerRepository": "airbyte/source-coin-api", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/coin-api", - "icon": "coinapi.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/coin-api", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Coin API Spec", - "type": "object", - "required": [ "api_key", "environment", "symbol_id", "period", "start_date" ], - "properties": { - "api_key": { - "type": "string", - "description": "API Key", - "airbyte_secret": true, - "order": 0 - }, - "environment": { - "type": "string", - "description": "The environment to use. Either sandbox or production.\n", - "enum": [ "sandbox", "production" ], - "default": "sandbox", - "order": 1 - }, - "symbol_id": { - "type": "string", - "description": "The symbol ID to use. See the documentation for a list.\nhttps://docs.coinapi.io/#list-all-symbols-get\n", - "order": 2 - }, - "period": { - "type": "string", - "description": "The period to use. See the documentation for a list. https://docs.coinapi.io/#list-all-periods-get", - "examples": [ "5SEC", "2MTH" ] - }, - "start_date": { - "type": "string", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}$", - "description": "The start date in ISO 8601 format.", - "examples": [ "2019-01-01T00:00:00" ] - }, - "end_date": { - "type": "string", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}$", - "description": "The end date in ISO 8601 format. If not supplied, data will be returned\nfrom the start date to the current time, or when the count of result\nelements reaches its limit.\n", - "examples": [ "2019-01-01T00:00:00" ] - }, - "limit": { - "type": "integer", - "description": "The maximum number of elements to return. If not supplied, the default\nis 100. For numbers larger than 100, each 100 items is counted as one\nrequest for pricing purposes. Maximum value is 100000.\n", - "minimum": 1, - "maximum": 100000, - "default": 100 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "239463f5-64bb-4d88-b4bd-18ce673fd572", - "name": "CoinMarketCap", - "dockerRepository": "airbyte/source-coinmarketcap", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/coinmarketcap", - "icon": "coinmarketcap.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/coinmarketcap", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Coinmarketcap Spec", - "type": "object", - "required": [ "api_key", "data_type" ], - "additionalProperties": true, - "properties": { - "api_key": { - "title": "API Key", - "type": "string", - "description": "Your API Key. See here. The token is case sensitive.", - "airbyte_secret": true - }, - "data_type": { - "title": "Data type", - "type": "string", - "enum": [ "latest", "historical" ], - "description": "/latest: Latest market ticker quotes and averages for cryptocurrencies and exchanges. /historical: Intervals of historic market data like OHLCV data or data for use in charting libraries. See here." - }, - "symbols": { - "title": "Symbol", - "type": "array", - "items": { - "type": "string" - }, - "description": "Cryptocurrency symbols. (only used for quotes stream)", - "minItems": 1, - "examples": [ "AVAX", "BTC" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "008b2e26-11a3-11ec-82a8-0242ac130003", - "name": "Commercetools", - "dockerRepository": "airbyte/source-commercetools", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/commercetools", - "icon": "commercetools.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/commercetools", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Commercetools Source CDK Specifications", - "type": "object", - "required": [ "region", "start_date", "host", "project_key", "client_id", "client_secret" ], - "additionalProperties": false, - "properties": { - "region": { - "type": "string", - "description": "The region of the platform.", - "examples": [ "us-central1", "australia-southeast1" ] - }, - "host": { - "type": "string", - "enum": [ "gcp", "aws" ], - "description": "The cloud provider your shop is hosted. See: https://docs.commercetools.com/api/authorization" - }, - "start_date": { - "type": "string", - "description": "The date you would like to replicate data. Format: YYYY-MM-DD.", - "examples": [ "2021-01-01" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" - }, - "project_key": { - "type": "string", - "description": "The project key" - }, - "client_id": { - "type": "string", - "description": "Id of API Client.", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "description": "The password of secret of API Client.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "4fd7565c-8b99-439b-80d0-2d965e1d958c", - "name": "ConfigCat", - "dockerRepository": "airbyte/source-configcat", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/configcat", - "icon": "configcat.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/configcat", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Configcat Spec", - "type": "object", - "required": [ "username", "password" ], - "additionalProperties": true, - "properties": { - "username": { - "title": "Username", - "type": "string", - "description": "Basic auth user name. See here." - }, - "password": { - "title": "Password", - "type": "string", - "description": "Basic auth password. See here.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "cf40a7f8-71f8-45ce-a7fa-fca053e4028c", - "name": "Confluence", - "dockerRepository": "airbyte/source-confluence", - "dockerImageTag": "0.1.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/confluence", - "icon": "confluence.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Confluence Spec", - "type": "object", - "required": [ "api_token", "domain_name", "email" ], - "additionalProperties": true, - "properties": { - "api_token": { - "title": "API Token", - "type": "string", - "description": "Please follow the Jira confluence for generating an API token: generating an API token.", - "airbyte_secret": true - }, - "domain_name": { - "title": "Domain name", - "type": "string", - "description": "Your Confluence domain name", - "examples": [ "example.atlassian.net" ] - }, - "email": { - "title": "Email", - "type": "string", - "description": "Your Confluence login email", - "examples": [ "abc@example.com" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "${subdomain}.atlassian.net" ] - } - }, { - "sourceDefinitionId": "be9ee02f-6efe-4970-979b-95f797a37188", - "name": "ConvertKit", - "dockerRepository": "airbyte/source-convertkit", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/convertkit", - "icon": "convertkit.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/convertkit", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Convertkit Spec", - "type": "object", - "required": [ "api_secret" ], - "additionalProperties": true, - "properties": { - "api_secret": { - "type": "string", - "description": "API Secret", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "f39208dc-7e1c-48b8-919b-5006360cc27f", - "name": "Commcare", - "dockerRepository": "airbyte/source-commcare", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/commcare", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Commcare Source Spec", - "type": "object", - "required": [ "api_key", "app_id", "start_date" ], - "properties": { - "api_key": { - "type": "string", - "title": "API Key", - "description": "Commcare API Key", - "airbyte_secret": true, - "order": 0 - }, - "project_space": { - "type": "string", - "title": "Project Space", - "description": "Project Space for commcare", - "order": 1 - }, - "app_id": { - "type": "string", - "title": "Application ID", - "description": "The Application ID we are interested in", - "airbyte_secret": true, - "order": 2 - }, - "start_date": { - "type": "string", - "title": "Start date for extracting records", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "default": "2022-10-01T00:00:00Z", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Only records after this date will be replicated.", - "order": 3 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "44f3002f-2df9-4f6d-b21c-02cd3b47d0dc", - "name": "Copper", - "dockerRepository": "airbyte/source-copper", - "dockerImageTag": "0.2.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/copper", - "icon": "copper.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/copper", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Copper Spec", - "type": "object", - "required": [ "api_key", "user_email" ], - "properties": { - "api_key": { - "type": "string", - "title": "API Key", - "description": "Copper API key", - "airbyte_secret": true - }, - "user_email": { - "type": "string", - "title": "User email", - "description": "user email used to login in to Copper" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "c332628c-f55c-4017-8222-378cfafda9b2", - "name": "Convex", - "dockerRepository": "airbyte/source-convex", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/convex", - "icon": "convex.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/convex", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Convex Source Spec", - "type": "object", - "required": [ "deployment_url", "access_key" ], - "properties": { - "deployment_url": { - "type": "string", - "title": "Deployment Url", - "examples": [ "https://murky-swan-635.convex.cloud", "https://cluttered-owl-337.convex.cloud" ] - }, - "access_key": { - "type": "string", - "title": "Access Key", - "description": "API access key used to retrieve data from Convex.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "0541b2cd-2367-4986-b5f1-b79ff55439e4", - "name": "Courier", - "dockerRepository": "airbyte/source-courier", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/courier", - "icon": "courier.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/courier", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Courier Source Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "description": "Courier API Key to retrieve your data.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "e71aae8a-5143-11ed-bdc3-0242ac120002", - "name": "Clockify", - "dockerRepository": "airbyte/source-clockify", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/clockify", - "icon": "clockify.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/clockify", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Clockify Spec", - "type": "object", - "required": [ "workspace_id", "api_key" ], - "additionalProperties": true, - "properties": { - "workspace_id": { - "title": "Workspace Id", - "description": "WorkSpace Id", - "type": "string" - }, - "api_key": { - "title": "API Key", - "description": "You can get your api access_key here This API is Case Sensitive.", - "type": "string", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "c47d6804-8b98-449f-970a-5ddb5cb5d7aa", - "name": "Customer.io", - "dockerRepository": "farosai/airbyte-customer-io-source", - "dockerImageTag": "0.1.23", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/customer-io", - "icon": "customer-io.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.faros.ai", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Customer.io Spec", - "type": "object", - "required": [ "app_api_key" ], - "additionalProperties": false, - "properties": { - "app_api_key": { - "type": "string", - "title": "Customer.io App API Key", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "1cfc30c7-82db-43f4-9fd7-ac1b42312cda", - "name": "Datadog", - "dockerRepository": "airbyte/source-datadog", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/datadog", - "icon": "datadog.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/datadog", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Datadog Source Spec", - "type": "object", - "required": [ "api_key", "application_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "title": "API Key", - "description": "Datadog API key", - "type": "string", - "airbyte_secret": true, - "order": 1 - }, - "application_key": { - "title": "Application Key", - "description": "Datadog application key", - "type": "string", - "airbyte_secret": true, - "order": 2 - }, - "query": { - "title": "Query", - "description": "The search query. This just applies to Incremental syncs. If empty, it'll collect all logs.", - "type": "string", - "order": 3 - }, - "max_records_per_request": { - "type": "integer", - "title": "Max records per requests", - "default": 5000, - "minimum": 1, - "maximum": 5000, - "description": "Maximum number of records to collect per request.", - "order": 4 - }, - "start_date": { - "title": "Start date", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated. This just applies to Incremental syncs.", - "type": "string", - "examples": [ "2022-10-01T00:00:00Z" ], - "order": 5 - }, - "end_date": { - "title": "End date", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Data after this date will not be replicated. An empty value will represent the current datetime for each execution. This just applies to Incremental syncs.", - "examples": [ "2022-10-01T00:00:00Z" ], - "type": "string", - "order": 6 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "8e1ae2d2-4790-44d3-9d83-75b3fc3940ff", - "name": "Datascope", - "dockerRepository": "airbyte/source-datascope", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/datascope", - "icon": "datascope.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/datascope", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Datascope Spec", - "type": "object", - "required": [ "api_key", "start_date" ], - "additionalProperties": true, - "properties": { - "start_date": { - "title": "Start Date", - "type": "string", - "description": "Start date for the data to be replicated", - "examples": [ "dd/mm/YYYY HH:MM" ], - "pattern": "^[0-9]{2}/[0-9]{2}/[0-9]{4} [0-9]{2}:[0-9]{2}$" - }, - "api_key": { - "title": "Authorization", - "type": "string", - "description": "API Key", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "cc88c43f-6f53-4e8a-8c4d-b284baaf9635", - "name": "Delighted", - "dockerRepository": "airbyte/source-delighted", - "dockerImageTag": "0.2.2", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/delighted", - "icon": "delighted.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Delighted Spec", - "type": "object", - "required": [ "since", "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "title": "Delighted API Key", - "type": "string", - "description": "A Delighted API key.", - "airbyte_secret": true, - "order": 0 - }, - "since": { - "title": "Date Since", - "type": "string", - "description": "The date from which you'd like to replicate the data", - "examples": [ "2022-05-30T04:50:23Z", "2022-05-30 04:50:23" ], - "pattern": "^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?Z?$", - "order": 1, - "format": "date-time" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "api.delighted.com" ] - } - }, { - "sourceDefinitionId": "0b5c867e-1b12-4d02-ab74-97b2184ff6d7", - "name": "Dixa", - "dockerRepository": "airbyte/source-dixa", - "dockerImageTag": "0.1.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/dixa", - "icon": "dixa.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/dixa", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Dixa Spec", - "type": "object", - "required": [ "api_token", "start_date" ], - "additionalProperties": false, - "properties": { - "api_token": { - "type": "string", - "description": "Dixa API token", - "airbyte_secret": true - }, - "start_date": { - "type": "string", - "description": "The connector pulls records updated from this date onwards.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "YYYY-MM-DD" ] - }, - "batch_size": { - "type": "integer", - "description": "Number of days to batch into one request. Max 31.", - "pattern": "^[0-9]{1,2}$", - "examples": [ 1, 31 ], - "default": 31 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "72d405a3-56d8-499f-a571-667c03406e43", - "name": "Dockerhub", - "dockerRepository": "airbyte/source-dockerhub", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/dockerhub", - "icon": "dockerhub.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/dockerhub", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Dockerhub Spec", - "type": "object", - "required": [ "docker_username" ], - "additionalProperties": false, - "properties": { - "docker_username": { - "type": "string", - "description": "Username of DockerHub person or organization (for https://hub.docker.com/v2/repositories/USERNAME/ API call)", - "pattern": "^[a-z0-9_\\-]+$", - "examples": [ "airbyte" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "d99e9ace-8621-46c2-9144-76ae4751d64b", - "name": "Dremio", - "dockerRepository": "airbyte/source-dremio", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/dremio", - "icon": "dremio.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/dremio", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Dremio Spec", - "type": "object", - "additionalProperties": true, - "required": [ "api_key", "base_url" ], - "properties": { - "api_key": { - "type": "string", - "description": "API Key that is generated when you authenticate to Dremio API", - "airbyte_secret": true - }, - "base_url": { - "type": "string", - "description": "URL of your Dremio instance", - "default": "https://app.dremio.cloud" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "445831eb-78db-4b1f-8f1f-0d96ad8739e2", - "name": "Drift", - "dockerRepository": "airbyte/source-drift", - "dockerImageTag": "0.2.6", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/drift", - "icon": "drift.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/drift", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Drift Spec", - "type": "object", - "required": [ ], - "additionalProperties": true, - "properties": { - "credentials": { - "title": "Authorization Method", - "type": "object", - "oneOf": [ { - "type": "object", - "title": "OAuth2.0", - "required": [ "client_id", "client_secret", "access_token", "refresh_token" ], - "properties": { - "credentials": { - "type": "string", - "const": "oauth2.0", - "order": 0 - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "The Client ID of your Drift developer application.", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "The Client Secret of your Drift developer application.", - "airbyte_secret": true - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "Access Token for making authenticated requests.", - "airbyte_secret": true - }, - "refresh_token": { - "type": "string", - "title": "Refresh Token", - "description": "Refresh Token to renew the expired Access Token.", - "default": "", - "airbyte_secret": true - } - } - }, { - "title": "Access Token", - "type": "object", - "required": [ "access_token" ], - "properties": { - "credentials": { - "type": "string", - "const": "access_token", - "order": 0 - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "Drift Access Token. See the docs for more information on how to generate this key.", - "airbyte_secret": true - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ "credentials", "0" ], - "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], - "oauthFlowOutputParameters": [ [ "access_token" ], [ "refresh_token" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "allowedHosts": { - "hosts": [ "driftapi.com" ] - } - }, { - "sourceDefinitionId": "1356e1d9-977f-4057-ad4b-65f25329cf61", - "name": "DV 360", - "dockerRepository": "airbyte/source-dv-360", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/dv-360", - "icon": "dv360.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Display & Video 360 Spec", - "type": "object", - "required": [ "credentials", "partner_id", "start_date" ], - "additionalProperties": true, - "properties": { - "credentials": { - "type": "object", - "description": "Oauth2 credentials", - "order": 0, - "required": [ "access_token", "refresh_token", "token_uri", "client_id", "client_secret" ], - "properties": { - "access_token": { - "type": "string", - "description": "Access token", - "airbyte_secret": true - }, - "refresh_token": { - "type": "string", - "description": "Refresh token", - "airbyte_secret": true - }, - "token_uri": { - "type": "string", - "description": "Token URI", - "airbyte_secret": true - }, - "client_id": { - "type": "string", - "description": "Client ID", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "description": "Client secret", - "airbyte_secret": true - } - } - }, - "partner_id": { - "type": "integer", - "description": "Partner ID", - "order": 1 - }, - "start_date": { - "type": "string", - "description": "UTC date and time in the format 2017-01-25. Any data before this date will not be replicated", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "order": 2 - }, - "end_date": { - "type": "string", - "description": "UTC date and time in the format 2017-01-25. Any data after this date will not be replicated.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "order": 3 - }, - "filters": { - "type": "array", - "description": "filters for the dimensions. each filter object had 2 keys: 'type' for the name of the dimension to be used as. and 'value' for the value of the filter", - "default": [ ], - "order": 4 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "50401137-8871-4c5a-abb7-1f5fda35545a", - "name": "DynamoDB", - "dockerRepository": "airbyte/source-dynamodb", - "dockerImageTag": "0.1.2", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/dynamodb", - "icon": "dynamodb.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/dynamodb", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Dynamodb Source Spec", - "type": "object", - "required": [ "access_key_id", "secret_access_key" ], - "additionalProperties": false, - "properties": { - "endpoint": { - "title": "Dynamodb Endpoint", - "type": "string", - "default": "", - "description": "the URL of the Dynamodb database", - "examples": [ "https://{aws_dynamo_db_url}.com" ] - }, - "region": { - "title": "Dynamodb Region", - "type": "string", - "default": "", - "description": "The region of the Dynamodb database", - "enum": [ "", "us-east-1", "us-east-2", "us-west-1", "us-west-2", "af-south-1", "ap-east-1", "ap-south-1", "ap-northeast-1", "ap-northeast-2", "ap-northeast-3", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "cn-north-1", "cn-northwest-1", "eu-central-1", "eu-north-1", "eu-south-1", "eu-west-1", "eu-west-2", "eu-west-3", "sa-east-1", "me-south-1", "us-gov-east-1", "us-gov-west-1" ] - }, - "access_key_id": { - "title": "Dynamodb Key Id", - "type": "string", - "description": "The access key id to access Dynamodb. Airbyte requires read permissions to the database", - "airbyte_secret": true, - "examples": [ "A012345678910EXAMPLE" ] - }, - "secret_access_key": { - "title": "Dynamodb Access Key", - "type": "string", - "description": "The corresponding secret to the access key id.", - "airbyte_secret": true, - "examples": [ "a012345678910ABCDEFGH/AbCdEfGhEXAMPLEKEY" ] - }, - "reserved_attribute_names": { - "title": "Reserved attribute names", - "type": "string", - "description": "Comma separated reserved attribute names present in your tables", - "airbyte_secret": true, - "examples": [ "name, field_name, field-name" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "d53f9084-fa6b-4a5a-976c-5b8392f4ad8a", - "name": "E2E Testing", - "dockerRepository": "airbyte/source-e2e-test", - "dockerImageTag": "2.1.4", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/e2e-test", - "icon": "airbyte.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/e2e-test", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "E2E Test Source Spec", - "additionalProperties": true, - "type": "object", - "oneOf": [ { - "title": "Legacy Infinite Feed", - "description": "This mode is used for Platform acceptance tests. The catalog has one \"data\" stream, which has one string field \"column1\". This mode will emit messages infinitely.", - "required": [ "type", "max_records" ], - "type": "object", - "additionalProperties": true, - "properties": { - "type": { - "type": "string", - "const": "INFINITE_FEED", - "default": "INFINITE_FEED" - }, - "max_records": { - "title": "Max Records", - "description": "Number of records to emit. If not set, defaults to infinity.", - "type": "integer" - }, - "message_interval": { - "title": "Message Interval", - "description": "Interval between messages in ms.", - "type": "integer" - } - } - }, { - "title": "Legacy Exception After N", - "description": "This mode is used for Platform acceptance tests. The catalog has one \"data\" stream, which has one string field \"column1\". This mode will throw an exception after N messages.", - "required": [ "type", "throw_after_n_records" ], - "type": "object", - "additionalProperties": true, - "properties": { - "type": { - "type": "string", - "const": "EXCEPTION_AFTER_N", - "default": "EXCEPTION_AFTER_N" - }, - "throw_after_n_records": { - "title": "Throw After N Records", - "description": "Number of records to emit before throwing an exception. Min 1.", - "type": "integer", - "min": 1 - } - } - }, { - "title": "Continuous Feed", - "type": "object", - "required": [ "type", "max_messages", "mock_catalog" ], - "additionalProperties": true, - "properties": { - "type": { - "type": "string", - "const": "CONTINUOUS_FEED", - "default": "CONTINUOUS_FEED", - "order": 10 - }, - "max_messages": { - "title": "Max Records", - "description": "Number of records to emit per stream. Min 1. Max 100 billion.", - "type": "integer", - "default": 100, - "min": 1, - "max": 100000000000, - "order": 20 - }, - "seed": { - "title": "Random Seed", - "description": "When the seed is unspecified, the current time millis will be used as the seed. Range: [0, 1000000].", - "type": "integer", - "default": 0, - "examples": [ 42 ], - "min": 0, - "max": 1000000, - "order": 30 - }, - "message_interval_ms": { - "title": "Message Interval (ms)", - "description": "Interval between messages in ms. Min 0 ms. Max 60000 ms (1 minute).", - "type": "integer", - "min": 0, - "max": 60000, - "default": 0, - "order": 40 - }, - "mock_catalog": { - "title": "Mock Catalog", - "type": "object", - "order": 50, - "oneOf": [ { - "title": "Single Schema", - "description": "A catalog with one or multiple streams that share the same schema.", - "type": "object", - "required": [ "type", "stream_name", "stream_schema" ], - "properties": { - "type": { - "type": "string", - "const": "SINGLE_STREAM", - "default": "SINGLE_STREAM" - }, - "stream_name": { - "title": "Stream Name", - "description": "Name of the data stream.", - "type": "string", - "default": "data_stream" - }, - "stream_schema": { - "title": "Stream Schema", - "description": "A Json schema for the stream. The schema should be compatible with draft-07. See this doc for examples.", - "type": "string", - "default": "{ \"type\": \"object\", \"properties\": { \"column1\": { \"type\": \"string\" } } }" - }, - "stream_duplication": { - "title": "Duplicate the stream N times", - "description": "Duplicate the stream for easy load testing. Each stream name will have a number suffix. For example, if the stream name is \"ds\", the duplicated streams will be \"ds_0\", \"ds_1\", etc.", - "type": "integer", - "default": 1, - "min": 1, - "max": 10000 - } - } - }, { - "title": "Multi Schema", - "type": "object", - "description": "A catalog with multiple data streams, each with a different schema.", - "required": [ "type", "stream_schemas" ], - "properties": { - "type": { - "type": "string", - "const": "MULTI_STREAM", - "default": "MULTI_STREAM" - }, - "stream_schemas": { - "title": "Streams and Schemas", - "description": "A Json object specifying multiple data streams and their schemas. Each key in this object is one stream name. Each value is the schema for that stream. The schema should be compatible with draft-07. See this doc for examples.", - "type": "string", - "default": "{ \"stream1\": { \"type\": \"object\", \"properties\": { \"field1\": { \"type\": \"string\" } } }, \"stream2\": { \"type\": \"object\", \"properties\": { \"field1\": { \"type\": \"boolean\" } } } }" - } - } - } ] - } - } - }, { - "title": "Benchmark", - "description": "This mode is used for speed benchmarks. Specifically, it should be used for testing the throughput of the platform and destination. It optimizes for emitting records very quickly, so that it should never be the bottleneck.", - "type": "object", - "required": [ "type", "schema", "terminationCondition" ], - "additionalProperties": true, - "properties": { - "type": { - "type": "string", - "const": "BENCHMARK", - "default": "BENCHMARK" - }, - "schema": { - "title": "Schema", - "description": "schema of the data in the benchmark.", - "type": "string", - "enum": [ "FIVE_STRING_COLUMNS" ] - }, - "terminationCondition": { - "title": "Termination Condition", - "description": "when does the benchmark stop?", - "type": "object", - "oneOf": [ { - "title": "max records", - "type": "object", - "required": [ "type", "max" ], - "properties": { - "type": { - "type": "string", - "const": "MAX_RECORDS", - "default": "MAX_RECORDS" - }, - "max": { - "type": "number" - } - } - } ] - } - } - } ] - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "protocol_version": "0.2.1" - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "46b25e70-c980-4590-a811-8deaf50ee09f", - "name": "EmailOctopus", - "dockerRepository": "airbyte/source-emailoctopus", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/emailoctopus", - "icon": "emailoctopus.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/emailoctopus", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "EmailOctopus Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "title": "EmailOctopus API key", - "description": "EmailOctopus API Key. See the docs for information on how to generate this key.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "e2b40e36-aa0e-4bed-b41b-bcea6fa348b1", - "name": "Exchange Rates Api", - "dockerRepository": "airbyte/source-exchange-rates", - "dockerImageTag": "1.2.8", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/exchangeratesapi", - "icon": "exchangeratesapi.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/exchangeratesapi", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "exchangeratesapi.io Source Spec", - "type": "object", - "required": [ "start_date", "access_key" ], - "additionalProperties": true, - "properties": { - "start_date": { - "type": "string", - "description": "Start getting data from that date.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "YYYY-MM-DD" ], - "format": "date" - }, - "access_key": { - "type": "string", - "description": "Your API Key. See here. The key is case sensitive.", - "airbyte_secret": true - }, - "base": { - "type": "string", - "description": "ISO reference currency. See here. Free plan doesn't support Source Currency Switching, default base currency is EUR", - "examples": [ "EUR", "USD" ] - }, - "ignore_weekends": { - "type": "boolean", - "description": "Ignore weekends? (Exchanges don't run on weekends)", - "default": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "allowedHosts": { - "hosts": [ "${subdomain}.apilayer.com", "apilayer.com" ] - } - }, { - "sourceDefinitionId": "6babfc42-c734-4ef6-a817-6eca15f0f9b7", - "name": "Everhour", - "dockerRepository": "airbyte/source-everhour", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/everhour", - "icon": "everhour.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/everhour", - "connectionSpecification": { - "title": "Everhour Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "title": "API Key", - "description": "Everhour API Key. See the docs for information on how to generate this key.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "allowedHosts": { - "hosts": [ "api.everhour.com" ] - } - }, { - "sourceDefinitionId": "e7778cfc-e97c-4458-9ecb-b4f2bba8946c", - "name": "Facebook Marketing", - "dockerRepository": "airbyte/source-facebook-marketing", - "dockerImageTag": "0.3.4", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/facebook-marketing", - "icon": "facebook.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/facebook-marketing", - "changelogUrl": "https://docs.airbyte.com/integrations/sources/facebook-marketing", - "connectionSpecification": { - "title": "Source Facebook Marketing", - "type": "object", - "properties": { - "account_id": { - "title": "Account ID", - "description": "The Facebook Ad account ID to use when pulling data from the Facebook Marketing API. Open your Meta Ads Manager. The Ad account ID number is in the account dropdown menu or in your browser's address bar. See the docs for more information.", - "order": 0, - "examples": [ "111111111111111" ], - "type": "string" - }, - "start_date": { - "title": "Start Date", - "description": "The date from which you'd like to replicate data for all incremental streams, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", - "order": 1, - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2017-01-25T00:00:00Z" ], - "type": "string", - "format": "date-time" - }, - "end_date": { - "title": "End Date", - "description": "The date until which you'd like to replicate data for all incremental streams, in the format YYYY-MM-DDT00:00:00Z. All data generated between the start date and this end date will be replicated. Not setting this option will result in always syncing the latest data.", - "order": 2, - "pattern": "^$|^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2017-01-26T00:00:00Z" ], - "type": "string" - }, - "access_token": { - "title": "Access Token", - "description": "The value of the generated access token. From your App’s Dashboard, click on \"Marketing API\" then \"Tools\". Select permissions ads_management, ads_read, read_insights, business_management. Then click on \"Get token\". See the docs for more information.", - "order": 3, - "airbyte_secret": true, - "type": "string" - }, - "include_deleted": { - "title": "Include Deleted Campaigns, Ads, and AdSets", - "description": "Set to active if you want to include data from deleted Campaigns, Ads, and AdSets.", - "default": false, - "order": 4, - "type": "boolean" - }, - "fetch_thumbnail_images": { - "title": "Fetch Thumbnail Images from Ad Creative", - "description": "Set to active if you want to fetch the thumbnail_url and store the result in thumbnail_data_url for each Ad Creative.", - "default": false, - "order": 5, - "type": "boolean" - }, - "custom_insights": { - "title": "Custom Insights", - "description": "A list which contains ad statistics entries, each entry must have a name and can contains fields, breakdowns or action_breakdowns. Click on \"add\" to fill this field.", - "order": 6, - "type": "array", - "items": { - "title": "InsightConfig", - "description": "Config for custom insights", - "type": "object", - "properties": { - "name": { - "title": "Name", - "description": "The name value of insight", - "type": "string" - }, - "level": { - "title": "Level", - "description": "Chosen level for API", - "default": "ad", - "enum": [ "ad", "adset", "campaign", "account" ], - "type": "string" - }, - "fields": { - "title": "Fields", - "description": "A list of chosen fields for fields parameter", - "default": [ ], - "type": "array", - "items": { - "title": "ValidEnums", - "description": "Generic enumeration.\n\nDerive from this class to define new enumerations.", - "enum": [ "account_currency", "account_id", "account_name", "action_values", "actions", "ad_bid_value", "ad_click_actions", "ad_id", "ad_impression_actions", "ad_name", "adset_bid_value", "adset_end", "adset_id", "adset_name", "adset_start", "age_targeting", "attribution_setting", "auction_bid", "auction_competitiveness", "auction_max_competitor_bid", "buying_type", "campaign_id", "campaign_name", "canvas_avg_view_percent", "canvas_avg_view_time", "catalog_segment_actions", "catalog_segment_value", "catalog_segment_value_mobile_purchase_roas", "catalog_segment_value_omni_purchase_roas", "catalog_segment_value_website_purchase_roas", "clicks", "conversion_rate_ranking", "conversion_values", "conversions", "converted_product_quantity", "converted_product_value", "cost_per_15_sec_video_view", "cost_per_2_sec_continuous_video_view", "cost_per_action_type", "cost_per_ad_click", "cost_per_conversion", "cost_per_dda_countby_convs", "cost_per_estimated_ad_recallers", "cost_per_inline_link_click", "cost_per_inline_post_engagement", "cost_per_one_thousand_ad_impression", "cost_per_outbound_click", "cost_per_thruplay", "cost_per_unique_action_type", "cost_per_unique_click", "cost_per_unique_conversion", "cost_per_unique_inline_link_click", "cost_per_unique_outbound_click", "cpc", "cpm", "cpp", "created_time", "ctr", "date_start", "date_stop", "dda_countby_convs", "dda_results", "engagement_rate_ranking", "estimated_ad_recall_rate", "estimated_ad_recall_rate_lower_bound", "estimated_ad_recall_rate_upper_bound", "estimated_ad_recallers", "estimated_ad_recallers_lower_bound", "estimated_ad_recallers_upper_bound", "frequency", "full_view_impressions", "full_view_reach", "gender_targeting", "impressions", "inline_link_click_ctr", "inline_link_clicks", "inline_post_engagement", "instant_experience_clicks_to_open", "instant_experience_clicks_to_start", "instant_experience_outbound_clicks", "interactive_component_tap", "labels", "location", "mobile_app_purchase_roas", "objective", "optimization_goal", "outbound_clicks", "outbound_clicks_ctr", "place_page_name", "purchase_roas", "qualifying_question_qualify_answer_rate", "quality_ranking", "quality_score_ectr", "quality_score_ecvr", "quality_score_organic", "reach", "social_spend", "spend", "total_postbacks", "total_postbacks_detailed", "unique_actions", "unique_clicks", "unique_conversions", "unique_ctr", "unique_inline_link_click_ctr", "unique_inline_link_clicks", "unique_link_clicks_ctr", "unique_outbound_clicks", "unique_outbound_clicks_ctr", "unique_video_continuous_2_sec_watched_actions", "unique_video_view_15_sec", "updated_time", "video_15_sec_watched_actions", "video_30_sec_watched_actions", "video_avg_time_watched_actions", "video_continuous_2_sec_watched_actions", "video_p100_watched_actions", "video_p25_watched_actions", "video_p50_watched_actions", "video_p75_watched_actions", "video_p95_watched_actions", "video_play_actions", "video_play_curve_actions", "video_play_retention_0_to_15s_actions", "video_play_retention_20_to_60s_actions", "video_play_retention_graph_actions", "video_thruplay_watched_actions", "video_time_watched_actions", "website_ctr", "website_purchase_roas", "wish_bid" ] - } - }, - "breakdowns": { - "title": "Breakdowns", - "description": "A list of chosen breakdowns for breakdowns", - "default": [ ], - "type": "array", - "items": { - "title": "ValidBreakdowns", - "description": "Generic enumeration.\n\nDerive from this class to define new enumerations.", - "enum": [ "ad_format_asset", "age", "app_id", "body_asset", "call_to_action_asset", "country", "description_asset", "device_platform", "dma", "frequency_value", "gender", "hourly_stats_aggregated_by_advertiser_time_zone", "hourly_stats_aggregated_by_audience_time_zone", "image_asset", "impression_device", "is_conversion_id_modeled", "link_url_asset", "mmm", "place_page_id", "platform_position", "product_id", "publisher_platform", "region", "skan_campaign_id", "skan_conversion_id", "title_asset", "video_asset" ] - } - }, - "action_breakdowns": { - "title": "Action Breakdowns", - "description": "A list of chosen action_breakdowns for action_breakdowns", - "default": [ ], - "type": "array", - "items": { - "title": "ValidActionBreakdowns", - "description": "Generic enumeration.\n\nDerive from this class to define new enumerations.", - "enum": [ "action_canvas_component_name", "action_carousel_card_id", "action_carousel_card_name", "action_destination", "action_device", "action_reaction", "action_target_id", "action_type", "action_video_sound", "action_video_type" ] - } - }, - "time_increment": { - "title": "Time Increment", - "description": "Time window in days by which to aggregate statistics. The sync will be chunked into N day intervals, where N is the number of days you specified. For example, if you set this value to 7, then all statistics will be reported as 7-day aggregates by starting from the start_date. If the start and end dates are October 1st and October 30th, then the connector will output 5 records: 01 - 06, 07 - 13, 14 - 20, 21 - 27, and 28 - 30 (3 days only).", - "default": 1, - "exclusiveMaximum": 90, - "exclusiveMinimum": 0, - "type": "integer" - }, - "start_date": { - "title": "Start Date", - "description": "The date from which you'd like to replicate data for this stream, in the format YYYY-MM-DDT00:00:00Z.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2017-01-25T00:00:00Z" ], - "type": "string", - "format": "date-time" - }, - "end_date": { - "title": "End Date", - "description": "The date until which you'd like to replicate data for this stream, in the format YYYY-MM-DDT00:00:00Z. All data generated between the start date and this end date will be replicated. Not setting this option will result in always syncing the latest data.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2017-01-26T00:00:00Z" ], - "type": "string", - "format": "date-time" - }, - "insights_lookback_window": { - "title": "Custom Insights Lookback Window", - "description": "The attribution window", - "default": 28, - "maximum": 28, - "mininum": 1, - "exclusiveMinimum": 0, - "type": "integer" - } - }, - "required": [ "name" ] - } - }, - "page_size": { - "title": "Page Size of Requests", - "description": "Page size used when sending requests to Facebook API to specify number of records per page when response has pagination. Most users do not need to set this field unless they specifically need to tune the connector to address specific issues or use cases.", - "default": 100, - "order": 7, - "exclusiveMinimum": 0, - "type": "integer" - }, - "insights_lookback_window": { - "title": "Insights Lookback Window", - "description": "The attribution window. Facebook freezes insight data 28 days after it was generated, which means that all data from the past 28 days may have changed since we last emitted it, so you can retrieve refreshed insights from the past by setting this parameter. If you set a custom lookback window value in Facebook account, please provide the same value here.", - "default": 28, - "order": 8, - "maximum": 28, - "mininum": 1, - "exclusiveMinimum": 0, - "type": "integer" - }, - "max_batch_size": { - "title": "Maximum size of Batched Requests", - "description": "Maximum batch size used when sending batch requests to Facebook API. Most users do not need to set this field unless they specifically need to tune the connector to address specific issues or use cases.", - "default": 50, - "order": 9, - "exclusiveMinimum": 0, - "type": "integer" - }, - "action_breakdowns_allow_empty": { - "title": "Action Breakdowns Allow Empty", - "description": "Allows action_breakdowns to be an empty list", - "default": true, - "airbyte_hidden": true, - "type": "boolean" - } - }, - "required": [ "account_id", "start_date", "access_token" ] - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "append" ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ ], - "oauthFlowInitParameters": [ ], - "oauthFlowOutputParameters": [ [ "access_token" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "graph.facebook.com" ] - } - }, { - "sourceDefinitionId": "010eb12f-837b-4685-892d-0a39f76a98f5", - "name": "Facebook Pages", - "dockerRepository": "airbyte/source-facebook-pages", - "dockerImageTag": "0.2.4", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/facebook-pages", - "icon": "facebook.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/facebook-pages", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Facebook Pages Spec", - "type": "object", - "required": [ "access_token", "page_id" ], - "additionalProperties": true, - "properties": { - "access_token": { - "type": "string", - "title": "Page Access Token", - "description": "Facebook Page Access Token", - "airbyte_secret": true, - "order": 0 - }, - "page_id": { - "type": "string", - "title": "Page ID", - "description": "Page ID", - "order": 1 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "graph.facebook.com" ] - } - }, { - "sourceDefinitionId": "dfd88b22-b603-4c3d-aad7-3701784586b1", - "name": "Sample Data (Faker)", - "dockerRepository": "airbyte/source-faker", - "dockerImageTag": "2.0.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/faker", - "icon": "faker.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/faker", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Faker Source Spec", - "type": "object", - "required": [ "count" ], - "additionalProperties": true, - "properties": { - "count": { - "title": "Count", - "description": "How many users should be generated in total. This setting does not apply to the purchases or products stream.", - "type": "integer", - "minimum": 1, - "default": 1000, - "order": 0 - }, - "seed": { - "title": "Seed", - "description": "Manually control the faker random seed to return the same values on subsequent runs (leave -1 for random)", - "type": "integer", - "default": -1, - "order": 1 - }, - "records_per_sync": { - "title": "Records Per Sync", - "description": "How many fake records will be returned for each sync, for each stream? By default, it will take 2 syncs to create the requested 1000 records.", - "type": "integer", - "minimum": 1, - "default": 500, - "order": 2 - }, - "records_per_slice": { - "title": "Records Per Stream Slice", - "description": "How many fake records will be in each page (stream slice), before a state message is emitted?", - "type": "integer", - "minimum": 1, - "default": 1000, - "order": 3 - }, - "parallelism": { - "title": "Parallelism", - "description": "How many parallel workers should we use to generate fake data? Choose a value equal to the number of CPUs you will allocate to this source.", - "type": "integer", - "minimum": 1, - "default": 4, - "order": 4 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "resourceRequirements": { - "jobSpecific": [ { - "jobType": "sync", - "resourceRequirements": { - "cpu_request": "1.0", - "cpu_limit": "4.0" - } - } ] - }, - "allowedHosts": { - "hosts": [ ] - }, - "suggestedStreams": { - "streams": [ "users", "products", "purchases" ] - } - }, { - "sourceDefinitionId": "eb3e9c1c-0467-4eb7-a172-5265e04ccd0a", - "name": "Fastbill", - "dockerRepository": "airbyte/source-fastbill", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/fastbill", - "icon": "fastbill.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/fastbill", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Fastbill Spec", - "type": "object", - "required": [ "username", "api_key" ], - "properties": { - "username": { - "title": "Username", - "type": "string", - "description": "Username for Fastbill account" - }, - "api_key": { - "title": "API Key", - "type": "string", - "description": "Fastbill API key", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "3825db3e-c94b-42ac-bd53-b5a9507ace2b", - "name": "Fauna", - "dockerRepository": "airbyte/source-fauna", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/fauna", - "icon": "fauna.svg", - "sourceType": "database", - "spec": { - "documentationUrl": "https://github.com/fauna/airbyte/blob/source-fauna/docs/integrations/sources/fauna.md", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Fauna Spec", - "type": "object", - "required": [ "domain", "port", "scheme", "secret" ], - "additionalProperties": true, - "properties": { - "domain": { - "order": 0, - "type": "string", - "title": "Domain", - "description": "Domain of Fauna to query. Defaults db.fauna.com. See the docs.", - "default": "db.fauna.com" - }, - "port": { - "order": 1, - "type": "integer", - "title": "Port", - "description": "Endpoint port.", - "default": 443 - }, - "scheme": { - "order": 2, - "type": "string", - "title": "Scheme", - "description": "URL scheme.", - "default": "https" - }, - "secret": { - "order": 3, - "type": "string", - "title": "Fauna Secret", - "description": "Fauna secret, used when authenticating with the database.", - "airbyte_secret": true - }, - "collection": { - "order": 5, - "type": "object", - "title": "Collection", - "description": "Settings for the Fauna Collection.", - "required": [ "page_size", "deletions" ], - "properties": { - "page_size": { - "order": 4, - "type": "integer", - "title": "Page Size", - "default": 64, - "description": "The page size used when reading documents from the database. The larger the page size, the faster the connector processes documents. However, if a page is too large, the connector may fail.
    \nChoose your page size based on how large the documents are.
    \nSee the docs." - }, - "deletions": { - "order": 5, - "type": "object", - "title": "Deletion Mode", - "description": "This only applies to incremental syncs.
    \nEnabling deletion mode informs your destination of deleted documents.
    \nDisabled - Leave this feature disabled, and ignore deleted documents.
    \nEnabled - Enables this feature. When a document is deleted, the connector exports a record with a \"deleted at\" column containing the time that the document was deleted.", - "oneOf": [ { - "title": "Disabled", - "type": "object", - "order": 0, - "required": [ "deletion_mode" ], - "properties": { - "deletion_mode": { - "type": "string", - "const": "ignore" - } - } - }, { - "title": "Enabled", - "type": "object", - "order": 1, - "required": [ "deletion_mode", "column" ], - "properties": { - "deletion_mode": { - "type": "string", - "const": "deleted_field" - }, - "column": { - "type": "string", - "title": "Deleted At Column", - "description": "Name of the \"deleted at\" column.", - "default": "deleted_at" - } - } - } ] - } - } - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "778daa7c-feaf-4db6-96f3-70fd645acc77", - "name": "File (CSV, JSON, Excel, Feather, Parquet)", - "dockerRepository": "airbyte/source-file", - "dockerImageTag": "0.2.38", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/file", - "icon": "file.svg", - "sourceType": "file", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/file", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "File Source Spec", - "type": "object", - "additionalProperties": true, - "required": [ "dataset_name", "format", "url", "provider" ], - "properties": { - "dataset_name": { - "type": "string", - "title": "Dataset Name", - "description": "The Name of the final table to replicate this file into (should include letters, numbers dash and underscores only)." - }, - "format": { - "type": "string", - "enum": [ "csv", "json", "jsonl", "excel", "excel_binary", "feather", "parquet", "yaml" ], - "default": "csv", - "title": "File Format", - "description": "The Format of the file which should be replicated (Warning: some formats may be experimental, please refer to the docs)." - }, - "reader_options": { - "type": "string", - "title": "Reader Options", - "description": "This should be a string in JSON format. It depends on the chosen file format to provide additional options and tune its behavior.", - "examples": [ "{}", "{\"sep\": \" \"}", "{\"sep\": \"\t\", \"header\": 0, \"names\": [\"column1\", \"column2\"] }" ] - }, - "url": { - "type": "string", - "title": "URL", - "description": "The URL path to access the file which should be replicated.", - "examples": [ "https://storage.googleapis.com/covid19-open-data/v2/latest/epidemiology.csv", "gs://my-google-bucket/data.csv", "s3://gdelt-open-data/events/20190914.export.csv" ] - }, - "provider": { - "type": "object", - "title": "Storage Provider", - "description": "The storage Provider or Location of the file(s) which should be replicated.", - "default": "Public Web", - "oneOf": [ { - "title": "HTTPS: Public Web", - "required": [ "storage" ], - "properties": { - "storage": { - "type": "string", - "const": "HTTPS" - }, - "user_agent": { - "type": "boolean", - "title": "User-Agent", - "default": false, - "description": "Add User-Agent to request" - } - } - }, { - "title": "GCS: Google Cloud Storage", - "required": [ "storage" ], - "properties": { - "storage": { - "type": "string", - "title": "Storage", - "const": "GCS" - }, - "service_account_json": { - "type": "string", - "title": "Service Account JSON", - "description": "In order to access private Buckets stored on Google Cloud, this connector would need a service account json credentials with the proper permissions as described here. Please generate the credentials.json file and copy/paste its content to this field (expecting JSON formats). If accessing publicly available data, this field is not necessary." - } - } - }, { - "title": "S3: Amazon Web Services", - "required": [ "storage" ], - "properties": { - "storage": { - "type": "string", - "title": "Storage", - "const": "S3" - }, - "aws_access_key_id": { - "type": "string", - "title": "AWS Access Key ID", - "description": "In order to access private Buckets stored on AWS S3, this connector would need credentials with the proper permissions. If accessing publicly available data, this field is not necessary." - }, - "aws_secret_access_key": { - "type": "string", - "title": "AWS Secret Access Key", - "description": "In order to access private Buckets stored on AWS S3, this connector would need credentials with the proper permissions. If accessing publicly available data, this field is not necessary.", - "airbyte_secret": true - } - } - }, { - "title": "AzBlob: Azure Blob Storage", - "required": [ "storage", "storage_account" ], - "properties": { - "storage": { - "type": "string", - "title": "Storage", - "const": "AzBlob" - }, - "storage_account": { - "type": "string", - "title": "Storage Account", - "description": "The globally unique name of the storage account that the desired blob sits within. See here for more details." - }, - "sas_token": { - "type": "string", - "title": "SAS Token", - "description": "To access Azure Blob Storage, this connector would need credentials with the proper permissions. One option is a SAS (Shared Access Signature) token. If accessing publicly available data, this field is not necessary.", - "airbyte_secret": true - }, - "shared_key": { - "type": "string", - "title": "Shared Key", - "description": "To access Azure Blob Storage, this connector would need credentials with the proper permissions. One option is a storage account shared key (aka account key or access key). If accessing publicly available data, this field is not necessary.", - "airbyte_secret": true - } - } - }, { - "title": "SSH: Secure Shell", - "required": [ "storage", "user", "host" ], - "properties": { - "storage": { - "type": "string", - "title": "Storage", - "const": "SSH" - }, - "user": { - "type": "string", - "title": "User", - "description": "" - }, - "password": { - "type": "string", - "title": "Password", - "description": "", - "airbyte_secret": true - }, - "host": { - "type": "string", - "title": "Host", - "description": "" - }, - "port": { - "type": "string", - "title": "Port", - "default": "22", - "description": "" - } - } - }, { - "title": "SCP: Secure copy protocol", - "required": [ "storage", "user", "host" ], - "properties": { - "storage": { - "type": "string", - "title": "Storage", - "const": "SCP" - }, - "user": { - "type": "string", - "title": "User", - "description": "" - }, - "password": { - "type": "string", - "title": "Password", - "description": "", - "airbyte_secret": true - }, - "host": { - "type": "string", - "title": "Host", - "description": "" - }, - "port": { - "type": "string", - "title": "Port", - "default": "22", - "description": "" - } - } - }, { - "title": "SFTP: Secure File Transfer Protocol", - "required": [ "storage", "user", "host" ], - "properties": { - "storage": { - "type": "string", - "title": "Storage", - "const": "SFTP" - }, - "user": { - "type": "string", - "title": "User", - "description": "" - }, - "password": { - "type": "string", - "title": "Password", - "description": "", - "airbyte_secret": true - }, - "host": { - "type": "string", - "title": "Host", - "description": "" - }, - "port": { - "type": "string", - "title": "Port", - "default": "22", - "description": "" - } - } - }, { - "title": "Local Filesystem (limited)", - "required": [ "storage" ], - "properties": { - "storage": { - "type": "string", - "title": "Storage", - "description": "WARNING: Note that the local storage URL available for reading must start with the local mount \"/local/\" at the moment until we implement more advanced docker mounting options.", - "const": "local" - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "*" ] - } - }, { - "sourceDefinitionId": "acb5f973-a565-441e-992f-4946f3e65662", - "name": "Firebase Realtime Database", - "dockerRepository": "airbyte/source-firebase-realtime-database", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.io/integrations/sources/firebase-realtime-database", - "sourceType": "database", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/firebase-realtime-database", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Firebase Realtime Database Spec", - "type": "object", - "required": [ "database_name", "google_application_credentials" ], - "properties": { - "database_name": { - "title": "Database Name", - "type": "string", - "description": "Database name (This will be part of the url pointing to the database, https://.firebaseio.com/)" - }, - "google_application_credentials": { - "title": "Service Account Key JSON", - "type": "string", - "description": "Cert credentials in JSON format of Service Account with Firebase Realtime Database Viewer role. (see, https://firebase.google.com/docs/projects/iam/roles-predefined-product#realtime-database)", - "airbyte_secret": true - }, - "path": { - "title": "Node Path", - "type": "string", - "description": "Path to a node in the Firebase realtime database" - }, - "buffer_size": { - "title": "Buffer Size", - "type": "number", - "description": "Number of records to fetch at once" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "supported_sync_modes": [ "full_refresh" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "allowedHosts": { - "hosts": [ "*" ] - } - }, { - "sourceDefinitionId": "8a5d48f6-03bb-4038-a942-a8d3f175cca3", - "name": "Freshcaller", - "dockerRepository": "airbyte/source-freshcaller", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/freshcaller", - "icon": "freshcaller.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/freshcaller", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Freshcaller Spec", - "type": "object", - "required": [ "domain", "api_key", "start_date" ], - "additionalProperties": true, - "properties": { - "domain": { - "type": "string", - "title": "Domain for Freshcaller account", - "description": "Used to construct Base URL for the Freshcaller APIs", - "examples": [ "snaptravel" ] - }, - "api_key": { - "type": "string", - "title": "API Key", - "description": "Freshcaller API Key. See the docs for more information on how to obtain this key.", - "airbyte_secret": true - }, - "requests_per_minute": { - "title": "Requests per minute", - "type": "integer", - "description": "The number of requests per minute that this source allowed to use. There is a rate limit of 50 requests per minute per app per account." - }, - "start_date": { - "title": "Start Date", - "description": "UTC date and time. Any data created after this date will be replicated.", - "format": "date-time", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2022-01-01T12:00:00Z" ] - }, - "sync_lag_minutes": { - "title": "Lag in minutes for each sync", - "type": "integer", - "description": "Lag in minutes for each sync, i.e., at time T, data for the time range [prev_sync_time, T-30] will be fetched" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false - }, { - "sourceDefinitionId": "f95337f1-2ad1-4baf-922f-2ca9152de630", - "name": "Flexport", - "dockerRepository": "airbyte/source-flexport", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/flexport", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/flexport", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Flexport Spec", - "additionalProperties": true, - "type": "object", - "required": [ "api_key", "start_date" ], - "properties": { - "api_key": { - "order": 0, - "type": "string", - "title": "API Key", - "airbyte_secret": true - }, - "start_date": { - "order": 1, - "title": "Start Date", - "type": "string", - "format": "date-time" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "ec4b9503-13cb-48ab-a4ab-6ade4be46567", - "name": "Freshdesk", - "dockerRepository": "airbyte/source-freshdesk", - "dockerImageTag": "3.0.2", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/freshdesk", - "icon": "freshdesk.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/freshdesk", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Freshdesk Spec", - "type": "object", - "required": [ "domain", "api_key" ], - "additionalProperties": true, - "properties": { - "domain": { - "type": "string", - "description": "Freshdesk domain", - "title": "Domain", - "examples": [ "myaccount.freshdesk.com" ], - "pattern": "^[a-zA-Z0-9._-]*\\.freshdesk\\.com$" - }, - "api_key": { - "type": "string", - "title": "API Key", - "description": "Freshdesk API Key. See the docs for more information on how to obtain this key.", - "airbyte_secret": true - }, - "requests_per_minute": { - "title": "Requests per minute", - "type": "integer", - "description": "The number of requests per minute that this source allowed to use. There is a rate limit of 50 requests per minute per app per account." - }, - "start_date": { - "title": "Start Date", - "type": "string", - "description": "UTC date and time. Any data created after this date will be replicated. If this parameter is not set, all data will be replicated.", - "format": "date-time", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2020-12-01T00:00:00Z" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "*.freshdesk.com" ] - } - }, { - "sourceDefinitionId": "eca08d79-7b92-4065-b7f3-79c14836ebe7", - "name": "Freshsales", - "dockerRepository": "airbyte/source-freshsales", - "dockerImageTag": "0.1.4", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/freshsales", - "icon": "freshsales.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/freshsales", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Freshsales Spec", - "type": "object", - "required": [ "domain_name", "api_key" ], - "additionalProperties": true, - "properties": { - "domain_name": { - "type": "string", - "title": "Domain Name", - "description": "The Name of your Freshsales domain", - "examples": [ "mydomain.myfreshworks.com" ] - }, - "api_key": { - "type": "string", - "title": "API Key", - "description": "Freshsales API Key. See here. The key is case sensitive.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "*.myfreshworks.com" ] - } - }, { - "sourceDefinitionId": "9bb85338-ea95-4c93-b267-6be89125b267", - "name": "Freshservice", - "dockerRepository": "airbyte/source-freshservice", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/freshservice", - "icon": "freshservice.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/freshservice", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Freshservice Spec", - "type": "object", - "required": [ "domain_name", "api_key", "start_date" ], - "additionalProperties": false, - "properties": { - "domain_name": { - "type": "string", - "title": "Domain Name", - "description": "The name of your Freshservice domain", - "examples": [ "mydomain.freshservice.com" ] - }, - "api_key": { - "title": "API Key", - "type": "string", - "description": "Freshservice API Key. See here. The key is case sensitive.", - "airbyte_secret": true - }, - "start_date": { - "title": "Start Date", - "type": "string", - "description": "UTC date and time in the format 2020-10-01T00:00:00Z. Any data before this date will not be replicated.", - "examples": [ "2020-10-01T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "2a8c41ae-8c23-4be0-a73f-2ab10ca1a820", - "name": "GCS", - "dockerRepository": "airbyte/source-gcs", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/gcs", - "icon": "gcs.svg", - "sourceType": "file", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Gcs Spec", - "type": "object", - "required": [ "gcs_bucket", "gcs_path", "service_account" ], - "properties": { - "gcs_bucket": { - "type": "string", - "title": "GCS bucket", - "description": "GCS bucket name" - }, - "gcs_path": { - "type": "string", - "title": "GCS Path", - "description": "GCS path to data" - }, - "service_account": { - "type": "string", - "title": "Service Account Information.", - "description": "Enter your Google Cloud service account key in JSON format", - "airbyte_secret": true, - "examples": [ "{ \"type\": \"service_account\", \"project_id\": YOUR_PROJECT_ID, \"private_key_id\": YOUR_PRIVATE_KEY, ... }" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false - }, { - "sourceDefinitionId": "5ea4459a-8f1a-452a-830f-a65c38cc438d", - "name": "Genesys", - "dockerRepository": "airbyte/source-genesys", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/genesys", - "icon": "genesys.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/genesys", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Genesys Connector Configuration", - "type": "object", - "required": [ "start_date", "tenant_endpoint", "client_id", "client_secret" ], - "properties": { - "client_id": { - "type": "string", - "title": "Client ID", - "description": "Your OAuth user Client ID", - "airbyte_secret": true, - "order": 0 - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "Your OAuth user Client Secret", - "airbyte_secret": true, - "order": 1 - }, - "tenant_endpoint": { - "title": "Tenant Endpoint Location", - "type": "string", - "description": "Please choose the right endpoint where your Tenant is located. More info by this Link", - "enum": [ "Americas (US East)", "Americas (US East 2)", "Americas (US West)", "Americas (Canada)", "Americas (São Paulo)", "EMEA (Frankfurt)", "EMEA (Dublin)", "EMEA (London)", "Asia Pacific (Mumbai)", "Asia Pacific (Seoul)", "Asia Pacific (Sydney)" ], - "order": 2 - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "Start Date in format: YYYY-MM-DD", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "order": 3 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false - }, { - "sourceDefinitionId": "e1a3866b-d3b2-43b6-b6d7-8c1ee4d7f53f", - "name": "GetLago", - "dockerRepository": "airbyte/source-getlago", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/getlago", - "icon": "getlago.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/getlago", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Getlago Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "title": "API Key", - "type": "string", - "description": "Your API Key. See here.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "6cbea164-3237-433b-9abb-36d384ee4cbf", - "name": "Gridly", - "dockerRepository": "airbyte/source-gridly", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/gridly", - "icon": "gridly.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/gridly", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Gridly Spec", - "type": "object", - "required": [ "api_key", "grid_id" ], - "properties": { - "api_key": { - "type": "string", - "title": "API Key", - "airbyte_secret": true - }, - "grid_id": { - "type": "string", - "title": "Grid ID", - "description": "ID of a grid, or can be ID of a branch" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "ef69ef6e-aa7f-4af1-a01d-ef775033524e", - "name": "GitHub", - "dockerRepository": "airbyte/source-github", - "dockerImageTag": "0.4.7", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/github", - "icon": "github.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/github", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "GitHub Source Spec", - "type": "object", - "required": [ "start_date", "repository" ], - "additionalProperties": true, - "properties": { - "credentials": { - "title": "Authentication", - "description": "Choose how to authenticate to GitHub", - "type": "object", - "order": 0, - "group": "auth", - "oneOf": [ { - "type": "object", - "title": "OAuth", - "required": [ "access_token" ], - "properties": { - "option_title": { - "type": "string", - "const": "OAuth Credentials", - "order": 0 - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "OAuth access token", - "airbyte_secret": true - } - } - }, { - "type": "object", - "title": "Personal Access Token", - "required": [ "personal_access_token" ], - "properties": { - "option_title": { - "type": "string", - "const": "PAT Credentials", - "order": 0 - }, - "personal_access_token": { - "type": "string", - "title": "Personal Access Tokens", - "description": "Log into GitHub and then generate a personal access token. To load balance your API quota consumption across multiple API tokens, input multiple tokens separated with \",\"", - "airbyte_secret": true - } - } - } ] - }, - "start_date": { - "type": "string", - "title": "Start date", - "description": "The date from which you'd like to replicate data from GitHub in the format YYYY-MM-DDT00:00:00Z. For the streams which support this configuration, only data generated on or after the start date will be replicated. This field doesn't apply to all streams, see the docs for more info", - "examples": [ "2021-03-01T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "order": 1, - "format": "date-time" - }, - "repository": { - "type": "string", - "examples": [ "airbytehq/airbyte airbytehq/another-repo", "airbytehq/*", "airbytehq/airbyte" ], - "title": "GitHub Repositories", - "description": "Space-delimited list of GitHub organizations/repositories, e.g. `airbytehq/airbyte` for single repository, `airbytehq/*` for get all repositories from organization and `airbytehq/airbyte airbytehq/another-repo` for multiple repositories.", - "order": 2, - "pattern_descriptor": "org/repo1 org/repo2" - }, - "branch": { - "type": "string", - "title": "Branch", - "examples": [ "airbytehq/airbyte/master airbytehq/airbyte/my-branch" ], - "description": "Space-delimited list of GitHub repository branches to pull commits for, e.g. `airbytehq/airbyte/master`. If no branches are specified for a repository, the default branch will be pulled.", - "order": 3, - "pattern_descriptor": "org/repo/branch1 org/repo/branch2" - }, - "page_size_for_large_streams": { - "type": "integer", - "title": "Page size for large streams", - "minimum": 1, - "maximum": 100, - "default": 10, - "description": "The Github connector contains several streams with a large amount of data. The page size of such streams depends on the size of your repository. We recommended that you specify values between 10 and 30.", - "order": 4 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "option_title" ], - "predicate_value": "OAuth Credentials", - "oauth_config_specification": { - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "access_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "access_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "api.github.com" ] - }, - "suggestedStreams": { - "streams": [ "branches", "comments", "issues", "organizations", "pull_requests", "repositories", "stargazers", "tags", "teams", "users" ] - }, - "maxSecondsBetweenMessages": 5400 - }, { - "sourceDefinitionId": "5e6175e5-68e1-4c17-bff9-56103bbb0d80", - "name": "Gitlab", - "dockerRepository": "airbyte/source-gitlab", - "dockerImageTag": "1.0.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/gitlab", - "icon": "gitlab.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/gitlab", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Source Gitlab Spec", - "type": "object", - "required": [ "api_url", "start_date", "credentials" ], - "additionalProperties": true, - "properties": { - "credentials": { - "title": "Authorization Method", - "type": "object", - "order": 0, - "oneOf": [ { - "type": "object", - "title": "OAuth2.0", - "required": [ "client_id", "client_secret", "refresh_token", "access_token", "token_expiry_date" ], - "properties": { - "auth_type": { - "type": "string", - "const": "oauth2.0" - }, - "client_id": { - "type": "string", - "description": "The API ID of the Gitlab developer application.", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "description": "The API Secret the Gitlab developer application.", - "airbyte_secret": true - }, - "access_token": { - "type": "string", - "description": "Access Token for making authenticated requests.", - "airbyte_secret": true - }, - "token_expiry_date": { - "type": "string", - "description": "The date-time when the access token should be refreshed.", - "format": "date-time" - }, - "refresh_token": { - "type": "string", - "description": "The key to refresh the expired access_token.", - "airbyte_secret": true - } - } - }, { - "title": "Private Token", - "type": "object", - "required": [ "access_token" ], - "properties": { - "auth_type": { - "type": "string", - "const": "access_token" - }, - "access_token": { - "type": "string", - "title": "Private Token", - "description": "Log into your Gitlab account and then generate a personal Access Token.", - "airbyte_secret": true - } - } - } ] - }, - "api_url": { - "type": "string", - "examples": [ "gitlab.com" ], - "title": "API URL", - "default": "gitlab.com", - "description": "Please enter your basic URL from GitLab instance.", - "order": 1 - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "The date from which you'd like to replicate data for GitLab API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", - "examples": [ "2021-03-01T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "order": 2, - "format": "date-time" - }, - "groups": { - "type": "string", - "examples": [ "airbyte.io" ], - "title": "Groups", - "description": "Space-delimited list of groups. e.g. airbyte.io.", - "order": 3 - }, - "projects": { - "type": "string", - "title": "Projects", - "examples": [ "airbyte.io/documentation" ], - "description": "Space-delimited list of projects. e.g. airbyte.io/documentation meltano/tap-gitlab.", - "order": 4 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "auth_type" ], - "predicate_value": "oauth2.0", - "oauth_config_specification": { - "oauth_user_input_from_connector_config_specification": { - "type": "object", - "properties": { - "domain": { - "type": "string", - "path_in_connector_config": [ "api_url" ] - } - } - }, - "complete_oauth_output_specification": { - "type": "object", - "properties": { - "access_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "access_token" ] - }, - "refresh_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "refresh_token" ] - }, - "token_expiry_date": { - "type": "string", - "format": "date-time", - "path_in_connector_config": [ "credentials", "token_expiry_date" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "*" ] - } - }, { - "sourceDefinitionId": "cf8ff320-6272-4faa-89e6-4402dc17e5d5", - "name": "Glassfrog", - "dockerRepository": "airbyte/source-glassfrog", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/glassfrog", - "icon": "glassfrog.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/glassfrog", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Glassfrog Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "description": "API key provided by Glassfrog", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "ce38aec4-5a77-439a-be29-9ca44fd4e811", - "name": "GNews", - "dockerRepository": "airbyte/source-gnews", - "dockerImageTag": "0.1.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/gnews", - "icon": "gnews.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/gnews", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Gnews Spec", - "type": "object", - "required": [ "api_key", "query" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "title": "API Key", - "description": "API Key", - "order": 0, - "airbyte_secret": true - }, - "query": { - "type": "string", - "order": 1, - "title": "Query", - "description": "This parameter allows you to specify your search keywords to find the news articles you are looking for. The keywords will be used to return the most relevant articles. It is possible to use logical operators with keywords. - Phrase Search Operator: This operator allows you to make an exact search. Keywords surrounded by \n quotation marks are used to search for articles with the exact same keyword sequence. \n For example the query: \"Apple iPhone\" will return articles matching at least once this sequence of keywords.\n- Logical AND Operator: This operator allows you to make sure that several keywords are all used in the article\n search. By default the space character acts as an AND operator, it is possible to replace the space character \n by AND to obtain the same result. For example the query: Apple Microsoft is equivalent to Apple AND Microsoft\n- Logical OR Operator: This operator allows you to retrieve articles matching the keyword a or the keyword b.\n It is important to note that this operator has a higher precedence than the AND operator. For example the \n query: Apple OR Microsoft will return all articles matching the keyword Apple as well as all articles matching \n the keyword Microsoft\n- Logical NOT Operator: This operator allows you to remove from the results the articles corresponding to the\n specified keywords. To use it, you need to add NOT in front of each word or phrase surrounded by quotes.\n For example the query: Apple NOT iPhone will return all articles matching the keyword Apple but not the keyword\n iPhone", - "examples": [ "Microsoft Windows 10", "Apple OR Microsoft", "Apple AND NOT iPhone", "(Windows 7) AND (Windows 10)", "Intel AND (i7 OR i9)" ] - }, - "language": { - "type": "string", - "title": "Language", - "decription": "This parameter allows you to specify the language of the news articles returned by the API. You have to set as value the 2 letters code of the language you want to filter.", - "order": 2, - "enum": [ "ar", "zh", "nl", "en", "fr", "de", "el", "he", "hi", "it", "ja", "ml", "mr", "no", "pt", "ro", "ru", "es", "sv", "ta", "te", "uk" ] - }, - "country": { - "type": "string", - "title": "Country", - "description": "This parameter allows you to specify the country where the news articles returned by the API were published, the contents of the articles are not necessarily related to the specified country. You have to set as value the 2 letters code of the country you want to filter.", - "order": 3, - "enum": [ "au", "br", "ca", "cn", "eg", "fr", "de", "gr", "hk", "in", "ie", "il", "it", "jp", "nl", "no", "pk", "pe", "ph", "pt", "ro", "ru", "sg", "es", "se", "ch", "tw", "ua", "gb", "us" ] - }, - "in": { - "type": "array", - "title": "In", - "description": "This parameter allows you to choose in which attributes the keywords are searched. The attributes that can be set are title, description and content. It is possible to combine several attributes.", - "order": 4, - "items": { - "type": "string", - "enum": [ "title", "description", "content" ] - } - }, - "nullable": { - "type": "array", - "title": "Nullable", - "description": "This parameter allows you to specify the attributes that you allow to return null values. The attributes that can be set are title, description and content. It is possible to combine several attributes", - "order": 5, - "items": { - "type": "string", - "enum": [ "title", "description", "content" ] - } - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "This parameter allows you to filter the articles that have a publication date greater than or equal to the specified value. The date must respect the following format: YYYY-MM-DD hh:mm:ss (in UTC)", - "order": 6, - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$", - "examples": [ "2022-08-21 16:27:09" ] - }, - "end_date": { - "type": "string", - "title": "End Date", - "description": "This parameter allows you to filter the articles that have a publication date smaller than or equal to the specified value. The date must respect the following format: YYYY-MM-DD hh:mm:ss (in UTC)", - "order": 6, - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$", - "examples": [ "2022-08-21 16:27:09" ] - }, - "sortby": { - "type": "string", - "title": "Sort By", - "description": "This parameter allows you to choose with which type of sorting the articles should be returned. Two values are possible:\n - publishedAt = sort by publication date, the articles with the most recent publication date are returned first\n - relevance = sort by best match to keywords, the articles with the best match are returned first", - "order": 7, - "enum": [ "publishedAt", "relevance" ] - }, - "top_headlines_query": { - "type": "string", - "order": 8, - "title": "Top Headlines Query", - "description": "This parameter allows you to specify your search keywords to find the news articles you are looking for. The keywords will be used to return the most relevant articles. It is possible to use logical operators with keywords. - Phrase Search Operator: This operator allows you to make an exact search. Keywords surrounded by \n quotation marks are used to search for articles with the exact same keyword sequence. \n For example the query: \"Apple iPhone\" will return articles matching at least once this sequence of keywords.\n- Logical AND Operator: This operator allows you to make sure that several keywords are all used in the article\n search. By default the space character acts as an AND operator, it is possible to replace the space character \n by AND to obtain the same result. For example the query: Apple Microsoft is equivalent to Apple AND Microsoft\n- Logical OR Operator: This operator allows you to retrieve articles matching the keyword a or the keyword b.\n It is important to note that this operator has a higher precedence than the AND operator. For example the \n query: Apple OR Microsoft will return all articles matching the keyword Apple as well as all articles matching \n the keyword Microsoft\n- Logical NOT Operator: This operator allows you to remove from the results the articles corresponding to the\n specified keywords. To use it, you need to add NOT in front of each word or phrase surrounded by quotes.\n For example the query: Apple NOT iPhone will return all articles matching the keyword Apple but not the keyword\n iPhone", - "examples": [ "Microsoft Windows 10", "Apple OR Microsoft", "Apple AND NOT iPhone", "(Windows 7) AND (Windows 10)", "Intel AND (i7 OR i9)" ] - }, - "top_headlines_topic": { - "type": "string", - "title": "Top Headlines Topic", - "description": "This parameter allows you to change the category for the request.", - "order": 9, - "enum": [ "breaking-news", "world", "nation", "business", "technology", "entertainment", "sports", "science", "health" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "ba15ac82-5c6a-4fb2-bf24-925c23a1180c", - "name": "GoCardless", - "dockerRepository": "airbyte/source-gocardless", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/gocardless", - "icon": "gocardless.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/gocardless", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Gocardless Spec", - "type": "object", - "required": [ "access_token", "gocardless_environment", "gocardless_version", "start_date" ], - "properties": { - "access_token": { - "title": "Access Token", - "type": "string", - "pattern": "^(sandbox|live)_.+$", - "description": "Gocardless API TOKEN", - "airbyte_secret": true, - "order": 0 - }, - "gocardless_environment": { - "title": "GoCardless API Environment", - "type": "string", - "enum": [ "sandbox", "live" ], - "default": "sandbox", - "description": "Environment you are trying to connect to.", - "order": 1 - }, - "gocardless_version": { - "title": "GoCardless API Version", - "type": "string", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "description": "GoCardless version. This is a date. You can find the latest here: \nhttps://developer.gocardless.com/api-reference/#api-usage-making-requests\n", - "order": 2 - }, - "start_date": { - "title": "Start Date", - "type": "string", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data\nbefore this date will not be replicated.\n", - "examples": [ "2017-01-25T00:00:00Z" ], - "order": 3 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "32382e40-3b49-4b99-9c5c-4076501914e7", - "name": "Gong", - "dockerRepository": "airbyte/source-gong", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/gong", - "icon": "gong.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/gong", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Gong Spec", - "type": "object", - "required": [ "access_key", "access_key_secret" ], - "additionalProperties": true, - "properties": { - "access_key": { - "type": "string", - "title": "Gong Access Key", - "description": "Gong Access Key", - "airbyte_secret": true - }, - "access_key_secret": { - "type": "string", - "title": "Gong Access Key Secret", - "description": "Gong Access Key Secret", - "airbyte_secret": true - }, - "start_date": { - "type": "string", - "title": "Start date", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "description": "The date from which to list calls, in the ISO-8601 format; if not specified, the calls start with the earliest recorded call. For web-conference calls recorded by Gong, the date denotes its scheduled time, otherwise, it denotes its actual start time.", - "examples": [ "2018-02-18T08:00:00Z" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "253487c0-2246-43ba-a21f-5116b20a2c50", - "name": "Google Ads", - "dockerRepository": "airbyte/source-google-ads", - "dockerImageTag": "0.2.14", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-ads", - "icon": "google-adwords.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-ads", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Google Ads Spec", - "type": "object", - "required": [ "credentials", "start_date", "customer_id" ], - "additionalProperties": true, - "properties": { - "credentials": { - "type": "object", - "description": "", - "title": "Google Credentials", - "order": 0, - "required": [ "developer_token", "client_id", "client_secret", "refresh_token" ], - "properties": { - "developer_token": { - "type": "string", - "title": "Developer Token", - "order": 0, - "description": "Developer token granted by Google to use their APIs. More instruction on how to find this value in our docs", - "airbyte_secret": true - }, - "client_id": { - "type": "string", - "title": "Client ID", - "order": 1, - "description": "The Client ID of your Google Ads developer application. More instruction on how to find this value in our docs" - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "order": 2, - "description": "The Client Secret of your Google Ads developer application. More instruction on how to find this value in our docs", - "airbyte_secret": true - }, - "refresh_token": { - "type": "string", - "title": "Refresh Token", - "order": 3, - "description": "The token for obtaining a new access token. More instruction on how to find this value in our docs", - "airbyte_secret": true - }, - "access_token": { - "type": "string", - "title": "Access Token", - "order": 4, - "description": "Access Token for making authenticated requests. More instruction on how to find this value in our docs", - "airbyte_secret": true - } - } - }, - "customer_id": { - "title": "Customer ID(s)", - "type": "string", - "description": "Comma separated list of (client) customer IDs. Each customer ID must be specified as a 10-digit number without dashes. More instruction on how to find this value in our docs. Metrics streams like AdGroupAdReport cannot be requested for a manager account.", - "pattern": "^[0-9]{10}(,[0-9]{10})*$", - "examples": [ "6783948572,5839201945" ], - "order": 1 - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "UTC date and time in the format 2017-01-25. Any data before this date will not be replicated.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "2017-01-25" ], - "order": 2, - "format": "date" - }, - "end_date": { - "type": "string", - "title": "End Date", - "description": "UTC date and time in the format 2017-01-25. Any data after this date will not be replicated.", - "pattern": "^$|^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "2017-01-30" ], - "order": 6, - "format": "date" - }, - "custom_queries": { - "type": "array", - "title": "Custom GAQL Queries", - "description": "", - "order": 3, - "items": { - "type": "object", - "required": [ "query", "table_name" ], - "properties": { - "query": { - "type": "string", - "title": "Custom Query", - "description": "A custom defined GAQL query for building the report. Should not contain segments.date expression because it is used by incremental streams. See Google's query builder for more information.", - "examples": [ "SELECT segments.ad_destination_type, campaign.advertising_channel_sub_type FROM campaign WHERE campaign.status = 'PAUSED'" ] - }, - "table_name": { - "type": "string", - "title": "Destination Table Name", - "description": "The table name in your destination database for choosen query." - } - } - } - }, - "login_customer_id": { - "type": "string", - "title": "Login Customer ID for Managed Accounts", - "description": "If your access to the customer account is through a manager account, this field is required and must be set to the customer ID of the manager account (10-digit number without dashes). More information about this field you can see here", - "pattern": "^([0-9]{10})?$", - "examples": [ "7349206847" ], - "order": 4 - }, - "conversion_window_days": { - "title": "Conversion Window", - "type": "integer", - "description": "A conversion window is the period of time after an ad interaction (such as an ad click or video view) during which a conversion, such as a purchase, is recorded in Google Ads. For more information, see Google's documentation.", - "minimum": 0, - "maximum": 1095, - "default": 14, - "examples": [ 14 ], - "order": 5 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ "credentials" ], - "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ], [ "developer_token" ] ], - "oauthFlowOutputParameters": [ [ "access_token" ], [ "refresh_token" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "accounts.google.com", "googleads.googleapis.com" ] - } - }, { - "sourceDefinitionId": "eff3616a-f9c3-11eb-9a03-0242ac130003", - "name": "Google Analytics (Universal Analytics)", - "dockerRepository": "airbyte/source-google-analytics-v4", - "dockerImageTag": "0.1.34", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-analytics-v4", - "icon": "google-analytics.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-analytics-universal-analytics", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Google Analytics (Universal Analytics) Spec", - "type": "object", - "required": [ "view_id", "start_date" ], - "additionalProperties": true, - "properties": { - "credentials": { - "order": 0, - "type": "object", - "title": "Credentials", - "description": "Credentials for the service", - "oneOf": [ { - "title": "Authenticate via Google (Oauth)", - "type": "object", - "required": [ "client_id", "client_secret", "refresh_token" ], - "properties": { - "auth_type": { - "type": "string", - "const": "Client", - "order": 0 - }, - "client_id": { - "title": "Client ID", - "type": "string", - "description": "The Client ID of your Google Analytics developer application.", - "airbyte_secret": true, - "order": 1 - }, - "client_secret": { - "title": "Client Secret", - "type": "string", - "description": "The Client Secret of your Google Analytics developer application.", - "airbyte_secret": true, - "order": 2 - }, - "refresh_token": { - "title": "Refresh Token", - "type": "string", - "description": "The token for obtaining a new access token.", - "airbyte_secret": true, - "order": 3 - }, - "access_token": { - "title": "Access Token", - "type": "string", - "description": "Access Token for making authenticated requests.", - "airbyte_secret": true, - "order": 4 - } - } - }, { - "type": "object", - "title": "Service Account Key Authentication", - "required": [ "credentials_json" ], - "properties": { - "auth_type": { - "type": "string", - "const": "Service", - "order": 0 - }, - "credentials_json": { - "title": "Service Account JSON Key", - "type": "string", - "description": "The JSON key of the service account to use for authorization", - "examples": [ "{ \"type\": \"service_account\", \"project_id\": YOUR_PROJECT_ID, \"private_key_id\": YOUR_PRIVATE_KEY, ... }" ], - "airbyte_secret": true - } - } - } ] - }, - "start_date": { - "order": 1, - "type": "string", - "title": "Replication Start Date", - "description": "The date in the format YYYY-MM-DD. Any data before this date will not be replicated.", - "examples": [ "2020-06-01" ] - }, - "view_id": { - "order": 2, - "type": "string", - "title": "View ID", - "description": "The ID for the Google Analytics View you want to fetch data from. This can be found from the Google Analytics Account Explorer." - }, - "custom_reports": { - "order": 3, - "type": "string", - "title": "Custom Reports", - "description": "A JSON array describing the custom reports you want to sync from Google Analytics. See the docs for more information about the exact format you can use to fill out this field." - }, - "window_in_days": { - "type": "integer", - "title": "Data request time increment in days", - "description": "The time increment used by the connector when requesting data from the Google Analytics API. More information is available in the the docs. The bigger this value is, the faster the sync will be, but the more likely that sampling will be applied to your data, potentially causing inaccuracies in the returned results. We recommend setting this to 1 unless you have a hard requirement to make the sync faster at the expense of accuracy. The minimum allowed value for this field is 1, and the maximum is 364. ", - "examples": [ 30, 60, 90, 120, 200, 364 ], - "default": 1, - "order": 4 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ "credentials", "0" ], - "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], - "oauthFlowOutputParameters": [ [ "access_token" ], [ "refresh_token" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "oauth2.googleapis.com", "www.googleapis.com", "analyticsdata.googleapis.com", "analyticsreporting.googleapis.com" ] - } - }, { - "sourceDefinitionId": "3cc2eafd-84aa-4dca-93af-322d9dfeec1a", - "name": "Google Analytics 4 (GA4)", - "dockerRepository": "airbyte/source-google-analytics-data-api", - "dockerImageTag": "0.1.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-analytics-data-api", - "icon": "google-analytics.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-analytics-data-api", - "connectionSpecification": { - "$schema": "https://json-schema.org/draft-07/schema#", - "title": "Google Analytics (Data API) Spec", - "type": "object", - "required": [ "property_id", "date_ranges_start_date" ], - "additionalProperties": true, - "properties": { - "credentials": { - "order": 0, - "type": "object", - "title": "Credentials", - "description": "Credentials for the service", - "oneOf": [ { - "title": "Authenticate via Google (Oauth)", - "type": "object", - "required": [ "client_id", "client_secret", "refresh_token" ], - "properties": { - "auth_type": { - "type": "string", - "const": "Client", - "order": 0 - }, - "client_id": { - "title": "Client ID", - "type": "string", - "description": "The Client ID of your Google Analytics developer application.", - "order": 1 - }, - "client_secret": { - "title": "Client Secret", - "type": "string", - "description": "The Client Secret of your Google Analytics developer application.", - "airbyte_secret": true, - "order": 2 - }, - "refresh_token": { - "title": "Refresh Token", - "type": "string", - "description": "The token for obtaining a new access token.", - "airbyte_secret": true, - "order": 3 - }, - "access_token": { - "title": "Access Token", - "type": "string", - "description": "Access Token for making authenticated requests.", - "airbyte_secret": true, - "order": 4 - } - } - }, { - "type": "object", - "title": "Service Account Key Authentication", - "required": [ "credentials_json" ], - "properties": { - "auth_type": { - "type": "string", - "const": "Service", - "order": 0 - }, - "credentials_json": { - "title": "Service Account JSON Key", - "type": "string", - "description": "The JSON key of the service account to use for authorization", - "examples": [ "{ \"type\": \"service_account\", \"project_id\": YOUR_PROJECT_ID, \"private_key_id\": YOUR_PRIVATE_KEY, ... }" ], - "airbyte_secret": true, - "order": 1 - } - } - } ] - }, - "property_id": { - "type": "string", - "title": "Property ID", - "description": "A Google Analytics GA4 property identifier whose events are tracked. Specified in the URL path and not the body", - "order": 1 - }, - "date_ranges_start_date": { - "type": "string", - "title": "Start Date", - "description": "The start date from which to replicate report data in the format YYYY-MM-DD. Data generated before this date will not be included in the report.", - "format": "date", - "order": 2 - }, - "custom_reports": { - "order": 3, - "type": "string", - "title": "Custom Reports", - "description": "A JSON array describing the custom reports you want to sync from Google Analytics. See the docs for more information about the exact format you can use to fill out this field." - }, - "window_in_days": { - "type": "integer", - "title": "Data request time increment in days", - "description": "The time increment used by the connector when requesting data from the Google Analytics API. More information is available in the the docs. The bigger this value is, the faster the sync will be, but the more likely that sampling will be applied to your data, potentially causing inaccuracies in the returned results. We recommend setting this to 1 unless you have a hard requirement to make the sync faster at the expense of accuracy. The minimum allowed value for this field is 1, and the maximum is 364.", - "examples": [ 30, 60, 90, 120, 200, 364 ], - "minimum": 1, - "maximum": 364, - "default": 1, - "order": 4 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ "credentials", "0" ], - "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], - "oauthFlowOutputParameters": [ [ "access_token" ], [ "refresh_token" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "oauth2.googleapis.com", "www.googleapis.com", "analyticsdata.googleapis.com" ] - } - }, { - "sourceDefinitionId": "d19ae824-e289-4b14-995a-0632eb46d246", - "name": "Google Directory", - "dockerRepository": "airbyte/source-google-directory", - "dockerImageTag": "0.1.9", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-directory", - "icon": "googledirectory.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-directory", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Google Directory Spec", - "type": "object", - "required": [ ], - "additionalProperties": true, - "properties": { - "credentials": { - "title": "Google Credentials", - "description": "Google APIs use the OAuth 2.0 protocol for authentication and authorization. The Source supports Web server application and Service accounts scenarios.", - "type": "object", - "oneOf": [ { - "title": "Sign in via Google (OAuth)", - "description": "For these scenario user only needs to give permission to read Google Directory data.", - "type": "object", - "required": [ "client_id", "client_secret", "refresh_token" ], - "properties": { - "credentials_title": { - "type": "string", - "title": "Credentials Title", - "description": "Authentication Scenario", - "const": "Web server app", - "enum": [ "Web server app" ], - "default": "Web server app", - "order": 0 - }, - "client_id": { - "title": "Client ID", - "type": "string", - "description": "The Client ID of the developer application.", - "airbyte_secret": true - }, - "client_secret": { - "title": "Client secret", - "type": "string", - "description": "The Client Secret of the developer application.", - "airbyte_secret": true - }, - "refresh_token": { - "title": "Refresh Token", - "type": "string", - "description": "The Token for obtaining a new access token.", - "airbyte_secret": true - } - } - }, { - "title": "Service Account Key", - "description": "For these scenario user should obtain service account's credentials from the Google API Console and provide delegated email.", - "type": "object", - "required": [ "credentials_json", "email" ], - "properties": { - "credentials_title": { - "type": "string", - "title": "Credentials Title", - "description": "Authentication Scenario", - "const": "Service accounts", - "enum": [ "Service accounts" ], - "default": "Service accounts", - "order": 0 - }, - "credentials_json": { - "type": "string", - "title": "Credentials JSON", - "description": "The contents of the JSON service account key. See the docs for more information on how to generate this key.", - "airbyte_secret": true - }, - "email": { - "type": "string", - "title": "Email", - "description": "The email of the user, which has permissions to access the Google Workspace Admin APIs." - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ "credentials", "0" ], - "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], - "oauthFlowOutputParameters": [ [ "refresh_token" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "1e9086ab-ddac-4c1d-aafd-ba43ff575fe4", - "name": "Google PageSpeed Insights", - "dockerRepository": "airbyte/source-google-pagespeed-insights", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-pagespeed-insights", - "icon": "google-pagespeed-insights.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/google-pagespeed-insights", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Google PageSpeed Insights Spec", - "type": "object", - "required": [ "urls", "strategies", "categories" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "title": "API Key", - "description": "Google PageSpeed API Key. See here. The key is optional - however the API is heavily rate limited when using without API Key. Creating and using the API key therefore is recommended. The key is case sensitive.", - "airbyte_secret": true - }, - "urls": { - "type": "array", - "items": { - "type": "string", - "pattern": "^(?:origin:)?(http(s)?:\\/\\/)[\\w.-]+(?:\\.[\\w\\.-]+)+[\\w\\-\\._~:\\/?#[\\]@!\\$&'\\(\\)\\*\\+,;=.]+$" - }, - "title": "URLs to analyse", - "description": "The URLs to retrieve pagespeed information from. The connector will attempt to sync PageSpeed reports for all the defined URLs. Format: https://(www.)url.domain", - "example": "https://example.com" - }, - "strategies": { - "type": "array", - "items": { - "type": "string", - "enum": [ "desktop", "mobile" ] - }, - "title": "Analyses Strategies", - "description": "The analyses strategy to use. Either \"desktop\" or \"mobile\"." - }, - "categories": { - "type": "array", - "items": { - "type": "string", - "enum": [ "accessibility", "best-practices", "performance", "pwa", "seo" ] - }, - "title": "Lighthouse Categories", - "description": "Defines which Lighthouse category to run. One or many of: \"accessibility\", \"best-practices\", \"performance\", \"pwa\", \"seo\"." - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "eb4c9e00-db83-4d63-a386-39cfa91012a8", - "name": "Google Search Console", - "dockerRepository": "airbyte/source-google-search-console", - "dockerImageTag": "0.1.22", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-search-console", - "icon": "googlesearchconsole.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-search-console", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Google Search Console Spec", - "type": "object", - "required": [ "site_urls", "start_date", "authorization" ], - "properties": { - "site_urls": { - "type": "array", - "items": { - "type": "string" - }, - "title": "Website URL Property", - "description": "The URLs of the website property attached to your GSC account. Read more here.", - "examples": [ "https://example1.com/", "sc-domain:example2.com" ], - "order": 0 - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "UTC date in the format 2017-01-25. Any data before this date will not be replicated.", - "examples": [ "2021-01-01" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "order": 1, - "format": "date" - }, - "end_date": { - "type": "string", - "title": "End Date", - "description": "UTC date in the format 2017-01-25. Any data after this date will not be replicated. Must be greater or equal to the start date field.", - "examples": [ "2021-12-12" ], - "pattern": "^$|^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "order": 2, - "format": "date" - }, - "authorization": { - "type": "object", - "title": "Authentication Type", - "description": "", - "order": 3, - "oneOf": [ { - "title": "OAuth", - "type": "object", - "required": [ "auth_type", "client_id", "client_secret", "refresh_token" ], - "properties": { - "auth_type": { - "type": "string", - "const": "Client", - "order": 0 - }, - "client_id": { - "title": "Client ID", - "type": "string", - "description": "The client ID of your Google Search Console developer application. Read more here.", - "airbyte_secret": true - }, - "client_secret": { - "title": "Client Secret", - "type": "string", - "description": "The client secret of your Google Search Console developer application. Read more here.", - "airbyte_secret": true - }, - "access_token": { - "title": "Access Token", - "type": "string", - "description": "Access token for making authenticated requests. Read more here.", - "airbyte_secret": true - }, - "refresh_token": { - "title": "Refresh Token", - "type": "string", - "description": "The token for obtaining a new access token. Read more here.", - "airbyte_secret": true - } - } - }, { - "type": "object", - "title": "Service Account Key Authentication", - "required": [ "auth_type", "service_account_info", "email" ], - "properties": { - "auth_type": { - "type": "string", - "const": "Service", - "order": 0 - }, - "service_account_info": { - "title": "Service Account JSON Key", - "type": "string", - "description": "The JSON key of the service account to use for authorization. Read more here.", - "examples": [ "{ \"type\": \"service_account\", \"project_id\": YOUR_PROJECT_ID, \"private_key_id\": YOUR_PRIVATE_KEY, ... }" ], - "airbyte_secret": true - }, - "email": { - "title": "Admin Email", - "type": "string", - "description": "The email of the user which has permissions to access the Google Workspace Admin APIs." - } - } - } ] - }, - "custom_reports": { - "order": 4, - "type": "string", - "title": "Custom Reports", - "description": "A JSON array describing the custom reports you want to sync from Google Search Console. See the docs for more information about the exact format you can use to fill out this field." - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ "authorization", "0" ], - "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], - "oauthFlowOutputParameters": [ [ "access_token" ], [ "refresh_token" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "*.googleapis.com" ] - } - }, { - "sourceDefinitionId": "71607ba1-c0ac-4799-8049-7f4b90dd50f7", - "name": "Google Sheets", - "dockerRepository": "airbyte/source-google-sheets", - "dockerImageTag": "0.2.37", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-sheets", - "icon": "google-sheets.svg", - "sourceType": "file", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-sheets", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Google Sheets Source Spec", - "type": "object", - "required": [ "spreadsheet_id", "credentials" ], - "additionalProperties": true, - "properties": { - "spreadsheet_id": { - "type": "string", - "title": "Spreadsheet Link", - "description": "Enter the link to the Google spreadsheet you want to sync", - "examples": [ "https://docs.google.com/spreadsheets/d/1hLd9Qqti3UyLXZB2aFfUWDT7BG-arw2xy4HR3D-dwUb/edit" ] - }, - "row_batch_size": { - "type": "integer", - "title": "Row Batch Size", - "description": "Number of rows fetched when making a Google Sheet API call. Defaults to 200.", - "default": 200 - }, - "names_conversion": { - "type": "boolean", - "title": "Columns Name Conversion", - "description": "Columns name conversion using a set of rules, for example, 'My Name' -> 'my-name'.", - "default": false - }, - "credentials": { - "type": "object", - "title": "Authentication", - "description": "Credentials for connecting to the Google Sheets API", - "oneOf": [ { - "title": "Authenticate via Google (OAuth)", - "type": "object", - "required": [ "auth_type", "client_id", "client_secret", "refresh_token" ], - "properties": { - "auth_type": { - "type": "string", - "const": "Client" - }, - "client_id": { - "title": "Client ID", - "type": "string", - "description": "Enter your Google application's Client ID", - "airbyte_secret": true - }, - "client_secret": { - "title": "Client Secret", - "type": "string", - "description": "Enter your Google application's Client Secret", - "airbyte_secret": true - }, - "refresh_token": { - "title": "Refresh Token", - "type": "string", - "description": "Enter your Google application's refresh token", - "airbyte_secret": true - } - } - }, { - "title": "Service Account Key Authentication", - "type": "object", - "required": [ "auth_type", "service_account_info" ], - "properties": { - "auth_type": { - "type": "string", - "const": "Service" - }, - "service_account_info": { - "type": "string", - "title": "Service Account Information.", - "description": "Enter your Google Cloud service account key in JSON format", - "airbyte_secret": true, - "examples": [ "{ \"type\": \"service_account\", \"project_id\": YOUR_PROJECT_ID, \"private_key_id\": YOUR_PRIVATE_KEY, ... }" ] - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ "credentials", "0" ], - "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], - "oauthFlowOutputParameters": [ [ "refresh_token" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "*.googleapis.com" ] - } - }, { - "sourceDefinitionId": "a68fbcde-b465-4ab3-b2a6-b0590a875835", - "name": "Google Webfonts", - "dockerRepository": "airbyte/source-google-webfonts", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-webfonts", - "icon": "googleworkpace.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-webfonts", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Google Webfonts Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "description": "API key is required to access google apis, For getting your's goto google console and generate api key for Webfonts", - "airbyte_secret": true - }, - "sort": { - "type": "string", - "description": "Optional, to find how to sort" - }, - "prettyPrint": { - "type": "string", - "description": "Optional, boolean type" - }, - "alt": { - "type": "string", - "description": "Optional, Available params- json, media, proto" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "ed9dfefa-1bbc-419d-8c5e-4d78f0ef6734", - "name": "Google Workspace Admin Reports", - "dockerRepository": "airbyte/source-google-workspace-admin-reports", - "dockerImageTag": "0.1.8", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-workspace-admin-reports", - "icon": "googleworkpace.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-workspace-admin-reports", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Google Directory Spec", - "type": "object", - "required": [ "credentials_json", "email" ], - "additionalProperties": false, - "properties": { - "credentials_json": { - "type": "string", - "title": "Credentials JSON", - "description": "The contents of the JSON service account key. See the docs for more information on how to generate this key.", - "airbyte_secret": true - }, - "email": { - "type": "string", - "title": "Email", - "description": "The email of the user, who has permissions to access the Google Workspace Admin APIs." - }, - "lookback": { - "type": "integer", - "title": "Lookback Window in Days", - "minimum": 0, - "maximum": 180, - "description": "Sets the range of time shown in the report. The maximum value allowed by the Google API is 180 days." - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "59f1e50a-331f-4f09-b3e8-2e8d4d355f44", - "name": "Greenhouse", - "dockerRepository": "airbyte/source-greenhouse", - "dockerImageTag": "0.3.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/greenhouse", - "icon": "greenhouse.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/greenhouse", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Greenhouse Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "title": "API Key", - "type": "string", - "description": "Greenhouse API Key. See the docs for more information on how to generate this key.", - "airbyte_secret": true, - "order": 0 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "harvest.greenhouse.io" ] - } - }, { - "sourceDefinitionId": "bff9a277-e01d-420d-81ee-80f28a307318", - "name": "Gutendex", - "dockerRepository": "airbyte/source-gutendex", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/gutendex", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/gutendex", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Gutendex Spec", - "type": "object", - "additionalProperties": true, - "properties": { - "author_year_start": { - "type": "string", - "description": "(Optional) Defines the minimum birth year of the authors. Books by authors born prior to the start year will not be returned. Supports both positive (CE) or negative (BCE) integer values", - "pattern": "^[-]?[0-9]{1,4}$", - "examples": [ 2002, 500, -500, 2020 ] - }, - "author_year_end": { - "type": "string", - "description": "(Optional) Defines the maximum birth year of the authors. Books by authors born after the end year will not be returned. Supports both positive (CE) or negative (BCE) integer values", - "pattern": "^[-]?[0-9]{1,4}$", - "examples": [ 2002, 500, -500, 2020 ] - }, - "copyright": { - "type": "string", - "description": "(Optional) Use this to find books with a certain copyright status - true for books with existing copyrights, false for books in the public domain in the USA, or null for books with no available copyright information.", - "pattern": "^(true|false|null)$", - "examples": [ true, false, null ] - }, - "languages": { - "type": "string", - "description": "(Optional) Use this to find books in any of a list of languages. They must be comma-separated, two-character language codes.", - "examples": [ "en", "en,fr,fi" ] - }, - "search": { - "type": "string", - "description": "(Optional) Use this to search author names and book titles with given words. They must be separated by a space (i.e. %20 in URL-encoded format) and are case-insensitive.", - "examples": [ "dickens%20great%20expect", "dickens" ] - }, - "sort": { - "type": "string", - "description": "(Optional) Use this to sort books - ascending for Project Gutenberg ID numbers from lowest to highest, descending for IDs highest to lowest, or popular (the default) for most popular to least popular by number of downloads.", - "pattern": "^(ascending|descending|popular)$", - "examples": [ "ascending", "descending", "popular" ] - }, - "topic": { - "type": "string", - "description": "(Optional) Use this to search for a case-insensitive key-phrase in books' bookshelves or subjects.", - "examples": [ "children", "fantasy" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "6fe89830-d04d-401b-aad6-6552ffa5c4af", - "name": "Harness", - "dockerRepository": "farosai/airbyte-harness-source", - "dockerImageTag": "0.1.23", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/harness", - "icon": "harness.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.faros.ai", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Harness Spec", - "type": "object", - "required": [ "api_key", "account_id" ], - "additionalProperties": false, - "properties": { - "api_key": { - "type": "string", - "title": "Harness API key", - "airbyte_secret": true - }, - "account_id": { - "type": "string", - "title": "Harness account ID" - }, - "api_url": { - "type": "string", - "title": "Harness API URL", - "default": "https://app.harness.io", - "examples": [ "https://my-harness-server.example.com" ] - }, - "cutoff_days": { - "type": "number", - "title": "Harness Cutoff Days", - "default": 90, - "description": "Only fetch deployments updated after cutoff" - }, - "page_size": { - "type": "number", - "title": "Harness Page Size", - "default": 100, - "description": "number of pipelines (builds) to fetch per call" - }, - "deployment_timeout": { - "type": "number", - "title": "Harness Deployment Timeout", - "default": 24, - "description": "Max number of hours to consider for a deployment to be running/queued before giving up on syncing it" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "fe2b4084-3386-4d3b-9ad6-308f61a6f1e6", - "name": "Harvest", - "dockerRepository": "airbyte/source-harvest", - "dockerImageTag": "0.1.17", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/harvest", - "icon": "harvest.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/harvest", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Harvest Spec", - "type": "object", - "required": [ "account_id", "replication_start_date" ], - "additionalProperties": true, - "properties": { - "account_id": { - "title": "Account ID", - "description": "Harvest account ID. Required for all Harvest requests in pair with Personal Access Token", - "airbyte_secret": true, - "type": "string", - "order": 0 - }, - "replication_start_date": { - "title": "Start Date", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2017-01-25T00:00:00Z" ], - "type": "string", - "order": 1, - "format": "date-time" - }, - "replication_end_date": { - "title": "End Date", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data after this date will not be replicated.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2017-01-25T00:00:00Z" ], - "type": "string", - "airbyte_hidden": true, - "order": 2, - "format": "date-time" - }, - "credentials": { - "title": "Authentication mechanism", - "description": "Choose how to authenticate to Harvest.", - "type": "object", - "order": 3, - "oneOf": [ { - "type": "object", - "title": "Authenticate via Harvest (OAuth)", - "required": [ "client_id", "client_secret", "refresh_token" ], - "additionalProperties": true, - "properties": { - "auth_type": { - "type": "string", - "const": "Client", - "order": 0 - }, - "client_id": { - "title": "Client ID", - "type": "string", - "description": "The Client ID of your Harvest developer application." - }, - "client_secret": { - "title": "Client Secret", - "type": "string", - "description": "The Client Secret of your Harvest developer application.", - "airbyte_secret": true - }, - "refresh_token": { - "title": "Refresh Token", - "type": "string", - "description": "Refresh Token to renew the expired Access Token.", - "airbyte_secret": true - } - } - }, { - "type": "object", - "title": "Authenticate with Personal Access Token", - "required": [ "api_token" ], - "additionalProperties": true, - "properties": { - "auth_type": { - "type": "string", - "const": "Token", - "order": 0 - }, - "api_token": { - "title": "Personal Access Token", - "description": "Log into Harvest and then create new personal access token.", - "type": "string", - "airbyte_secret": true - } - } - } ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "append" ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ "credentials", "0" ], - "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], - "oauthFlowOutputParameters": [ [ "refresh_token" ] ] - } - }, - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "auth_type" ], - "predicate_value": "Client", - "oauth_config_specification": { - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": true, - "properties": { - "refresh_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "refresh_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": true, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": true, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "api.harvestapp.com" ] - } - }, { - "sourceDefinitionId": "492b56d1-937c-462e-8076-21ad2031e784", - "name": "Hellobaton", - "dockerRepository": "airbyte/source-hellobaton", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/hellobaton", - "icon": "hellobaton.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Hellobaton Spec", - "type": "object", - "required": [ "api_key", "company" ], - "additionalProperties": false, - "properties": { - "api_key": { - "type": "string", - "description": "authentication key required to access the api endpoints", - "airbyte_secret": true - }, - "company": { - "type": "string", - "description": "Company name that generates your base api url", - "examples": [ "google", "facebook", "microsoft" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "8097ceb9-383f-42f6-9f92-d3fd4bcc7689", - "name": "Hubplanner", - "dockerRepository": "airbyte/source-hubplanner", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/hubplanner", - "icon": "hubplanner.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/hubplanner", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Hubplanner Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "description": "Hubplanner API key. See https://github.com/hubplanner/API#authentication for more details.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "36c891d9-4bd9-43ac-bad2-10e12756272c", - "name": "HubSpot", - "dockerRepository": "airbyte/source-hubspot", - "dockerImageTag": "0.6.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/hubspot", - "icon": "hubspot.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/hubspot", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "HubSpot Source Spec", - "type": "object", - "required": [ "start_date", "credentials" ], - "additionalProperties": true, - "properties": { - "start_date": { - "type": "string", - "title": "Start date", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", - "examples": [ "2017-01-25T00:00:00Z" ], - "format": "date-time" - }, - "credentials": { - "title": "Authentication", - "description": "Choose how to authenticate to HubSpot.", - "type": "object", - "oneOf": [ { - "type": "object", - "title": "OAuth", - "required": [ "client_id", "client_secret", "refresh_token", "credentials_title" ], - "properties": { - "credentials_title": { - "type": "string", - "title": "Credentials", - "description": "Name of the credentials", - "const": "OAuth Credentials", - "order": 0 - }, - "client_id": { - "title": "Client ID", - "description": "The Client ID of your HubSpot developer application. See the Hubspot docs if you need help finding this ID.", - "type": "string", - "examples": [ "123456789000" ] - }, - "client_secret": { - "title": "Client Secret", - "description": "The client secret for your HubSpot developer application. See the Hubspot docs if you need help finding this secret.", - "type": "string", - "examples": [ "secret" ], - "airbyte_secret": true - }, - "refresh_token": { - "title": "Refresh Token", - "description": "Refresh token to renew an expired access token. See the Hubspot docs if you need help finding this token.", - "type": "string", - "examples": [ "refresh_token" ], - "airbyte_secret": true - } - } - }, { - "type": "object", - "title": "Private App", - "required": [ "access_token", "credentials_title" ], - "properties": { - "credentials_title": { - "type": "string", - "title": "Credentials", - "description": "Name of the credentials set", - "const": "Private App Credentials", - "order": 0 - }, - "access_token": { - "title": "Access token", - "description": "HubSpot Access token. See the Hubspot docs if you need help finding this token.", - "type": "string", - "airbyte_secret": true - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ "credentials", "0" ], - "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], - "oauthFlowOutputParameters": [ [ "refresh_token" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "api.hubapi.com" ] - } - }, { - "sourceDefinitionId": "f23b7b7c-d705-49a3-9042-09add3b104a5", - "name": "IP2Whois", - "dockerRepository": "airbyte/source-ip2whois", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/ip2whois", - "icon": "ip2whois.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/ip2whois", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Ip2whois Spec", - "type": "object", - "additionalProperties": true, - "properties": { - "api_key": { - "title": "API key", - "type": "string", - "description": "Your API Key. See here.", - "airbyte_secret": true - }, - "domain": { - "title": "Domain", - "type": "string", - "description": "Domain name. See here.", - "examples": [ "www.google.com", "www.facebook.com" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "447e0381-3780-4b46-bb62-00a4e3c8b8e2", - "name": "IBM Db2", - "dockerRepository": "airbyte/source-db2", - "dockerImageTag": "0.1.19", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/db2", - "icon": "db2.svg", - "sourceType": "database", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/db2", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "IBM Db2 Source Spec", - "type": "object", - "required": [ "host", "port", "db", "username", "password", "encryption" ], - "properties": { - "host": { - "description": "Host of the Db2.", - "type": "string", - "order": 0 - }, - "port": { - "description": "Port of the database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 8123, - "examples": [ "8123" ], - "order": 1 - }, - "db": { - "description": "Name of the database.", - "type": "string", - "examples": [ "default" ], - "order": 2 - }, - "username": { - "description": "Username to use to access the database.", - "type": "string", - "order": 3 - }, - "password": { - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 4 - }, - "jdbc_url_params": { - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", - "title": "JDBC URL Params", - "type": "string", - "order": 5 - }, - "encryption": { - "title": "Encryption", - "type": "object", - "description": "Encryption method to use when communicating with the database", - "order": 6, - "oneOf": [ { - "title": "Unencrypted", - "description": "Data transfer will not be encrypted.", - "required": [ "encryption_method" ], - "properties": { - "encryption_method": { - "type": "string", - "const": "unencrypted" - } - } - }, { - "title": "TLS Encrypted (verify certificate)", - "description": "Verify and use the cert provided by the server.", - "required": [ "encryption_method", "ssl_certificate" ], - "properties": { - "encryption_method": { - "type": "string", - "const": "encrypted_verify_certificate" - }, - "ssl_certificate": { - "title": "SSL PEM file", - "description": "Privacy Enhanced Mail (PEM) files are concatenated certificate containers frequently used in certificate installations", - "type": "string", - "airbyte_secret": true, - "multiline": true - }, - "key_store_password": { - "title": "Key Store Password. This field is optional. If you do not fill in this field, the password will be randomly generated.", - "description": "Key Store Password", - "type": "string", - "airbyte_secret": true - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "allowedHosts": { - "hosts": [ "${host}" ] - } - }, { - "sourceDefinitionId": "38f84314-fe6a-4257-97be-a8dcd942d693", - "name": "Insightly", - "dockerRepository": "airbyte/source-insightly", - "dockerImageTag": "0.1.2", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/insightly", - "icon": "insightly.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/insightly", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Insightly Spec", - "type": "object", - "required": [ "token", "start_date" ], - "additionalProperties": true, - "properties": { - "token": { - "type": [ "string", "null" ], - "title": "API Token", - "description": "Your Insightly API token.", - "airbyte_secret": true - }, - "start_date": { - "type": [ "string", "null" ], - "title": "Start Date", - "description": "The date from which you'd like to replicate data for Insightly in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated. Note that it will be used only for incremental streams.", - "examples": [ "2021-03-01T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "6acf6b55-4f1e-4fca-944e-1a3caef8aba8", - "name": "Instagram", - "dockerRepository": "airbyte/source-instagram", - "dockerImageTag": "1.0.5", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/instagram", - "icon": "instagram.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/instagram", - "changelogUrl": "https://docs.airbyte.com/integrations/sources/instagram", - "connectionSpecification": { - "title": "Source Instagram", - "type": "object", - "properties": { - "start_date": { - "title": "Start Date", - "description": "The date from which you'd like to replicate data for User Insights, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2017-01-25T00:00:00Z" ], - "type": "string", - "format": "date-time" - }, - "access_token": { - "title": "Access Token", - "description": "The value of the access token generated with instagram_basic, instagram_manage_insights, pages_show_list, pages_read_engagement, Instagram Public Content Access permissions. See the docs for more information", - "airbyte_secret": true, - "type": "string" - } - }, - "required": [ "start_date", "access_token" ] - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "append" ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ ], - "oauthFlowInitParameters": [ ], - "oauthFlowOutputParameters": [ [ "access_token" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "graph.facebook.com" ] - } - }, { - "sourceDefinitionId": "1901024c-0249-45d0-bcac-31a954652927", - "name": "Instatus", - "dockerRepository": "airbyte/source-instatus", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/instatus", - "icon": "instatus.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/instatus", - "connectionSpecification": { - "title": "Instatus Spec", - "type": "object", - "additionalProperties": true, - "required": [ "api_key" ], - "properties": { - "api_key": { - "type": "string", - "title": "Rest API Key", - "airbyte_secret": true, - "description": "Instatus REST API key" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "d8313939-3782-41b0-be29-b3ca20d8dd3a", - "name": "Intercom", - "dockerRepository": "airbyte/source-intercom", - "dockerImageTag": "0.2.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/intercom", - "icon": "intercom.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/intercom", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Source Intercom Spec", - "type": "object", - "required": [ "start_date", "access_token" ], - "additionalProperties": true, - "properties": { - "start_date": { - "type": "string", - "title": "Start date", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", - "examples": [ "2020-11-16T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "format": "date-time" - }, - "access_token": { - "title": "Access token", - "type": "string", - "description": "Access token for making authenticated requests. See the Intercom docs for more information.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ ], - "oauthFlowInitParameters": [ ], - "oauthFlowOutputParameters": [ [ "access_token" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "api.intercom.io" ] - } - }, { - "sourceDefinitionId": "3d15163b-11d8-412f-b808-795c9b2c3a3a", - "name": "Intruder", - "dockerRepository": "airbyte/source-intruder", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/intruder", - "icon": "intruder.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/intruder", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Intruder Spec", - "type": "object", - "required": [ "access_token" ], - "additionalProperties": true, - "properties": { - "access_token": { - "title": "API Access token", - "type": "string", - "description": "Your API Access token. See here.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "2e875208-0c0b-4ee4-9e92-1cb3156ea799", - "name": "Iterable", - "dockerRepository": "airbyte/source-iterable", - "dockerImageTag": "0.1.27", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/iterable", - "icon": "iterable.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/iterable", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Iterable Spec", - "type": "object", - "required": [ "start_date", "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "title": "API Key", - "description": "Iterable API Key. See the docs for more information on how to obtain this key.", - "airbyte_secret": true, - "order": 0 - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "The date from which you'd like to replicate data for Iterable, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", - "examples": [ "2021-04-01T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "order": 1, - "format": "date-time" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "api.iterable.com" ] - } - }, { - "sourceDefinitionId": "d6f73702-d7a0-4e95-9758-b0fb1af0bfba", - "name": "Jenkins", - "dockerRepository": "farosai/airbyte-jenkins-source", - "dockerImageTag": "0.1.23", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/jenkins", - "icon": "jenkins.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.faros.ai", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Jenkins Spec", - "type": "object", - "required": [ "server_url", "user", "token" ], - "additionalProperties": false, - "properties": { - "server_url": { - "type": "string", - "title": "Jenkins Server URL", - "examples": [ "https://my-jenkins-server.example.com" ] - }, - "user": { - "type": "string", - "description": "Jenkins User" - }, - "token": { - "type": "string", - "title": "Jenkins Token", - "airbyte_secret": true - }, - "depth": { - "type": "number", - "title": "Depth", - "description": "Jenkins JSON API does not support deep scan, it is required to generate a suitable tree for the corresponding depth. Job in some cases have many sub jobs, depth needs to quantify how many sub jobs are showed. If depth is not provided we will try to compute it automatically" - }, - "pageSize": { - "type": "integer", - "minimum": 1, - "default": 10, - "title": "Page Size", - "description": "Quantity of jobs on a single page fetched from Jenkins" - }, - "last100Builds": { - "type": "boolean", - "default": false, - "title": "Last 100 Builds Only", - "description": "Fetch only 100 last builds from Jenkins server" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "68e63de2-bb83-4c7e-93fa-a8a9051e3993", - "name": "Jira", - "dockerRepository": "airbyte/source-jira", - "dockerImageTag": "0.3.7", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/jira", - "icon": "jira.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/jira", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Jira Spec", - "type": "object", - "required": [ "api_token", "domain", "email" ], - "additionalProperties": true, - "properties": { - "api_token": { - "type": "string", - "title": "API Token", - "description": "Jira API Token. See the docs for more information on how to generate this key.", - "airbyte_secret": true, - "order": 0 - }, - "domain": { - "type": "string", - "title": "Domain", - "examples": [ ".atlassian.net", ".jira.com", "jira..com" ], - "description": "The Domain for your Jira account, e.g. airbyteio.atlassian.net, airbyteio.jira.com, jira.your-domain.com", - "order": 1 - }, - "email": { - "type": "string", - "title": "Email", - "description": "The user email for your Jira account.", - "order": 2 - }, - "projects": { - "type": "array", - "title": "Projects", - "items": { - "type": "string" - }, - "examples": [ "PROJ1", "PROJ2" ], - "description": "List of Jira project keys to replicate data for.", - "order": 3 - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "The date from which you want to replicate data from Jira, use the format YYYY-MM-DDT00:00:00Z. Note that this field only applies to certain streams, and only data generated on or after the start date will be replicated. For more information, refer to the documentation.", - "examples": [ "2021-03-01T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "format": "date-time", - "order": 4 - }, - "expand_issue_changelog": { - "type": "boolean", - "title": "Expand Issue Changelog", - "description": "Expand the changelog when replicating issues.", - "default": false, - "order": 5 - }, - "render_fields": { - "type": "boolean", - "title": "Render Issue Fields", - "description": "Render issue fields in HTML format in addition to Jira JSON-like format.", - "default": false, - "order": 6 - }, - "enable_experimental_streams": { - "type": "boolean", - "title": "Enable Experimental Streams", - "description": "Allow the use of experimental streams which rely on undocumented Jira API endpoints. See https://docs.airbyte.com/integrations/sources/jira#experimental-tables for more info.", - "default": false, - "order": 7 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "${domain}" ] - }, - "maxSecondsBetweenMessages": 21600 - }, { - "sourceDefinitionId": "e300ece7-b073-43a3-852e-8aff36a57f13", - "name": "K6 Cloud", - "dockerRepository": "airbyte/source-k6-cloud", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/k6-cloud", - "icon": "k6cloud.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/k6-cloud", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "K6 Cloud Spec", - "type": "object", - "required": [ "api_token" ], - "additionalProperties": true, - "properties": { - "api_token": { - "title": "Api Token", - "type": "string", - "description": "Your API Token. See here. The key is case sensitive.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "d917a47b-8537-4d0d-8c10-36a9928d4265", - "name": "Kafka", - "dockerRepository": "airbyte/source-kafka", - "dockerImageTag": "0.2.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/kafka", - "icon": "kafka.svg", - "sourceType": "database", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/kafka", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Kafka Source Spec", - "type": "object", - "required": [ "bootstrap_servers", "subscription", "protocol" ], - "additionalProperties": true, - "properties": { - "MessageFormat": { - "title": "MessageFormat", - "type": "object", - "description": "The serialization used based on this ", - "oneOf": [ { - "title": "JSON", - "properties": { - "deserialization_type": { - "type": "string", - "const": "JSON" - } - } - }, { - "title": "AVRO", - "properties": { - "deserialization_type": { - "const": "AVRO" - }, - "deserialization_strategy": { - "type": "string", - "enum": [ "TopicNameStrategy", "RecordNameStrategy", "TopicRecordNameStrategy" ], - "default": "TopicNameStrategy" - }, - "schema_registry_url": { - "type": "string", - "examples": [ "http://localhost:8081" ] - }, - "schema_registry_username": { - "type": "string", - "default": "" - }, - "schema_registry_password": { - "type": "string", - "default": "" - } - } - } ] - }, - "bootstrap_servers": { - "title": "Bootstrap Servers", - "description": "A list of host/port pairs to use for establishing the initial connection to the Kafka cluster. The client will make use of all servers irrespective of which servers are specified here for bootstrapping—this list only impacts the initial hosts used to discover the full set of servers. This list should be in the form host1:port1,host2:port2,.... Since these servers are just used for the initial connection to discover the full cluster membership (which may change dynamically), this list need not contain the full set of servers (you may want more than one, though, in case a server is down).", - "type": "string", - "examples": [ "kafka-broker1:9092,kafka-broker2:9092" ] - }, - "subscription": { - "title": "Subscription Method", - "type": "object", - "description": "You can choose to manually assign a list of partitions, or subscribe to all topics matching specified pattern to get dynamically assigned partitions.", - "oneOf": [ { - "title": "Manually assign a list of partitions", - "required": [ "subscription_type", "topic_partitions" ], - "properties": { - "subscription_type": { - "description": "Manually assign a list of partitions to this consumer. This interface does not allow for incremental assignment and will replace the previous assignment (if there is one).\nIf the given list of topic partitions is empty, it is treated the same as unsubscribe().", - "type": "string", - "const": "assign" - }, - "topic_partitions": { - "title": "List of topic:partition Pairs", - "type": "string", - "examples": [ "sample.topic:0, sample.topic:1" ] - } - } - }, { - "title": "Subscribe to all topics matching specified pattern", - "required": [ "subscription_type", "topic_pattern" ], - "properties": { - "subscription_type": { - "description": "The Topic pattern from which the records will be read.", - "type": "string", - "const": "subscribe" - }, - "topic_pattern": { - "title": "Topic Pattern", - "type": "string", - "examples": [ "sample.topic" ] - } - } - } ] - }, - "test_topic": { - "title": "Test Topic", - "description": "The Topic to test in case the Airbyte can consume messages.", - "type": "string", - "examples": [ "test.topic" ] - }, - "group_id": { - "title": "Group ID", - "description": "The Group ID is how you distinguish different consumer groups.", - "type": "string", - "examples": [ "group.id" ] - }, - "max_poll_records": { - "title": "Max Poll Records", - "description": "The maximum number of records returned in a single call to poll(). Note, that max_poll_records does not impact the underlying fetching behavior. The consumer will cache the records from each fetch request and returns them incrementally from each poll.", - "type": "integer", - "default": 500 - }, - "polling_time": { - "title": "Polling Time", - "description": "Amount of time Kafka connector should try to poll for messages.", - "type": "integer", - "default": 100 - }, - "protocol": { - "title": "Protocol", - "type": "object", - "description": "The Protocol used to communicate with brokers.", - "oneOf": [ { - "title": "PLAINTEXT", - "required": [ "security_protocol" ], - "properties": { - "security_protocol": { - "type": "string", - "const": "PLAINTEXT" - } - } - }, { - "title": "SASL PLAINTEXT", - "required": [ "security_protocol", "sasl_mechanism", "sasl_jaas_config" ], - "properties": { - "security_protocol": { - "type": "string", - "const": "SASL_PLAINTEXT" - }, - "sasl_mechanism": { - "title": "SASL Mechanism", - "description": "The SASL mechanism used for client connections. This may be any mechanism for which a security provider is available.", - "type": "string", - "const": "PLAIN" - }, - "sasl_jaas_config": { - "title": "SASL JAAS Config", - "description": "The JAAS login context parameters for SASL connections in the format used by JAAS configuration files.", - "type": "string", - "default": "", - "airbyte_secret": true - } - } - }, { - "title": "SASL SSL", - "required": [ "security_protocol", "sasl_mechanism", "sasl_jaas_config" ], - "properties": { - "security_protocol": { - "type": "string", - "const": "SASL_SSL" - }, - "sasl_mechanism": { - "title": "SASL Mechanism", - "description": "The SASL mechanism used for client connections. This may be any mechanism for which a security provider is available.", - "type": "string", - "default": "GSSAPI", - "enum": [ "GSSAPI", "OAUTHBEARER", "SCRAM-SHA-256", "SCRAM-SHA-512", "PLAIN" ] - }, - "sasl_jaas_config": { - "title": "SASL JAAS Config", - "description": "The JAAS login context parameters for SASL connections in the format used by JAAS configuration files.", - "type": "string", - "default": "", - "airbyte_secret": true - } - } - } ] - }, - "client_id": { - "title": "Client ID", - "description": "An ID string to pass to the server when making requests. The purpose of this is to be able to track the source of requests beyond just ip/port by allowing a logical application name to be included in server-side request logging.", - "type": "string", - "examples": [ "airbyte-consumer" ] - }, - "enable_auto_commit": { - "title": "Enable Auto Commit", - "description": "If true, the consumer's offset will be periodically committed in the background.", - "type": "boolean", - "default": true - }, - "auto_commit_interval_ms": { - "title": "Auto Commit Interval, ms", - "description": "The frequency in milliseconds that the consumer offsets are auto-committed to Kafka if enable.auto.commit is set to true.", - "type": "integer", - "default": 5000 - }, - "client_dns_lookup": { - "title": "Client DNS Lookup", - "description": "Controls how the client uses DNS lookups. If set to use_all_dns_ips, connect to each returned IP address in sequence until a successful connection is established. After a disconnection, the next IP is used. Once all IPs have been used once, the client resolves the IP(s) from the hostname again. If set to resolve_canonical_bootstrap_servers_only, resolve each bootstrap address into a list of canonical names. After the bootstrap phase, this behaves the same as use_all_dns_ips. If set to default (deprecated), attempt to connect to the first IP address returned by the lookup, even if the lookup returns multiple IP addresses.", - "type": "string", - "default": "use_all_dns_ips", - "enum": [ "default", "use_all_dns_ips", "resolve_canonical_bootstrap_servers_only" ] - }, - "retry_backoff_ms": { - "title": "Retry Backoff, ms", - "description": "The amount of time to wait before attempting to retry a failed request to a given topic partition. This avoids repeatedly sending requests in a tight loop under some failure scenarios.", - "type": "integer", - "default": 100 - }, - "request_timeout_ms": { - "title": "Request Timeout, ms", - "description": "The configuration controls the maximum amount of time the client will wait for the response of a request. If the response is not received before the timeout elapses the client will resend the request if necessary or fail the request if retries are exhausted.", - "type": "integer", - "default": 30000 - }, - "receive_buffer_bytes": { - "title": "Receive Buffer, bytes", - "description": "The size of the TCP receive buffer (SO_RCVBUF) to use when reading data. If the value is -1, the OS default will be used.", - "type": "integer", - "default": 32768 - }, - "auto_offset_reset": { - "title": "Auto Offset Reset", - "description": "What to do when there is no initial offset in Kafka or if the current offset does not exist any more on the server - earliest: automatically reset the offset to the earliest offset, latest: automatically reset the offset to the latest offset, none: throw exception to the consumer if no previous offset is found for the consumer's group, anything else: throw exception to the consumer.", - "type": "string", - "default": "latest", - "enum": [ "latest", "earliest", "none" ] - }, - "repeated_calls": { - "title": "Repeated Calls", - "description": "The number of repeated calls to poll() if no messages were received.", - "type": "integer", - "default": 3 - }, - "max_records_process": { - "title": "Maximum Records", - "description": "The Maximum to be processed per execution", - "type": "integer", - "default": 100000 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "supported_source_sync_modes": [ "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "60c24725-00ae-490c-991d-55b78c3197e0", - "name": "Klarna", - "dockerRepository": "airbyte/source-klarna", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/klarna", - "icon": "klarna.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/klarna", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Klarna Spec", - "type": "object", - "required": [ "region", "playground", "username", "password" ], - "additionalProperties": true, - "properties": { - "region": { - "title": "Region", - "type": "string", - "enum": [ "eu", "us", "oc" ], - "description": "Base url region (For playground eu https://docs.klarna.com/klarna-payments/api/payments-api/#tag/API-URLs). Supported 'eu', 'us', 'oc'" - }, - "playground": { - "title": "Playground", - "type": "boolean", - "description": "Propertie defining if connector is used against playground or production environment", - "default": false - }, - "username": { - "title": "Username", - "type": "string", - "description": "Consists of your Merchant ID (eid) - a unique number that identifies your e-store, combined with a random string (https://developers.klarna.com/api/#authentication)" - }, - "password": { - "title": "Password", - "type": "string", - "description": "A string which is associated with your Merchant ID and is used to authorize use of Klarna's APIs (https://developers.klarna.com/api/#authentication)", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "95e8cffd-b8c4-4039-968e-d32fb4a69bde", - "name": "Klaviyo", - "dockerRepository": "airbyte/source-klaviyo", - "dockerImageTag": "0.3.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/klaviyo", - "icon": "klaviyo.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/klaviyo", - "changelogUrl": "https://docs.airbyte.com/integrations/sources/klaviyo", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Klaviyo Spec", - "type": "object", - "properties": { - "api_key": { - "title": "Api Key", - "description": "Klaviyo API Key. See our docs if you need help finding this key.", - "airbyte_secret": true, - "type": "string" - }, - "start_date": { - "title": "Start Date", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2017-01-25T00:00:00Z" ], - "type": "string", - "format": "date-time" - } - }, - "required": [ "api_key", "start_date" ] - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "a.klaviyo.com", "klaviyo.com" ] - } - }, { - "sourceDefinitionId": "547dc08e-ab51-421d-953b-8f3745201a8c", - "name": "Kyriba", - "dockerRepository": "airbyte/source-kyriba", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/kyriba", - "icon": "kyriba.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Kyriba Spec", - "type": "object", - "required": [ "domain", "username", "password", "start_date" ], - "additionalProperties": false, - "properties": { - "domain": { - "type": "string", - "description": "Kyriba domain", - "title": "Domain", - "examples": [ "demo.kyriba.com" ], - "pattern": "^[a-zA-Z0-9._-]*\\.[a-zA-Z0-9._-]*\\.[a-z]*" - }, - "username": { - "type": "string", - "description": "Username to be used in basic auth", - "title": "Username" - }, - "password": { - "type": "string", - "description": "Password to be used in basic auth", - "title": "Password", - "airbyte_secret": true - }, - "start_date": { - "type": "string", - "description": "The date the sync should start from.", - "title": "Start Date", - "examples": [ "2021-01-10" ], - "pattern": "^\\d{4}\\-(0[1-9]|1[012])\\-(0[1-9]|[12][0-9]|3[01])$" - }, - "end_date": { - "type": "string", - "description": "The date the sync should end. If let empty the sync will run to the current date.", - "title": "End Date", - "examples": [ "2022-03-01" ], - "pattern": "^(?:(\\d{4}\\-(0[1-9]|1[012])\\-(0[1-9]|[12][0-9]|3[01]))|)$" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "f96bb511-5e3c-48fc-b408-547953cd81a4", - "name": "LaunchDarkly", - "dockerRepository": "airbyte/source-launchdarkly", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/launchdarkly", - "icon": "launchdarkly.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/launchdarkly", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Launchdarkly Spec", - "type": "object", - "required": [ "access_token" ], - "additionalProperties": true, - "properties": { - "access_token": { - "title": "Access token", - "type": "string", - "description": "Your Access token. See here.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "789f8e7a-2d28-11ec-8d3d-0242ac130003", - "name": "Lemlist", - "dockerRepository": "airbyte/source-lemlist", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/lemlist", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/lemlist", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Lemlist Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": false, - "properties": { - "api_key": { - "type": "string", - "title": "API key", - "description": "Lemlist API key.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "3981c999-bd7d-4afc-849b-e53dea90c948", - "name": "Lever Hiring", - "dockerRepository": "airbyte/source-lever-hiring", - "dockerImageTag": "0.1.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/lever-hiring", - "icon": "leverhiring.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/lever-hiring", - "changelogUrl": "https://docs.airbyte.com/integrations/sources/lever-hiring#changelog", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Lever Hiring Source Spec", - "type": "object", - "required": [ "start_date" ], - "additionalProperties": true, - "properties": { - "credentials": { - "order": 3, - "title": "Authentication Mechanism", - "description": "Choose how to authenticate to Lever Hiring.", - "type": "object", - "oneOf": [ { - "type": "object", - "title": "Authenticate via Lever (OAuth)", - "required": [ "refresh_token" ], - "properties": { - "auth_type": { - "type": "string", - "const": "Client", - "order": 0 - }, - "client_id": { - "title": "Client ID", - "type": "string", - "description": "The Client ID of your Lever Hiring developer application." - }, - "client_secret": { - "title": "Client Secret", - "type": "string", - "description": "The Client Secret of your Lever Hiring developer application.", - "airbyte_secret": true - }, - "refresh_token": { - "type": "string", - "title": "Refresh Token", - "description": "The token for obtaining new access token.", - "airbyte_secret": true - } - } - }, { - "type": "object", - "title": "Authenticate via Lever (Api Key)", - "required": [ "api_key" ], - "properties": { - "auth_type": { - "type": "string", - "const": "Api Key", - "order": 0 - }, - "api_key": { - "title": "Api key", - "type": "string", - "description": "The Api Key of your Lever Hiring account.", - "airbyte_secret": true, - "order": 1 - } - } - } ] - }, - "start_date": { - "order": 0, - "type": "string", - "title": "Start Date", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated. Note that it will be used only in the following incremental streams: comments, commits, and issues.", - "examples": [ "2021-03-01T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$" - }, - "environment": { - "order": 1, - "type": "string", - "title": "Environment", - "description": "The environment in which you'd like to replicate data for Lever. This is used to determine which Lever API endpoint to use.", - "default": "Sandbox", - "enum": [ "Production", "Sandbox" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ "credentials", "0" ], - "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], - "oauthFlowOutputParameters": [ [ "refresh_token" ] ] - } - }, - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "auth_type" ], - "predicate_value": "Client", - "oauth_config_specification": { - "oauth_user_input_from_connector_config_specification": { - "type": "object", - "properties": { - "environment": { - "type": "string", - "path_in_connector_config": [ "environment" ] - } - } - }, - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "refresh_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "refresh_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "137ece28-5434-455c-8f34-69dc3782f451", - "name": "LinkedIn Ads", - "dockerRepository": "airbyte/source-linkedin-ads", - "dockerImageTag": "0.1.15", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/linkedin-ads", - "icon": "linkedin.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/linkedin-ads", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Linkedin Ads Spec", - "type": "object", - "required": [ "start_date" ], - "additionalProperties": true, - "properties": { - "credentials": { - "title": "Authentication", - "type": "object", - "oneOf": [ { - "type": "object", - "title": "OAuth2.0", - "required": [ "client_id", "client_secret", "refresh_token" ], - "properties": { - "auth_method": { - "type": "string", - "const": "oAuth2.0" - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "The client ID of the LinkedIn Ads developer application.", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "title": "Client secret", - "description": "The client secret the LinkedIn Ads developer application.", - "airbyte_secret": true - }, - "refresh_token": { - "type": "string", - "title": "Refresh token", - "description": "The key to refresh the expired access token.", - "airbyte_secret": true - } - } - }, { - "title": "Access token", - "type": "object", - "required": [ "access_token" ], - "properties": { - "auth_method": { - "type": "string", - "const": "access_token" - }, - "access_token": { - "type": "string", - "title": "Access token", - "description": "The token value generated using the authentication code. See the docs to obtain yours.", - "airbyte_secret": true - } - } - } ] - }, - "start_date": { - "type": "string", - "title": "Start date", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "description": "UTC date in the format 2020-09-17. Any data before this date will not be replicated.", - "examples": [ "2021-05-17" ], - "format": "date" - }, - "account_ids": { - "title": "Account IDs", - "type": "array", - "description": "Specify the account IDs separated by a space, to pull the data from. Leave empty, if you want to pull the data from all associated accounts. See the LinkedIn Ads docs for more info.", - "items": { - "type": "integer" - }, - "default": [ ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ "credentials", "0" ], - "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], - "oauthFlowOutputParameters": [ [ "refresh_token" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "api.linkedin.com" ] - }, - "maxSecondsBetweenMessages": 21600 - }, { - "sourceDefinitionId": "af54297c-e8f8-4d63-a00d-a94695acc9d3", - "name": "LinkedIn Pages", - "dockerRepository": "airbyte/source-linkedin-pages", - "dockerImageTag": "1.0.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/linkedin-pages", - "icon": "linkedin.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/linkedin-pages/", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Linkedin Pages Spec", - "type": "object", - "required": [ "org_id" ], - "additionalProperties": true, - "properties": { - "org_id": { - "title": "Organization ID", - "type": "string", - "airbyte_secret": true, - "description": "Specify the Organization ID", - "examples": [ "123456789" ] - }, - "credentials": { - "title": "Authentication", - "type": "object", - "oneOf": [ { - "type": "object", - "title": "OAuth2.0", - "required": [ "client_id", "client_secret", "refresh_token" ], - "properties": { - "auth_method": { - "type": "string", - "const": "oAuth2.0" - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "The client ID of the LinkedIn developer application.", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "title": "Client secret", - "description": "The client secret of the LinkedIn developer application.", - "airbyte_secret": true - }, - "refresh_token": { - "type": "string", - "title": "Refresh token", - "description": "The token value generated using the LinkedIn Developers OAuth Token Tools. See the docs to obtain yours.", - "airbyte_secret": true - } - } - }, { - "title": "Access token", - "type": "object", - "required": [ "access_token" ], - "properties": { - "auth_method": { - "type": "string", - "const": "access_token" - }, - "access_token": { - "type": "string", - "title": "Access token", - "description": "The token value generated using the LinkedIn Developers OAuth Token Tools. See the docs to obtain yours.", - "airbyte_secret": true - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "7b86879e-26c5-4ef6-a5ce-2be5c7b46d1e", - "name": "Linnworks", - "dockerRepository": "airbyte/source-linnworks", - "dockerImageTag": "0.1.5", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/linnworks", - "icon": "linnworks.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/linnworks", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Linnworks Spec", - "type": "object", - "required": [ "application_id", "application_secret", "token", "start_date" ], - "additionalProperties": false, - "properties": { - "application_id": { - "title": "Application ID.", - "description": "Linnworks Application ID", - "type": "string" - }, - "application_secret": { - "title": "Application Secret", - "description": "Linnworks Application Secret", - "type": "string", - "airbyte_secret": true - }, - "token": { - "title": "API Token", - "type": "string" - }, - "start_date": { - "title": "Start Date", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", - "type": "string", - "format": "date-time" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "45e0b135-615c-40ac-b38e-e65b0944197f", - "name": "Lokalise", - "dockerRepository": "airbyte/source-lokalise", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/lokalise", - "icon": "lokalise.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/lokalise", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Lokalise Spec", - "type": "object", - "required": [ "api_key", "project_id" ], - "additionalProperties": true, - "properties": { - "api_key": { - "title": "API Key", - "type": "string", - "description": "Lokalise API Key with read-access. Available at Profile settings > API tokens. See here.", - "airbyte_secret": true - }, - "project_id": { - "title": "Project Id", - "type": "string", - "description": "Lokalise project ID. Available at Project Settings > General." - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "00405b19-9768-4e0c-b1ae-9fc2ee2b2a8c", - "name": "Looker", - "dockerRepository": "airbyte/source-looker", - "dockerImageTag": "0.2.8", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/looker", - "icon": "looker.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/looker", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Looker Spec", - "type": "object", - "required": [ "domain", "client_id", "client_secret" ], - "additionalProperties": true, - "properties": { - "domain": { - "type": "string", - "title": "Domain", - "examples": [ "domainname.looker.com", "looker.clientname.com", "123.123.124.123:8000" ], - "description": "Domain for your Looker account, e.g. airbyte.cloud.looker.com,looker.[clientname].com,IP address" - }, - "client_id": { - "title": "Client ID", - "type": "string", - "description": "The Client ID is first part of an API3 key that is specific to each Looker user. See the docs for more information on how to generate this key." - }, - "client_secret": { - "title": "Client Secret", - "type": "string", - "description": "The Client Secret is second part of an API3 key.", - "airbyte_secret": true - }, - "run_look_ids": { - "title": "Look IDs to Run", - "type": "array", - "items": { - "type": "string", - "pattern": "^[0-9]*$" - }, - "description": "The IDs of any Looks to run" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "b03a9f3e-22a5-11eb-adc1-0242ac120002", - "name": "Mailchimp", - "dockerRepository": "airbyte/source-mailchimp", - "dockerImageTag": "0.3.5", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailchimp", - "icon": "mailchimp.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailchimp", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Mailchimp Spec", - "type": "object", - "required": [ ], - "additionalProperties": true, - "properties": { - "credentials": { - "type": "object", - "title": "Authentication", - "oneOf": [ { - "title": "OAuth2.0", - "type": "object", - "required": [ "auth_type", "access_token" ], - "properties": { - "auth_type": { - "type": "string", - "const": "oauth2.0", - "order": 0 - }, - "client_id": { - "title": "Client ID", - "type": "string", - "description": "The Client ID of your OAuth application.", - "airbyte_secret": true - }, - "client_secret": { - "title": "Client Secret", - "type": "string", - "description": "The Client Secret of your OAuth application.", - "airbyte_secret": true - }, - "access_token": { - "title": "Access Token", - "type": "string", - "description": "An access token generated using the above client ID and secret.", - "airbyte_secret": true - } - } - }, { - "type": "object", - "title": "API Key", - "required": [ "auth_type", "apikey" ], - "properties": { - "auth_type": { - "type": "string", - "const": "apikey", - "order": 1 - }, - "apikey": { - "type": "string", - "title": "API Key", - "description": "Mailchimp API Key. See the docs for information on how to generate this key.", - "airbyte_secret": true - } - } - } ] - }, - "campaign_id": { - "type": "string", - "title": "ID of a campaign to sync email activities", - "airbyte_hidden": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "auth_type" ], - "predicate_value": "oauth2.0", - "oauth_config_specification": { - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "access_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "access_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "*.api.mailchimp.com" ] - } - }, { - "sourceDefinitionId": "56582331-5de2-476b-b913-5798de77bbdf", - "name": "Mailjet Mail", - "dockerRepository": "airbyte/source-mailjet-mail", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailjet-mail", - "icon": "mailjetmail.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailjet-mail", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Mailjet Mail Spec", - "type": "object", - "required": [ "api_key", "api_key_secret" ], - "additionalProperties": true, - "properties": { - "api_key": { - "title": "API Key", - "type": "string", - "description": "Your API Key. See here." - }, - "api_key_secret": { - "title": "API Secret Key", - "type": "string", - "description": "Your API Secret Key. See here.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "6ec2acea-7fd1-4378-b403-41a666e0c028", - "name": "Mailjet SMS", - "dockerRepository": "airbyte/source-mailjet-sms", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailjet-sms", - "icon": "mailjetsms.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailjet-sms", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Mailjet Sms Spec", - "type": "object", - "required": [ "token" ], - "additionalProperties": true, - "properties": { - "token": { - "title": "Access Token", - "type": "string", - "description": "Your access token. See here.", - "airbyte_secret": true - }, - "start_date": { - "title": "Start date", - "type": "integer", - "description": "Retrieve SMS messages created after the specified timestamp. Required format - Unix timestamp.", - "pattern": "^[0-9]*$", - "examples": [ 1666261656 ] - }, - "end_date": { - "title": "End date", - "type": "integer", - "description": "Retrieve SMS messages created before the specified timestamp. Required format - Unix timestamp.", - "pattern": "^[0-9]*$", - "examples": [ 1666281656 ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "dc3b9003-2432-4e93-a7f4-4620b0f14674", - "name": "MailerLite", - "dockerRepository": "airbyte/source-mailerlite", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailerlite", - "icon": "mailerlite.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailerlite", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Mailerlite Spec", - "type": "object", - "required": [ "api_token" ], - "additionalProperties": true, - "properties": { - "api_token": { - "type": "string", - "description": "Your API Token. See here.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "2707d529-3c04-46eb-9c7e-40d4038df6f7", - "name": "MailerSend", - "dockerRepository": "airbyte/source-mailersend", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailersend", - "icon": "mailersend.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailersend", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Mailersend Spec", - "type": "object", - "required": [ "api_token", "domain_id" ], - "additionalProperties": true, - "properties": { - "api_token": { - "type": "string", - "description": "Your API Token. See here.", - "airbyte_secret": true - }, - "domain_id": { - "type": "string", - "description": "The domain entity in mailersend", - "examples": [ "airbyte.com", "linkana.com" ] - }, - "start_date": { - "type": "number", - "description": "Timestamp is assumed to be UTC.", - "examples": [ 123131321 ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "5b9cb09e-1003-4f9c-983d-5779d1b2cd51", - "name": "Mailgun", - "dockerRepository": "airbyte/source-mailgun", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailgun", - "icon": "mailgun.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailgun", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Source Mailgun Spec", - "type": "object", - "required": [ "private_key" ], - "additionalProperties": true, - "properties": { - "private_key": { - "type": "string", - "airbyte_secret": true, - "description": "Primary account API key to access your Mailgun data.", - "title": "Private API Key" - }, - "domain_region": { - "type": "string", - "description": "Domain region code. 'EU' or 'US' are possible values. The default is 'US'.", - "title": "Domain Region Code" - }, - "start_date": { - "title": "Replication Start Date", - "description": "UTC date and time in the format 2020-10-01 00:00:00. Any data before this date will not be replicated. If omitted, defaults to 3 days ago.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$", - "examples": [ "2020-10-01 00:00:00" ], - "type": "string", - "format": "date-time" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "9e0556f4-69df-4522-a3fb-03264d36b348", - "name": "Marketo", - "dockerRepository": "airbyte/source-marketo", - "dockerImageTag": "1.0.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/marketo", - "icon": "marketo.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/marketo", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Source Marketo Spec", - "type": "object", - "required": [ "domain_url", "client_id", "client_secret", "start_date" ], - "additionalProperties": true, - "properties": { - "domain_url": { - "title": "Domain URL", - "type": "string", - "order": 3, - "description": "Your Marketo Base URL. See the docs for info on how to obtain this.", - "examples": [ "https://000-AAA-000.mktorest.com" ], - "airbyte_secret": true - }, - "client_id": { - "title": "Client ID", - "type": "string", - "description": "The Client ID of your Marketo developer application. See the docs for info on how to obtain this.", - "order": 0, - "airbyte_secret": true - }, - "client_secret": { - "title": "Client Secret", - "type": "string", - "description": "The Client Secret of your Marketo developer application. See the docs for info on how to obtain this.", - "order": 1, - "airbyte_secret": true - }, - "start_date": { - "title": "Start Date", - "type": "string", - "order": 2, - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", - "examples": [ "2020-09-25T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "format": "date-time" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "*.mktorest.com" ] - } - }, { - "sourceDefinitionId": "c7cb421b-942e-4468-99ee-e369bcabaec5", - "name": "Metabase", - "dockerRepository": "airbyte/source-metabase", - "dockerImageTag": "0.3.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/metabase", - "icon": "metabase.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/metabase", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Metabase Source Spec", - "type": "object", - "required": [ "instance_api_url" ], - "additionalProperties": true, - "properties": { - "instance_api_url": { - "type": "string", - "title": "Metabase Instance API URL", - "description": "URL to your metabase instance API", - "examples": [ "https://localhost:3000/api/" ], - "pattern": "^https://", - "order": 0 - }, - "username": { - "type": "string", - "order": 1 - }, - "password": { - "type": "string", - "airbyte_secret": true, - "order": 2 - }, - "session_token": { - "type": "string", - "description": "To generate your session token, you need to run the following command: ``` curl -X POST \\\n -H \"Content-Type: application/json\" \\\n -d '{\"username\": \"person@metabase.com\", \"password\": \"fakepassword\"}' \\\n http://localhost:3000/api/session\n``` Then copy the value of the `id` field returned by a successful call to that API.\nNote that by default, sessions are good for 14 days and needs to be regenerated.", - "airbyte_secret": true, - "order": 3 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta" - }, { - "sourceDefinitionId": "b5ea17b1-f170-46dc-bc31-cc744ca984c1", - "name": "Microsoft SQL Server (MSSQL)", - "dockerRepository": "airbyte/source-mssql", - "dockerImageTag": "1.0.14", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mssql", - "icon": "mssql.svg", - "sourceType": "database", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mssql", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "MSSQL Source Spec", - "type": "object", - "required": [ "host", "port", "database", "username" ], - "properties": { - "host": { - "description": "The hostname of the database.", - "title": "Host", - "type": "string", - "order": 0 - }, - "port": { - "description": "The port of the database.", - "title": "Port", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "examples": [ "1433" ], - "order": 1 - }, - "database": { - "description": "The name of the database.", - "title": "Database", - "type": "string", - "examples": [ "master" ], - "order": 2 - }, - "schemas": { - "title": "Schemas", - "description": "The list of schemas to sync from. Defaults to user. Case sensitive.", - "type": "array", - "items": { - "type": "string" - }, - "minItems": 0, - "uniqueItems": true, - "default": [ "dbo" ], - "order": 3 - }, - "username": { - "description": "The username which is used to access the database.", - "title": "Username", - "type": "string", - "order": 4 - }, - "password": { - "description": "The password associated with the username.", - "title": "Password", - "type": "string", - "airbyte_secret": true, - "order": 5 - }, - "jdbc_url_params": { - "title": "JDBC URL Params", - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", - "type": "string", - "order": 6 - }, - "ssl_method": { - "title": "SSL Method", - "type": "object", - "description": "The encryption method which is used when communicating with the database.", - "order": 7, - "oneOf": [ { - "title": "Unencrypted", - "description": "Data transfer will not be encrypted.", - "required": [ "ssl_method" ], - "properties": { - "ssl_method": { - "type": "string", - "const": "unencrypted" - } - } - }, { - "title": "Encrypted (trust server certificate)", - "description": "Use the certificate provided by the server without verification. (For testing purposes only!)", - "required": [ "ssl_method" ], - "properties": { - "ssl_method": { - "type": "string", - "const": "encrypted_trust_server_certificate" - } - } - }, { - "title": "Encrypted (verify certificate)", - "description": "Verify and use the certificate provided by the server.", - "required": [ "ssl_method", "trustStoreName", "trustStorePassword" ], - "properties": { - "ssl_method": { - "type": "string", - "const": "encrypted_verify_certificate" - }, - "hostNameInCertificate": { - "title": "Host Name In Certificate", - "type": "string", - "description": "Specifies the host name of the server. The value of this property must match the subject property of the certificate.", - "order": 7 - } - } - } ] - }, - "replication_method": { - "type": "object", - "title": "Replication Method", - "description": "The replication method used for extracting data from the database. STANDARD replication requires no setup on the DB side but will not be able to represent deletions incrementally. CDC uses {TBC} to detect inserts, updates, and deletes. This needs to be configured on the source database itself.", - "default": "STANDARD", - "order": 8, - "oneOf": [ { - "title": "Standard", - "description": "Standard replication requires no setup on the DB side but will not be able to represent deletions incrementally.", - "required": [ "method" ], - "properties": { - "method": { - "type": "string", - "const": "STANDARD", - "order": 0 - } - } - }, { - "title": "Logical Replication (CDC)", - "description": "CDC uses {TBC} to detect inserts, updates, and deletes. This needs to be configured on the source database itself.", - "required": [ "method" ], - "properties": { - "method": { - "type": "string", - "const": "CDC", - "order": 0 - }, - "data_to_sync": { - "title": "Data to Sync", - "type": "string", - "default": "Existing and New", - "enum": [ "Existing and New", "New Changes Only" ], - "description": "What data should be synced under the CDC. \"Existing and New\" will read existing data as a snapshot, and sync new changes through CDC. \"New Changes Only\" will skip the initial snapshot, and only sync new changes through CDC.", - "order": 1 - }, - "snapshot_isolation": { - "title": "Initial Snapshot Isolation Level", - "type": "string", - "default": "Snapshot", - "enum": [ "Snapshot", "Read Committed" ], - "description": "Existing data in the database are synced through an initial snapshot. This parameter controls the isolation level that will be used during the initial snapshotting. If you choose the \"Snapshot\" level, you must enable the snapshot isolation mode on the database.", - "order": 2 - }, - "initial_waiting_seconds": { - "type": "integer", - "title": "Initial Waiting Time in Seconds (Advanced)", - "description": "The amount of time the connector will wait when it launches to determine if there is new data to sync or not. Defaults to 300 seconds. Valid range: 120 seconds to 1200 seconds. Read about initial waiting time.", - "default": 300, - "min": 120, - "max": 1200, - "order": 3 - } - } - } ] - }, - "tunnel_method": { - "type": "object", - "title": "SSH Tunnel Method", - "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", - "oneOf": [ { - "title": "No Tunnel", - "required": [ "tunnel_method" ], - "properties": { - "tunnel_method": { - "description": "No ssh tunnel needed to connect to database", - "type": "string", - "const": "NO_TUNNEL", - "order": 0 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host.", - "type": "string", - "order": 3 - }, - "ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - }, { - "title": "Password Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host", - "type": "string", - "order": 3 - }, - "tunnel_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 4 - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "allowedHosts": { - "hosts": [ "${host}", "${tunnel_method.tunnel_host}" ] - } - }, { - "sourceDefinitionId": "eaf50f04-21dd-4620-913b-2a83f5635227", - "name": "Microsoft teams", - "dockerRepository": "airbyte/source-microsoft-teams", - "dockerImageTag": "0.2.5", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/microsoft-teams", - "icon": "microsoft-teams.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/microsoft-teams", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Microsoft Teams Spec", - "type": "object", - "required": [ "period" ], - "additionalProperties": true, - "properties": { - "period": { - "type": "string", - "title": "Period", - "description": "Specifies the length of time over which the Team Device Report stream is aggregated. The supported values are: D7, D30, D90, and D180.", - "examples": [ "D7" ] - }, - "credentials": { - "title": "Authentication mechanism", - "description": "Choose how to authenticate to Microsoft", - "type": "object", - "oneOf": [ { - "type": "object", - "title": "Authenticate via Microsoft (OAuth 2.0)", - "required": [ "tenant_id", "client_id", "client_secret", "refresh_token" ], - "additionalProperties": false, - "properties": { - "auth_type": { - "type": "string", - "const": "Client", - "enum": [ "Client" ], - "default": "Client", - "order": 0 - }, - "tenant_id": { - "title": "Directory (tenant) ID", - "type": "string", - "description": "A globally unique identifier (GUID) that is different than your organization name or domain. Follow these steps to obtain: open one of the Teams where you belong inside the Teams Application -> Click on the … next to the Team title -> Click on Get link to team -> Copy the link to the team and grab the tenant ID form the URL" - }, - "client_id": { - "title": "Client ID", - "type": "string", - "description": "The Client ID of your Microsoft Teams developer application." - }, - "client_secret": { - "title": "Client Secret", - "type": "string", - "description": "The Client Secret of your Microsoft Teams developer application.", - "airbyte_secret": true - }, - "refresh_token": { - "title": "Refresh Token", - "type": "string", - "description": "A Refresh Token to renew the expired Access Token.", - "airbyte_secret": true - } - } - }, { - "type": "object", - "title": "Authenticate via Microsoft", - "required": [ "tenant_id", "client_id", "client_secret" ], - "additionalProperties": false, - "properties": { - "auth_type": { - "type": "string", - "const": "Token", - "enum": [ "Token" ], - "default": "Token", - "order": 0 - }, - "tenant_id": { - "title": "Directory (tenant) ID", - "type": "string", - "description": "A globally unique identifier (GUID) that is different than your organization name or domain. Follow these steps to obtain: open one of the Teams where you belong inside the Teams Application -> Click on the … next to the Team title -> Click on Get link to team -> Copy the link to the team and grab the tenant ID form the URL" - }, - "client_id": { - "title": "Client ID", - "type": "string", - "description": "The Client ID of your Microsoft Teams developer application." - }, - "client_secret": { - "title": "Client Secret", - "type": "string", - "description": "The Client Secret of your Microsoft Teams developer application.", - "airbyte_secret": true - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "auth_type" ], - "predicate_value": "Client", - "oauth_config_specification": { - "oauth_user_input_from_connector_config_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "tenant_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "tenant_id" ] - } - } - }, - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "refresh_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "refresh_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "9220e3de-3b60-4bb2-a46f-046d59ea235a", - "name": "Microsoft Dataverse", - "dockerRepository": "airbyte/source-microsoft-dataverse", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/microsoft-dataverse", - "icon": "microsoftdataverse.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/microsoft-dataverse", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Microsoft Dataverse Spec", - "type": "object", - "required": [ "url", "tenant_id", "client_id", "client_secret_value" ], - "additionalProperties": true, - "properties": { - "url": { - "type": "string", - "description": "URL to Microsoft Dataverse API", - "title": "URL", - "examples": [ "https://.crm.dynamics.com" ], - "order": 0 - }, - "tenant_id": { - "type": "string", - "description": "Tenant Id of your Microsoft Dataverse Instance", - "title": "Tenant Id", - "airbyte_secret": true, - "order": 1 - }, - "client_id": { - "type": "string", - "description": "App Registration Client Id", - "title": "Client Id", - "airbyte_secret": true, - "order": 2 - }, - "client_secret_value": { - "type": "string", - "description": "App Registration Client Secret", - "title": "Client Secret", - "airbyte_secret": true, - "order": 3 - }, - "odata_maxpagesize": { - "type": "integer", - "description": "Max number of results per page. Default=5000", - "title": "Max page size", - "default": 5000, - "order": 4 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "12928b32-bf0a-4f1e-964f-07e12e37153a", - "name": "Mixpanel", - "dockerRepository": "airbyte/source-mixpanel", - "dockerImageTag": "0.1.31", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mixpanel", - "icon": "mixpanel.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mixpanel", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Source Mixpanel Spec", - "type": "object", - "properties": { - "credentials": { - "title": "Authentication *", - "description": "Choose how to authenticate to Mixpanel", - "type": "object", - "order": 0, - "oneOf": [ { - "type": "object", - "title": "Service Account", - "required": [ "username", "secret" ], - "properties": { - "option_title": { - "type": "string", - "const": "Service Account", - "order": 0 - }, - "username": { - "order": 1, - "title": "Username", - "type": "string", - "description": "Mixpanel Service Account Username. See the docs for more information on how to obtain this." - }, - "secret": { - "order": 2, - "title": "Secret", - "type": "string", - "description": "Mixpanel Service Account Secret. See the docs for more information on how to obtain this.", - "airbyte_secret": true - } - } - }, { - "type": "object", - "title": "Project Secret", - "required": [ "api_secret" ], - "properties": { - "option_title": { - "type": "string", - "const": "Project Secret", - "order": 0 - }, - "api_secret": { - "order": 1, - "title": "Project Secret", - "type": "string", - "description": "Mixpanel project secret. See the docs for more information on how to obtain this.", - "airbyte_secret": true - } - } - } ] - }, - "project_id": { - "order": 1, - "title": "Project ID", - "description": "Your project ID number. See the docs for more information on how to obtain this.", - "type": "integer" - }, - "attribution_window": { - "order": 2, - "title": "Attribution Window", - "type": "integer", - "description": " A period of time for attributing results to ads and the lookback period after those actions occur during which ad results are counted. Default attribution window is 5 days.", - "default": 5 - }, - "project_timezone": { - "order": 3, - "title": "Project Timezone", - "type": "string", - "description": "Time zone in which integer date times are stored. The project timezone may be found in the project settings in the Mixpanel console.", - "default": "US/Pacific", - "examples": [ "US/Pacific", "UTC" ] - }, - "select_properties_by_default": { - "order": 4, - "title": "Select Properties By Default", - "type": "boolean", - "description": "Setting this config parameter to TRUE ensures that new properties on events and engage records are captured. Otherwise new properties will be ignored.", - "default": true - }, - "start_date": { - "order": 5, - "title": "Start Date", - "type": "string", - "description": "The date in the format YYYY-MM-DD. Any data before this date will not be replicated. If this option is not set, the connector will replicate data from up to one year ago by default.", - "examples": [ "2021-11-16" ], - "pattern": "^$|^[0-9]{4}-[0-9]{2}-[0-9]{2}(T[0-9]{2}:[0-9]{2}:[0-9]{2}Z)?$", - "format": "date-time" - }, - "end_date": { - "order": 6, - "title": "End Date", - "type": "string", - "description": "The date in the format YYYY-MM-DD. Any data after this date will not be replicated. Left empty to always sync to most recent date", - "examples": [ "2021-11-16" ], - "pattern": "^$|^[0-9]{4}-[0-9]{2}-[0-9]{2}(T[0-9]{2}:[0-9]{2}:[0-9]{2}Z)?$", - "format": "date-time" - }, - "region": { - "order": 7, - "title": "Region", - "description": "The region of mixpanel domain instance either US or EU.", - "type": "string", - "enum": [ "US", "EU" ], - "default": "US" - }, - "date_window_size": { - "order": 8, - "title": "Date slicing window", - "description": "Defines window size in days, that used to slice through data. You can reduce it, if amount of data in each window is too big for your environment.", - "type": "integer", - "minimum": 1, - "default": 30 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "mixpanel.com", "eu.mixpanel.com" ] - } - }, { - "sourceDefinitionId": "80a54ea2-9959-4040-aac1-eee42423ec9b", - "name": "Monday", - "dockerRepository": "airbyte/source-monday", - "dockerImageTag": "0.2.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/monday", - "icon": "monday.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/monday", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Monday Spec", - "type": "object", - "required": [ ], - "additionalProperties": true, - "properties": { - "credentials": { - "title": "Authorization Method", - "type": "object", - "oneOf": [ { - "type": "object", - "title": "OAuth2.0", - "required": [ "auth_type", "client_id", "client_secret", "access_token" ], - "properties": { - "subdomain": { - "type": "string", - "title": "Subdomain/Slug", - "description": "Slug/subdomain of the account, or the first part of the URL that comes before .monday.com", - "default": "", - "order": 0 - }, - "auth_type": { - "type": "string", - "const": "oauth2.0", - "order": 1 - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "The Client ID of your OAuth application.", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "The Client Secret of your OAuth application.", - "airbyte_secret": true - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "Access Token for making authenticated requests.", - "airbyte_secret": true - } - } - }, { - "type": "object", - "title": "API Token", - "required": [ "auth_type", "api_token" ], - "properties": { - "auth_type": { - "type": "string", - "const": "api_token", - "order": 0 - }, - "api_token": { - "type": "string", - "title": "Personal API Token", - "description": "API Token for making authenticated requests.", - "airbyte_secret": true - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "auth_type" ], - "predicate_value": "oauth2.0", - "oauth_config_specification": { - "oauth_user_input_from_connector_config_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "subdomain": { - "type": "string", - "path_in_connector_config": [ "credentials", "subdomain" ] - } - } - }, - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "access_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "access_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": true, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "api.monday.com" ] - } - }, { - "sourceDefinitionId": "b2e713cd-cc36-4c0a-b5bd-b47cb8a0561e", - "name": "MongoDb", - "dockerRepository": "airbyte/source-mongodb-v2", - "dockerImageTag": "0.1.19", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mongodb-v2", - "icon": "mongodb.svg", - "sourceType": "database", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mongodb-v2", - "changelogUrl": "https://docs.airbyte.com/integrations/sources/mongodb-v2", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "MongoDb Source Spec", - "type": "object", - "required": [ "database" ], - "additionalProperties": true, - "properties": { - "instance_type": { - "type": "object", - "title": "MongoDb Instance Type", - "description": "The MongoDb instance to connect to. For MongoDB Atlas and Replica Set TLS connection is used by default.", - "order": 0, - "oneOf": [ { - "title": "Standalone MongoDb Instance", - "required": [ "instance", "host", "port" ], - "properties": { - "instance": { - "type": "string", - "enum": [ "standalone" ], - "default": "standalone" - }, - "host": { - "title": "Host", - "type": "string", - "description": "The host name of the Mongo database.", - "order": 0 - }, - "port": { - "title": "Port", - "type": "integer", - "description": "The port of the Mongo database.", - "minimum": 0, - "maximum": 65536, - "default": 27017, - "examples": [ "27017" ], - "order": 1 - }, - "tls": { - "title": "TLS Connection", - "type": "boolean", - "description": "Indicates whether TLS encryption protocol will be used to connect to MongoDB. It is recommended to use TLS connection if possible. For more information see documentation.", - "default": false, - "order": 2 - } - } - }, { - "title": "Replica Set", - "required": [ "instance", "server_addresses" ], - "properties": { - "instance": { - "type": "string", - "enum": [ "replica" ], - "default": "replica" - }, - "server_addresses": { - "title": "Server Addresses", - "type": "string", - "description": "The members of a replica set. Please specify `host`:`port` of each member separated by comma.", - "examples": [ "host1:27017,host2:27017,host3:27017" ], - "order": 0 - }, - "replica_set": { - "title": "Replica Set", - "type": "string", - "description": "A replica set in MongoDB is a group of mongod processes that maintain the same data set.", - "order": 1 - } - } - }, { - "title": "MongoDB Atlas", - "additionalProperties": false, - "required": [ "instance", "cluster_url" ], - "properties": { - "instance": { - "type": "string", - "enum": [ "atlas" ], - "default": "atlas" - }, - "cluster_url": { - "title": "Cluster URL", - "type": "string", - "description": "The URL of a cluster to connect to.", - "order": 0 - } - } - } ] - }, - "database": { - "title": "Database Name", - "type": "string", - "description": "The database you want to replicate.", - "order": 1 - }, - "user": { - "title": "User", - "type": "string", - "description": "The username which is used to access the database.", - "order": 2 - }, - "password": { - "title": "Password", - "type": "string", - "description": "The password associated with this username.", - "airbyte_secret": true, - "order": 3 - }, - "auth_source": { - "title": "Authentication Source", - "type": "string", - "description": "The authentication source where the user information is stored.", - "default": "admin", - "examples": [ "admin" ], - "order": 4 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "722ba4bf-06ec-45a4-8dd5-72e4a5cf3903", - "name": "My Hours", - "dockerRepository": "airbyte/source-my-hours", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/my-hours", - "icon": "my-hours.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/my-hours", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "My Hours Spec", - "type": "object", - "required": [ "email", "password", "start_date" ], - "additionalProperties": false, - "properties": { - "email": { - "title": "Email", - "type": "string", - "description": "Your My Hours username", - "example": "john@doe.com" - }, - "password": { - "title": "Password", - "type": "string", - "description": "The password associated to the username", - "airbyte_secret": true - }, - "start_date": { - "title": "Start Date", - "description": "Start date for collecting time logs", - "examples": [ "%Y-%m-%d", "2016-01-01" ], - "type": "string", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" - }, - "logs_batch_size": { - "title": "Time logs batch size", - "description": "Pagination size used for retrieving logs in days", - "examples": [ 30 ], - "type": "integer", - "minimum": 1, - "maximum": 365, - "default": 30 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "435bb9a5-7887-4809-aa58-28c27df0d7ad", - "name": "MySQL", - "dockerRepository": "airbyte/source-mysql", - "dockerImageTag": "2.0.18", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mysql", - "icon": "mysql.svg", - "sourceType": "database", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mysql", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "MySql Source Spec", - "type": "object", - "required": [ "host", "port", "database", "username", "replication_method" ], - "properties": { - "host": { - "description": "The host name of the database.", - "title": "Host", - "type": "string", - "order": 0 - }, - "port": { - "description": "The port to connect to.", - "title": "Port", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 3306, - "examples": [ "3306" ], - "order": 1 - }, - "database": { - "description": "The database name.", - "title": "Database", - "type": "string", - "order": 2 - }, - "username": { - "description": "The username which is used to access the database.", - "title": "Username", - "type": "string", - "order": 3 - }, - "password": { - "description": "The password associated with the username.", - "title": "Password", - "type": "string", - "airbyte_secret": true, - "order": 4 - }, - "jdbc_url_params": { - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3). For more information read about JDBC URL parameters.", - "title": "JDBC URL Parameters (Advanced)", - "type": "string", - "order": 5 - }, - "ssl": { - "title": "SSL Connection", - "description": "Encrypt data using SSL.", - "type": "boolean", - "default": true, - "order": 6 - }, - "ssl_mode": { - "title": "SSL modes", - "description": "SSL connection modes. Read more in the docs.", - "type": "object", - "order": 7, - "oneOf": [ { - "title": "preferred", - "description": "Automatically attempt SSL connection. If the MySQL server does not support SSL, continue with a regular connection.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "preferred", - "order": 0 - } - } - }, { - "title": "required", - "description": "Always connect with SSL. If the MySQL server doesn’t support SSL, the connection will not be established. Certificate Authority (CA) and Hostname are not verified.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "required", - "order": 0 - } - } - }, { - "title": "Verify CA", - "description": "Always connect with SSL. Verifies CA, but allows connection even if Hostname does not match.", - "required": [ "mode", "ca_certificate" ], - "properties": { - "mode": { - "type": "string", - "const": "verify_ca", - "order": 0 - }, - "ca_certificate": { - "type": "string", - "title": "CA certificate", - "description": "CA certificate", - "airbyte_secret": true, - "multiline": true, - "order": 1 - }, - "client_certificate": { - "type": "string", - "title": "Client certificate", - "description": "Client certificate (this is not a required field, but if you want to use it, you will need to add the Client key as well)", - "airbyte_secret": true, - "multiline": true, - "order": 2, - "always_show": true - }, - "client_key": { - "type": "string", - "title": "Client key", - "description": "Client key (this is not a required field, but if you want to use it, you will need to add the Client certificate as well)", - "airbyte_secret": true, - "multiline": true, - "order": 3, - "always_show": true - }, - "client_key_password": { - "type": "string", - "title": "Client key password", - "description": "Password for keystorage. This field is optional. If you do not add it - the password will be generated automatically.", - "airbyte_secret": true, - "order": 4 - } - } - }, { - "title": "Verify Identity", - "description": "Always connect with SSL. Verify both CA and Hostname.", - "required": [ "mode", "ca_certificate" ], - "properties": { - "mode": { - "type": "string", - "const": "verify_identity", - "order": 0 - }, - "ca_certificate": { - "type": "string", - "title": "CA certificate", - "description": "CA certificate", - "airbyte_secret": true, - "multiline": true, - "order": 1 - }, - "client_certificate": { - "type": "string", - "title": "Client certificate", - "description": "Client certificate (this is not a required field, but if you want to use it, you will need to add the Client key as well)", - "airbyte_secret": true, - "multiline": true, - "order": 2, - "always_show": true - }, - "client_key": { - "type": "string", - "title": "Client key", - "description": "Client key (this is not a required field, but if you want to use it, you will need to add the Client certificate as well)", - "airbyte_secret": true, - "multiline": true, - "order": 3, - "always_show": true - }, - "client_key_password": { - "type": "string", - "title": "Client key password", - "description": "Password for keystorage. This field is optional. If you do not add it - the password will be generated automatically.", - "airbyte_secret": true, - "order": 4 - } - } - } ] - }, - "replication_method": { - "type": "object", - "title": "Replication Method", - "description": "Replication method to use for extracting data from the database.", - "order": 8, - "oneOf": [ { - "title": "Standard", - "description": "Standard replication requires no setup on the DB side but will not be able to represent deletions incrementally.", - "required": [ "method" ], - "properties": { - "method": { - "type": "string", - "const": "STANDARD", - "order": 0 - } - } - }, { - "title": "Logical Replication (CDC)", - "description": "CDC uses the Binlog to detect inserts, updates, and deletes. This needs to be configured on the source database itself.", - "required": [ "method" ], - "properties": { - "method": { - "type": "string", - "const": "CDC", - "order": 0 - }, - "initial_waiting_seconds": { - "type": "integer", - "title": "Initial Waiting Time in Seconds (Advanced)", - "description": "The amount of time the connector will wait when it launches to determine if there is new data to sync or not. Defaults to 300 seconds. Valid range: 120 seconds to 1200 seconds. Read about initial waiting time.", - "default": 300, - "min": 120, - "max": 1200, - "order": 1 - }, - "server_time_zone": { - "type": "string", - "title": "Configured server timezone for the MySQL source (Advanced)", - "description": "Enter the configured MySQL server timezone. This should only be done if the configured timezone in your MySQL instance does not conform to IANNA standard.", - "order": 2 - } - } - } ] - }, - "tunnel_method": { - "type": "object", - "title": "SSH Tunnel Method", - "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", - "oneOf": [ { - "title": "No Tunnel", - "required": [ "tunnel_method" ], - "properties": { - "tunnel_method": { - "description": "No ssh tunnel needed to connect to database", - "type": "string", - "const": "NO_TUNNEL", - "order": 0 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host.", - "type": "string", - "order": 3 - }, - "ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - }, { - "title": "Password Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host", - "type": "string", - "order": 3 - }, - "tunnel_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 4 - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "${host}", "${tunnel_method.tunnel_host}" ] - } - }, { - "sourceDefinitionId": "4a961f66-5e99-4430-8320-a73afe52f7a2", - "name": "n8n", - "dockerRepository": "airbyte/source-n8n", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/n8n", - "icon": "n8n.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/n8n", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "N8n Spec", - "type": "object", - "required": [ "host", "api_key" ], - "additionalProperties": true, - "properties": { - "host": { - "type": "string", - "description": "Hostname of the n8n instance" - }, - "api_key": { - "type": "string", - "description": "Your API KEY. See here" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "1a8667d7-7978-43cd-ba4d-d32cbd478971", - "name": "NASA", - "dockerRepository": "airbyte/source-nasa", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/nasa", - "icon": "nasa.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/nasa-apod", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "NASA spec", - "type": "object", - "required": [ "api_key" ], - "properties": { - "api_key": { - "type": "string", - "description": "API access key used to retrieve data from the NASA APOD API.", - "airbyte_secret": true - }, - "concept_tags": { - "type": "boolean", - "default": false, - "description": "Indicates whether concept tags should be returned with the rest of the response. The concept tags are not necessarily included in the explanation, but rather derived from common search tags that are associated with the description text. (Better than just pure text search.) Defaults to False." - }, - "count": { - "type": "integer", - "minimum": 1, - "maximum": 100, - "description": "A positive integer, no greater than 100. If this is specified then `count` randomly chosen images will be returned in a JSON array. Cannot be used in conjunction with `date` or `start_date` and `end_date`." - }, - "start_date": { - "type": "string", - "description": "Indicates the start of a date range. All images in the range from `start_date` to `end_date` will be returned in a JSON array. Must be after 1995-06-16, the first day an APOD picture was posted. There are no images for tomorrow available through this API.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "2022-10-20" ], - "format": "date" - }, - "end_date": { - "type": "string", - "description": "Indicates that end of a date range. If `start_date` is specified without an `end_date` then `end_date` defaults to the current date.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "2022-10-20" ], - "format": "date" - }, - "thumbs": { - "type": "boolean", - "default": false, - "description": "Indicates whether the API should return a thumbnail image URL for video files. If set to True, the API returns URL of video thumbnail. If an APOD is not a video, this parameter is ignored." - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "allowedHosts": { - "hosts": [ "api.nasa.gov" ] - } - }, { - "sourceDefinitionId": "4f2f093d-ce44-4121-8118-9d13b7bfccd0", - "name": "Netsuite", - "dockerRepository": "airbyte/source-netsuite", - "dockerImageTag": "0.1.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/netsuite", - "icon": "netsuite.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Netsuite Spec", - "type": "object", - "required": [ "realm", "consumer_key", "consumer_secret", "token_key", "token_secret", "start_datetime" ], - "additionalProperties": true, - "properties": { - "realm": { - "type": "string", - "title": "Realm (Account Id)", - "description": "Netsuite realm e.g. 2344535, as for `production` or 2344535_SB1, as for the `sandbox`", - "order": 0, - "airbyte_secret": true - }, - "consumer_key": { - "type": "string", - "title": "Consumer Key", - "description": "Consumer key associated with your integration", - "order": 1, - "airbyte_secret": true - }, - "consumer_secret": { - "type": "string", - "title": "Consumer Secret", - "description": "Consumer secret associated with your integration", - "order": 2, - "airbyte_secret": true - }, - "token_key": { - "type": "string", - "title": "Token Key (Token Id)", - "description": "Access token key", - "order": 3, - "airbyte_secret": true - }, - "token_secret": { - "type": "string", - "title": "Token Secret", - "description": "Access token secret", - "order": 4, - "airbyte_secret": true - }, - "object_types": { - "type": "array", - "title": "Object Types", - "items": { - "type": "string" - }, - "description": "The API names of the Netsuite objects you want to sync. Setting this speeds up the connection setup process by limiting the number of schemas that need to be retrieved from Netsuite.", - "order": 5, - "examples": [ "customer", "salesorder", "etc" ], - "default": [ ] - }, - "start_datetime": { - "type": "string", - "title": "Start Date", - "description": "Starting point for your data replication, in format of \"YYYY-MM-DDTHH:mm:ssZ\"", - "order": 6, - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2017-01-25T00:00:00Z" ] - }, - "window_in_days": { - "type": "integer", - "title": "Window in Days", - "description": "The amount of days used to query the data with date chunks. Set smaller value, if you have lots of data.", - "order": 7, - "default": 30 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "df38991e-f35b-4af2-996d-36817f614587", - "name": "News API", - "dockerRepository": "airbyte/source-news-api", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/news-api", - "icon": "newsapi.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/news-api", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "News Api Spec", - "type": "object", - "required": [ "api_key", "country", "category", "sort_by" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "description": "API Key", - "airbyte_secret": true, - "order": 0 - }, - "search_query": { - "type": "string", - "description": "Search query. See https://newsapi.org/docs/endpoints/everything for \ninformation.\n", - "examples": [ "+bitcoin OR +crypto", "sunak AND (truss OR johnson)" ], - "order": 1 - }, - "search_in": { - "type": "array", - "description": "Where to apply search query. Possible values are: title, description,\ncontent.\n", - "items": { - "type": "string", - "enum": [ "title", "description", "content" ] - }, - "order": 2 - }, - "sources": { - "type": "array", - "description": "Identifiers (maximum 20) for the news sources or blogs you want\nheadlines from. Use the `/sources` endpoint to locate these\nprogrammatically or look at the sources index:\nhttps://newsapi.com/sources. Will override both country and category.\n", - "items": { - "type": "string" - }, - "order": 3 - }, - "domains": { - "type": "array", - "description": "A comma-seperated string of domains (eg bbc.co.uk, techcrunch.com,\nengadget.com) to restrict the search to.\n", - "items": { - "type": "string" - }, - "order": 4 - }, - "exclude_domains": { - "type": "array", - "description": "A comma-seperated string of domains (eg bbc.co.uk, techcrunch.com,\nengadget.com) to remove from the results.\n", - "items": { - "type": "string" - }, - "order": 5 - }, - "start_date": { - "type": "string", - "description": "A date and optional time for the oldest article allowed. This should\nbe in ISO 8601 format (e.g. 2021-01-01 or 2021-01-01T12:00:00).\n", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}(T[0-9]{2}:[0-9]{2}:[0-9]{2})?$", - "order": 6 - }, - "end_date": { - "type": "string", - "description": "A date and optional time for the newest article allowed. This should\nbe in ISO 8601 format (e.g. 2021-01-01 or 2021-01-01T12:00:00).\n", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}(T[0-9]{2}:[0-9]{2}:[0-9]{2})?$", - "order": 7 - }, - "language": { - "type": "string", - "description": "The 2-letter ISO-639-1 code of the language you want to get headlines\nfor. Possible options: ar de en es fr he it nl no pt ru se ud zh.\n", - "enum": [ "ar", "de", "en", "es", "fr", "he", "it", "nl", false, "pt", "ru", "se", "ud", "zh" ], - "order": 8 - }, - "country": { - "type": "string", - "description": "The 2-letter ISO 3166-1 code of the country you want to get headlines\nfor. You can't mix this with the sources parameter.\n", - "enum": [ "ae", "ar", "at", "au", "be", "bg", "br", "ca", "ch", "cn", "co", "cu", "cz", "de", "eg", "fr", "gb", "gr", "hk", "hu", "id", "ie", "il", "in", "it", "jp", "kr", "lt", "lv", "ma", "mx", "my", "ng", "nl", false, "nz", "ph", "pl", "pt", "ro", "rs", "ru", "sa", "se", "sg", "si", "sk", "th", "tr", "tw", "ua", "us", "ve", "za" ], - "default": "us", - "order": 9 - }, - "category": { - "type": "string", - "description": "The category you want to get top headlines for.", - "enum": [ "business", "entertainment", "general", "health", "science", "sports", "technology" ], - "default": "business", - "order": 10 - }, - "sort_by": { - "type": "string", - "description": "The order to sort the articles in. Possible options: relevancy,\npopularity, publishedAt.\n", - "enum": [ "relevancy", "popularity", "publishedAt" ], - "default": "publishedAt", - "order": 11 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "60bd11d8-2632-4daa-a688-b47336d32093", - "name": "Newsdata", - "dockerRepository": "airbyte/source-newsdata", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/newsdata", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/newsdata", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Newsdata Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "description": "API Key", - "airbyte_secret": true, - "order": 0 - }, - "OneOf": { - "query": { - "type": "string", - "description": "Keywords or phrases to search for in the news title and content. Advanced Search options:\n - Search `Social`: query = \"social\"\n - Search `Social Pizza`: query = \"social pizza\"\n - Search `Social` but not with `pizza`: query = \"social -pizza\"\n - Search `Social` but not with `pizza` and `wildfire`: query = \"social -pizza -wildfire\"\n - Search `Social` and `pizza`: query = \"social AND pizza\"\n - Search `Social` and `pizza` and `pasta`: query = \"social AND pizza AND pasta\"\n - Search `Social` or `pizza`: query = \"social OR pizza\"\n - Search `Social` or `pizza` but not `pasta`: query = \"social OR pizza -pasta\"\n - Search `Social` or `pizza` or `pasta`: query = \"social OR pizza OR pasta\"\nNote: You can't use AND and OR in the same query.", - "order": 1 - }, - "query_in_title": { - "type": "string", - "description": "Same as `query`, but restricting the search to only the news title. It cannot be used along with `query`.", - "order": 1 - } - }, - "domain": { - "type": "array", - "description": "Domains (maximum 5) to restrict the search to. Use the sources stream to find top sources id.", - "maxitems": 5, - "items": { - "type": "string" - }, - "order": 2 - }, - "country": { - "type": "array", - "description": "2-letter ISO 3166-1 countries (maximum 5) to restrict the search to.", - "maxitems": 5, - "order": 3, - "items": { - "type": "string", - "enum": [ "ar", "au", "at", "bd", "by", "be", "br", "bg", "ca", "cl", "cn", "co", "cr", "cu", "cz", "dk", "do", "ec", "eg", "ee", "et", "fi", "fr", "de", "gr", "hk", "hu", "in", "id", "iq", "ie", "il", "it", "jp", "kz", "kw", "lv", "lb", "lt", "my", "mx", "ma", "mm", "nl", "nz", "ng", "kp", "no", "pk", "pe", "ph", "pl", "pt", "pr", "ro", "ru", "sa", "rs", "sg", "sk", "si", "za", "kr", "es", "se", "ch", "tw", "tz", "th", "tr", "ua", "ae", "gb", "us", "ve", "vi" ] - } - }, - "category": { - "type": "array", - "description": "Categories (maximum 5) to restrict the search to.", - "maxitems": 5, - "order": 4, - "items": { - "type": "string", - "enum": [ "business", "entertainment", "environment", "food", "health", "politics", "science", "sports", "technology", "top", "world" ] - } - }, - "language": { - "type": "array", - "description": "Languages (maximum 5) to restrict the search to.", - "maxitems": 5, - "order": 5, - "items": { - "type": "string", - "enum": [ "be", "am", "ar", "bn", "bs", "bg", "my", "ckb", "zh", "hr", "cs", "da", "nl", "en", "et", "fi", "fr", "de", "el", "he", "hi", "hu", "in", "it", "jp", "ko", "lv", "lt", "ms", "no", "pl", "pt", "ro", "ru", "sr", "sk", "sl", "es", "sw", "sv", "th", "tr", "uk", "ur", "vi" ] - } - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "6e00b415-b02e-4160-bf02-58176a0ae687", - "name": "Notion", - "dockerRepository": "airbyte/source-notion", - "dockerImageTag": "1.0.4", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/notion", - "icon": "notion.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/notion", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Notion Source Spec", - "type": "object", - "required": [ "start_date" ], - "properties": { - "start_date": { - "title": "Start Date", - "description": "UTC date and time in the format 2017-01-25T00:00:00.000Z. Any data before this date will not be replicated.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}Z$", - "examples": [ "2020-11-16T00:00:00.000Z" ], - "type": "string", - "format": "date-time" - }, - "credentials": { - "title": "Authenticate using", - "description": "Pick an authentication method.", - "type": "object", - "order": 1, - "oneOf": [ { - "type": "object", - "title": "OAuth2.0", - "required": [ "auth_type", "client_id", "client_secret", "access_token" ], - "properties": { - "auth_type": { - "type": "string", - "const": "OAuth2.0" - }, - "client_id": { - "title": "Client ID", - "type": "string", - "description": "The ClientID of your Notion integration.", - "airbyte_secret": true - }, - "client_secret": { - "title": "Client Secret", - "type": "string", - "description": "The ClientSecret of your Notion integration.", - "airbyte_secret": true - }, - "access_token": { - "title": "Access Token", - "type": "string", - "description": "Access Token is a token you received by complete the OauthWebFlow of Notion.", - "airbyte_secret": true - } - } - }, { - "type": "object", - "title": "Access Token", - "required": [ "auth_type", "token" ], - "properties": { - "auth_type": { - "type": "string", - "const": "token" - }, - "token": { - "title": "Access Token", - "description": "Notion API access token, see the docs for more information on how to obtain this token.", - "type": "string", - "airbyte_secret": true - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ "credentials", "0" ], - "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], - "oauthFlowOutputParameters": [ [ "access_token" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "api.notion.com" ] - } - }, { - "sourceDefinitionId": "0fae6a9a-04eb-44d4-96e1-e02d3dbc1d83", - "name": "New York Times", - "dockerRepository": "airbyte/source-nytimes", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/nytimes", - "icon": "nytimes.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/nytimes", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Nytimes Spec", - "type": "object", - "required": [ "api_key", "start_date", "period" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "title": "API Key", - "description": "API Key", - "airbyte_secret": true, - "order": 0 - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "Start date to begin the article retrieval (format YYYY-MM)", - "pattern": "^[0-9]{4}-[0-9]{2}$", - "examples": [ "2022-08", "1851-01" ], - "format": "date", - "order": 1 - }, - "end_date": { - "type": "string", - "title": "End Date", - "description": "End date to stop the article retrieval (format YYYY-MM)", - "pattern": "^[0-9]{4}-[0-9]{2}$", - "examples": [ "2022-08", "1851-01" ], - "format": "date", - "order": 2 - }, - "period": { - "type": "integer", - "title": "Period (used for Most Popular streams)", - "description": "Period of time (in days)", - "order": 3, - "enum": [ 1, 7, 30 ] - }, - "share_type": { - "type": "string", - "title": "Share Type (used for Most Popular Shared stream)", - "description": "Share Type", - "order": 4, - "enum": [ "facebook" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "1d4fdb25-64fc-4569-92da-fcdca79a8372", - "name": "Okta", - "dockerRepository": "airbyte/source-okta", - "dockerImageTag": "0.1.14", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/okta", - "icon": "okta.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/okta", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Okta Spec", - "type": "object", - "required": [ ], - "additionalProperties": true, - "properties": { - "domain": { - "type": "string", - "title": "Okta domain", - "description": "The Okta domain. See the docs for instructions on how to find it.", - "airbyte_secret": false - }, - "start_date": { - "type": "string", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "description": "UTC date and time in the format YYYY-MM-DDTHH:MM:SSZ. Any data before this date will not be replicated.", - "examples": [ "2022-07-22T00:00:00Z" ], - "title": "Start Date" - }, - "credentials": { - "title": "Authorization Method", - "type": "object", - "oneOf": [ { - "type": "object", - "title": "OAuth2.0", - "required": [ "auth_type", "client_id", "client_secret", "refresh_token" ], - "properties": { - "auth_type": { - "type": "string", - "const": "oauth2.0", - "order": 0 - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "The Client ID of your OAuth application.", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "The Client Secret of your OAuth application.", - "airbyte_secret": true - }, - "refresh_token": { - "type": "string", - "title": "Refresh Token", - "description": "Refresh Token to obtain new Access Token, when it's expired.", - "airbyte_secret": true - } - } - }, { - "type": "object", - "title": "API Token", - "required": [ "auth_type", "api_token" ], - "properties": { - "auth_type": { - "type": "string", - "const": "api_token", - "order": 0 - }, - "api_token": { - "type": "string", - "title": "Personal API Token", - "description": "An Okta token. See the docs for instructions on how to generate it.", - "airbyte_secret": true - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "e7f0c5e2-4815-48c4-90cf-f47124209835", - "name": "Omnisend", - "dockerRepository": "airbyte/source-omnisend", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/omnisend", - "icon": "omnisend.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/omnisend", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Omnisend Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "title": "API Key", - "type": "string", - "description": "API Key", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "bb6afd81-87d5-47e3-97c4-e2c2901b1cf8", - "name": "OneSignal", - "dockerRepository": "airbyte/source-onesignal", - "dockerImageTag": "1.0.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/onesignal", - "icon": "onesignal.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/onesignal", - "connectionSpecification": { - "$schema": "https://json-schema.org/draft-07/schema#", - "title": "OneSignal Source Spec", - "type": "object", - "required": [ "user_auth_key", "start_date", "outcome_names", "applications" ], - "additionalProperties": true, - "properties": { - "user_auth_key": { - "type": "string", - "title": "User Auth Key", - "description": "OneSignal User Auth Key, see the docs for more information on how to obtain this key.", - "airbyte_secret": true, - "order": 0 - }, - "applications": { - "type": "array", - "title": "Applications", - "description": "Applications keys, see the docs for more information on how to obtain this data", - "items": { - "type": "object", - "properties": { - "app_name": { - "type": "string", - "title": "OneSignal App Name", - "order": 0 - }, - "app_id": { - "type": "string", - "title": "OneSignal App ID", - "order": 1, - "airbyte_secret": true - }, - "app_api_key": { - "type": "string", - "title": "REST API Key", - "order": 2, - "airbyte_secret": true - } - }, - "required": [ "app_id", "app_api_key" ] - }, - "order": 1 - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "The date from which you'd like to replicate data for OneSignal API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", - "examples": [ "2020-11-16T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "format": "date-time", - "order": 2 - }, - "outcome_names": { - "type": "string", - "title": "Outcome Names", - "description": "Comma-separated list of names and the value (sum/count) for the returned outcome data. See the docs for more details", - "examples": [ "os__session_duration.count,os__click.count,CustomOutcomeName.sum" ], - "order": 3 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "77d5ca6b-d345-4dce-ba1e-1935a75778b8", - "name": "Open Exchange Rates", - "dockerRepository": "airbyte/source-open-exchange-rates", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/open-exchange-rates", - "icon": "airbyte.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/openexchangesrates", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Open Exchange Rates Spec", - "type": "object", - "required": [ "app_id", "start_date" ], - "properties": { - "app_id": { - "type": "string", - "description": "App ID provided by Open Exchange Rates", - "airbyte_secret": true - }, - "start_date": { - "type": "string", - "description": "Start getting data from that date.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "YYYY-MM-DD" ] - }, - "base": { - "type": "string", - "description": "Change base currency (3-letter code, default is USD - only modifiable in paid plans)", - "examples": [ "EUR", "USD" ], - "default": "USD" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "d8540a80-6120-485d-b7d6-272bca477d9b", - "name": "OpenWeather", - "dockerRepository": "airbyte/source-openweather", - "dockerImageTag": "0.1.6", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/openweather", - "icon": "openweather.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Open Weather Spec", - "type": "object", - "required": [ "appid", "lat", "lon" ], - "additionalProperties": true, - "properties": { - "lat": { - "title": "Latitude", - "type": "string", - "pattern": "^[-]?\\d{1,2}(\\.\\d+)?$", - "examples": [ "45.7603", "-21.249107858038816" ], - "description": "Latitude for which you want to get weather condition from. (min -90, max 90)" - }, - "lon": { - "title": "Longitude", - "type": "string", - "pattern": "^[-]?\\d{1,3}(\\.\\d+)?$", - "examples": [ "4.835659", "-70.39482074115321" ], - "description": "Longitude for which you want to get weather condition from. (min -180, max 180)" - }, - "appid": { - "title": "App ID", - "type": "string", - "description": "Your OpenWeather API Key. See here. The key is case sensitive.", - "airbyte_secret": true - }, - "units": { - "title": "Units", - "type": "string", - "description": "Units of measurement. standard, metric and imperial units are available. If you do not use the units parameter, standard units will be applied by default.", - "enum": [ "standard", "metric", "imperial" ], - "examples": [ "standard", "metric", "imperial" ] - }, - "lang": { - "title": "Language", - "type": "string", - "description": "You can use lang parameter to get the output in your language. The contents of the description field will be translated. See here for the list of supported languages.", - "enum": [ "af", "al", "ar", "az", "bg", "ca", "cz", "da", "de", "el", "en", "eu", "fa", "fi", "fr", "gl", "he", "hi", "hr", "hu", "id", "it", "ja", "kr", "la", "lt", "mk", "no", "nl", "pl", "pt", "pt_br", "ro", "ru", "sv", "se", "sk", "sl", "sp", "es", "sr", "th", "tr", "ua", "uk", "vi", "zh_cn", "zh_tw", "zu" ], - "examples": [ "en", "fr", "pt_br", "uk", "zh_cn", "zh_tw" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "06bdb480-2598-40b8-8b0f-fc2e2d2abdda", - "name": "Opsgenie", - "dockerRepository": "airbyte/source-opsgenie", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/opsgenie", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Opsgenie Spec", - "type": "object", - "required": [ "api_token", "endpoint" ], - "additionalProperties": true, - "properties": { - "api_token": { - "type": "string", - "description": "API token used to access the Opsgenie platform", - "airbyte_secret": true - }, - "endpoint": { - "type": "string", - "description": "Service endpoint to use for API calls.", - "examples": [ "api.opsgenie.com", "api.eu.opsgenie.com" ], - "default": "api.opsgenie.com" - }, - "start_date": { - "type": "string", - "description": "The date from which you'd like to replicate data from Opsgenie in the format of YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated. Note that it will be used only in the following incremental streams: issues.", - "examples": [ "2022-07-01T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "b39a7370-74c3-45a6-ac3a-380d48520a83", - "name": "Oracle DB", - "dockerRepository": "airbyte/source-oracle", - "dockerImageTag": "0.3.24", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/oracle", - "icon": "oracle.svg", - "sourceType": "database", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/oracle", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Oracle Source Spec", - "type": "object", - "required": [ "host", "port", "username" ], - "properties": { - "host": { - "title": "Host", - "description": "Hostname of the database.", - "type": "string", - "order": 1 - }, - "port": { - "title": "Port", - "description": "Port of the database.\nOracle Corporations recommends the following port numbers:\n1521 - Default listening port for client connections to the listener. \n2484 - Recommended and officially registered listening port for client connections to the listener using TCP/IP with SSL", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 1521, - "order": 2 - }, - "connection_data": { - "title": "Connect by", - "type": "object", - "description": "Connect data that will be used for DB connection", - "order": 3, - "oneOf": [ { - "title": "Service name", - "description": "Use service name", - "required": [ "service_name" ], - "properties": { - "connection_type": { - "type": "string", - "const": "service_name", - "order": 0 - }, - "service_name": { - "title": "Service name", - "type": "string", - "order": 1 - } - } - }, { - "title": "System ID (SID)", - "description": "Use SID (Oracle System Identifier)", - "required": [ "sid" ], - "properties": { - "connection_type": { - "type": "string", - "const": "sid", - "order": 0 - }, - "sid": { - "title": "System ID (SID)", - "type": "string", - "order": 1 - } - } - } ] - }, - "username": { - "title": "User", - "description": "The username which is used to access the database.", - "type": "string", - "order": 4 - }, - "password": { - "title": "Password", - "description": "The password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 5 - }, - "schemas": { - "title": "Schemas", - "description": "The list of schemas to sync from. Defaults to user. Case sensitive.", - "type": "array", - "items": { - "type": "string" - }, - "minItems": 1, - "uniqueItems": true, - "order": 6 - }, - "jdbc_url_params": { - "title": "JDBC URL Params", - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", - "type": "string", - "order": 7 - }, - "encryption": { - "title": "Encryption", - "type": "object", - "description": "The encryption method with is used when communicating with the database.", - "order": 8, - "oneOf": [ { - "title": "Unencrypted", - "description": "Data transfer will not be encrypted.", - "required": [ "encryption_method" ], - "properties": { - "encryption_method": { - "type": "string", - "const": "unencrypted" - } - } - }, { - "title": "Native Network Encryption (NNE)", - "description": "The native network encryption gives you the ability to encrypt database connections, without the configuration overhead of TCP/IP and SSL/TLS and without the need to open and listen on different ports.", - "required": [ "encryption_method" ], - "properties": { - "encryption_method": { - "type": "string", - "const": "client_nne" - }, - "encryption_algorithm": { - "type": "string", - "description": "This parameter defines what encryption algorithm is used.", - "title": "Encryption Algorithm", - "default": "AES256", - "enum": [ "AES256", "RC4_56", "3DES168" ] - } - } - }, { - "title": "TLS Encrypted (verify certificate)", - "description": "Verify and use the certificate provided by the server.", - "required": [ "encryption_method", "ssl_certificate" ], - "properties": { - "encryption_method": { - "type": "string", - "const": "encrypted_verify_certificate" - }, - "ssl_certificate": { - "title": "SSL PEM File", - "description": "Privacy Enhanced Mail (PEM) files are concatenated certificate containers frequently used in certificate installations.", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - } ] - }, - "tunnel_method": { - "type": "object", - "title": "SSH Tunnel Method", - "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", - "oneOf": [ { - "title": "No Tunnel", - "required": [ "tunnel_method" ], - "properties": { - "tunnel_method": { - "description": "No ssh tunnel needed to connect to database", - "type": "string", - "const": "NO_TUNNEL", - "order": 0 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host.", - "type": "string", - "order": 3 - }, - "ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - }, { - "title": "Password Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host", - "type": "string", - "order": 3 - }, - "tunnel_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 4 - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "allowedHosts": { - "hosts": [ "${host}", "${tunnel_method.tunnel_host}" ] - } - }, { - "sourceDefinitionId": "7f0455fb-4518-4ec0-b7a3-d808bf8081cc", - "name": "Orb", - "dockerRepository": "airbyte/source-orb", - "dockerImageTag": "1.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/orb", - "icon": "orb.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.withorb.com/", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Orb Spec", - "type": "object", - "required": [ "api_key", "start_date" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "title": "Orb API Key", - "description": "Orb API Key, issued from the Orb admin console.", - "airbyte_secret": true, - "order": 1 - }, - "start_date": { - "type": "string", - "title": "Start Date", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "description": "UTC date and time in the format 2022-03-01T00:00:00Z. Any data with created_at before this data will not be synced. For Subscription Usage, this becomes the `timeframe_start` API parameter.", - "examples": [ "2022-03-01T00:00:00Z" ], - "order": 2 - }, - "lookback_window_days": { - "type": "integer", - "title": "Lookback Window (in days)", - "default": 0, - "minimum": 0, - "description": "When set to N, the connector will always refresh resources created within the past N days. By default, updated objects that are not newly created are not incrementally synced.", - "order": 3 - }, - "string_event_properties_keys": { - "type": "array", - "items": { - "type": "string" - }, - "title": "Event properties keys (string values)", - "description": "Property key names to extract from all events, in order to enrich ledger entries corresponding to an event deduction.", - "order": 4 - }, - "numeric_event_properties_keys": { - "type": "array", - "items": { - "type": "string" - }, - "title": "Event properties keys (numeric values)", - "description": "Property key names to extract from all events, in order to enrich ledger entries corresponding to an event deduction.", - "order": 5 - }, - "subscription_usage_grouping_key": { - "type": "string", - "title": "Subscription usage grouping key (string value)", - "description": "Property key name to group subscription usage by." - }, - "plan_id": { - "type": "string", - "title": "Orb Plan ID for Subscription Usage (string value)", - "description": "Orb Plan ID to filter subscriptions that should have usage fetched." - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "95bcc041-1d1a-4c2e-8802-0ca5b1bfa36a", - "name": "Orbit", - "dockerRepository": "airbyte/source-orbit", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/orbit", - "icon": "orbit.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/orbit", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Orbit Source Spec", - "type": "object", - "required": [ "api_token", "workspace" ], - "additionalProperties": false, - "properties": { - "api_token": { - "type": "string", - "airbyte_secret": true, - "title": "API Token", - "description": "Authorizes you to work with Orbit workspaces associated with the token.", - "order": 0 - }, - "workspace": { - "type": "string", - "title": "Workspace", - "description": "The unique name of the workspace that your API token is associated with.", - "order": 1 - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "Date in the format 2022-06-26. Only load members whose last activities are after this date.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "order": 2 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "2bf6c581-bec5-4e32-891d-de33036bd631", - "name": "Oura", - "dockerRepository": "airbyte/source-oura", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/oura", - "icon": "oura.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Oura Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "description": "API Key", - "airbyte_secret": true, - "order": 0 - }, - "start_datetime": { - "type": "string", - "description": "Start datetime to sync from. Default is current UTC datetime minus 1\nday.\n", - "pattern": "^(-?(?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(Z|[+-](?:2[0-3]|[01][0-9]):[0-5][0-9])?$", - "order": 1 - }, - "end_datetime": { - "type": "string", - "description": "End datetime to sync until. Default is current UTC datetime.", - "pattern": "^(-?(?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(Z|[+-](?:2[0-3]|[01][0-9]):[0-5][0-9])?$", - "order": 2 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "3490c201-5d95-4783-b600-eaf07a4c7787", - "name": "Outreach", - "dockerRepository": "airbyte/source-outreach", - "dockerImageTag": "0.2.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/outreach", - "icon": "outreach.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/outreach", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Source Outreach Spec", - "type": "object", - "required": [ "client_id", "client_secret", "refresh_token", "redirect_uri", "start_date" ], - "additionalProperties": true, - "properties": { - "client_id": { - "type": "string", - "title": "Client ID", - "description": "The Client ID of your Outreach developer application." - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "The Client Secret of your Outreach developer application.", - "airbyte_secret": true - }, - "refresh_token": { - "type": "string", - "title": "Refresh Token", - "description": "The token for obtaining the new access token.", - "airbyte_secret": true - }, - "redirect_uri": { - "type": "string", - "title": "Redirect URI", - "description": "A Redirect URI is the location where the authorization server sends the user once the app has been successfully authorized and granted an authorization code or access token." - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "The date from which you'd like to replicate data for Outreach API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", - "examples": [ "2020-11-16T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "ad15c7ba-72a7-440b-af15-b9a963dc1a8a", - "name": "Pardot", - "dockerRepository": "airbyte/source-pardot", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/pardot", - "icon": "salesforcepardot.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/pardot", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Pardot Spec", - "type": "object", - "required": [ "pardot_business_unit_id", "client_id", "client_secret", "refresh_token" ], - "additionalProperties": false, - "properties": { - "pardot_business_unit_id": { - "description": "Pardot Business ID, can be found at Setup > Pardot > Pardot Account Setup", - "type": "string" - }, - "client_id": { - "description": "The Consumer Key that can be found when viewing your app in Salesforce", - "type": "string", - "airbyte_secret": true - }, - "client_secret": { - "description": "The Consumer Secret that can be found when viewing your app in Salesforce", - "type": "string", - "airbyte_secret": true - }, - "refresh_token": { - "description": "Salesforce Refresh Token used for Airbyte to access your Salesforce account. If you don't know what this is, follow this guide to retrieve it.", - "type": "string", - "airbyte_secret": true - }, - "start_date": { - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated. Leave blank to skip this filter", - "type": "string", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "default": null, - "examples": [ "2021-07-25T00:00:00Z" ] - }, - "is_sandbox": { - "description": "Whether or not the the app is in a Salesforce sandbox. If you do not know what this, assume it is false.", - "type": "boolean", - "default": false - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "2817b3f0-04e4-4c7a-9f32-7a5e8a83db95", - "name": "PagerDuty", - "dockerRepository": "farosai/airbyte-pagerduty-source", - "dockerImageTag": "0.1.23", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/pagerduty", - "icon": "pagerduty.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.faros.ai", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "PagerDuty Spec", - "type": "object", - "required": [ "token" ], - "additionalProperties": false, - "properties": { - "token": { - "type": "string", - "title": "PagerDuty API key", - "airbyte_secret": true - }, - "pageSize": { - "type": "number", - "minimum": 1, - "maximum": 25, - "default": 25, - "title": "Page Size", - "description": "page size to use when querying PagerDuty API" - }, - "cutoffDays": { - "type": "number", - "minimum": 1, - "default": 90, - "title": "Cutoff Days", - "description": "fetch pipelines updated in the last number of days" - }, - "incidentLogEntriesOverview": { - "type": "boolean", - "title": "Incident Log Entries Overview", - "description": "If true, will return a subset of log entries that show only the most important changes to the incident.", - "default": true - }, - "defaultSeverity": { - "type": "string", - "title": "Severity category", - "description": "A default severity category if not present", - "examples": [ "Sev1", "Sev2", "Sev3", "Sev4", "Sev5", "Custom" ], - "pattern": "^(Sev[0-5])?(Custom)?$" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "d30fb809-6456-484d-8e2c-ee12e0f6888d", - "name": "PartnerStack", - "dockerRepository": "airbyte/source-partnerstack", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/partnerstack", - "icon": "partnerstack.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/partnerstack", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Partnerstack Spec", - "type": "object", - "required": [ "public_key", "private_key" ], - "additionalProperties": true, - "properties": { - "public_key": { - "type": "string", - "title": "Partnerstack Public key", - "description": "The Live Public Key for a Partnerstack account.", - "airbyte_secret": true - }, - "private_key": { - "type": "string", - "title": "Partnerstack Private key", - "description": "The Live Private Key for a Partnerstack account.", - "airbyte_secret": true - }, - "start_date": { - "type": "string", - "title": "Start date", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", - "examples": [ "2017-01-25T00:00:00Z" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "d913b0f2-cc51-4e55-a44c-8ba1697b9239", - "name": "Paypal Transaction", - "dockerRepository": "airbyte/source-paypal-transaction", - "dockerImageTag": "0.1.12", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/paypal-transaction", - "icon": "paypal.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/paypal-transactions", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Paypal Transaction Search", - "type": "object", - "required": [ "start_date", "is_sandbox" ], - "additionalProperties": true, - "properties": { - "client_id": { - "type": "string", - "title": "Client ID", - "description": "The Client ID of your Paypal developer application.", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "title": "Client secret", - "description": "The Client Secret of your Paypal developer application.", - "airbyte_secret": true - }, - "refresh_token": { - "type": "string", - "title": "Refresh token", - "description": "The key to refresh the expired access token.", - "airbyte_secret": true - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "Start Date for data extraction in ISO format. Date must be in range from 3 years till 12 hrs before present time.", - "examples": [ "2021-06-11T23:59:59-00:00" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}[+-][0-9]{2}:[0-9]{2}$" - }, - "is_sandbox": { - "title": "Sandbox", - "description": "Determines whether to use the sandbox or production environment.", - "type": "boolean", - "default": false - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "api-m.paypal.com", "api-m.sandbox.paypal.com" ] - } - }, { - "sourceDefinitionId": "193bdcb8-1dd9-48d1-aade-91cadfd74f9b", - "name": "Paystack", - "dockerRepository": "airbyte/source-paystack", - "dockerImageTag": "0.1.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/paystack", - "icon": "paystack.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/paystack", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Paystack Source Spec", - "type": "object", - "required": [ "secret_key", "start_date" ], - "additionalProperties": true, - "properties": { - "secret_key": { - "type": "string", - "title": "Secret Key", - "pattern": "^(s|r)k_(live|test)_[a-zA-Z0-9]+$", - "description": "The Paystack API key (usually starts with 'sk_live_'; find yours here).", - "airbyte_secret": true - }, - "start_date": { - "type": "string", - "title": "Start Date", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", - "examples": [ "2017-01-25T00:00:00Z" ], - "format": "date-time" - }, - "lookback_window_days": { - "type": "integer", - "title": "Lookback Window (in days)", - "default": 0, - "minimum": 0, - "description": "When set, the connector will always reload data from the past N days, where N is the value set here. This is useful if your data is updated after creation." - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "api.paystack.co" ] - } - }, { - "sourceDefinitionId": "b1ccb590-e84f-46c0-83a0-2048ccfffdae", - "name": "Pendo", - "dockerRepository": "airbyte/source-pendo", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/pendo", - "icon": "pendo.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/pendo", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "required": [ "api_key" ], - "properties": { - "api_key": { - "type": "string", - "title": "API Key", - "airbyte_secret": true - } - }, - "additionalProperties": true - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "3052c77e-8b91-47e2-97a0-a29a22794b4b", - "name": "PersistIq", - "dockerRepository": "airbyte/source-persistiq", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/persistiq", - "icon": "persistiq.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/persistiq", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Persistiq Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": false, - "properties": { - "api_key": { - "type": "string", - "description": "PersistIq API Key. See the docs for more information on where to find that key.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "69d9eb65-8026-47dc-baf1-e4bf67901fd6", - "name": "Pexels API", - "dockerRepository": "airbyte/source-pexels-api", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/pexels-api", - "icon": "pexels.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/pexels-api", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Pexel API Spec", - "type": "object", - "required": [ "api_key", "query" ], - "additionalProperties": true, - "properties": { - "api_key": { - "title": "API Key from the pexels website", - "type": "string", - "description": "API key is required to access pexels api, For getting your's goto https://www.pexels.com/api/documentation and create account for free.", - "airbyte_secret": true - }, - "query": { - "title": "Specific query for the search", - "type": "string", - "description": "Optional, the search query, Example Ocean, Tigers, Pears, etc.", - "examples": [ "people", "oceans" ] - }, - "orientation": { - "title": "Specific orientation for the search", - "type": "string", - "description": "Optional, Desired photo orientation. The current supported orientations are landscape, portrait or square", - "examples": [ "square", "landscape" ] - }, - "size": { - "title": "Specific size for the search", - "type": "string", - "description": "Optional, Minimum photo size. The current supported sizes are large(24MP), medium(12MP) or small(4MP).", - "examples": [ "large", "small" ] - }, - "color": { - "title": "Specific color for the search", - "type": "string", - "description": "Optional, Desired photo color. Supported colors red, orange, yellow, green, turquoise, blue, violet, pink, brown, black, gray, white or any hexidecimal color code.", - "examples": [ "red", "orange" ] - }, - "locale": { - "title": "Specific locale for the search", - "type": "string", - "description": "Optional, The locale of the search you are performing. The current supported locales are 'en-US' 'pt-BR' 'es-ES' 'ca-ES' 'de-DE' 'it-IT' 'fr-FR' 'sv-SE' 'id-ID' 'pl-PL' 'ja-JP' 'zh-TW' 'zh-CN' 'ko-KR' 'th-TH' 'nl-NL' 'hu-HU' 'vi-VN' 'cs-CZ' 'da-DK' 'fi-FI' 'uk-UA' 'el-GR' 'ro-RO' 'nb-NO' 'sk-SK' 'tr-TR' 'ru-RU'.", - "examples": [ "en-US", "pt-BR" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "5cb7e5fe-38c2-11ec-8d3d-0242ac130003", - "name": "Pinterest", - "dockerRepository": "airbyte/source-pinterest", - "dockerImageTag": "0.2.4", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/pinterest", - "icon": "pinterest.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/pinterest", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Pinterest Spec", - "type": "object", - "required": [ "start_date" ], - "additionalProperties": true, - "properties": { - "start_date": { - "type": "string", - "title": "Start Date", - "description": "A date in the format YYYY-MM-DD. If you have not set a date, it would be defaulted to latest allowed date by api (914 days from today).", - "examples": [ "2022-07-28" ] - }, - "status": { - "title": "Status", - "description": "Entity statuses based off of campaigns, ad_groups, and ads. If you do not have a status set, it will be ignored completely.", - "type": [ "array", "null" ], - "items": { - "type": "string", - "enum": [ "ACTIVE", "PAUSED", "ARCHIVED" ] - }, - "uniqueItems": true - }, - "credentials": { - "title": "Authorization Method", - "type": "object", - "oneOf": [ { - "type": "object", - "title": "OAuth2.0", - "required": [ "auth_method", "refresh_token" ], - "properties": { - "auth_method": { - "type": "string", - "const": "oauth2.0", - "order": 0 - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "The Client ID of your OAuth application", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "The Client Secret of your OAuth application.", - "airbyte_secret": true - }, - "refresh_token": { - "type": "string", - "title": "Refresh Token", - "description": "Refresh Token to obtain new Access Token, when it's expired.", - "airbyte_secret": true - } - } - }, { - "type": "object", - "title": "Access Token", - "required": [ "auth_method", "access_token" ], - "properties": { - "auth_method": { - "type": "string", - "const": "access_token", - "order": 0 - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "The Access Token to make authenticated requests.", - "airbyte_secret": true - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "auth_method" ], - "predicate_value": "oauth2.0", - "oauth_config_specification": { - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "refresh_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "refresh_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "api.pinterest.com" ] - } - }, { - "sourceDefinitionId": "d8286229-c680-4063-8c59-23b9b391c700", - "name": "Pipedrive", - "dockerRepository": "airbyte/source-pipedrive", - "dockerImageTag": "0.1.17", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/pipedrive", - "icon": "pipedrive.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/pipedrive", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Pipedrive Spec", - "type": "object", - "required": [ "replication_start_date" ], - "additionalProperties": true, - "properties": { - "authorization": { - "type": "object", - "title": "API Key Authentication", - "required": [ "auth_type", "api_token" ], - "properties": { - "auth_type": { - "type": "string", - "const": "Token", - "order": 0 - }, - "api_token": { - "title": "API Token", - "type": "string", - "description": "The Pipedrive API Token.", - "airbyte_secret": true - } - } - }, - "replication_start_date": { - "title": "Start Date", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated. When specified and not None, then stream will behave as incremental", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2017-01-25T00:00:00Z" ], - "type": "string", - "format": "date-time" - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "api.pipedrive.com" ] - } - }, { - "sourceDefinitionId": "d60f5393-f99e-4310-8d05-b1876820f40e", - "name": "Pivotal Tracker", - "dockerRepository": "airbyte/source-pivotal-tracker", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/pivotal-tracker", - "icon": "pivotal-tracker.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Pivotal Tracker Spec", - "type": "object", - "required": [ "api_token" ], - "additionalProperties": false, - "properties": { - "api_token": { - "type": "string", - "description": "Pivotal Tracker API token", - "examples": [ "5c054d0de3440452190fdc5d5a04d871" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "ed799e2b-2158-4c66-8da4-b40fe63bc72a", - "name": "Plaid", - "dockerRepository": "airbyte/source-plaid", - "dockerImageTag": "0.3.2", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/plaid", - "icon": "plaid.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://plaid.com/docs/api/", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "required": [ "access_token", "api_key", "client_id", "plaid_env" ], - "additionalProperties": true, - "properties": { - "access_token": { - "type": "string", - "title": "Access Token", - "description": "The end-user's Link access token." - }, - "api_key": { - "title": "API Key", - "type": "string", - "description": "The Plaid API key to use to hit the API.", - "airbyte_secret": true - }, - "client_id": { - "title": "Client ID", - "type": "string", - "description": "The Plaid client id" - }, - "plaid_env": { - "title": "Plaid Environment", - "type": "string", - "enum": [ "sandbox", "development", "production" ], - "description": "The Plaid environment" - }, - "start_date": { - "title": "Start Date", - "type": "string", - "description": "The date from which you'd like to replicate data for Plaid in the format YYYY-MM-DD. All data generated after this date will be replicated.", - "examples": [ "2021-03-01" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "603ba446-3d75-41d7-92f3-aba901f8b897", - "name": "Plausible", - "dockerRepository": "airbyte/source-plausible", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/plausible", - "icon": "plausible.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/plausible", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Plausible Spec", - "type": "object", - "required": [ "api_key", "site_id" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "title": "Plausible API key", - "description": "Plausible API Key. See the docs for information on how to generate this key.", - "airbyte_secret": true - }, - "site_id": { - "type": "string", - "title": "Target website domain", - "description": "The domain of the site you want to retrieve data for. Enter the name of your site as configured on Plausible, i.e., excluding \"https://\" and \"www\". Can be retrieved from the 'domain' field in your Plausible site settings.", - "pattern": "^[A-Za-z0-9-.]+\\.[A-Z-a-z0-9-.]+", - "examples": [ "airbyte.com", "docs.airbyte.com" ] - }, - "start_date": { - "type": "string", - "title": "Data start date", - "description": "Start date for data to retrieve, in ISO-8601 format.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "YYYY-MM-DD" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "b0dd65f1-081f-4731-9c51-38e9e6aa0ebf", - "name": "Pocket", - "dockerRepository": "airbyte/source-pocket", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/pocket", - "icon": "pocket.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/pocket", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Pocket Spec", - "type": "object", - "required": [ "consumer_key", "access_token" ], - "additionalProperties": true, - "properties": { - "consumer_key": { - "type": "string", - "title": "Consumer Key", - "description": "Your application's Consumer Key.", - "airbyte_secret": true, - "order": 0 - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "The user's Pocket access token.", - "airbyte_secret": true, - "order": 1 - }, - "state": { - "type": "string", - "title": "State", - "description": "Select the state of the items to retrieve.", - "order": 2, - "enum": [ "unread", "archive", "all" ] - }, - "favorite": { - "type": "boolean", - "title": "Is Favorite?", - "description": "Retrieve only favorited items.", - "default": false, - "order": 3 - }, - "tag": { - "type": "string", - "title": "Tag Name", - "description": "Return only items tagged with this tag name. Use _untagged_ for retrieving only untagged items.", - "order": 4 - }, - "content_type": { - "type": "string", - "title": "Content Type", - "description": "Select the content type of the items to retrieve.", - "order": 5, - "enum": [ "article", "video", "image" ] - }, - "sort": { - "type": "string", - "title": "Sort By", - "description": "Sort retrieved items by the given criteria.", - "order": 6, - "enum": [ "newest", "oldest", "title", "site" ] - }, - "detail_type": { - "type": "string", - "title": "Detail Type", - "description": "Select the granularity of the information about each item.", - "order": 7, - "enum": [ "simple", "complete" ] - }, - "search": { - "type": "string", - "title": "Search Query", - "description": "Only return items whose title or url contain the `search` string.", - "order": 8 - }, - "domain": { - "type": "string", - "title": "Domain", - "description": "Only return items from a particular `domain`.", - "order": 9 - }, - "since": { - "type": "string", - "title": "Since", - "description": "Only return items modified since the given timestamp.", - "pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}", - "examples": [ "2022-10-20 14:14:14" ], - "order": 10 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "6371b14b-bc68-4236-bfbd-468e8df8e968", - "name": "PokeAPI", - "dockerRepository": "airbyte/source-pokeapi", - "dockerImageTag": "0.1.5", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/pokeapi", - "icon": "pokeapi.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/pokeapi", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Pokeapi Spec", - "type": "object", - "required": [ "pokemon_name" ], - "additionalProperties": false, - "properties": { - "pokemon_name": { - "type": "string", - "title": "Pokemon Name", - "description": "Pokemon requested from the API.", - "pattern": "^[a-z0-9_\\-]+$", - "examples": [ "ditto", "luxray", "snorlax" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "5807d72f-0abc-49f9-8fa5-ae820007032b", - "name": "Polygon Stock API", - "dockerRepository": "airbyte/source-polygon-stock-api", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/polygon-stock-api", - "icon": "polygon.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/airtable", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Weather API Spec", - "type": "object", - "required": [ "apiKey", "stocksTicker", "multiplier", "timespan", "start_date", "end_date" ], - "additionalProperties": true, - "properties": { - "apiKey": { - "title": "API Key", - "type": "string", - "description": "Your API ACCESS Key", - "airbyte_secret": true - }, - "stocksTicker": { - "title": "Stock Ticker", - "type": "string", - "description": "The exchange symbol that this item is traded under.", - "examples": [ "IBM", "MSFT" ] - }, - "multiplier": { - "title": "Multiplier", - "type": "integer", - "description": "The size of the timespan multiplier.", - "examples": [ 1, 2 ] - }, - "timespan": { - "title": "Timespan", - "type": "string", - "description": "The size of the time window.", - "examples": [ "day" ] - }, - "start_date": { - "title": "Start Date", - "type": "string", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "description": "The beginning date for the aggregate window.", - "examples": [ "2020-10-14" ], - "format": "date" - }, - "end_date": { - "title": "End Date", - "type": "string", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "description": "The target date for the aggregate window.", - "examples": [ "2020-10-14" ], - "format": "date" - }, - "adjusted": { - "title": "Adjusted", - "type": "string", - "description": "Determines whether or not the results are adjusted for splits. By default, results are adjusted and set to true. Set this to false to get results that are NOT adjusted for splits.", - "examples": [ "true", "false" ] - }, - "sort": { - "title": "Sort", - "type": "string", - "description": "Sort the results by timestamp. asc will return results in ascending order (oldest at the top), desc will return results in descending order (newest at the top).", - "examples": [ "asc", "desc" ] - }, - "limit": { - "title": "Limit", - "type": "integer", - "description": "The target date for the aggregate window.", - "examples": [ 100, 120 ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "allowedHosts": { - "hosts": [ "api.polygon.io" ] - } - }, { - "sourceDefinitionId": "af6d50ee-dddf-4126-a8ee-7faee990774f", - "name": "PostHog", - "dockerRepository": "airbyte/source-posthog", - "dockerImageTag": "0.1.9", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/posthog", - "icon": "posthog.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/posthog", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "PostHog Spec", - "type": "object", - "required": [ "api_key", "start_date" ], - "properties": { - "start_date": { - "title": "Start Date", - "type": "string", - "description": "The date from which you'd like to replicate the data. Any data before this date will not be replicated.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2021-01-01T00:00:00Z" ], - "format": "date-time" - }, - "api_key": { - "type": "string", - "airbyte_secret": true, - "title": "API Key", - "description": "API Key. See the docs for information on how to generate this key." - }, - "base_url": { - "type": "string", - "default": "https://app.posthog.com", - "title": "Base URL", - "description": "Base PostHog url. Defaults to PostHog Cloud (https://app.posthog.com).", - "examples": [ "https://posthog.example.com" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "${base_url}", "app.posthog.com" ] - } - }, { - "sourceDefinitionId": "decd338e-5647-4c0b-adf4-da0e75f5a750", - "name": "Postgres", - "dockerRepository": "airbyte/source-postgres", - "dockerImageTag": "2.0.24", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/postgres", - "icon": "postgresql.svg", - "sourceType": "database", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/postgres", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Postgres Source Spec", - "type": "object", - "required": [ "host", "port", "database", "username" ], - "properties": { - "host": { - "title": "Host", - "description": "Hostname of the database.", - "type": "string", - "order": 0, - "group": "db" - }, - "port": { - "title": "Port", - "description": "Port of the database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 5432, - "examples": [ "5432" ], - "order": 1, - "group": "db" - }, - "database": { - "title": "Database Name", - "description": "Name of the database.", - "type": "string", - "order": 2, - "group": "db" - }, - "schemas": { - "title": "Schemas", - "description": "The list of schemas (case sensitive) to sync from. Defaults to public.", - "type": "array", - "items": { - "type": "string" - }, - "minItems": 0, - "uniqueItems": true, - "default": [ "public" ], - "order": 3, - "group": "db" - }, - "username": { - "title": "Username", - "description": "Username to access the database.", - "type": "string", - "order": 4, - "group": "auth" - }, - "password": { - "title": "Password", - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 5, - "group": "auth", - "always_show": true - }, - "jdbc_url_params": { - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (Eg. key1=value1&key2=value2&key3=value3). For more information read about JDBC URL parameters.", - "title": "JDBC URL Parameters (Advanced)", - "type": "string", - "order": 6, - "group": "advanced", - "pattern_descriptor": "key1=value1&key2=value2" - }, - "ssl_mode": { - "title": "SSL Modes", - "description": "SSL connection modes. \n Read more in the docs.", - "type": "object", - "order": 8, - "group": "security", - "oneOf": [ { - "title": "disable", - "additionalProperties": true, - "description": "Disables encryption of communication between Airbyte and source database.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "disable", - "order": 0 - } - } - }, { - "title": "allow", - "additionalProperties": true, - "description": "Enables encryption only when required by the source database.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "allow", - "order": 0 - } - } - }, { - "title": "prefer", - "additionalProperties": true, - "description": "Allows unencrypted connection only if the source database does not support encryption.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "prefer", - "order": 0 - } - } - }, { - "title": "require", - "additionalProperties": true, - "description": "Always require encryption. If the source database server does not support encryption, connection will fail.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "require", - "order": 0 - } - } - }, { - "title": "verify-ca", - "additionalProperties": true, - "description": "Always require encryption and verifies that the source database server has a valid SSL certificate.", - "required": [ "mode", "ca_certificate" ], - "properties": { - "mode": { - "type": "string", - "const": "verify-ca", - "order": 0 - }, - "ca_certificate": { - "type": "string", - "title": "CA Certificate", - "description": "CA certificate", - "airbyte_secret": true, - "multiline": true, - "order": 1 - }, - "client_certificate": { - "type": "string", - "title": "Client Certificate", - "description": "Client certificate", - "airbyte_secret": true, - "multiline": true, - "order": 2, - "always_show": true - }, - "client_key": { - "type": "string", - "title": "Client Key", - "description": "Client key", - "airbyte_secret": true, - "multiline": true, - "order": 3, - "always_show": true - }, - "client_key_password": { - "type": "string", - "title": "Client key password", - "description": "Password for keystorage. If you do not add it - the password will be generated automatically.", - "airbyte_secret": true, - "order": 4 - } - } - }, { - "title": "verify-full", - "additionalProperties": true, - "description": "This is the most secure mode. Always require encryption and verifies the identity of the source database server.", - "required": [ "mode", "ca_certificate" ], - "properties": { - "mode": { - "type": "string", - "const": "verify-full", - "order": 0 - }, - "ca_certificate": { - "type": "string", - "title": "CA Certificate", - "description": "CA certificate", - "airbyte_secret": true, - "multiline": true, - "order": 1 - }, - "client_certificate": { - "type": "string", - "title": "Client Certificate", - "description": "Client certificate", - "airbyte_secret": true, - "multiline": true, - "order": 2, - "always_show": true - }, - "client_key": { - "type": "string", - "title": "Client Key", - "description": "Client key", - "airbyte_secret": true, - "multiline": true, - "order": 3, - "always_show": true - }, - "client_key_password": { - "type": "string", - "title": "Client key password", - "description": "Password for keystorage. If you do not add it - the password will be generated automatically.", - "airbyte_secret": true, - "order": 4 - } - } - } ] - }, - "replication_method": { - "type": "object", - "title": "Replication Method", - "description": "Replication method for extracting data from the database.", - "order": 9, - "group": "advanced", - "oneOf": [ { - "title": "Standard", - "description": "Standard replication requires no setup on the DB side but will not be able to represent deletions incrementally.", - "required": [ "method" ], - "properties": { - "method": { - "type": "string", - "const": "Standard", - "order": 0 - } - } - }, { - "title": "Logical Replication (CDC)", - "description": "Logical replication uses the Postgres write-ahead log (WAL) to detect inserts, updates, and deletes. This needs to be configured on the source database itself. Only available on Postgres 10 and above. Read the docs.", - "required": [ "method", "replication_slot", "publication" ], - "additionalProperties": true, - "properties": { - "method": { - "type": "string", - "const": "CDC", - "order": 1 - }, - "plugin": { - "type": "string", - "title": "Plugin", - "description": "A logical decoding plugin installed on the PostgreSQL server.", - "enum": [ "pgoutput" ], - "default": "pgoutput", - "order": 2 - }, - "replication_slot": { - "type": "string", - "title": "Replication Slot", - "description": "A plugin logical replication slot. Read about replication slots.", - "order": 3 - }, - "publication": { - "type": "string", - "title": "Publication", - "description": "A Postgres publication used for consuming changes. Read about publications and replication identities.", - "order": 4 - }, - "initial_waiting_seconds": { - "type": "integer", - "title": "Initial Waiting Time in Seconds (Advanced)", - "description": "The amount of time the connector will wait when it launches to determine if there is new data to sync or not. Defaults to 300 seconds. Valid range: 120 seconds to 1200 seconds. Read about initial waiting time.", - "default": 300, - "order": 5, - "min": 120, - "max": 1200 - }, - "lsn_commit_behaviour": { - "type": "string", - "title": "LSN commit behaviour", - "description": "Determines when Airbtye should flush the LSN of processed WAL logs in the source database. `After loading Data in the destination` is default. If `While reading Data` is selected, in case of a downstream failure (while loading data into the destination), next sync would result in a full sync.", - "enum": [ "While reading Data", "After loading Data in the destination" ], - "default": "After loading Data in the destination", - "order": 6 - } - } - } ] - }, - "tunnel_method": { - "type": "object", - "title": "SSH Tunnel Method", - "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", - "oneOf": [ { - "title": "No Tunnel", - "required": [ "tunnel_method" ], - "properties": { - "tunnel_method": { - "description": "No ssh tunnel needed to connect to database", - "type": "string", - "const": "NO_TUNNEL", - "order": 0 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host.", - "type": "string", - "order": 3 - }, - "ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - }, { - "title": "Password Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host", - "type": "string", - "order": 3 - }, - "tunnel_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 4 - } - } - } ], - "group": "security" - } - }, - "groups": [ { - "id": "db" - }, { - "id": "auth" - }, { - "id": "security", - "title": "Security" - }, { - "id": "advanced", - "title": "Advanced" - } ] - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "${host}", "${tunnel_method.tunnel_host}" ] - }, - "maxSecondsBetweenMessages": 7200 - }, { - "sourceDefinitionId": "cde75ca1-1e28-4a0f-85bb-90c546de9f1f", - "name": "Postmark App", - "dockerRepository": "airbyte/source-postmarkapp", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/postmarkapp", - "icon": "postmark.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Postmarkapp Spec", - "type": "object", - "required": [ "X-Postmark-Server-Token", "X-Postmark-Account-Token" ], - "additionalProperties": true, - "properties": { - "X-Postmark-Server-Token": { - "title": "X-Postmark-Server-Token", - "type": "string", - "description": "API Key for server", - "airbyte_secret": true - }, - "X-Postmark-Account-Token": { - "title": "X-Postmark-Account-Token", - "type": "string", - "description": "API Key for account", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "d60a46d4-709f-4092-a6b7-2457f7d455f5", - "name": "PrestaShop", - "dockerRepository": "airbyte/source-prestashop", - "dockerImageTag": "0.3.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/prestashop", - "icon": "prestashop.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/prestashop", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "PrestaShop Spec", - "type": "object", - "required": [ "access_key", "url", "start_date" ], - "properties": { - "access_key": { - "type": "string", - "title": "Access Key", - "description": "Your PrestaShop access key. See the docs for info on how to obtain this.", - "order": 0, - "airbyte_secret": true - }, - "url": { - "type": "string", - "title": "Shop URL", - "description": "Shop URL without trailing slash.", - "order": 1 - }, - "start_date": { - "type": "string", - "title": "Start date", - "description": "The Start date in the format YYYY-MM-DD.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "2022-01-01" ], - "format": "date", - "order": 2 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "${domain}" ] - } - }, { - "sourceDefinitionId": "f636c3c6-4077-45ac-b109-19fc62a283c1", - "name": "Primetric", - "dockerRepository": "airbyte/source-primetric", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/primetric", - "icon": "primetric.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Primetric Spec", - "type": "object", - "required": [ "client_id", "client_secret" ], - "properties": { - "client_id": { - "type": "string", - "title": "Client ID", - "description": "The Client ID of your Primetric developer application. The Client ID is visible here.", - "pattern": "^[a-zA-Z0-9]+$", - "airbyte_secret": true, - "examples": [ "1234aBcD5678EFGh9045Neq79sdDlA15082VMYcj" ], - "order": 0 - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "The Client Secret of your Primetric developer application. You can manage your client's credentials here.", - "pattern": "^[a-zA-Z0-9]+$", - "airbyte_secret": true, - "order": 1 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "a4617b39-3c14-44cd-a2eb-6e720f269235", - "name": "Public APIs", - "dockerRepository": "airbyte/source-public-apis", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/public-apis", - "icon": "publicapi.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/public-apis", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Public Apis Spec", - "type": "object", - "required": [ ], - "properties": { } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "dbe9b7ae-7b46-4e44-a507-02a343cf7230", - "name": "Punk API", - "dockerRepository": "airbyte/source-punk-api", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/punk-api", - "icon": "punkapi.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/punk-api", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Punk Api Spec", - "type": "object", - "required": [ "brewed_before", "brewed_after" ], - "additionalProperties": true, - "properties": { - "id": { - "title": "Beers with specific ID", - "type": "string", - "description": "To extract specific data with Unique ID", - "examples": [ 1, 22 ] - }, - "brewed_before": { - "title": "Brewed before data to get incremental reads", - "type": "string", - "description": "To extract specific data with Unique ID", - "pattern": "^[0-9]{2}-[0-9]{4}$", - "examples": [ "MM-YYYY" ] - }, - "brewed_after": { - "title": "Brewed after data to get incremental reads", - "type": "string", - "description": "To extract specific data with Unique ID", - "pattern": "^[0-9]{2}-[0-9]{4}$", - "examples": [ "MM-YYYY" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "88ecd3a8-5f5b-11ed-9b6a-0242ac120002", - "name": "PyPI", - "dockerRepository": "airbyte/source-pypi", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/pypi", - "icon": "pypi.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/pypi", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Pypi Spec", - "type": "object", - "required": [ "project_name" ], - "additionalProperties": true, - "properties": { - "project_name": { - "type": "string", - "title": "PyPI Package", - "description": "Name of the project/package. Can only be in lowercase with hyphen. This is the name used using pip command for installing the package.", - "examples": [ "sampleproject" ] - }, - "version": { - "title": "Package Version", - "type": "string", - "description": "Version of the project/package. Use it to find a particular release instead of all releases.", - "examples": [ "1.2.0" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "f7c0b910-5f66-11ed-9b6a-0242ac120002", - "name": "Qonto", - "dockerRepository": "airbyte/source-qonto", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/public-qonto", - "icon": "qonto.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Qonto Spec", - "type": "object", - "required": [ "endpoint", "organization_slug", "secret_key", "iban" ], - "properties": { - "endpoint": { - "title": "Endpoint", - "type": "string", - "description": "Please choose the right endpoint to use in this connection", - "enum": [ "Production", "Test Mocked API Server" ] - }, - "organization_slug": { - "title": "Organization slug", - "type": "string", - "description": "Organization slug used in Qonto" - }, - "secret_key": { - "title": "Secret Key", - "type": "string", - "description": "Secret key of the Qonto account", - "airbyte_secret": true - }, - "iban": { - "title": "IBAN", - "type": "string", - "description": "International Bank Account Number linked used with your Qonto Account", - "pattern": "^[A-Z0-9]*$" - }, - "start_date": { - "title": "Start date", - "type": "string", - "description": "Start getting data from that date.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "YYYY-MM-DD" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "b08e4776-d1de-4e80-ab5c-1e51dad934a2", - "name": "Qualaroo", - "dockerRepository": "airbyte/source-qualaroo", - "dockerImageTag": "0.1.2", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/qualaroo", - "icon": "qualaroo.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/qualaroo", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Qualaroo Spec", - "type": "object", - "required": [ "token", "key", "start_date" ], - "additionalProperties": true, - "properties": { - "token": { - "type": "string", - "title": "API token", - "description": "A Qualaroo token. See the docs for instructions on how to generate it.", - "airbyte_secret": true - }, - "key": { - "type": "string", - "title": "API key", - "description": "A Qualaroo token. See the docs for instructions on how to generate it.", - "airbyte_secret": true - }, - "start_date": { - "type": "string", - "title": "Start Date", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}Z$", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", - "examples": [ "2021-03-01T00:00:00.000Z" ] - }, - "survey_ids": { - "type": "array", - "items": { - "type": "string", - "pattern": "^[0-9]{1,8}$" - }, - "title": "Qualaroo survey IDs", - "description": "IDs of the surveys from which you'd like to replicate data. If left empty, data from all surveys to which you have access will be replicated." - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ ], - "oauthFlowInitParameters": [ ], - "oauthFlowOutputParameters": [ [ "token" ], [ "key" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "cf9c4355-b171-4477-8f2d-6c5cc5fc8b7e", - "name": "QuickBooks", - "dockerRepository": "airbyte/source-quickbooks", - "dockerImageTag": "2.0.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/quickbooks", - "icon": "quickbooks.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/quickbooks", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Source QuickBooks Spec", - "type": "object", - "required": [ "credentials", "start_date", "sandbox" ], - "additionalProperties": true, - "properties": { - "credentials": { - "title": "Authorization Method", - "type": "object", - "order": 0, - "oneOf": [ { - "type": "object", - "title": "OAuth2.0", - "required": [ "client_id", "client_secret", "refresh_token", "access_token", "token_expiry_date", "realm_id" ], - "properties": { - "auth_type": { - "type": "string", - "const": "oauth2.0" - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "Identifies which app is making the request. Obtain this value from the Keys tab on the app profile via My Apps on the developer site. There are two versions of this key: development and production." - }, - "client_secret": { - "description": " Obtain this value from the Keys tab on the app profile via My Apps on the developer site. There are two versions of this key: development and production.", - "title": "Client Secret", - "type": "string", - "airbyte_secret": true - }, - "refresh_token": { - "description": "A token used when refreshing the access token.", - "title": "Refresh Token", - "type": "string", - "airbyte_secret": true - }, - "access_token": { - "description": "Access token fot making authenticated requests.", - "title": "Access Token", - "type": "string", - "airbyte_secret": true - }, - "token_expiry_date": { - "type": "string", - "title": "Token Expiry Date", - "description": "The date-time when the access token should be refreshed.", - "format": "date-time" - }, - "realm_id": { - "description": "Labeled Company ID. The Make API Calls panel is populated with the realm id and the current access token.", - "title": "Realm ID", - "type": "string", - "airbyte_secret": true - } - } - } ] - }, - "start_date": { - "order": 1, - "description": "The default value to use if no bookmark exists for an endpoint (rfc3339 date string). E.g, 2021-03-20T00:00:00+00:00. Any data before this date will not be replicated.", - "title": "Start Date", - "type": "string", - "format": "date-time", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2021-03-20T00:00:00+00:00" ] - }, - "sandbox": { - "order": 2, - "description": "Determines whether to use the sandbox or production environment.", - "title": "Sandbox", - "type": "boolean", - "default": false - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "allowedHosts": { - "hosts": [ "sandbox-quickbooks.api.intuit.com", "quickbooks.api.intuit.com", "oauth.platform.intuit.com" ] - } - }, { - "sourceDefinitionId": "9b6cc0c0-da81-4103-bbfd-5279e18a849a", - "name": "Railz", - "dockerRepository": "airbyte/source-railz", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/railz", - "icon": "railz.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Railz Spec", - "type": "object", - "required": [ "client_id", "secret_key", "start_date" ], - "properties": { - "client_id": { - "type": "string", - "title": "Client ID", - "description": "Client ID (client_id)", - "order": 0 - }, - "secret_key": { - "type": "string", - "title": "Secret key", - "description": "Secret key (secret_key)", - "order": 1, - "airbyte_secret": true - }, - "start_date": { - "type": "string", - "title": "Start date", - "description": "Start date", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "order": 2 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "45d2e135-2ede-49e1-939f-3e3ec357a65e", - "name": "Recharge", - "dockerRepository": "airbyte/source-recharge", - "dockerImageTag": "0.2.9", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/recharge", - "icon": "recharge.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/recharge", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Recharge Spec", - "type": "object", - "required": [ "start_date", "access_token" ], - "additionalProperties": true, - "properties": { - "start_date": { - "type": "string", - "title": "Start Date", - "description": "The date from which you'd like to replicate data for Recharge API, in the format YYYY-MM-DDT00:00:00Z. Any data before this date will not be replicated.", - "examples": [ "2021-05-14T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "format": "date-time" - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "The value of the Access Token generated. See the docs for more information.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "api.rechargeapps.com" ] - } - }, { - "sourceDefinitionId": "25d7535d-91e0-466a-aa7f-af81578be277", - "name": "Recreation", - "dockerRepository": "airbyte/source-recreation", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/recreation", - "icon": "recreation.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/recreation", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Recreation Spec", - "type": "object", - "required": [ "apikey" ], - "additionalProperties": true, - "properties": { - "apikey": { - "title": "API Key", - "type": "string", - "description": "API Key", - "airbyte_secret": true - }, - "query_campsites": { - "title": "Query Campsite", - "type": "string" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "3b046ac7-d8d3-4eb3-b122-f96b2a16d8a8", - "name": "Recruitee", - "dockerRepository": "airbyte/source-recruitee", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/recruitee", - "icon": "recruitee.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/recruitee", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Recruitee Spec", - "type": "object", - "required": [ "api_key", "company_id" ], - "additionalProperties": true, - "properties": { - "api_key": { - "title": "API Key", - "type": "string", - "description": "Recruitee API Key. See here.", - "airbyte_secret": true - }, - "company_id": { - "title": "Company ID", - "type": "integer", - "description": "Recruitee Company ID. You can also find this ID on the Recruitee API tokens page." - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "cd42861b-01fc-4658-a8ab-5d11d0510f01", - "name": "Recurly", - "dockerRepository": "airbyte/source-recurly", - "dockerImageTag": "0.4.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/recurly", - "icon": "recurly.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/recurly", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Recurly Source Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": false, - "properties": { - "api_key": { - "type": "string", - "title": "API Key", - "airbyte_secret": true, - "description": "Recurly API Key. See the docs for more information on how to generate this key.", - "order": 1 - }, - "begin_time": { - "type": "string", - "description": "ISO8601 timestamp from which the replication from Recurly API will start from.", - "examples": [ "2021-12-01T00:00:00" ], - "pattern": "^$|^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}$", - "order": 2 - }, - "end_time": { - "type": "string", - "description": "ISO8601 timestamp to which the replication from Recurly API will stop. Records after that date won't be imported.", - "examples": [ "2021-12-01T00:00:00" ], - "pattern": "^$|^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}$", - "order": 3 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "e87ffa8e-a3b5-f69c-9076-6011339de1f6", - "name": "Redshift", - "dockerRepository": "airbyte/source-redshift", - "dockerImageTag": "0.3.16", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/redshift", - "icon": "redshift.svg", - "sourceType": "database", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/redshift", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Redshift Source Spec", - "type": "object", - "required": [ "host", "port", "database", "username", "password" ], - "properties": { - "host": { - "title": "Host", - "description": "Host Endpoint of the Redshift Cluster (must include the cluster-id, region and end with .redshift.amazonaws.com).", - "type": "string", - "order": 1 - }, - "port": { - "title": "Port", - "description": "Port of the database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 5439, - "examples": [ "5439" ], - "order": 2 - }, - "database": { - "title": "Database", - "description": "Name of the database.", - "type": "string", - "examples": [ "master" ], - "order": 3 - }, - "schemas": { - "title": "Schemas", - "description": "The list of schemas to sync from. Specify one or more explicitly or keep empty to process all schemas. Schema names are case sensitive.", - "type": "array", - "items": { - "type": "string" - }, - "minItems": 0, - "uniqueItems": true, - "examples": [ "public" ], - "order": 4 - }, - "username": { - "title": "Username", - "description": "Username to use to access the database.", - "type": "string", - "order": 5 - }, - "password": { - "title": "Password", - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 6 - }, - "jdbc_url_params": { - "title": "JDBC URL Params", - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", - "type": "string", - "order": 7 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "8cc6537e-f8a6-423c-b960-e927af76116e", - "name": "Reply.io", - "dockerRepository": "airbyte/source-reply-io", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/reply-io", - "icon": "reply-io.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/reply-io", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Reply Io Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "title": "API Token", - "description": "The API Token for Reply", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "db04ecd1-42e7-4115-9cec-95812905c626", - "name": "Retently", - "dockerRepository": "airbyte/source-retently", - "dockerImageTag": "0.1.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/retently", - "icon": "retently.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Retently Api Spec", - "type": "object", - "additionalProperties": true, - "properties": { - "credentials": { - "title": "Authentication Mechanism", - "description": "Choose how to authenticate to Retently", - "type": "object", - "oneOf": [ { - "type": "object", - "title": "Authenticate via Retently (OAuth)", - "required": [ "client_id", "client_secret", "refresh_token" ], - "additionalProperties": true, - "properties": { - "auth_type": { - "type": "string", - "const": "Client", - "order": 0 - }, - "client_id": { - "title": "Client ID", - "type": "string", - "description": "The Client ID of your Retently developer application." - }, - "client_secret": { - "title": "Client Secret", - "type": "string", - "description": "The Client Secret of your Retently developer application.", - "airbyte_secret": true - }, - "refresh_token": { - "title": "Refresh Token", - "type": "string", - "description": "Retently Refresh Token which can be used to fetch new Bearer Tokens when the current one expires.", - "airbyte_secret": true - } - } - }, { - "type": "object", - "title": "Authenticate with API Token", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "auth_type": { - "type": "string", - "const": "Token", - "order": 0 - }, - "api_key": { - "title": "API Token", - "description": "Retently API Token. See the docs for more information on how to obtain this key.", - "type": "string", - "airbyte_secret": true - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "auth_type" ], - "predicate_value": "Client", - "oauth_config_specification": { - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": true, - "properties": { - "refresh_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "refresh_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": true, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": true, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "fb141f29-be2a-450b-a4f2-2cd203a00f84", - "name": "RD Station Marketing", - "dockerRepository": "airbyte/source-rd-station-marketing", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/rd-station-marketing", - "icon": "rdstation.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/rd-station-marketing", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "RD Station Marketing Spec", - "type": "object", - "required": [ "start_date" ], - "additionalProperties": true, - "properties": { - "authorization": { - "type": "object", - "title": "Authentication Type", - "description": "Choose one of the possible authorization method", - "oneOf": [ { - "title": "Sign in via RD Station (OAuth)", - "type": "object", - "required": [ "auth_type" ], - "properties": { - "auth_type": { - "type": "string", - "const": "Client", - "order": 0 - }, - "client_id": { - "title": "Client ID", - "type": "string", - "description": "The Client ID of your RD Station developer application.", - "airbyte_secret": true - }, - "client_secret": { - "title": "Client Secret", - "type": "string", - "description": "The Client Secret of your RD Station developer application", - "airbyte_secret": true - }, - "refresh_token": { - "title": "Refresh Token", - "type": "string", - "description": "The token for obtaining the new access token.", - "airbyte_secret": true - } - } - } ] - }, - "start_date": { - "title": "Start Date", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated. When specified and not None, then stream will behave as incremental", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2017-01-25T00:00:00Z" ], - "type": "string" - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ "authorization", "0" ], - "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], - "oauthFlowOutputParameters": [ [ "refresh_token" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "d78e5de0-aa44-4744-aa4f-74c818ccfe19", - "name": "RKI Covid", - "dockerRepository": "airbyte/source-rki-covid", - "dockerImageTag": "0.1.2", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/rki-covid", - "icon": "rki.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/rki-covid", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "RKI Covid Spec", - "type": "object", - "required": [ "start_date" ], - "additionalProperties": true, - "properties": { - "start_date": { - "type": "string", - "title": "Start Date", - "description": "UTC date in the format 2017-01-25. Any data before this date will not be replicated.", - "order": 1 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "0efee448-6948-49e2-b786-17db50647908", - "name": "RSS", - "dockerRepository": "airbyte/source-rss", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/rss", - "icon": "rss.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/rss", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "RSS Spec", - "type": "object", - "required": [ "url" ], - "properties": { - "url": { - "type": "string", - "description": "RSS Feed URL" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false - }, { - "sourceDefinitionId": "921d9608-3915-450b-8078-0af18801ea1b", - "name": "Rocket.chat", - "dockerRepository": "airbyte/source-rocket-chat", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/rocket-chat", - "icon": "rocket-chat.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/rocket-chat", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Rocket Chat Spec", - "type": "object", - "required": [ "token", "user_id", "endpoint" ], - "additionalProperties": true, - "properties": { - "endpoint": { - "title": "Endpoint", - "type": "string", - "description": "Your rocket.chat instance URL.", - "examples": [ "https://airbyte-connector-poc.rocket.chat", "https://hey.yoursite.com" ] - }, - "token": { - "title": "Token", - "type": "string", - "description": "Your API Token. See here. The token is case sensitive.", - "airbyte_secret": true - }, - "user_id": { - "title": "User ID.", - "type": "string", - "description": "Your User Id." - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "69589781-7828-43c5-9f63-8925b1c1ccc2", - "name": "S3", - "dockerRepository": "airbyte/source-s3", - "dockerImageTag": "2.1.2", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/s3", - "icon": "s3.svg", - "sourceType": "file", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/s3", - "changelogUrl": "https://docs.airbyte.com/integrations/sources/s3", - "connectionSpecification": { - "title": "S3 Source Spec", - "type": "object", - "properties": { - "dataset": { - "title": "Output Stream Name", - "description": "The name of the stream you would like this source to output. Can contain letters, numbers, or underscores.", - "pattern": "^([A-Za-z0-9-_]+)$", - "order": 0, - "type": "string" - }, - "path_pattern": { - "title": "Pattern of files to replicate", - "description": "A regular expression which tells the connector which files to replicate. All files which match this pattern will be replicated. Use | to separate multiple patterns. See this page to understand pattern syntax (GLOBSTAR and SPLIT flags are enabled). Use pattern ** to pick up all files.", - "examples": [ "**", "myFolder/myTableFiles/*.csv|myFolder/myOtherTableFiles/*.csv" ], - "order": 10, - "type": "string" - }, - "format": { - "title": "File Format", - "description": "The format of the files you'd like to replicate", - "default": "csv", - "order": 20, - "type": "object", - "oneOf": [ { - "title": "CSV", - "description": "This connector utilises PyArrow (Apache Arrow) for CSV parsing.", - "type": "object", - "properties": { - "filetype": { - "title": "Filetype", - "const": "csv", - "type": "string" - }, - "delimiter": { - "title": "Delimiter", - "description": "The character delimiting individual cells in the CSV data. This may only be a 1-character string. For tab-delimited data enter '\\t'.", - "default": ",", - "minLength": 1, - "order": 0, - "type": "string" - }, - "infer_datatypes": { - "title": "Infer Datatypes", - "description": "Configures whether a schema for the source should be inferred from the current data or not. If set to false and a custom schema is set, then the manually enforced schema is used. If a schema is not manually set, and this is set to false, then all fields will be read as strings", - "default": true, - "order": 1, - "type": "boolean" - }, - "quote_char": { - "title": "Quote Character", - "description": "The character used for quoting CSV values. To disallow quoting, make this field blank.", - "default": "\"", - "order": 2, - "type": "string" - }, - "escape_char": { - "title": "Escape Character", - "description": "The character used for escaping special characters. To disallow escaping, leave this field blank.", - "order": 3, - "type": "string" - }, - "encoding": { - "title": "Encoding", - "description": "The character encoding of the CSV data. Leave blank to default to UTF8. See list of python encodings for allowable options.", - "default": "utf8", - "order": 4, - "type": "string" - }, - "double_quote": { - "title": "Double Quote", - "description": "Whether two quotes in a quoted CSV value denote a single quote in the data.", - "default": true, - "order": 5, - "type": "boolean" - }, - "newlines_in_values": { - "title": "Allow newlines in values", - "description": "Whether newline characters are allowed in CSV values. Turning this on may affect performance. Leave blank to default to False.", - "default": false, - "order": 6, - "type": "boolean" - }, - "additional_reader_options": { - "title": "Additional Reader Options", - "description": "Optionally add a valid JSON string here to provide additional options to the csv reader. Mappings must correspond to options detailed here. 'column_types' is used internally to handle schema so overriding that would likely cause problems.", - "examples": [ "{\"timestamp_parsers\": [\"%m/%d/%Y %H:%M\", \"%Y/%m/%d %H:%M\"], \"strings_can_be_null\": true, \"null_values\": [\"NA\", \"NULL\"]}" ], - "order": 7, - "type": "string" - }, - "advanced_options": { - "title": "Advanced Options", - "description": "Optionally add a valid JSON string here to provide additional Pyarrow ReadOptions. Specify 'column_names' here if your CSV doesn't have header, or if you want to use custom column names. 'block_size' and 'encoding' are already used above, specify them again here will override the values above.", - "examples": [ "{\"column_names\": [\"column1\", \"column2\"]}" ], - "order": 8, - "type": "string" - }, - "block_size": { - "title": "Block Size", - "description": "The chunk size in bytes to process at a time in memory from each file. If your data is particularly wide and failing during schema detection, increasing this should solve it. Beware of raising this too high as you could hit OOM errors.", - "default": 10000, - "minimum": 1, - "maximum": 2147483647, - "order": 9, - "type": "integer" - } - } - }, { - "title": "Parquet", - "description": "This connector utilises PyArrow (Apache Arrow) for Parquet parsing.", - "type": "object", - "properties": { - "filetype": { - "title": "Filetype", - "const": "parquet", - "type": "string" - }, - "columns": { - "title": "Selected Columns", - "description": "If you only want to sync a subset of the columns from the file(s), add the columns you want here as a comma-delimited list. Leave it empty to sync all columns.", - "order": 0, - "type": "array", - "items": { - "type": "string" - } - }, - "batch_size": { - "title": "Record batch size", - "description": "Maximum number of records per batch read from the input files. Batches may be smaller if there aren’t enough rows in the file. This option can help avoid out-of-memory errors if your data is particularly wide.", - "default": 65536, - "order": 1, - "type": "integer" - }, - "buffer_size": { - "title": "Buffer Size", - "description": "Perform read buffering when deserializing individual column chunks. By default every group column will be loaded fully to memory. This option can help avoid out-of-memory errors if your data is particularly wide.", - "default": 2, - "type": "integer" - } - } - }, { - "title": "Avro", - "description": "This connector utilises fastavro for Avro parsing.", - "type": "object", - "properties": { - "filetype": { - "title": "Filetype", - "const": "avro", - "type": "string" - } - } - }, { - "title": "Jsonl", - "description": "This connector uses PyArrow for JSON Lines (jsonl) file parsing.", - "type": "object", - "properties": { - "filetype": { - "title": "Filetype", - "const": "jsonl", - "type": "string" - }, - "newlines_in_values": { - "title": "Allow newlines in values", - "description": "Whether newline characters are allowed in JSON values. Turning this on may affect performance. Leave blank to default to False.", - "default": false, - "order": 0, - "type": "boolean" - }, - "unexpected_field_behavior": { - "title": "Unexpected field behavior", - "description": "How JSON fields outside of explicit_schema (if given) are treated. Check PyArrow documentation for details", - "default": "infer", - "examples": [ "ignore", "infer", "error" ], - "order": 1, - "enum": [ "ignore", "infer", "error" ] - }, - "block_size": { - "title": "Block Size", - "description": "The chunk size in bytes to process at a time in memory from each file. If your data is particularly wide and failing during schema detection, increasing this should solve it. Beware of raising this too high as you could hit OOM errors.", - "default": 0, - "order": 2, - "type": "integer" - } - } - } ] - }, - "schema": { - "title": "Manually enforced data schema", - "description": "Optionally provide a schema to enforce, as a valid JSON string. Ensure this is a mapping of { \"column\" : \"type\" }, where types are valid JSON Schema datatypes. Leave as {} to auto-infer the schema.", - "default": "{}", - "examples": [ "{\"column_1\": \"number\", \"column_2\": \"string\", \"column_3\": \"array\", \"column_4\": \"object\", \"column_5\": \"boolean\"}" ], - "order": 30, - "type": "string" - }, - "provider": { - "title": "S3: Amazon Web Services", - "type": "object", - "properties": { - "bucket": { - "title": "Bucket", - "description": "Name of the S3 bucket where the file(s) exist.", - "order": 0, - "type": "string" - }, - "aws_access_key_id": { - "title": "AWS Access Key ID", - "description": "In order to access private Buckets stored on AWS S3, this connector requires credentials with the proper permissions. If accessing publicly available data, this field is not necessary.", - "airbyte_secret": true, - "order": 1, - "type": "string" - }, - "aws_secret_access_key": { - "title": "AWS Secret Access Key", - "description": "In order to access private Buckets stored on AWS S3, this connector requires credentials with the proper permissions. If accessing publicly available data, this field is not necessary.", - "airbyte_secret": true, - "order": 2, - "type": "string" - }, - "path_prefix": { - "title": "Path Prefix", - "description": "By providing a path-like prefix (e.g. myFolder/thisTable/) under which all the relevant files sit, we can optimize finding these in S3. This is optional but recommended if your bucket contains many folders/files which you don't need to replicate.", - "default": "", - "order": 3, - "type": "string" - }, - "endpoint": { - "title": "Endpoint", - "description": "Endpoint to an S3 compatible service. Leave empty to use AWS.", - "default": "", - "order": 4, - "type": "string" - }, - "start_date": { - "title": "Start Date", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any file modified before this date will not be replicated.", - "examples": [ "2021-01-01T00:00:00Z" ], - "format": "date-time", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "order": 5, - "type": "string" - } - }, - "required": [ "bucket" ], - "order": 11, - "description": "Use this to load files from S3 or S3-compatible services" - } - }, - "required": [ "dataset", "path_pattern", "provider" ] - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append", "append_dedup" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "*.s3.amazonaws.com" ] - } - }, { - "sourceDefinitionId": "41991d12-d4b5-439e-afd0-260a31d4c53f", - "name": "SalesLoft", - "dockerRepository": "airbyte/source-salesloft", - "dockerImageTag": "1.0.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/salesloft", - "icon": "salesloft.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/salesloft", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Source Salesloft Spec", - "type": "object", - "required": [ "credentials", "start_date" ], - "additionalProperties": true, - "properties": { - "credentials": { - "order": 0, - "type": "object", - "title": "Credentials", - "oneOf": [ { - "title": "Authenticate via OAuth", - "type": "object", - "required": [ "client_id", "client_secret", "refresh_token", "access_token", "token_expiry_date", "auth_type" ], - "properties": { - "auth_type": { - "type": "string", - "const": "oauth2.0" - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "The Client ID of your Salesloft developer application." - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "The Client Secret of your Salesloft developer application.", - "airbyte_secret": true - }, - "access_token": { - "type": "string", - "description": "Access Token for making authenticated requests.", - "airbyte_secret": true - }, - "token_expiry_date": { - "type": "string", - "description": "The date-time when the access token should be refreshed.", - "format": "date-time" - }, - "refresh_token": { - "type": "string", - "title": "Refresh Token", - "description": "The token for obtaining a new access token.", - "airbyte_secret": true - } - } - }, { - "title": "Authenticate via API Key", - "type": "object", - "required": [ "api_key", "auth_type" ], - "properties": { - "auth_type": { - "type": "string", - "const": "api_key" - }, - "api_key": { - "type": "string", - "airbyte_secret": true, - "title": "API Key", - "description": "API Key for making authenticated requests. More instruction on how to find this value in our docs" - } - } - } ] - }, - "start_date": { - "order": 1, - "type": "string", - "title": "Start Date", - "description": "The date from which you'd like to replicate data for Salesloft API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", - "examples": [ "2020-11-16T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "format": "date-time" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "api.salesloft.com" ] - } - }, { - "sourceDefinitionId": "b117307c-14b6-41aa-9422-947e34922962", - "name": "Salesforce", - "dockerRepository": "airbyte/source-salesforce", - "dockerImageTag": "2.0.9", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/salesforce", - "icon": "salesforce.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/salesforce", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Salesforce Source Spec", - "type": "object", - "required": [ "client_id", "client_secret", "refresh_token" ], - "additionalProperties": true, - "properties": { - "is_sandbox": { - "title": "Sandbox", - "description": "Toggle if you're using a Salesforce Sandbox", - "type": "boolean", - "default": false, - "order": 1 - }, - "auth_type": { - "type": "string", - "const": "Client" - }, - "client_id": { - "title": "Client ID", - "description": "Enter your Salesforce developer application's Client ID", - "type": "string", - "order": 2 - }, - "client_secret": { - "title": "Client Secret", - "description": "Enter your Salesforce developer application's Client secret", - "type": "string", - "airbyte_secret": true, - "order": 3 - }, - "refresh_token": { - "title": "Refresh Token", - "description": "Enter your application's Salesforce Refresh Token used for Airbyte to access your Salesforce account.", - "type": "string", - "airbyte_secret": true, - "order": 4 - }, - "start_date": { - "title": "Start Date", - "description": "Enter the date in the YYYY-MM-DD format. Airbyte will replicate the data added on and after this date. If this field is blank, Airbyte will replicate the data for last two years.", - "type": "string", - "pattern": "^([0-9]{4}-[0-9]{2}-[0-9]{2}(T[0-9]{2}:[0-9]{2}:[0-9]{2}Z)?)$", - "examples": [ "2021-07-25", "2021-07-25T00:00:00Z" ], - "format": "date-time", - "order": 5 - }, - "streams_criteria": { - "type": "array", - "order": 6, - "items": { - "type": "object", - "required": [ "criteria", "value" ], - "properties": { - "criteria": { - "type": "string", - "title": "Search criteria", - "enum": [ "starts with", "ends with", "contains", "exacts", "starts not with", "ends not with", "not contains", "not exacts" ], - "order": 1, - "default": "contains" - }, - "value": { - "type": "string", - "title": "Search value", - "order": 2 - } - } - }, - "title": "Filter Salesforce Objects", - "description": "Filter streams relevant to you" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "auth_type" ], - "predicate_value": "Client", - "oauth_config_specification": { - "oauth_user_input_from_connector_config_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "is_sandbox": { - "type": "boolean", - "path_in_connector_config": [ "is_sandbox" ] - } - } - }, - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "refresh_token": { - "type": "string", - "path_in_connector_config": [ "refresh_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "*.salesforce.com" ] - } - }, { - "sourceDefinitionId": "ec5f3102-fb31-4916-99ae-864faf8e7e25", - "name": "SAP Fieldglass", - "dockerRepository": "airbyte/source-sap-fieldglass", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/sap-fieldglass", - "icon": "sapfieldglass.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/sap-fieldglass", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Sap Fieldglass Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "description": "API Key", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "8d7ef552-2c0f-11ec-8d3d-0242ac130003", - "name": "SearchMetrics", - "dockerRepository": "airbyte/source-search-metrics", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/search-metrics", - "icon": "searchmetrics.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/seacrh-metrics", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Source Search Metrics Spec", - "type": "object", - "required": [ "api_key", "client_secret", "country_code", "start_date" ], - "additionalProperties": true, - "properties": { - "api_key": { - "title": "API Key", - "type": "string", - "description": "", - "airbyte_secret": true - }, - "client_secret": { - "title": "Client Secret", - "type": "string", - "description": "", - "airbyte_secret": true - }, - "country_code": { - "title": "Country Code", - "type": "string", - "default": "", - "description": "The region of the S3 staging bucket to use if utilising a copy strategy.", - "enum": [ "", "AR", "AU", "AT", "BE", "BR", "CA", "CN", "CO", "DK", "FI", "FR", "DE", "HK", "IN", "IE", "IT", "JP", "MX", "NL", "NO", "PL", "RU", "SG", "ZA", "ES", "SE", "CH", "TR", "US", "GB" ], - "order": 2 - }, - "start_date": { - "title": "Start Date", - "type": "string", - "description": "Data generated in SearchMetrics after this date will be replicated. This date must be specified in the format YYYY-MM-DDT00:00:00Z.", - "examples": [ "20200925" ], - "pattern": "^[0-9]{4}[0-9]{2}[0-9]{2}$" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "da9fc6b9-8059-4be0-b204-f56e22e4d52d", - "name": "Secoda", - "dockerRepository": "airbyte/source-secoda", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/secoda", - "icon": "secoda.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/secoda", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Secoda Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "title": "Api Key", - "type": "string", - "description": "Your API Access Key. See here. The key is case sensitive.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "fbb5fbe2-16ad-4cf4-af7d-ff9d9c316c87", - "name": "Sendgrid", - "dockerRepository": "airbyte/source-sendgrid", - "dockerImageTag": "0.3.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/sendgrid", - "icon": "sendgrid.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/sendgrid", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Sendgrid Spec", - "type": "object", - "required": [ "apikey" ], - "additionalProperties": true, - "properties": { - "apikey": { - "title": "Sendgrid API key", - "airbyte_secret": true, - "type": "string", - "description": "API Key, use admin to generate this key.", - "order": 0 - }, - "start_time": { - "title": "Start time", - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(.\\d+)?Z$", - "description": "Start time in ISO8601 format. Any data before this time point will not be replicated.", - "examples": [ "2020-01-01T01:01:01Z", "2020-01-01T01:01:01.000001Z" ], - "order": 1 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "api.sendgrid.com" ] - } - }, { - "sourceDefinitionId": "39de93cb-1511-473e-a673-5cbedb9436af", - "name": "Senseforce", - "dockerRepository": "airbyte/source-senseforce", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/senseforce", - "icon": "senseforce.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/senseforce", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Senseforce Source Spec", - "type": "object", - "required": [ "access_token", "backend_url", "dataset_id", "start_date" ], - "additionalProperties": true, - "properties": { - "access_token": { - "type": "string", - "title": "API Access Token", - "description": "Your API access token. See here. The toke is case sensitive.", - "airbyte_secret": true - }, - "backend_url": { - "type": "string", - "title": "Senseforce backend URL", - "examples": [ "https://galaxyapi.senseforce.io" ], - "description": "Your Senseforce API backend URL. This is the URL shown during the Login screen. See here for more details. (Note: Most Senseforce backend APIs have the term 'galaxy' in their ULR)" - }, - "dataset_id": { - "type": "string", - "title": "Dataset ID", - "examples": [ "8f418098-ca28-4df5-9498-0df9fe78eda7" ], - "description": "The ID of the dataset you want to synchronize. The ID can be found in the URL when opening the dataset. See here for more details. (Note: As the Senseforce API only allows to synchronize a specific dataset, each dataset you want to synchronize needs to be implemented as a separate airbyte source)." - }, - "start_date": { - "type": "string", - "title": "The first day (in UTC) when to read data from.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "description": "UTC date and time in the format 2017-01-25. Only data with \"Timestamp\" after this date will be replicated. Important note: This start date must be set to the first day of where your dataset provides data. If your dataset has data from 2020-10-10 10:21:10, set the start_date to 2020-10-10 or later", - "examples": [ "2017-01-25" ], - "format": "date" - }, - "slice_range": { - "type": "integer", - "title": "Data request time increment in days", - "default": 10, - "minimum": 1, - "maximum": 365, - "examples": [ 1, 3, 10, 30, 180, 360 ], - "airbyte_hidden": true, - "description": "The time increment used by the connector when requesting data from the Senseforce API. The bigger the value is, the less requests will be made and faster the sync will be. On the other hand, the more seldom the state is persisted and the more likely one could run into rate limites. Furthermore, consider that large chunks of time might take a long time for the Senseforce query to return data - meaning it could take in effect longer than with more smaller time slices. If there are a lot of data per day, set this setting to 1. If there is only very little data per day, you might change the setting to 10 or more." - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "allowedHosts": { - "hosts": [ "galaxyapi.senseforce.io", "senseforce.io" ] - } - }, { - "sourceDefinitionId": "2e88fa20-a2f6-43cc-bba6-98a0a3f244fb", - "name": "Sendinblue", - "dockerRepository": "airbyte/source-sendinblue", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/sendinblue", - "icon": "sendinblue.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/sendinblue", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Sendinblue Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "title": "API Key", - "type": "string", - "description": "Your API Key. See here.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "9da77001-af33-4bcd-be46-6252bf9342b9", - "name": "Shopify", - "dockerRepository": "airbyte/source-shopify", - "dockerImageTag": "0.3.2", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/shopify", - "icon": "shopify.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/shopify", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Shopify Source CDK Specifications", - "type": "object", - "required": [ "shop", "start_date" ], - "additionalProperties": true, - "properties": { - "shop": { - "type": "string", - "title": "Shopify Store", - "description": "The name of your Shopify store found in the URL. For example, if your URL was https://NAME.myshopify.com, then the name would be 'NAME'.", - "order": 1 - }, - "credentials": { - "title": "Shopify Authorization Method", - "description": "The authorization method to use to retrieve data from Shopify", - "type": "object", - "order": 2, - "oneOf": [ { - "title": "API Password", - "description": "API Password Auth", - "type": "object", - "required": [ "auth_method", "api_password" ], - "properties": { - "auth_method": { - "type": "string", - "const": "api_password", - "order": 0 - }, - "api_password": { - "type": "string", - "title": "API Password", - "description": "The API Password for your private application in the `Shopify` store.", - "airbyte_secret": true, - "order": 1 - } - } - }, { - "type": "object", - "title": "OAuth2.0", - "description": "OAuth2.0", - "required": [ "auth_method" ], - "properties": { - "auth_method": { - "type": "string", - "const": "oauth2.0", - "order": 0 - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "The Client ID of the Shopify developer application.", - "airbyte_secret": true, - "order": 1 - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "The Client Secret of the Shopify developer application.", - "airbyte_secret": true, - "order": 2 - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "The Access Token for making authenticated requests.", - "airbyte_secret": true, - "order": 3 - } - } - } ] - }, - "start_date": { - "type": "string", - "title": "Replication Start Date", - "description": "The date you would like to replicate data from. Format: YYYY-MM-DD. Any data before this date will not be replicated.", - "examples": [ "2021-01-01" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "order": 3 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "auth_method" ], - "predicate_value": "oauth2.0", - "oauth_config_specification": { - "oauth_user_input_from_connector_config_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "shop": { - "type": "string", - "path_in_connector_config": [ "shop" ] - } - } - }, - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "access_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "access_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "2fed2292-5586-480c-af92-9944e39fe12d", - "name": "Short.io", - "dockerRepository": "airbyte/source-shortio", - "dockerImageTag": "0.1.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/shortio", - "icon": "short.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://developers.short.io/reference", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Shortio Spec", - "type": "object", - "required": [ "domain_id", "secret_key", "start_date" ], - "properties": { - "domain_id": { - "type": "string", - "desciprtion": "Short.io Domain ID", - "title": "Domain ID", - "airbyte_secret": false - }, - "secret_key": { - "type": "string", - "title": "Secret Key", - "description": "Short.io Secret Key", - "airbyte_secret": true - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", - "airbyte_secret": false - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "c2281cee-86f9-4a86-bb48-d23286b4c7bd", - "name": "Slack", - "dockerRepository": "airbyte/source-slack", - "dockerImageTag": "0.1.25", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/slack", - "icon": "slack.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/slack", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Slack Spec", - "type": "object", - "required": [ "start_date", "lookback_window", "join_channels" ], - "additionalProperties": true, - "properties": { - "start_date": { - "type": "string", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", - "examples": [ "2017-01-25T00:00:00Z" ], - "title": "Start Date", - "format": "date-time" - }, - "lookback_window": { - "type": "integer", - "title": "Threads Lookback window (Days)", - "description": "How far into the past to look for messages in threads.", - "examples": [ 7, 14 ] - }, - "join_channels": { - "type": "boolean", - "default": true, - "title": "Join all channels", - "description": "Whether to join all channels or to sync data only from channels the bot is already in. If false, you'll need to manually add the bot to all the channels from which you'd like to sync messages. " - }, - "channel_filter": { - "type": "array", - "default": [ ], - "items": { - "type": "string", - "minLength": 0 - }, - "title": "Channel name filter", - "description": "A channel name list (without leading '#' char) which limit the channels from which you'd like to sync. Empty list means no filter.", - "examples": [ "channel_one", "channel_two" ] - }, - "credentials": { - "title": "Authentication mechanism", - "description": "Choose how to authenticate into Slack", - "type": "object", - "oneOf": [ { - "type": "object", - "title": "Sign in via Slack (OAuth)", - "required": [ "option_title", "client_id", "client_secret", "access_token" ], - "properties": { - "option_title": { - "type": "string", - "const": "Default OAuth2.0 authorization" - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "Slack client_id. See our docs if you need help finding this id." - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "Slack client_secret. See our docs if you need help finding this secret.", - "airbyte_secret": true - }, - "access_token": { - "type": "string", - "title": "Access token", - "description": "Slack access_token. See our docs if you need help generating the token.", - "airbyte_secret": true - } - }, - "order": 0 - }, { - "type": "object", - "title": "API Token", - "required": [ "option_title", "api_token" ], - "properties": { - "option_title": { - "type": "string", - "const": "API Token Credentials" - }, - "api_token": { - "type": "string", - "title": "API Token", - "description": "A Slack bot token. See the docs for instructions on how to generate it.", - "airbyte_secret": true - } - }, - "order": 1 - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "option_title" ], - "predicate_value": "Default OAuth2.0 authorization", - "oauth_config_specification": { - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "access_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "access_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "slack.com" ] - } - }, { - "sourceDefinitionId": "781f8b1d-4e20-4842-a2c3-cd9b119d65fa", - "name": "Smaily", - "dockerRepository": "airbyte/source-smaily", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/smaily", - "icon": "smaily.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/smaily", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Smaily Spec", - "type": "object", - "required": [ "api_subdomain", "api_username", "api_password" ], - "additionalProperties": true, - "properties": { - "api_subdomain": { - "type": "string", - "title": "API Subdomain", - "description": "API Subdomain. See https://smaily.com/help/api/general/create-api-user/" - }, - "api_username": { - "type": "string", - "title": "API User Username", - "description": "API user username. See https://smaily.com/help/api/general/create-api-user/" - }, - "api_password": { - "type": "string", - "title": "API User Password", - "description": "API user password. See https://smaily.com/help/api/general/create-api-user/", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "21cc4a17-a011-4485-8a3e-e2341a91ab9f", - "name": "SmartEngage", - "dockerRepository": "airbyte/source-smartengage", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/smartengage", - "icon": "smartengage.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/smartengage", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "SmartEngage Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "title": "API Key", - "type": "string", - "description": "API Key", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "374ebc65-6636-4ea0-925c-7d35999a8ffc", - "name": "Smartsheets", - "dockerRepository": "airbyte/source-smartsheets", - "dockerImageTag": "1.0.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/smartsheets", - "icon": "smartsheet.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/smartsheets", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Smartsheets Source Spec", - "type": "object", - "required": [ "credentials", "spreadsheet_id" ], - "additionalProperties": true, - "properties": { - "credentials": { - "title": "Authorization Method", - "type": "object", - "order": 0, - "oneOf": [ { - "type": "object", - "title": "OAuth2.0", - "required": [ "client_id", "client_secret", "refresh_token", "access_token", "token_expiry_date" ], - "properties": { - "auth_type": { - "type": "string", - "const": "oauth2.0" - }, - "client_id": { - "type": "string", - "description": "The API ID of the SmartSheets developer application.", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "description": "The API Secret the SmartSheets developer application.", - "airbyte_secret": true - }, - "access_token": { - "type": "string", - "description": "Access Token for making authenticated requests.", - "airbyte_secret": true - }, - "token_expiry_date": { - "type": "string", - "description": "The date-time when the access token should be refreshed.", - "format": "date-time" - }, - "refresh_token": { - "type": "string", - "description": "The key to refresh the expired access_token.", - "airbyte_secret": true - } - } - }, { - "title": "API Access Token", - "type": "object", - "required": [ "access_token" ], - "properties": { - "auth_type": { - "type": "string", - "const": "access_token" - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "The access token to use for accessing your data from Smartsheets. This access token must be generated by a user with at least read access to the data you'd like to replicate. Generate an access token in the Smartsheets main menu by clicking Account > Apps & Integrations > API Access. See the setup guide for information on how to obtain this token.", - "airbyte_secret": true - } - } - } ] - }, - "spreadsheet_id": { - "title": "Sheet ID", - "description": "The spreadsheet ID. Find it by opening the spreadsheet then navigating to File > Properties", - "type": "string", - "order": 1 - }, - "start_datetime": { - "title": "Start Datetime", - "type": "string", - "examples": [ "2000-01-01T13:00:00", "2000-01-01T13:00:00-07:00" ], - "description": "Only rows modified after this date/time will be replicated. This should be an ISO 8601 string, for instance: `2000-01-01T13:00:00`", - "format": "date-time", - "default": "2020-01-01T00:00:00+00:00", - "order": 2, - "airbyte_hidden": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "auth_type" ], - "predicate_value": "oauth2.0", - "oauth_config_specification": { - "complete_oauth_output_specification": { - "type": "object", - "properties": { - "access_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "access_token" ] - }, - "refresh_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "refresh_token" ] - }, - "token_expiry_date": { - "type": "string", - "format": "date-time", - "path_in_connector_config": [ "credentials", "token_expiry_date" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "app.smartsheet.com", "api.smartsheet.com" ] - } - }, { - "sourceDefinitionId": "200330b2-ea62-4d11-ac6d-cfe3e3f8ab2b", - "name": "Snapchat Marketing", - "dockerRepository": "airbyte/source-snapchat-marketing", - "dockerImageTag": "0.1.16", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/snapchat-marketing", - "icon": "snapchat.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/snapchat-marketing", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Snapchat Marketing Spec", - "type": "object", - "required": [ "client_id", "client_secret", "refresh_token" ], - "properties": { - "client_id": { - "title": "Client ID", - "type": "string", - "description": "The Client ID of your Snapchat developer application.", - "airbyte_secret": true, - "order": 0 - }, - "client_secret": { - "title": "Client Secret", - "type": "string", - "description": "The Client Secret of your Snapchat developer application.", - "airbyte_secret": true, - "order": 1 - }, - "refresh_token": { - "title": "Refresh Token", - "type": "string", - "description": "Refresh Token to renew the expired Access Token.", - "airbyte_secret": true, - "order": 2 - }, - "start_date": { - "title": "Start Date", - "type": "string", - "description": "Date in the format 2022-01-01. Any data before this date will not be replicated.", - "examples": [ "2022-01-01" ], - "default": "2022-01-01", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "order": 3, - "format": "date" - }, - "end_date": { - "type": "string", - "title": "End Date", - "description": "Date in the format 2017-01-25. Any data after this date will not be replicated.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "2022-01-30" ], - "order": 4, - "format": "date" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ ], - "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], - "oauthFlowOutputParameters": [ [ "refresh_token" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "accounts.snapchat.com", "adsapi.snapchat.com" ] - } - }, { - "sourceDefinitionId": "e2d65910-8c8b-40a1-ae7d-ee2416b2bfa2", - "name": "Snowflake", - "dockerRepository": "airbyte/source-snowflake", - "dockerImageTag": "0.1.34", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/snowflake", - "icon": "snowflake.svg", - "sourceType": "database", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/snowflake", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Snowflake Source Spec", - "type": "object", - "required": [ "host", "role", "warehouse", "database" ], - "properties": { - "credentials": { - "title": "Authorization Method", - "type": "object", - "oneOf": [ { - "type": "object", - "title": "OAuth2.0", - "order": 0, - "required": [ "client_id", "client_secret", "auth_type" ], - "properties": { - "auth_type": { - "type": "string", - "const": "OAuth", - "order": 0 - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "The Client ID of your Snowflake developer application.", - "airbyte_secret": true, - "order": 1 - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "The Client Secret of your Snowflake developer application.", - "airbyte_secret": true, - "order": 2 - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "Access Token for making authenticated requests.", - "airbyte_secret": true, - "order": 3 - }, - "refresh_token": { - "type": "string", - "title": "Refresh Token", - "description": "Refresh Token for making authenticated requests.", - "airbyte_secret": true, - "order": 4 - } - } - }, { - "title": "Username and Password", - "type": "object", - "required": [ "username", "password", "auth_type" ], - "order": 1, - "properties": { - "auth_type": { - "type": "string", - "const": "username/password", - "order": 0 - }, - "username": { - "description": "The username you created to allow Airbyte to access the database.", - "examples": [ "AIRBYTE_USER" ], - "type": "string", - "title": "Username", - "order": 1 - }, - "password": { - "description": "The password associated with the username.", - "type": "string", - "airbyte_secret": true, - "title": "Password", - "order": 2 - } - } - } ], - "order": 0 - }, - "host": { - "description": "The host domain of the snowflake instance (must include the account, region, cloud environment, and end with snowflakecomputing.com).", - "examples": [ "accountname.us-east-2.aws.snowflakecomputing.com" ], - "type": "string", - "title": "Account Name", - "order": 1 - }, - "role": { - "description": "The role you created for Airbyte to access Snowflake.", - "examples": [ "AIRBYTE_ROLE" ], - "type": "string", - "title": "Role", - "order": 2 - }, - "warehouse": { - "description": "The warehouse you created for Airbyte to access data.", - "examples": [ "AIRBYTE_WAREHOUSE" ], - "type": "string", - "title": "Warehouse", - "order": 3 - }, - "database": { - "description": "The database you created for Airbyte to access data.", - "examples": [ "AIRBYTE_DATABASE" ], - "type": "string", - "title": "Database", - "order": 4 - }, - "schema": { - "description": "The source Snowflake schema tables. Leave empty to access tables from multiple schemas.", - "examples": [ "AIRBYTE_SCHEMA" ], - "type": "string", - "title": "Schema", - "order": 5 - }, - "jdbc_url_params": { - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", - "title": "JDBC URL Params", - "type": "string", - "order": 6 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "auth_type" ], - "predicate_value": "OAuth", - "oauth_config_specification": { - "oauth_user_input_from_connector_config_specification": { - "type": "object", - "properties": { - "host": { - "type": "string", - "path_in_connector_config": [ "host" ] - }, - "role": { - "type": "string", - "path_in_connector_config": [ "role" ] - } - } - }, - "complete_oauth_output_specification": { - "type": "object", - "properties": { - "access_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "access_token" ] - }, - "refresh_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "refresh_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "allowedHosts": { - "hosts": [ "${host}" ] - } - }, { - "sourceDefinitionId": "3ab1d7d0-1577-4ab9-bcc4-1ff6a4c2c9f2", - "name": "Sonar Cloud", - "dockerRepository": "airbyte/source-sonar-cloud", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/sonar-cloud", - "icon": "sonarcloud.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/sonar-cloud", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Sonar Cloud Spec", - "type": "object", - "required": [ "user_token", "organization", "component_keys" ], - "additionalProperties": true, - "properties": { - "user_token": { - "title": "User Token", - "type": "string", - "description": "Your User Token. See here. The token is case sensitive.", - "airbyte_secret": true - }, - "organization": { - "title": "Organization", - "type": "string", - "description": "Organization key. See here.", - "examples": [ "airbyte" ] - }, - "component_keys": { - "title": "Component Keys", - "type": "array", - "description": "Comma-separated list of component keys.", - "examples": [ "airbyte-ws-order", "airbyte-ws-checkout" ] - }, - "start_date": { - "title": "Start date", - "type": "string", - "description": "To retrieve issues created after the given date (inclusive).", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "YYYY-MM-DD" ], - "format": "date" - }, - "end_date": { - "title": "End date", - "type": "string", - "description": "To retrieve issues created before the given date (inclusive).", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "YYYY-MM-DD" ], - "format": "date" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "allowedHosts": { - "hosts": [ "sonarcloud.io" ] - } - }, { - "sourceDefinitionId": "62235e65-af7a-4138-9130-0bda954eb6a8", - "name": "SpaceX API", - "dockerRepository": "airbyte/source-spacex-api", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/spacex-api", - "icon": "spacex.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/spacex-api", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Spacex Api Spec", - "type": "object", - "additionalProperties": true, - "properties": { - "id": { - "title": "Unique ID for specific source target", - "type": "string", - "desciption": "Optional, For a specific ID" - }, - "options": { - "title": "Configuration options for endpoints", - "type": "string", - "desciption": "Optional, Possible values for an endpoint. Example values for launches-latest, upcoming, past" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "77225a51-cd15-4a13-af02-65816bd0ecf4", - "name": "Square", - "dockerRepository": "airbyte/source-square", - "dockerImageTag": "0.2.2", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/square", - "icon": "square.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/square", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Square Spec", - "type": "object", - "required": [ "is_sandbox" ], - "additionalProperties": true, - "properties": { - "credentials": { - "title": "Authentication", - "description": "Choose how to authenticate to Square.", - "type": "object", - "order": 0, - "oneOf": [ { - "title": "Oauth authentication", - "type": "object", - "required": [ "auth_type", "client_id", "client_secret", "refresh_token" ], - "properties": { - "credentials_title": { - "type": "string", - "const": "OAuth Credentials", - "order": 0 - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "The Square-issued ID of your application", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "The Square-issued application secret for your application", - "airbyte_secret": true - }, - "refresh_token": { - "title": "Refresh Token", - "type": "string", - "description": "A refresh token generated using the above client ID and secret", - "airbyte_secret": true - } - } - }, { - "title": "API key", - "type": "object", - "required": [ "auth_type", "api_key" ], - "properties": { - "credentials_title": { - "type": "string", - "const": "API Key", - "order": 0 - }, - "api_key": { - "type": "string", - "title": "API key token", - "description": "The API key for a Square application", - "airbyte_secret": true - } - } - } ] - }, - "is_sandbox": { - "type": "boolean", - "description": "Determines whether to use the sandbox or production environment.", - "title": "Sandbox", - "default": false, - "order": 1 - }, - "start_date": { - "type": "string", - "description": "UTC date in the format YYYY-MM-DD. Any data before this date will not be replicated. If not set, all data will be replicated.", - "title": "Start Date", - "default": "2021-01-01", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "order": "2,", - "format": "date" - }, - "include_deleted_objects": { - "type": "boolean", - "description": "In some streams there is an option to include deleted objects (Items, Categories, Discounts, Taxes)", - "title": "Include Deleted Objects", - "default": false, - "order": 3 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ "credentials", "0" ], - "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], - "oauthFlowOutputParameters": [ [ "refresh_token" ] ] - } - }, - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "auth_type" ], - "predicate_value": "Oauth", - "oauth_config_specification": { - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "refresh_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "refresh_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "connect.squareupsandbox.com", "connect.squareup.com" ] - } - }, { - "sourceDefinitionId": "7a4327c4-315a-11ec-8d3d-0242ac130003", - "name": "Strava", - "dockerRepository": "airbyte/source-strava", - "dockerImageTag": "0.1.4", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/strava", - "icon": "strava.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/strava", - "connectionSpecification": { - "$schema": "https://json-schema.org/draft-07/schema#", - "title": "Strava Spec", - "type": "object", - "required": [ "client_id", "client_secret", "refresh_token", "athlete_id", "start_date" ], - "additionalProperties": true, - "properties": { - "auth_type": { - "type": "string", - "const": "Client", - "enum": [ "Client" ], - "default": "Client" - }, - "client_id": { - "type": "string", - "description": "The Client ID of your Strava developer application.", - "title": "Client ID", - "pattern": "^[0-9_\\-]+$", - "examples": [ "12345" ], - "order": 0 - }, - "client_secret": { - "type": "string", - "description": "The Client Secret of your Strava developer application.", - "title": "Client Secret", - "pattern": "^[0-9a-fA-F]+$", - "examples": [ "fc6243f283e51f6ca989aab298b17da125496f50" ], - "airbyte_secret": true, - "order": 1 - }, - "refresh_token": { - "type": "string", - "description": "The Refresh Token with the activity: read_all permissions.", - "title": "Refresh Token", - "pattern": "^[0-9a-fA-F]+$", - "examples": [ "fc6243f283e51f6ca989aab298b17da125496f50" ], - "airbyte_secret": true, - "order": 2 - }, - "athlete_id": { - "type": "integer", - "description": "The Athlete ID of your Strava developer application.", - "title": "Athlete ID", - "pattern": "^[0-9_\\-]+$", - "examples": [ "17831421" ], - "order": 3 - }, - "start_date": { - "type": "string", - "description": "UTC date and time. Any data before this date will not be replicated.", - "title": "Start Date", - "examples": [ "2021-03-01T00:00:00Z" ], - "format": "date-time", - "order": 4 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "auth_type" ], - "predicate_value": "Client", - "oauth_config_specification": { - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": true, - "properties": { - "refresh_token": { - "type": "string", - "path_in_connector_config": [ "refresh_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": true, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "strava.com" ] - } - }, { - "sourceDefinitionId": "74cbd708-46c3-4512-9c93-abd5c3e9a94d", - "name": "Statuspage", - "dockerRepository": "airbyte/source-statuspage", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/statuspage", - "icon": "statuspage.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/statuspage", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Statuspage Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "title": "API Key", - "type": "string", - "description": "Your API Key. See here.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "e094cb9a-26de-4645-8761-65c0c425d1de", - "name": "Stripe", - "dockerRepository": "airbyte/source-stripe", - "dockerImageTag": "3.4.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/stripe", - "icon": "stripe.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/stripe", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Stripe Source Spec", - "type": "object", - "required": [ "client_secret", "account_id", "start_date" ], - "properties": { - "account_id": { - "type": "string", - "title": "Account ID", - "description": "Your Stripe account ID (starts with 'acct_', find yours here).", - "order": 0 - }, - "client_secret": { - "type": "string", - "title": "Secret Key", - "description": "Stripe API key (usually starts with 'sk_live_'; find yours here).", - "airbyte_secret": true, - "order": 1 - }, - "start_date": { - "type": "string", - "title": "Replication start date", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Only data generated after this date will be replicated.", - "examples": [ "2017-01-25T00:00:00Z" ], - "format": "date-time", - "order": 2 - }, - "lookback_window_days": { - "type": "integer", - "title": "Lookback Window in days", - "default": 0, - "minimum": 0, - "description": "When set, the connector will always re-export data from the past N days, where N is the value set here. This is useful if your data is frequently updated after creation. More info here", - "order": 3 - }, - "slice_range": { - "type": "integer", - "title": "Data request time increment in days", - "default": 365, - "minimum": 1, - "examples": [ 1, 3, 10, 30, 180, 360 ], - "description": "The time increment used by the connector when requesting data from the Stripe API. The bigger the value is, the less requests will be made and faster the sync will be. On the other hand, the more seldom the state is persisted.", - "order": 4 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "api.stripe.com" ] - } - }, { - "sourceDefinitionId": "dd4632f4-15e0-4649-9b71-41719fb1fdee", - "name": "SurveyCTO", - "dockerRepository": "airbyte/source-surveycto", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/surveycto", - "icon": "surveycto.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/surveycto", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Surveycto Spec", - "type": "object", - "required": [ "server_name", "username", "password", "form_id" ], - "properties": { - "server_name": { - "type": "string", - "title": "Server Name", - "description": "The name of the SurveryCTO server", - "order": 0 - }, - "username": { - "type": "string", - "title": "Username", - "description": "Username to authenticate into the SurveyCTO server", - "order": 1 - }, - "password": { - "type": "string", - "title": "Password", - "description": "Password to authenticate into the SurveyCTO server", - "airbyte_secret": true, - "order": 2 - }, - "form_id": { - "type": "array", - "title": "Form's Id", - "description": "Unique identifier for one of the forms", - "order": 3 - }, - "start_date": { - "type": "string", - "description": "initial date for survey cto", - "title": "Start Date", - "examples": [ "Jan 09, 2022 00:00:00 AM" ], - "default": "Jan 09, 2022 00:00:00 AM", - "order": 4, - "pattern": "^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dic) [0-9]{2}, [0-9]{4} [0-9]{2}:[0-9]{2}:[0-9]{2} (AM|PM)$" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "badc5925-0485-42be-8caa-b34096cb71b5", - "name": "SurveyMonkey", - "dockerRepository": "airbyte/source-surveymonkey", - "dockerImageTag": "0.1.16", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/surveymonkey", - "icon": "surveymonkey.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/surveymonkey", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "SurveyMonkey Spec", - "type": "object", - "required": [ "start_date" ], - "additionalProperties": true, - "properties": { - "origin": { - "type": "string", - "order": 1, - "enum": [ "USA", "Europe", "Canada" ], - "default": "USA", - "title": "Origin datacenter of the SurveyMonkey account", - "description": "Depending on the originating datacenter of the SurveyMonkey account, the API access URL may be different." - }, - "credentials": { - "title": "SurveyMonkey Authorization Method", - "description": "The authorization method to use to retrieve data from SurveyMonkey", - "type": "object", - "required": [ "auth_method", "access_token" ], - "order": 2, - "properties": { - "auth_method": { - "type": "string", - "const": "oauth2.0", - "order": 0 - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "The Client ID of the SurveyMonkey developer application.", - "airbyte_secret": true, - "order": 1 - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "The Client Secret of the SurveyMonkey developer application.", - "airbyte_secret": true, - "order": 2 - }, - "access_token": { - "title": "Access Token", - "order": 3, - "type": "string", - "airbyte_secret": true, - "description": "Access Token for making authenticated requests. See the docs for information on how to generate this key." - } - } - }, - "start_date": { - "title": "Start Date", - "order": 3, - "type": "string", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z?$", - "examples": [ "2021-01-01T00:00:00Z" ], - "format": "date-time" - }, - "survey_ids": { - "type": "array", - "order": 4, - "items": { - "type": "string", - "pattern": "^[0-9]{8,9}$" - }, - "title": "Survey Monkey survey IDs", - "description": "IDs of the surveys from which you'd like to replicate data. If left empty, data from all boards to which you have access will be replicated." - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "auth_method" ], - "predicate_value": "oauth2.0", - "oauth_config_specification": { - "oauth_user_input_from_connector_config_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "origin": { - "type": "string", - "path_in_connector_config": [ "origin" ] - } - } - }, - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "access_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "access_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "api.surveymonkey.com" ] - } - }, { - "sourceDefinitionId": "4a4d887b-0f2d-4b33-ab7f-9b01b9072804", - "name": "SurveySparrow", - "dockerRepository": "airbyte/source-survey-sparrow", - "dockerImageTag": "0.2.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/survey-sparrow", - "icon": "surveysparrow.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/surveysparrow", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Survey Sparrow Spec", - "type": "object", - "required": [ "access_token" ], - "additionalProperties": true, - "properties": { - "access_token": { - "type": "string", - "description": "Your access token. See here. The key is case sensitive.", - "airbyte_secret": true, - "order": 0 - }, - "survey_id": { - "type": "array", - "description": "A List of your survey ids for survey-specific stream", - "order": 2 - }, - "region": { - "title": "Base URL", - "type": "object", - "description": "Is your account location is EU based? If yes, the base url to retrieve data will be different.", - "oneOf": [ { - "title": "EU-based account", - "type": "object", - "properties": { - "url_base": { - "type": "string", - "const": "https://eu-api.surveysparrow.com/v3" - } - } - }, { - "title": "Global account", - "type": "object", - "properties": { - "url_base": { - "type": "string", - "const": "https://api.surveysparrow.com/v3" - } - } - } ], - "default": { - "title": "Global account", - "type": "object", - "properties": { - "url_base": { - "type": "string", - "const": "https://api.surveysparrow.com/v3" - } - } - }, - "order": 1 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "f00d2cf4-3c28-499a-ba93-b50b6f26359e", - "name": "TalkDesk Explore", - "dockerRepository": "airbyte/source-talkdesk-explore", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/talkdesk-explore", - "icon": "talkdesk-explore.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Talkdesk Explore API Spec", - "type": "object", - "required": [ "start_date", "auth_url", "api_key" ], - "additionalProperties": false, - "properties": { - "start_date": { - "type": "string", - "title": "START DATE", - "description": "The date from which you'd like to replicate data for Talkdesk Explore API, in the format YYYY-MM-DDT00:00:00. All data generated after this date will be replicated.", - "examples": [ "2020-10-15T00:00:00" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}$", - "order": 0 - }, - "timezone": { - "type": "string", - "title": "TIMEZONE", - "description": "Timezone to use when generating reports. Only IANA timezones are supported (https://nodatime.org/TimeZones)", - "examples": [ "Europe/London", "America/Los_Angeles" ], - "default": "UTC", - "order": 1 - }, - "auth_url": { - "title": "AUTH URL", - "type": "string", - "description": "Talkdesk Auth URL. Only 'client_credentials' auth type supported at the moment.", - "examples": [ "https://xxxxxx.talkdeskid.com/oauth/token?grant_type=client_credentials" ], - "order": 2 - }, - "api_key": { - "title": "API KEY", - "type": "string", - "description": "Talkdesk API key.", - "order": 3 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "d1aa448b-7c54-498e-ad95-263cbebcd2db", - "name": "Tempo", - "dockerRepository": "airbyte/source-tempo", - "dockerImageTag": "0.3.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/tempo", - "icon": "tempo.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Tempo Spec", - "type": "object", - "required": [ "api_token" ], - "properties": { - "api_token": { - "type": "string", - "title": "API token", - "description": "Tempo API Token. Go to Tempo>Settings, scroll down to Data Access and select API integration.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "api.tempo.io" ] - } - }, { - "sourceDefinitionId": "aa8ba6fd-4875-d94e-fc8d-4e1e09aa2503", - "name": "Teradata", - "dockerRepository": "airbyte/source-teradata", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/teradata", - "icon": "teradata.svg", - "sourceType": "database", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/teradata", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Teradata Source Spec", - "type": "object", - "required": [ "host", "database", "username" ], - "properties": { - "host": { - "title": "Host", - "description": "Hostname of the database.", - "type": "string", - "order": 0 - }, - "port": { - "title": "Port", - "description": "Port of the database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 3306, - "examples": [ "3306" ], - "order": 1 - }, - "database": { - "title": "Database", - "description": "Name of the database.", - "type": "string", - "order": 2 - }, - "username": { - "title": "Username", - "description": "Username to use to access the database.", - "type": "string", - "order": 3 - }, - "password": { - "title": "Password", - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 4 - }, - "jdbc_url_params": { - "title": "JDBC URL params", - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3)", - "type": "string", - "order": 5 - }, - "replication_method": { - "title": "Replication method", - "description": "Replication method to use for extracting data from the database. STANDARD replication requires no setup on the DB side but will not be able to represent deletions incrementally. CDC uses the Binlog to detect inserts, updates, and deletes. This needs to be configured on the source database itself.", - "type": "string", - "order": 6, - "default": "STANDARD", - "enum": [ "STANDARD", "CDC" ] - }, - "ssl": { - "title": "SSL Connection", - "description": "Encrypt data using SSL. When activating SSL, please select one of the connection modes.", - "type": "boolean", - "default": false, - "order": 7 - }, - "ssl_mode": { - "title": "SSL Modes", - "description": "SSL connection modes. \n disable - Chose this mode to disable encryption of communication between Airbyte and destination database\n allow - Chose this mode to enable encryption only when required by the destination database\n prefer - Chose this mode to allow unencrypted connection only if the destination database does not support encryption\n require - Chose this mode to always require encryption. If the destination database server does not support encryption, connection will fail\n verify-ca - Chose this mode to always require encryption and to verify that the destination database server has a valid SSL certificate\n verify-full - This is the most secure mode. Chose this mode to always require encryption and to verify the identity of the destination database server\n See more information - in the docs.", - "type": "object", - "order": 8, - "oneOf": [ { - "title": "disable", - "additionalProperties": true, - "description": "Disable SSL.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "disable", - "order": 0 - } - } - }, { - "title": "allow", - "additionalProperties": true, - "description": "Allow SSL mode.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "allow", - "order": 0 - } - } - }, { - "title": "prefer", - "additionalProperties": true, - "description": "Prefer SSL mode.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "prefer", - "order": 0 - } - } - }, { - "title": "require", - "additionalProperties": true, - "description": "Require SSL mode.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "require", - "order": 0 - } - } - }, { - "title": "verify-ca", - "additionalProperties": true, - "description": "Verify-ca SSL mode.", - "required": [ "mode", "ssl_ca_certificate" ], - "properties": { - "mode": { - "type": "string", - "const": "verify-ca", - "order": 0 - }, - "ssl_ca_certificate": { - "type": "string", - "title": "CA certificate", - "description": "Specifies the file name of a PEM file that contains Certificate Authority (CA) certificates for use with SSLMODE=verify-ca.\n See more information - in the docs.", - "airbyte_secret": true, - "multiline": true, - "order": 1 - } - } - }, { - "title": "verify-full", - "additionalProperties": true, - "description": "Verify-full SSL mode.", - "required": [ "mode", "ssl_ca_certificate" ], - "properties": { - "mode": { - "type": "string", - "const": "verify-full", - "order": 0 - }, - "ssl_ca_certificate": { - "type": "string", - "title": "CA certificate", - "description": "Specifies the file name of a PEM file that contains Certificate Authority (CA) certificates for use with SSLMODE=verify-full.\n See more information - in the docs.", - "airbyte_secret": true, - "multiline": true, - "order": 1 - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "allowedHosts": { - "hosts": [ "${host}" ] - } - }, { - "sourceDefinitionId": "0dad1a35-ccf8-4d03-b73e-6788c00b13ae", - "name": "TiDB", - "dockerRepository": "airbyte/source-tidb", - "dockerImageTag": "0.2.4", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/tidb", - "icon": "tidb.svg", - "sourceType": "database", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/tidb", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "TiDB Source Spec", - "type": "object", - "required": [ "host", "port", "database", "username" ], - "properties": { - "host": { - "description": "Hostname of the database.", - "title": "Host", - "type": "string", - "order": 0 - }, - "port": { - "description": "Port of the database.", - "title": "Port", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 4000, - "examples": [ "4000" ], - "order": 1 - }, - "database": { - "description": "Name of the database.", - "title": "Database", - "type": "string", - "order": 2 - }, - "username": { - "description": "Username to use to access the database.", - "title": "Username", - "type": "string", - "order": 3 - }, - "password": { - "description": "Password associated with the username.", - "title": "Password", - "type": "string", - "airbyte_secret": true, - "order": 4 - }, - "jdbc_url_params": { - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3)", - "title": "JDBC URL Params", - "type": "string", - "order": 5 - }, - "ssl": { - "title": "SSL Connection", - "description": "Encrypt data using SSL.", - "type": "boolean", - "default": false, - "order": 6 - }, - "tunnel_method": { - "type": "object", - "title": "SSH Tunnel Method", - "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", - "oneOf": [ { - "title": "No Tunnel", - "required": [ "tunnel_method" ], - "properties": { - "tunnel_method": { - "description": "No ssh tunnel needed to connect to database", - "type": "string", - "const": "NO_TUNNEL", - "order": 0 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host.", - "type": "string", - "order": 3 - }, - "ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - }, { - "title": "Password Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host", - "type": "string", - "order": 3 - }, - "tunnel_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 4 - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "allowedHosts": { - "hosts": [ "${host}", "${tunnel_method.tunnel_host}" ] - } - }, { - "sourceDefinitionId": "4bfac00d-ce15-44ff-95b9-9e3c3e8fbd35", - "name": "TikTok Marketing", - "dockerRepository": "airbyte/source-tiktok-marketing", - "dockerImageTag": "3.0.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/tiktok-marketing", - "icon": "tiktok.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/tiktok-marketing", - "changelogUrl": "https://docs.airbyte.com/integrations/sources/tiktok-marketing", - "connectionSpecification": { - "title": "TikTok Marketing Source Spec", - "type": "object", - "properties": { - "credentials": { - "title": "Authentication Method", - "description": "Authentication method", - "default": { }, - "order": 0, - "type": "object", - "oneOf": [ { - "title": "OAuth2.0", - "type": "object", - "properties": { - "auth_type": { - "title": "Auth Type", - "const": "oauth2.0", - "order": 0, - "type": "string" - }, - "app_id": { - "title": "App ID", - "description": "The Developer Application App ID.", - "airbyte_secret": true, - "type": "string" - }, - "secret": { - "title": "Secret", - "description": "The Developer Application Secret.", - "airbyte_secret": true, - "type": "string" - }, - "access_token": { - "title": "Access Token", - "description": "Long-term Authorized Access Token.", - "airbyte_secret": true, - "type": "string" - }, - "advertiser_id": { - "title": "Advertiser ID", - "description": "The Advertiser ID to filter reports and streams. Let this empty to retrieve all.", - "type": "string" - } - }, - "required": [ "app_id", "secret", "access_token" ] - }, { - "title": "Sandbox Access Token", - "type": "object", - "properties": { - "auth_type": { - "title": "Auth Type", - "const": "sandbox_access_token", - "order": 0, - "type": "string" - }, - "advertiser_id": { - "title": "Advertiser ID", - "description": "The Advertiser ID which generated for the developer's Sandbox application.", - "type": "string" - }, - "access_token": { - "title": "Access Token", - "description": "The long-term authorized access token.", - "airbyte_secret": true, - "type": "string" - } - }, - "required": [ "advertiser_id", "access_token" ] - } ] - }, - "start_date": { - "title": "Replication Start Date", - "description": "The Start Date in format: YYYY-MM-DD. Any data before this date will not be replicated. If this parameter is not set, all data will be replicated.", - "default": "2016-09-01", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "order": 1, - "type": "string", - "format": "date" - }, - "end_date": { - "title": "End Date", - "description": "The date until which you'd like to replicate data for all incremental streams, in the format YYYY-MM-DD. All data generated between start_date and this date will be replicated. Not setting this option will result in always syncing the data till the current date.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "order": 2, - "type": "string", - "format": "date" - }, - "attribution_window": { - "title": "Attribution Window", - "description": "The attribution window in days.", - "default": 0, - "order": 3, - "type": "integer" - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append", "append_dedup" ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "auth_type" ], - "predicate_value": "oauth2.0", - "oauth_config_specification": { - "complete_oauth_output_specification": { - "title": "CompleteOauthOutputSpecification", - "type": "object", - "properties": { - "access_token": { - "title": "Access Token", - "path_in_connector_config": [ "credentials", "access_token" ], - "type": "string" - } - }, - "required": [ "access_token" ] - }, - "complete_oauth_server_input_specification": { - "title": "CompleteOauthServerInputSpecification", - "type": "object", - "properties": { - "app_id": { - "title": "App Id", - "type": "string" - }, - "secret": { - "title": "Secret", - "type": "string" - } - }, - "required": [ "app_id", "secret" ] - }, - "complete_oauth_server_output_specification": { - "title": "CompleteOauthServerOutputSpecification", - "type": "object", - "properties": { - "app_id": { - "title": "App Id", - "path_in_connector_config": [ "credentials", "app_id" ], - "type": "string" - }, - "secret": { - "title": "Secret", - "path_in_connector_config": [ "credentials", "secret" ], - "type": "string" - } - }, - "required": [ "app_id", "secret" ] - } - } - }, - "additionalProperties": true - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "sandbox-ads.tiktok.com", "business-api.tiktok.com" ] - } - }, { - "sourceDefinitionId": "bc617b5f-1b9e-4a2d-bebe-782fd454a771", - "name": "Timely", - "dockerRepository": "airbyte/source-timely", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/timely", - "icon": "timely.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Timely Integration Spec", - "type": "object", - "required": [ "account_id", "start_date", "bearer_token" ], - "additionalProperties": false, - "properties": { - "account_id": { - "title": "account_id", - "type": "string", - "description": "Timely account id" - }, - "start_date": { - "title": "startDate", - "type": "string", - "description": "start date", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "example": "2022-05-06" - }, - "bearer_token": { - "title": "Bearer token", - "type": "string", - "description": "Timely bearer token" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "6240848f-f795-45eb-8f5e-c7542822fc03", - "name": "TMDb", - "dockerRepository": "airbyte/source-tmdb", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/tmdb", - "icon": "tmdb.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/tmdb", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Tmdb Spec", - "type": "object", - "required": [ "api_key", "movie_id", "query", "language" ], - "additionalProperties": true, - "properties": { - "api_key": { - "title": "Unique key for establishing connection", - "type": "string", - "description": "API Key from tmdb account", - "airbyte_secret": true - }, - "movie_id": { - "title": "Movie ID for targeting movies", - "type": "string", - "description": "Target movie ID, Mandate for movie streams (Example is 550)", - "examples": [ 550, 560 ] - }, - "query": { - "title": "Query for search streams", - "type": "string", - "description": "Target movie ID, Mandate for search streams", - "examples": [ "Marvel", "DC" ] - }, - "language": { - "title": "Language for filtering", - "type": "string", - "description": "Language expressed in ISO 639-1 scheme, Mandate for required streams (Example en-US)", - "examples": [ "en-US", "en-UK" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "7d272065-c316-4c04-a433-cd4ee143f83e", - "name": "Todoist", - "dockerRepository": "airbyte/source-todoist", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/todoist", - "icon": "todoist.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/todoist", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Todoist Spec", - "type": "object", - "required": [ "token" ], - "properties": { - "token": { - "type": "string", - "description": "Your API Token. See here. The token is case sensitive.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "7e7c844f-2300-4342-b7d3-6dd7992593cd", - "name": "Toggl", - "dockerRepository": "airbyte/source-toggl", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/toggl", - "icon": "toggl.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/toggl", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Toggl Spec", - "type": "object", - "required": [ "api_token", "organization_id", "workspace_id", "start_date", "end_date" ], - "additionalProperties": true, - "properties": { - "api_token": { - "title": "API token", - "type": "string", - "description": "Your API Token. See here. The token is case sensitive.", - "airbyte_secret": true - }, - "organization_id": { - "title": "Organization ID", - "type": "integer", - "description": "Your organization id. See here." - }, - "workspace_id": { - "title": "Workspace ID", - "type": "integer", - "description": "Your workspace id. See here." - }, - "start_date": { - "title": "Start date", - "type": "string", - "description": "To retrieve time entries created after the given date (inclusive).", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "YYYY-MM-DD" ] - }, - "end_date": { - "title": "End date", - "type": "string", - "description": "To retrieve time entries created before the given date (inclusive).", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "YYYY-MM-DD" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "d42bd69f-6bf0-4d0b-9209-16231af07a92", - "name": "The Guardian API", - "dockerRepository": "airbyte/source-the-guardian-api", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/the-guardian-api", - "icon": "theguardian.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/the-guardian-api", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "The Guardian Api Spec", - "type": "object", - "required": [ "api_key", "start_date" ], - "additionalProperties": true, - "properties": { - "api_key": { - "title": "API Key", - "type": "string", - "description": "Your API Key. See here. The key is case sensitive.", - "airbyte_secret": true - }, - "start_date": { - "title": "Start Date", - "type": "string", - "description": "Use this to set the minimum date (YYYY-MM-DD) of the results. Results older than the start_date will not be shown.", - "pattern": "^([1-9][0-9]{3})\\-(0?[1-9]|1[012])\\-(0?[1-9]|[12][0-9]|3[01])$", - "examples": [ "YYYY-MM-DD" ] - }, - "query": { - "title": "Query", - "type": "string", - "description": "(Optional) The query (q) parameter filters the results to only those that include that search term. The q parameter supports AND, OR and NOT operators.", - "examples": [ "environment AND NOT water", "environment AND political", "amusement park", "political" ] - }, - "tag": { - "title": "Tag", - "type": "string", - "description": "(Optional) A tag is a piece of data that is used by The Guardian to categorise content. Use this parameter to filter results by showing only the ones matching the entered tag. See here for a list of all tags, and here for the tags endpoint documentation.", - "examples": [ "environment/recycling", "environment/plasticbags", "environment/energyefficiency" ] - }, - "section": { - "title": "Section", - "type": "string", - "description": "(Optional) Use this to filter the results by a particular section. See here for a list of all sections, and here for the sections endpoint documentation.", - "examples": [ "media", "technology", "housing-network" ] - }, - "end_date": { - "title": "End Date", - "type": "string", - "description": "(Optional) Use this to set the maximum date (YYYY-MM-DD) of the results. Results newer than the end_date will not be shown. Default is set to the current date (today) for incremental syncs.", - "pattern": "^([1-9][0-9]{3})\\-(0?[1-9]|1[012])\\-(0?[1-9]|[12][0-9]|3[01])$", - "examples": [ "YYYY-MM-DD" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "f9b6c538-ee12-42fe-8d4b-0c10f5955417", - "name": "TPLcentral", - "dockerRepository": "airbyte/source-tplcentral", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/tplcentral", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/tplcentral", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Tplcentral Spec", - "type": "object", - "required": [ "url_base", "client_id", "client_secret" ], - "additionalProperties": false, - "properties": { - "url_base": { - "title": "URL base", - "type": "string", - "format": "uri", - "default": "https://secure-wms.com/", - "pattern": "^https://" - }, - "client_id": { - "title": "Client ID", - "type": "string" - }, - "client_secret": { - "title": "Client secret", - "type": "string", - "airbyte_secret": true - }, - "user_login_id": { - "title": "User login ID", - "description": "User login ID and/or name is required", - "type": "integer" - }, - "user_login": { - "title": "User login name", - "description": "User login ID and/or name is required", - "type": "string" - }, - "tpl_key": { - "title": "3PL GUID", - "type": "string" - }, - "customer_id": { - "title": "Customer ID", - "type": "integer" - }, - "facility_id": { - "title": "Facility ID", - "type": "integer" - }, - "start_date": { - "title": "Start date", - "description": "Date and time together in RFC 3339 format, for example, 2018-11-13T20:20:39+00:00.", - "type": "string", - "format": "date-time" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "8da67652-004c-11ec-9a03-0242ac130003", - "name": "Trello", - "dockerRepository": "airbyte/source-trello", - "dockerImageTag": "0.3.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/trello", - "icon": "trello.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/trello", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Trello Spec", - "type": "object", - "required": [ "key", "token", "start_date" ], - "additionalProperties": true, - "properties": { - "key": { - "type": "string", - "title": "API key", - "description": "Trello API key. See the docs for instructions on how to generate it.", - "airbyte_secret": true, - "order": 0 - }, - "token": { - "type": "string", - "title": "API token", - "description": "Trello API token. See the docs for instructions on how to generate it.", - "airbyte_secret": true, - "order": 1 - }, - "start_date": { - "type": "string", - "title": "Start Date", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", - "examples": [ "2021-03-01T00:00:00Z" ], - "format": "date-time", - "order": 2 - }, - "board_ids": { - "type": "array", - "items": { - "type": "string", - "pattern": "^[0-9a-fA-F]{24}$" - }, - "title": "Trello Board IDs", - "description": "IDs of the boards to replicate data from. If left empty, data from all boards to which you have access will be replicated.", - "order": 3 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ ], - "oauth_config_specification": { - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "token": { - "type": "string", - "path_in_connector_config": [ "token" ] - }, - "key": { - "type": "string", - "path_in_connector_config": [ "key" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "api.trello.com" ] - } - }, { - "sourceDefinitionId": "d7e23ea6-d741-4314-9209-a33c91a2e945", - "name": "TrustPilot", - "dockerRepository": "airbyte/source-trustpilot", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/trustpilot", - "icon": "trustpilot.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Trustpilot Spec", - "type": "object", - "required": [ "credentials", "business_units", "start_date" ], - "properties": { - "credentials": { - "title": "Authorization Method", - "type": "object", - "order": 0, - "oneOf": [ { - "type": "object", - "title": "OAuth 2.0", - "required": [ "client_id", "client_secret", "refresh_token", "access_token", "token_expiry_date" ], - "properties": { - "auth_type": { - "type": "string", - "const": "oauth2.0" - }, - "client_id": { - "type": "string", - "title": "API key", - "description": "The API key of the Trustpilot API application. (represents the OAuth Client ID)", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "title": "Secret", - "description": "The Secret of the Trustpilot API application. (represents the OAuth Client Secret)", - "airbyte_secret": true - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "Access Token for making authenticated requests.", - "airbyte_secret": true - }, - "token_expiry_date": { - "type": "string", - "title": "Token expiry date time", - "description": "The date-time when the access token should be refreshed.", - "format": "date-time" - }, - "refresh_token": { - "type": "string", - "title": "Refresh token", - "description": "The key to refresh the expired access_token.", - "airbyte_secret": true - } - } - }, { - "type": "object", - "title": "API Key", - "description": "The API key authentication method gives you access to only the streams which are part of the Public API. When you want to get streams available via the Consumer API (e.g. the private reviews) you need to use authentication method OAuth 2.0.", - "required": [ "client_id" ], - "properties": { - "auth_type": { - "type": "string", - "const": "apikey" - }, - "client_id": { - "type": "string", - "title": "API key", - "description": "The API key of the Trustpilot API application.", - "airbyte_secret": true - } - } - } ] - }, - "business_units": { - "type": "array", - "items": { - "type": "string" - }, - "title": "Business Unit names", - "description": "The names of business units which shall be synchronized. Some streams e.g. configured_business_units or private_reviews use this configuration.", - "examples": [ "mydomain.com", "www.mydomain.com" ] - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "For streams with sync. method incremental the start date time to be used", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "%Y-%m-%dT%H:%M:%S" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "bd14b08f-9f43-400f-b2b6-7248b5c72561", - "name": "TVMaze Schedule", - "dockerRepository": "airbyte/source-tvmaze-schedule", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/tvmaze-schedule", - "icon": "tvmazeschedule.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/tvmaze-schedule", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "TVMaze Schedule Spec", - "type": "object", - "required": [ "start_date", "domestic_schedule_country_code" ], - "additionalProperties": true, - "properties": { - "start_date": { - "type": "string", - "description": "Start date for TV schedule retrieval. May be in the future.", - "order": 0, - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" - }, - "end_date": { - "type": "string", - "description": "End date for TV schedule retrieval. May be in the future. Optional.\n", - "order": 1, - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" - }, - "domestic_schedule_country_code": { - "type": "string", - "description": "Country code for domestic TV schedule retrieval.", - "examples": [ "US", "GB" ] - }, - "web_schedule_country_code": { - "type": "string", - "description": "ISO 3166-1 country code for web TV schedule retrieval. Leave blank for\nall countries plus global web channels (e.g. Netflix). Alternatively,\nset to 'global' for just global web channels.\n", - "examples": [ "US", "GB", "global" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "b9dc6155-672e-42ea-b10d-9f1f1fb95ab1", - "name": "Twilio", - "dockerRepository": "airbyte/source-twilio", - "dockerImageTag": "0.5.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/twilio", - "icon": "twilio.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/twilio", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Twilio Spec", - "type": "object", - "required": [ "account_sid", "auth_token", "start_date" ], - "additionalProperties": true, - "properties": { - "account_sid": { - "title": "Account ID", - "description": "Twilio account SID", - "airbyte_secret": true, - "type": "string", - "order": 1 - }, - "auth_token": { - "title": "Auth Token", - "description": "Twilio Auth Token.", - "airbyte_secret": true, - "type": "string", - "order": 2 - }, - "start_date": { - "title": "Replication Start Date", - "description": "UTC date and time in the format 2020-10-01T00:00:00Z. Any data before this date will not be replicated.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2020-10-01T00:00:00Z" ], - "type": "string", - "order": 3, - "format": "date-time" - }, - "lookback_window": { - "title": "Lookback window", - "description": "How far into the past to look for records. (in minutes)", - "examples": [ 60 ], - "default": 0, - "minimum": 0, - "maximum": 576000, - "type": "integer", - "order": 4 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "api.twilio.com", "monitor.twilio.com" ] - } - }, { - "sourceDefinitionId": "2446953b-b794-429b-a9b3-c821ba992a48", - "name": "Twilio Taskrouter", - "dockerRepository": "airbyte/source-twilio-taskrouter", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/twilio-taskrouter", - "icon": "twilio.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/twilio-taskrouter", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Twilio Taskrouter Spec", - "type": "object", - "required": [ "account_sid", "auth_token" ], - "additionalProperties": true, - "properties": { - "account_sid": { - "title": "Account SID", - "type": "string", - "description": "Twilio Account ID", - "airbyte_secret": true - }, - "auth_token": { - "type": "string", - "description": "Twilio Auth Token", - "airbyte_secret": true, - "title": "Auth Token" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "d7fd4f40-5e5a-4b8b-918f-a73077f8c131", - "name": "Twitter", - "dockerRepository": "airbyte/source-twitter", - "dockerImageTag": "0.1.2", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/twitter", - "icon": "twitter.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/twitter", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Twitter Spec", - "type": "object", - "required": [ "api_key", "query" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "title": "Access Token", - "description": "App only Bearer Token. See the docs for more information on how to obtain this token.", - "airbyte_secret": true, - "order": 0 - }, - "query": { - "type": "string", - "title": "Search Query", - "description": "Query for matching Tweets. You can learn how to build this query by reading build a query guide .", - "order": 1 - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "The start date for retrieving tweets cannot be more than 7 days in the past.", - "format": "date-time", - "order": 2 - }, - "end_date": { - "type": "string", - "title": "End Date", - "description": "The end date for retrieving tweets must be a minimum of 10 seconds prior to the request time.", - "format": "date-time", - "order": 3 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "api.twitter.com" ] - } - }, { - "sourceDefinitionId": "3c0c3cd1-b3e0-464a-9090-d3ceb5f92346", - "name": "Tyntec SMS", - "dockerRepository": "airbyte/source-tyntec-sms", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/tyntec-sms", - "icon": "tyntec.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/tyntec-sms", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Tyntec Sms Spec", - "type": "object", - "required": [ "api_key", "to", "from" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "title": "Tyntec API Key", - "description": "Your Tyntec API Key. See here", - "order": 0, - "airbyte_secret": true - }, - "to": { - "type": "string", - "title": "SMS Message Recipient Phone", - "description": "The phone number of the SMS message recipient (international).", - "order": 1 - }, - "from": { - "type": "string", - "title": "SMS Message Sender Phone", - "description": "The phone number of the SMS message sender (international).", - "order": 2 - }, - "message": { - "type": "string", - "title": "SMS Message Body", - "description": "The content of the SMS message to be sent.", - "order": 3 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "e7eff203-90bf-43e5-a240-19ea3056c474", - "name": "Typeform", - "dockerRepository": "airbyte/source-typeform", - "dockerImageTag": "0.1.12", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/typeform", - "icon": "typeform.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/typeform", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Typeform Spec", - "type": "object", - "required": [ "token", "start_date" ], - "additionalProperties": true, - "properties": { - "token": { - "type": "string", - "description": "The API Token for a Typeform account.", - "title": "API Token", - "airbyte_secret": true, - "order": 0 - }, - "start_date": { - "type": "string", - "description": "UTC date and time in the format: YYYY-MM-DDTHH:mm:ss[Z]. Any data before this date will not be replicated.", - "title": "Start Date", - "examples": [ "2020-01-01T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "order": 1, - "format": "date-time" - }, - "form_ids": { - "title": "Form IDs to replicate", - "description": "When this parameter is set, the connector will replicate data only from the input forms. Otherwise, all forms in your Typeform account will be replicated. You can find form IDs in your form URLs. For example, in the URL \"https://mysite.typeform.com/to/u6nXL7\" the form_id is u6nXL7. You can find form URLs on Share panel", - "type": "array", - "items": { - "type": "string" - }, - "uniqueItems": true, - "order": 2 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "api.typeform.com" ] - } - }, { - "sourceDefinitionId": "f77914a1-442b-4195-9355-8810a1f4ed3f", - "name": "Unleash", - "dockerRepository": "airbyte/source-unleash", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/unleash", - "icon": "unleash.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/unleash", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Unleash Source Spec", - "type": "object", - "required": [ "api_token", "api_url" ], - "additionalProperties": true, - "properties": { - "api_token": { - "title": "API Token Client", - "type": "string", - "description": "Your API Token (Server-Side SDK [Client]). See here. The token is case sensitive.", - "airbyte_secret": true, - "examples": [ "project:environment.be44368985f7fb3237c584ef86f3d6bdada42ddbd63a019d26955178", "*:environment.be44368985f7fb3237c584ef86f3d6bdada42ddbd63a019d26955178", "be44368985f7fb3237c584ef86f3d6bdada42ddbd63a019d26955178" ] - }, - "api_url": { - "title": "API URL", - "type": "string", - "description": "Your API URL. No trailing slash. ex: http://unleash.host.com/api" - }, - "project_name": { - "title": "Project Name", - "type": "string", - "description": "Use this if you want to filter the API call for only one given project (can be used in addition to the \"Feature Name Prefix\" field). See here" - }, - "nameprefix": { - "title": "Feature Name Prefix", - "type": "string", - "description": "Use this if you want to filter the API call for only one given project (can be used in addition to the \"Feature Name Prefix\" field). See here" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "c4cfaeda-c757-489a-8aba-859fb08b6970", - "name": "US Census", - "dockerRepository": "airbyte/source-us-census", - "dockerImageTag": "0.1.2", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/us-census", - "icon": "uscensus.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/us-census", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "https://api.census.gov/ Source Spec", - "type": "object", - "required": [ "api_key", "query_path" ], - "additionalProperties": false, - "properties": { - "query_params": { - "type": "string", - "description": "The query parameters portion of the GET request, without the api key", - "pattern": "^\\w+=[\\w,:*]+(&(?!key)\\w+=[\\w,:*]+)*$", - "examples": [ "get=NAME,NAICS2017_LABEL,LFO_LABEL,EMPSZES_LABEL,ESTAB,PAYANN,PAYQTR1,EMP&for=us:*&NAICS2017=72&LFO=001&EMPSZES=001", "get=MOVEDIN,GEOID1,GEOID2,MOVEDOUT,FULL1_NAME,FULL2_NAME,MOVEDNET&for=county:*" ] - }, - "query_path": { - "type": "string", - "description": "The path portion of the GET request", - "pattern": "^data(\\/[\\w\\d]+)+$", - "examples": [ "data/2019/cbp", "data/2018/acs", "data/timeseries/healthins/sahie" ] - }, - "api_key": { - "type": "string", - "description": "Your API Key. Get your key here.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "afa734e4-3571-11ec-991a-1e0031268139", - "name": "YouTube Analytics", - "dockerRepository": "airbyte/source-youtube-analytics", - "dockerImageTag": "0.1.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/youtube-analytics", - "icon": "youtube-analytics.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/youtube-analytics", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "YouTube Analytics Spec", - "type": "object", - "required": [ "credentials" ], - "additionalProperties": true, - "properties": { - "credentials": { - "title": "Authenticate via OAuth 2.0", - "type": "object", - "required": [ "client_id", "client_secret", "refresh_token" ], - "additionalProperties": true, - "properties": { - "client_id": { - "title": "Client ID", - "type": "string", - "description": "The Client ID of your developer application", - "airbyte_secret": true - }, - "client_secret": { - "title": "Client Secret", - "type": "string", - "description": "The client secret of your developer application", - "airbyte_secret": true - }, - "refresh_token": { - "title": "Refresh Token", - "type": "string", - "description": "A refresh token generated using the above client ID and secret", - "airbyte_secret": true - } - } - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ "credentials" ], - "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], - "oauthFlowOutputParameters": [ [ "refresh_token" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "*.googleapis.com" ] - } - }, { - "sourceDefinitionId": "28ce1fbd-1e15-453f-aa9f-da6c4d928e92", - "name": "Vantage", - "dockerRepository": "airbyte/source-vantage", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/vantage", - "icon": "vantage.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/vantage", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Vantage Spec", - "type": "object", - "required": [ "access_token" ], - "additionalProperties": true, - "properties": { - "access_token": { - "title": "API Access Token", - "type": "string", - "description": "Your API Access token. See here.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "7e20ce3e-d820-4327-ad7a-88f3927fd97a", - "name": "VictorOps", - "dockerRepository": "farosai/airbyte-victorops-source", - "dockerImageTag": "0.1.23", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/victorops", - "icon": "victorops.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.faros.ai", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "VictorOps Spec", - "type": "object", - "required": [ "apiId", "apiKey" ], - "additionalProperties": true, - "properties": { - "apiId": { - "type": "string", - "title": "VictorOps API ID", - "airbyte_secret": true - }, - "apiKey": { - "type": "string", - "title": "VictorOps API key", - "airbyte_secret": true - }, - "maxContentLength": { - "type": "number", - "title": "VictorOps Content Length", - "description": "VictorOps API response content length limit, try increasing if 'RequestError' is encountered.", - "default": 500000 - }, - "pageLimit": { - "type": "number", - "title": "VictorOps Page Limit", - "default": 100 - }, - "currentPhase": { - "type": "string", - "title": "VictorOps Current Phase", - "default": "triggered,acknowledged,resolved" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "42495935-95de-4f5c-ae08-8fac00f6b308", - "name": "Visma E-conomic", - "dockerRepository": "airbyte/source-visma-economic", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/visma-economic", - "icon": "visma-e-conomic.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/visma-economic", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Visma E-conomic Spec", - "type": "object", - "required": [ "app_secret_token", "agreement_grant_token" ], - "properties": { - "app_secret_token": { - "title": "App Secret Token", - "type": "string", - "description": "Identification token for app accessing data", - "airbyte_secret": true - }, - "agreement_grant_token": { - "title": "Agreement Grant Token", - "type": "string", - "description": "Identifier for the grant issued by an agreement", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "6c6d8b0c-db35-4cd1-a7de-0ca8b080f5ac", - "name": "Vitally", - "dockerRepository": "airbyte/source-vitally", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/vitally", - "icon": "vitally.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/vitally", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Vitally Spec", - "type": "object", - "required": [ "api_key", "status" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "title": "API Token", - "description": "The API Token for a Vitally account.", - "airbyte_secret": true - }, - "status": { - "type": "string", - "title": "Status", - "description": "Status of the Vitally accounts. One of the following values; active, churned, activeOrChurned.", - "enum": [ "active", "churned", "activeOrChurned" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "6fd1e833-dd6e-45ec-a727-ab917c5be892", - "name": "Xero", - "dockerRepository": "airbyte/source-xero", - "dockerImageTag": "0.2.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/xero", - "icon": "xero.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/xero", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Xero Spec", - "type": "object", - "required": [ "authentication", "tenant_id", "start_date" ], - "additionalProperties": true, - "properties": { - "authentication": { - "type": "object", - "title": "Authenticate via Xero (OAuth)", - "required": [ "client_id", "client_secret", "refresh_token", "access_token", "token_expiry_date" ], - "properties": { - "client_id": { - "type": "string", - "title": "Client ID", - "description": "Enter your Xero application's Client ID" - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "Enter your Xero application's Client Secret", - "airbyte_secret": true - }, - "refresh_token": { - "type": "string", - "title": "Refresh Token", - "description": "Enter your Xero application's refresh token", - "airbyte_secret": true - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "Enter your Xero application's access token", - "airbyte_secret": true - }, - "token_expiry_date": { - "type": "string", - "description": "The date-time when the access token should be refreshed" - } - }, - "order": 0 - }, - "tenant_id": { - "title": "Tenant ID", - "type": "string", - "description": "Enter your Xero organization's Tenant ID", - "airbyte_secret": true, - "order": 1 - }, - "start_date": { - "type": "string", - "title": "Start Date", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "description": "UTC date and time in the format YYYY-MM-DDTHH:mm:ssZ. Any data with created_at before this data will not be synced.", - "examples": [ "2022-03-01T00:00:00Z" ], - "format": "date-time", - "order": 2 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ ], - "oauth_config_specification": { - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "refresh_token": { - "type": "string", - "path_in_connector_config": [ "authentication", "refresh_token" ] - }, - "access_token": { - "type": "string", - "path_in_connector_config": [ "authentication", "access_token" ] - }, - "token_expiry_date": { - "type": "string", - "path_in_connector_config": [ "authentication", "token_expiry_date" ], - "format": "date-time" - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "authentication", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "authentication", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "api.xero.com" ] - } - }, { - "sourceDefinitionId": "80fddd16-17bd-4c0c-bf4a-80df7863fc9d", - "name": "xkcd", - "dockerRepository": "airbyte/source-xkcd", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/xkcd", - "icon": "xkcd.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/xkcd", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Xkcd Spec", - "type": "object", - "properties": { } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "5db8292c-5f5a-11ed-9b6a-0242ac120002", - "name": "Weatherstack", - "dockerRepository": "airbyte/source-weatherstack", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/weatherstack", - "icon": "weatherstack.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/weatherstack", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Weatherstack Spec", - "type": "object", - "required": [ "access_key", "query", "historical_date" ], - "properties": { - "is_paid_account": { - "order": 0, - "title": "Is Paid Account", - "description": "Toggle if you're using a Paid subscription", - "type": "boolean", - "default": false - }, - "access_key": { - "order": 1, - "type": "string", - "description": "API access key used to retrieve data from the Weatherstack API.(https://weatherstack.com/product)", - "airbyte_secret": true - }, - "query": { - "order": 2, - "type": "string", - "description": "A location to query such as city, IP, latitudeLongitude, or zipcode. Multiple locations with semicolon seperated if using a professional plan or higher. For more info- (https://weatherstack.com/documentation#query_parameter)", - "examples": [ "New York", "London", "98101" ] - }, - "historical_date": { - "order": 3, - "type": "string", - "description": "This is required for enabling the Historical date API with format- (YYYY-MM-DD). * Note, only supported by paid accounts", - "examples": [ "2015-01-21" ], - "default\"": "2000-01-01", - "pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2}" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "ef580275-d9a9-48bb-af5e-db0f5855be04", - "name": "Webflow", - "dockerRepository": "airbyte/source-webflow", - "dockerImageTag": "0.1.2", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/webflow", - "icon": "webflow.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/webflow", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Webflow Spec", - "type": "object", - "required": [ "api_key", "site_id" ], - "additionalProperties": false, - "properties": { - "site_id": { - "title": "Site id", - "type": "string", - "description": "The id of the Webflow site you are requesting data from. See https://developers.webflow.com/#sites", - "example": "a relatively long hex sequence", - "order": 0 - }, - "api_key": { - "title": "API token", - "type": "string", - "description": "The API token for authenticating to Webflow. See https://university.webflow.com/lesson/intro-to-the-webflow-api", - "example": "a very long hex sequence", - "order": 1, - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "e65f84c0-7598-458a-bfac-f770c381ff5d", - "name": "Whisky Hunter", - "dockerRepository": "airbyte/source-whisky-hunter", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/whisky-hunter", - "icon": "whiskyhunter.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/whisky-hunter", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Whisky Hunter Spec", - "type": "object", - "additionalProperties": true, - "properties": { } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "2a2552ca-9f78-4c1c-9eb7-4d0dc66d72df", - "name": "WooCommerce", - "dockerRepository": "airbyte/source-woocommerce", - "dockerImageTag": "0.2.2", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/woocommerce", - "icon": "woocommerce.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/woocommerce", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Woocommerce Spec", - "type": "object", - "required": [ "api_key", "api_secret", "shop", "start_date" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "title": "Customer Key", - "description": "Customer Key for API in WooCommerce shop", - "airbyte_secret": true, - "order": 0 - }, - "api_secret": { - "type": "string", - "title": "Customer Secret", - "description": "Customer Secret for API in WooCommerce shop", - "airbyte_secret": true, - "order": 1 - }, - "shop": { - "type": "string", - "title": "Shop Name", - "description": "The name of the store. For https://EXAMPLE.com, the shop name is 'EXAMPLE.com'.", - "order": 2 - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "The date you would like to replicate data from. Format: YYYY-MM-DD", - "examples": [ "2021-01-01" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "format": "date", - "order": 3 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "${domain}" ] - } - }, { - "sourceDefinitionId": "ef3c99c6-9e90-43c8-9517-926cfd978517", - "name": "Workable", - "dockerRepository": "airbyte/source-workable", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/workable", - "icon": "workable.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/workable", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Workable API Spec", - "type": "object", - "required": [ "api_key", "account_subdomain", "start_date" ], - "additionalProperties": true, - "properties": { - "api_key": { - "title": "API Key", - "type": "string", - "description": "Your Workable API Key. See here.", - "airbyte_secret": true - }, - "account_subdomain": { - "title": "Account Subdomain", - "type": "string", - "description": "Your Workable account subdomain, e.g. https://your_account_subdomain.workable.com." - }, - "start_date": { - "title": "Start Date", - "type": "string", - "description": "Get data that was created since this date (format: YYYYMMDDTHHMMSSZ).", - "pattern": "^[0-9]{8}T[0-9]{6}Z$", - "examples": [ "20150708T115616Z", "20221115T225616Z" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "9c13f986-a13b-4988-b808-4705badf71c2", - "name": "Wrike", - "dockerRepository": "airbyte/source-wrike", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/wrike", - "icon": "wrike.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Wrike Spec", - "type": "object", - "required": [ "access_token", "wrike_instance" ], - "properties": { - "access_token": { - "type": "string", - "title": "Permanent Access Token", - "description": "Permanent access token. You can find documentation on how to acquire a permanent access token here", - "airbyte_secret": true, - "order": 0 - }, - "wrike_instance": { - "type": "string", - "title": "Wrike Instance (hostname)", - "description": "Wrike's instance such as `app-us2.wrike.com`", - "default": "app-us2.wrike.com", - "order": 1 - }, - "start_date": { - "type": "string", - "title": "Start date for comments", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Only comments after this date will be replicated.", - "examples": [ "2017-01-25T00:00:00Z" ], - "order": 2 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "b8c917bc-7d1b-4828-995f-6726820266d0", - "name": "Zapier Supported Storage", - "dockerRepository": "airbyte/source-zapier-supported-storage", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-supported-storage", - "icon": "zapiersupportedstorage.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zapier-supported-storage", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Zapier Supported Storage Spec", - "type": "object", - "required": [ "secret" ], - "additionalProperties": true, - "properties": { - "secret": { - "title": "Secret Key", - "type": "string", - "description": "Secret key supplied by zapier", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "40d24d0f-b8f9-4fe0-9e6c-b06c0f3f45e4", - "name": "Zendesk Chat", - "dockerRepository": "airbyte/source-zendesk-chat", - "dockerImageTag": "0.1.14", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-chat", - "icon": "zendesk-chat.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-chat", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Zendesk Chat Spec", - "type": "object", - "required": [ "start_date" ], - "additionalProperties": true, - "properties": { - "start_date": { - "type": "string", - "title": "Start Date", - "description": "The date from which you'd like to replicate data for Zendesk Chat API, in the format YYYY-MM-DDT00:00:00Z.", - "examples": [ "2021-02-01T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "format": "date-time" - }, - "subdomain": { - "type": "string", - "title": "Subdomain", - "description": "Required if you access Zendesk Chat from a Zendesk Support subdomain.", - "default": "" - }, - "credentials": { - "title": "Authorization Method", - "type": "object", - "oneOf": [ { - "type": "object", - "title": "OAuth2.0", - "required": [ "credentials" ], - "properties": { - "credentials": { - "type": "string", - "const": "oauth2.0", - "order": 0 - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "The Client ID of your OAuth application", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "The Client Secret of your OAuth application.", - "airbyte_secret": true - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "Access Token for making authenticated requests.", - "airbyte_secret": true - }, - "refresh_token": { - "type": "string", - "title": "Refresh Token", - "description": "Refresh Token to obtain new Access Token, when it's expired.", - "airbyte_secret": true - } - } - }, { - "type": "object", - "title": "Access Token", - "required": [ "credentials", "access_token" ], - "properties": { - "credentials": { - "type": "string", - "const": "access_token", - "order": 0 - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "The Access Token to make authenticated requests.", - "airbyte_secret": true - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "credentials" ], - "predicate_value": "oauth2.0", - "oauth_config_specification": { - "oauth_user_input_from_connector_config_specification": { - "type": "object", - "properties": { - "subdomain": { - "type": "string", - "path_in_connector_config": [ "subdomain" ] - } - } - }, - "complete_oauth_output_specification": { - "type": "object", - "properties": { - "access_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "access_token" ] - }, - "refresh_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "refresh_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "zopim.com" ] - } - }, { - "sourceDefinitionId": "982eaa4c-bba1-4cce-a971-06a41f700b8c", - "name": "Zendesk Sell", - "dockerRepository": "airbyte/source-zendesk-sell", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-sell", - "icon": "zendesk.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-sell", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Source Zendesk Sell Spec", - "type": "object", - "required": [ "api_token" ], - "properties": { - "api_token": { - "title": "API token", - "type": "string", - "description": "The API token for authenticating to Zendesk Sell", - "examples": [ "f23yhd630otl94y85a8bf384958473pto95847fd006da49382716or937ruw059" ], - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "325e0640-e7b3-4e24-b823-3361008f603f", - "name": "Zendesk Sunshine", - "dockerRepository": "airbyte/source-zendesk-sunshine", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-sunshine", - "icon": "zendesk-sunshine.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk_sunshine", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Zendesk Sunshine Spec", - "type": "object", - "required": [ "start_date", "subdomain" ], - "additionalProperties": true, - "properties": { - "subdomain": { - "title": "Subdomain", - "type": "string", - "description": "The subdomain for your Zendesk Account." - }, - "start_date": { - "title": "Start Date", - "type": "string", - "description": "The date from which you'd like to replicate data for Zendesk Sunshine API, in the format YYYY-MM-DDT00:00:00Z.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2021-01-01T00:00:00Z" ] - }, - "credentials": { - "title": "Authorization Method", - "type": "object", - "oneOf": [ { - "type": "object", - "title": "OAuth2.0", - "required": [ "auth_method", "client_id", "client_secret", "access_token" ], - "properties": { - "auth_method": { - "type": "string", - "const": "oauth2.0", - "enum": [ "oauth2.0" ], - "default": "oauth2.0", - "order": 0 - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "The Client ID of your OAuth application.", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "The Client Secret of your OAuth application.", - "airbyte_secret": true - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "Long-term access Token for making authenticated requests.", - "airbyte_secret": true - } - } - }, { - "type": "object", - "title": "API Token", - "required": [ "auth_method", "api_token", "email" ], - "properties": { - "auth_method": { - "type": "string", - "const": "api_token", - "enum": [ "api_token" ], - "default": "api_token", - "order": 1 - }, - "api_token": { - "type": "string", - "title": "API Token", - "description": "API Token. See the docs for information on how to generate this key.", - "airbyte_secret": true - }, - "email": { - "type": "string", - "title": "Email", - "description": "The user email for your Zendesk account" - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "auth_method" ], - "predicate_value": "oauth2.0", - "oauth_config_specification": { - "oauth_user_input_from_connector_config_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "subdomain": { - "type": "string", - "path_in_connector_config": [ "subdomain" ] - } - } - }, - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "access_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "access_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "79c1aa37-dae3-42ae-b333-d1c105477715", - "name": "Zendesk Support", - "dockerRepository": "airbyte/source-zendesk-support", - "dockerImageTag": "0.2.27", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-support", - "icon": "zendesk-support.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-support", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Source Zendesk Support Spec", - "type": "object", - "required": [ "start_date", "subdomain" ], - "additionalProperties": true, - "properties": { - "start_date": { - "type": "string", - "title": "Start Date", - "description": "The date from which you'd like to replicate data for Zendesk Support API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", - "examples": [ "2020-10-15T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "format": "date-time" - }, - "subdomain": { - "type": "string", - "title": "Subdomain", - "description": "This is your Zendesk subdomain that can be found in your account URL. For example, in https://{MY_SUBDOMAIN}.zendesk.com/, where MY_SUBDOMAIN is the value of your subdomain." - }, - "credentials": { - "title": "Authentication", - "type": "object", - "description": "Zendesk service provides two authentication methods. Choose between: `OAuth2.0` or `API token`.", - "oneOf": [ { - "title": "OAuth2.0", - "type": "object", - "required": [ "access_token" ], - "additionalProperties": true, - "properties": { - "credentials": { - "type": "string", - "const": "oauth2.0", - "order": 0 - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "The value of the API token generated. See the docs for more information.", - "airbyte_secret": true - } - } - }, { - "title": "API Token", - "type": "object", - "required": [ "email", "api_token" ], - "additionalProperties": true, - "properties": { - "credentials": { - "type": "string", - "const": "api_token", - "order": 0 - }, - "email": { - "title": "Email", - "type": "string", - "description": "The user email for your Zendesk account." - }, - "api_token": { - "title": "API Token", - "type": "string", - "description": "The value of the API token generated. See the docs for more information.", - "airbyte_secret": true - } - } - } ] - }, - "ignore_pagination": { - "type": "boolean", - "default": false, - "description": "Makes each stream read a single page of data.", - "title": "Should the connector read the second and further pages of data.", - "airbyte_hidden": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "credentials" ], - "predicate_value": "oauth2.0", - "oauth_config_specification": { - "oauth_user_input_from_connector_config_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "subdomain": { - "type": "string", - "path_in_connector_config": [ "subdomain" ] - } - } - }, - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "access_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "access_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "${subdomain}.zendesk.com", "zendesk.com" ] - }, - "maxSecondsBetweenMessages": 10800 - }, { - "sourceDefinitionId": "c8630570-086d-4a40-99ae-ea5b18673071", - "name": "Zendesk Talk", - "dockerRepository": "airbyte/source-zendesk-talk", - "dockerImageTag": "0.1.7", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-talk", - "icon": "zendesk-talk.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-talk", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Source Zendesk Talk Spec", - "type": "object", - "required": [ "start_date", "subdomain" ], - "properties": { - "subdomain": { - "type": "string", - "title": "Subdomain", - "order": 0, - "description": "This is your Zendesk subdomain that can be found in your account URL. For example, in https://{MY_SUBDOMAIN}.zendesk.com/, where MY_SUBDOMAIN is the value of your subdomain." - }, - "credentials": { - "title": "Authentication", - "type": "object", - "order": 1, - "description": "Zendesk service provides two authentication methods. Choose between: `OAuth2.0` or `API token`.", - "oneOf": [ { - "title": "API Token", - "type": "object", - "required": [ "email", "api_token" ], - "additionalProperties": true, - "properties": { - "auth_type": { - "type": "string", - "const": "api_token" - }, - "email": { - "title": "Email", - "type": "string", - "description": "The user email for your Zendesk account." - }, - "api_token": { - "title": "API Token", - "type": "string", - "description": "The value of the API token generated. See the docs for more information.", - "airbyte_secret": true - } - } - }, { - "title": "OAuth2.0", - "type": "object", - "required": [ "access_token" ], - "additionalProperties": true, - "properties": { - "auth_type": { - "type": "string", - "const": "oauth2.0", - "order": 0 - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "The value of the API token generated. See the docs for more information.", - "airbyte_secret": true - } - } - } ] - }, - "start_date": { - "type": "string", - "title": "Start Date", - "order": 2, - "description": "The date from which you'd like to replicate data for Zendesk Talk API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", - "examples": [ "2020-10-15T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "format": "date-time" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "auth_type" ], - "predicate_value": "oauth2.0", - "oauth_config_specification": { - "oauth_user_input_from_connector_config_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "subdomain": { - "type": "string", - "path_in_connector_config": [ "subdomain" ] - } - } - }, - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "access_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "access_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "${subdomain}.zendesk.com", "zendesk.com" ] - } - }, { - "sourceDefinitionId": "8baba53d-2fe3-4e33-bc85-210d0eb62884", - "name": "Zenefits", - "dockerRepository": "airbyte/source-zenefits", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zenefits", - "icon": "zenefits.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Zenefits Integration Spec", - "type": "object", - "required": [ "token" ], - "additionalProperties": false, - "properties": { - "token": { - "title": "token", - "type": "string", - "description": "Use Sync with Zenefits button on the link given on the readme file, and get the token to access the api" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "f1e4c7f6-db5c-4035-981f-d35ab4998794", - "name": "Zenloop", - "dockerRepository": "airbyte/source-zenloop", - "dockerImageTag": "0.1.6", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zenloop", - "icon": "zenloop.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zenloop", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Zenloop Spec", - "type": "object", - "required": [ "api_token" ], - "properties": { - "api_token": { - "type": "string", - "description": "Zenloop API Token. You can get the API token in settings page here ", - "airbyte_secret": true - }, - "date_from": { - "type": "string", - "description": "Zenloop date_from. Format: 2021-10-24T03:30:30Z or 2021-10-24. Leave empty if only data from current data should be synced", - "examples": [ "2021-10-24T03:30:30Z" ] - }, - "survey_id": { - "type": "string", - "description": "Zenloop Survey ID. Can be found here. Leave empty to pull answers from all surveys", - "airbyte_secret": true - }, - "survey_group_id": { - "type": "string", - "description": "Zenloop Survey Group ID. Can be found by pulling All Survey Groups via SurveyGroups stream. Leave empty to pull answers from all survey groups", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "api.zenloop.com" ] - } - }, { - "sourceDefinitionId": "cdaf146a-9b75-49fd-9dd2-9d64a0bb4781", - "name": "Sentry", - "dockerRepository": "airbyte/source-sentry", - "dockerImageTag": "0.2.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/sentry", - "icon": "sentry.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/sentry", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Sentry Spec", - "type": "object", - "required": [ "auth_token", "organization", "project" ], - "additionalProperties": true, - "properties": { - "auth_token": { - "type": "string", - "title": "Authentication Tokens", - "description": "Log into Sentry and then create authentication tokens.For self-hosted, you can find or create authentication tokens by visiting \"{instance_url_prefix}/settings/account/api/auth-tokens/\"", - "airbyte_secret": true - }, - "hostname": { - "type": "string", - "title": "Host Name", - "description": "Host name of Sentry API server.For self-hosted, specify your host name here. Otherwise, leave it empty.", - "default": "sentry.io" - }, - "organization": { - "type": "string", - "title": "Organization", - "description": "The slug of the organization the groups belong to." - }, - "project": { - "type": "string", - "title": "Project", - "description": "The name (slug) of the Project you want to sync." - }, - "discover_fields": { - "type": "array", - "item": "string", - "title": "Discover Event Fields", - "description": "Fields to retrieve when fetching discover events" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "*" ] - }, - "maxSecondsBetweenMessages": 64800 - }, { - "sourceDefinitionId": "3dc3037c-5ce8-4661-adc2-f7a9e3c5ece5", - "name": "Zuora", - "dockerRepository": "airbyte/source-zuora", - "dockerImageTag": "0.1.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zuora", - "icon": "zuora.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zuora", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Zuora Connector Configuration", - "type": "object", - "required": [ "start_date", "tenant_endpoint", "data_query", "client_id", "client_secret" ], - "properties": { - "start_date": { - "type": "string", - "title": "Start Date", - "description": "Start Date in format: YYYY-MM-DD", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" - }, - "window_in_days": { - "type": "string", - "title": "Query Window (in days)", - "description": "The amount of days for each data-chunk begining from start_date. Bigger the value - faster the fetch. (0.1 - as for couple of hours, 1 - as for a Day; 364 - as for a Year).", - "examples": [ "0.5", "1", "30", "60", "90", "120", "200", "364" ], - "pattern": "^(0|[1-9]\\d*)(\\.\\d+)?$", - "default": "90" - }, - "tenant_endpoint": { - "title": "Tenant Endpoint Location", - "type": "string", - "description": "Please choose the right endpoint where your Tenant is located. More info by this Link", - "enum": [ "US Production", "US Cloud Production", "US API Sandbox", "US Cloud API Sandbox", "US Central Sandbox", "US Performance Test", "EU Production", "EU API Sandbox", "EU Central Sandbox" ] - }, - "data_query": { - "title": "Data Query Type", - "type": "string", - "description": "Choose between `Live`, or `Unlimited` - the optimized, replicated database at 12 hours freshness for high volume extraction Link", - "enum": [ "Live", "Unlimited" ], - "default": "Live" - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "Your OAuth user Client ID", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "Your OAuth user Client Secret", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "cd06e646-31bf-4dc8-af48-cbc6530fcad3", - "name": "Kustomer", - "dockerRepository": "airbyte/source-kustomer-singer", - "dockerImageTag": "0.1.2", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/kustomer", - "icon": "kustomer.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/kustomer", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Source Kustomer Singer Spec", - "type": "object", - "required": [ "api_token", "start_date" ], - "additionalProperties": true, - "properties": { - "api_token": { - "title": "API Token", - "type": "string", - "description": "Kustomer API Token. See the docs on how to obtain this", - "airbyte_secret": true - }, - "start_date": { - "title": "Start Date", - "type": "string", - "description": "The date from which you'd like to replicate the data", - "examples": [ "2019-01-01T00:00:00Z" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "4942d392-c7b5-4271-91f9-3b4f4e51eb3e", - "name": "ZohoCRM", - "dockerRepository": "airbyte/source-zoho-crm", - "dockerImageTag": "0.1.2", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zoho-crm", - "icon": "zohocrm.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zoho-crm", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Zoho Crm Configuration", - "type": "object", - "required": [ "client_id", "client_secret", "refresh_token", "environment", "dc_region", "edition" ], - "additionalProperties": true, - "properties": { - "client_id": { - "type": "string", - "title": "Client ID", - "description": "OAuth2.0 Client ID", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "OAuth2.0 Client Secret", - "airbyte_secret": true - }, - "refresh_token": { - "type": "string", - "title": "Refresh Token", - "description": "OAuth2.0 Refresh Token", - "airbyte_secret": true - }, - "dc_region": { - "title": "Data Center Location", - "type": "string", - "description": "Please choose the region of your Data Center location. More info by this Link", - "enum": [ "US", "AU", "EU", "IN", "CN", "JP" ] - }, - "environment": { - "title": "Environment", - "type": "string", - "description": "Please choose the environment", - "enum": [ "Production", "Developer", "Sandbox" ] - }, - "start_datetime": { - "title": "Start Date", - "type": [ "string", "null" ], - "examples": [ "2000-01-01", "2000-01-01 13:00", "2000-01-01 13:00:00", "2000-01-01T13:00+00:00", "2000-01-01T13:00:00-07:00" ], - "description": "ISO 8601, for instance: `YYYY-MM-DD`, `YYYY-MM-DD HH:MM:SS+HH:MM`", - "format": "date-time" - }, - "edition": { - "title": "Zoho CRM Edition", - "type": "string", - "description": "Choose your Edition of Zoho CRM to determine API Concurrency Limits", - "enum": [ "Free", "Standard", "Professional", "Enterprise", "Ultimate" ], - "default": "Free" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "a827c52e-791c-4135-a245-e233c5255199", - "name": "SFTP", - "dockerRepository": "airbyte/source-sftp", - "dockerImageTag": "0.1.2", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/sftp", - "icon": "sftp.svg", - "sourceType": "file", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/source/sftp", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "SFTP Source Spec", - "type": "object", - "required": [ "user", "host", "port" ], - "additionalProperties": true, - "properties": { - "user": { - "title": "User Name", - "description": "The server user", - "type": "string", - "order": 0 - }, - "host": { - "title": "Host Address", - "description": "The server host address", - "type": "string", - "examples": [ "www.host.com", "192.0.2.1" ], - "order": 1 - }, - "port": { - "title": "Port", - "description": "The server port", - "type": "integer", - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "credentials": { - "type": "object", - "title": "Authentication", - "description": "The server authentication method", - "order": 3, - "oneOf": [ { - "title": "Password Authentication", - "required": [ "auth_method", "auth_user_password" ], - "properties": { - "auth_method": { - "description": "Connect through password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "auth_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 1 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "auth_method", "auth_ssh_key" ], - "properties": { - "auth_method": { - "description": "Connect through ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "auth_ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 1 - } - } - } ] - }, - "file_types": { - "title": "File types", - "description": "Coma separated file types. Currently only 'csv' and 'json' types are supported.", - "type": "string", - "default": "csv,json", - "order": 4, - "examples": [ "csv,json", "csv" ] - }, - "folder_path": { - "title": "Folder Path", - "description": "The directory to search files for sync", - "type": "string", - "default": "", - "examples": [ "/logs/2022" ], - "order": 5 - }, - "file_pattern": { - "title": "File Pattern", - "description": "The regular expression to specify files for sync in a chosen Folder Path", - "type": "string", - "default": "", - "examples": [ "log-([0-9]{4})([0-9]{2})([0-9]{2}) - This will filter files which `log-yearmmdd`" ], - "order": 6 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "31e3242f-dee7-4cdc-a4b8-8e06c5458517", - "name": "SFTP Bulk", - "dockerRepository": "airbyte/source-sftp-bulk", - "dockerImageTag": "0.1.2", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/sftp-bulk", - "icon": "sftp.svg", - "sourceType": "file", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/source/ftp", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "FTP Source Spec", - "type": "object", - "required": [ "username", "host", "port", "stream_name", "start_date", "folder_path" ], - "additionalProperties": true, - "properties": { - "username": { - "title": "User Name", - "description": "The server user", - "type": "string", - "order": 0 - }, - "password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 1 - }, - "private_key": { - "title": "Private key", - "description": "The private key", - "type": "string", - "multiline": true, - "order": 2 - }, - "host": { - "title": "Host Address", - "description": "The server host address", - "type": "string", - "examples": [ "www.host.com", "192.0.2.1" ], - "order": 3 - }, - "port": { - "title": "Port", - "description": "The server port", - "type": "integer", - "default": 22, - "examples": [ "22" ], - "order": 4 - }, - "stream_name": { - "title": "Stream name", - "description": "The name of the stream or table you want to create", - "type": "string", - "examples": [ "ftp_contacts" ], - "order": 5 - }, - "file_type": { - "title": "File type", - "description": "The file type you want to sync. Currently only 'csv' and 'json' files are supported.", - "type": "string", - "default": "csv", - "enum": [ "csv", "json" ], - "order": 6, - "examples": [ "csv", "json" ] - }, - "separator": { - "title": "CSV Separator (Optional)", - "description": "The separator used in the CSV files. Define None if you want to use the Sniffer functionality", - "type": "string", - "default": ",", - "examples": [ "," ], - "order": 7 - }, - "folder_path": { - "title": "Folder Path (Optional)", - "description": "The directory to search files for sync", - "type": "string", - "default": "", - "examples": [ "/logs/2022" ], - "order": 8 - }, - "file_pattern": { - "title": "File Pattern (Optional)", - "description": "The regular expression to specify files for sync in a chosen Folder Path", - "type": "string", - "default": "", - "examples": [ "log-([0-9]{4})([0-9]{2})([0-9]{2}) - This will filter files which `log-yearmmdd`" ], - "order": 9 - }, - "file_most_recent": { - "title": "Most recent file (Optional)", - "description": "Sync only the most recent file for the configured folder path and file pattern", - "type": "boolean", - "default": false, - "order": 10 - }, - "start_date": { - "type": "string", - "title": "Start Date", - "format": "date-time", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2017-01-25T00:00:00Z" ], - "description": "The date from which you'd like to replicate data for all incremental streams, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", - "order": 11 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "6f2ac653-8623-43c4-8950-19218c7caf3d", - "name": "Firebolt", - "dockerRepository": "airbyte/source-firebolt", - "dockerImageTag": "0.2.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/firebolt", - "icon": "firebolt.svg", - "sourceType": "database", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/firebolt", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Firebolt Spec", - "type": "object", - "required": [ "username", "password", "database" ], - "additionalProperties": true, - "properties": { - "username": { - "type": "string", - "title": "Username", - "description": "Firebolt email address you use to login.", - "examples": [ "username@email.com" ] - }, - "password": { - "type": "string", - "title": "Password", - "description": "Firebolt password.", - "airbyte_secret": true - }, - "account": { - "type": "string", - "title": "Account", - "description": "Firebolt account to login." - }, - "host": { - "type": "string", - "title": "Host", - "description": "The host name of your Firebolt database.", - "examples": [ "api.app.firebolt.io" ] - }, - "database": { - "type": "string", - "title": "Database", - "description": "The database to connect to." - }, - "engine": { - "type": "string", - "title": "Engine", - "description": "Engine name or url to connect to." - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "7cf88806-25f5-4e1a-b422-b2fa9e1b0090", - "name": "Elasticsearch", - "dockerRepository": "airbyte/source-elasticsearch", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/elasticsearch", - "icon": "elasticsearch.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/source/elasticsearch", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Elasticsearch Connection Configuration", - "type": "object", - "required": [ "endpoint" ], - "additionalProperties": true, - "properties": { - "endpoint": { - "title": "Server Endpoint", - "type": "string", - "description": "The full url of the Elasticsearch server" - }, - "authenticationMethod": { - "title": "Authentication Method", - "type": "object", - "description": "The type of authentication to be used", - "oneOf": [ { - "title": "None", - "additionalProperties": true, - "description": "No authentication will be used", - "required": [ "method" ], - "properties": { - "method": { - "type": "string", - "const": "none" - } - } - }, { - "title": "Api Key/Secret", - "additionalProperties": true, - "description": "Use a api key and secret combination to authenticate", - "required": [ "method", "apiKeyId", "apiKeySecret" ], - "properties": { - "method": { - "type": "string", - "const": "secret" - }, - "apiKeyId": { - "title": "API Key ID", - "description": "The Key ID to used when accessing an enterprise Elasticsearch instance.", - "type": "string" - }, - "apiKeySecret": { - "title": "API Key Secret", - "description": "The secret associated with the API Key ID.", - "type": "string", - "airbyte_secret": true - } - } - }, { - "title": "Username/Password", - "additionalProperties": true, - "description": "Basic auth header with a username and password", - "required": [ "method", "username", "password" ], - "properties": { - "method": { - "type": "string", - "const": "basic" - }, - "username": { - "title": "Username", - "description": "Basic auth username to access a secure Elasticsearch server", - "type": "string" - }, - "password": { - "title": "Password", - "description": "Basic auth password to access a secure Elasticsearch server", - "type": "string", - "airbyte_secret": true - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "03a53b13-794a-4d6b-8544-3b36ed8f3ce4", - "name": "Waiteraid", - "dockerRepository": "airbyte/source-waiteraid", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/waiteraid", - "icon": "waiteraid.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Waiteraid Spec", - "type": "object", - "required": [ "start_date", "auth_hash", "restid" ], - "additionalProperties": true, - "properties": { - "start_date": { - "title": "Start Date", - "type": "string", - "description": "Start getting data from that date.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "YYYY-MM-DD" ] - }, - "auth_hash": { - "title": "Authentication Hash", - "type": "string", - "description": "Your WaiterAid API key, obtained from API request with Username and Password", - "airbyte_secret": true - }, - "restid": { - "title": "Restaurant ID", - "type": "string", - "description": "Your WaiterAid restaurant id from API request to getRestaurants", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "87c58f70-6f7a-4f70-aba5-bab1a458f5ba", - "name": "Wikipedia Pageviews", - "dockerRepository": "airbyte/source-wikipedia-pageviews", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/wikipedia-pageviews", - "icon": "wikipediapageviews.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Wikipedia Pageviews Spec", - "type": "object", - "required": [ "project", "access", "agent", "article", "start", "end", "country" ], - "additionalProperties": true, - "properties": { - "project": { - "type": "string", - "title": "Project", - "description": "If you want to filter by project, use the domain of any Wikimedia project.", - "examples": [ "en.wikipedia.org", "www.mediawiki.org", "commons.wikimedia.org" ] - }, - "access": { - "type": "string", - "title": "Access", - "description": "If you want to filter by access method, use one of desktop, mobile-app or mobile-web. If you are interested in pageviews regardless of access method, use all-access.", - "examples": [ "all-access", "desktop", "mobile-app", "mobile-web" ] - }, - "agent": { - "type": "string", - "title": "Agent", - "description": "If you want to filter by agent type, use one of user, automated or spider. If you are interested in pageviews regardless of agent type, use all-agents.", - "examples": [ "all-agents", "user", "spider", "automated" ] - }, - "article": { - "type": "string", - "title": "Article", - "description": "The title of any article in the specified project. Any spaces should be replaced with underscores. It also should be URI-encoded, so that non-URI-safe characters like %, / or ? are accepted.", - "examples": [ "Are_You_the_One%3F" ] - }, - "start": { - "type": "string", - "title": "Start", - "description": "The date of the first day to include, in YYYYMMDD or YYYYMMDDHH format." - }, - "end": { - "type": "string", - "title": "End", - "description": "The date of the last day to include, in YYYYMMDD or YYYYMMDDHH format." - }, - "country": { - "type": "string", - "title": "Country", - "description": "The ISO 3166-1 alpha-2 code of a country for which to retrieve top articles.", - "examples": [ "FR", "IN" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "05b0bce2-4ec4-4534-bb1a-5d0127bd91b7", - "name": "WorkRamp", - "dockerRepository": "airbyte/source-workramp", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/workramp", - "icon": "workramp.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/workramp", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Workramp Spec", - "type": "object", - "required": [ "api_key", "academy_id" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "title": "API Token", - "description": "The API Token for Workramp", - "airbyte_secret": true - }, - "academy_id": { - "type": "string", - "title": "Academy ID", - "description": "The id of the Academy" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "7865dce4-2211-4f6a-88e5-9d0fe161afe7", - "name": "Yandex Metrica", - "dockerRepository": "airbyte/source-yandex-metrica", - "dockerImageTag": "1.0.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/yandex-metrica", - "icon": "yandexmetrica.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/yandex-metrica", - "connectionSpecification": { - "$schema": "https://json-schema.org/draft-07/schema#", - "title": "Yandex Metrica Spec", - "type": "object", - "required": [ "auth_token", "counter_id", "start_date" ], - "additionalProperties": true, - "properties": { - "auth_token": { - "type": "string", - "title": "Authentication Token", - "description": "Your Yandex Metrica API access token", - "airbyte_secret": true, - "order": 0 - }, - "counter_id": { - "type": "string", - "title": "Counter ID", - "description": "Counter ID", - "pattern": "^[0-9]+$", - "order": 1 - }, - "start_date": { - "title": "Start Date", - "type": "string", - "description": "Starting point for your data replication, in format of \"YYYY-MM-DD\".", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "format": "date", - "examples": [ "2022-01-01" ], - "order": 2 - }, - "end_date": { - "title": "End Date", - "type": "string", - "description": "Starting point for your data replication, in format of \"YYYY-MM-DD\". If not provided will sync till most recent date.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "format": "date", - "examples": [ "2022-01-01" ], - "order": 3 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "api-metrica.yandex.net" ] - } - }, { - "sourceDefinitionId": "", - "name": "Yotpo", - "dockerRepository": "airbyte/source-yotpo", - "dockerImageTag": "1.0.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/yotpo", - "icon": "yotpo.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/yotpo", - "connectionSpecification": { - "$schema": "https://json-schema.org/draft-07/schema#", - "title": "Yotpo Spec", - "type": "object", - "required": [ "access_token", "app_key", "start_date", "email" ], - "additionalProperties": true, - "properties": { - "access_token": { - "title": "Access Token", - "type": "string", - "description": "Access token recieved as a result of API call to https://api.yotpo.com/oauth/token (Ref- https://apidocs.yotpo.com/reference/yotpo-authentication)", - "airbyte_secret": true - }, - "app_key": { - "title": "App Key", - "type": "string", - "description": "App key found at settings (Ref- https://settings.yotpo.com/#/general_settings)" - }, - "start_date": { - "title": "Date-From Filter", - "type": "string", - "description": "Date time filter for incremental filter, Specify which date to extract from.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}Z$", - "examples": [ - "2022-03-01T00:00:00.000Z" - ], - "format": "date-time" - }, - "email": { - "title": "Registered email address", - "type": "string", - "description": "Email address registered with yotpo.", - "default": "example@gmail.com" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "allowedHosts": { - "hosts": [ "api.yotpo.com" ] - } - }, { - "sourceDefinitionId": "9c74c2d7-531a-4ebf-b6d8-6181f805ecdc", - "name": "Younium", - "dockerRepository": "airbyte/source-younium", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/younium", - "icon": "younium.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/younium", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Younium Spec", - "type": "object", - "required": [ "username", "password", "legal_entity" ], - "properties": { - "username": { - "title": "Username", - "type": "string", - "description": "Username for Younium account" - }, - "password": { - "title": "Password", - "type": "string", - "description": "Account password for younium account API key", - "airbyte_secret": true - }, - "legal_entity": { - "title": "Legal Entity", - "type": "string", - "description": "Legal Entity that data should be pulled from" - }, - "playground": { - "title": "Playground environment", - "type": "boolean", - "description": "Property defining if connector is used against playground or production environment", - "default": false - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "cbfd9856-1322-44fb-bcf1-0b39b7a8e92e", - "name": "Zoom", - "dockerRepository": "airbyte/source-zoom", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.io/integrations/sources/zoom", - "icon": "zoom.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zoom", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Zoom Spec", - "type": "object", - "required": [ "jwt_token" ], - "additionalProperties": true, - "properties": { - "jwt_token": { - "type": "string", - "description": "JWT Token", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "68b9c98e-0747-4c84-b05b-d30b47686725", - "name": "Braze", - "dockerRepository": "airbyte/source-braze", - "dockerImageTag": "0.1.3", - "documentationUrl": "https://docs.airbyte.io/integrations/sources/braze", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/braze", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Braze Spec", - "type": "object", - "additionalProperties": true, - "required": [ "url", "api_key", "start_date" ], - "properties": { - "url": { - "type": "string", - "title": "URL", - "description": "Braze REST API endpoint" - }, - "api_key": { - "type": "string", - "title": "Rest API Key", - "airbyte_secret": true, - "description": "Braze REST API key" - }, - "start_date": { - "type": "string", - "format": "date", - "title": "Start date", - "description": "Rows after this date will be synced" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - } ] -} +{ + "destinations": [ { + "destinationDefinitionId": "b4c5d105-31fd-4817-96b6-cb923bfc04cb", + "name": "Azure Blob Storage", + "dockerRepository": "airbyte/destination-azure-blob-storage", + "dockerImageTag": "0.2.0", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/azureblobstorage", + "icon": "azureblobstorage.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/azureblobstorage", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "AzureBlobStorage Destination Spec", + "type": "object", + "required": [ "azure_blob_storage_account_name", "azure_blob_storage_account_key", "format" ], + "additionalProperties": false, + "properties": { + "azure_blob_storage_endpoint_domain_name": { + "title": "Endpoint Domain Name", + "type": "string", + "default": "blob.core.windows.net", + "description": "This is Azure Blob Storage endpoint domain name. Leave default value (or leave it empty if run container from command line) to use Microsoft native from example.", + "examples": [ "blob.core.windows.net" ] + }, + "azure_blob_storage_container_name": { + "title": "Azure blob storage container (Bucket) Name", + "type": "string", + "description": "The name of the Azure blob storage container. If not exists - will be created automatically. May be empty, then will be created automatically airbytecontainer+timestamp", + "examples": [ "airbytetescontainername" ] + }, + "azure_blob_storage_account_name": { + "title": "Azure Blob Storage account name", + "type": "string", + "description": "The account's name of the Azure Blob Storage.", + "examples": [ "airbyte5storage" ] + }, + "azure_blob_storage_account_key": { + "title": "Azure Blob Storage account key", + "description": "The Azure blob storage account key.", + "airbyte_secret": true, + "type": "string", + "examples": [ "Z8ZkZpteggFx394vm+PJHnGTvdRncaYS+JhLKdj789YNmD+iyGTnG+PV+POiuYNhBg/ACS+LKjd%4FG3FHGN12Nd==" ] + }, + "azure_blob_storage_output_buffer_size": { + "title": "Azure Blob Storage output buffer size (Megabytes)", + "type": "integer", + "description": "The amount of megabytes to buffer for the output stream to Azure. This will impact memory footprint on workers, but may need adjustment for performance and appropriate block size in Azure.", + "minimum": 1, + "maximum": 2047, + "default": 5, + "examples": [ 5 ] + }, + "azure_blob_storage_spill_size": { + "title": "Azure Blob Storage file spill size", + "type": "integer", + "description": "The amount of megabytes after which the connector should spill the records in a new blob object. Make sure to configure size greater than individual records. Enter 0 if not applicable", + "default": 500, + "examples": [ 500 ] + }, + "format": { + "title": "Output Format", + "type": "object", + "description": "Output data format", + "oneOf": [ { + "title": "CSV: Comma-Separated Values", + "required": [ "format_type", "flattening" ], + "properties": { + "format_type": { + "type": "string", + "const": "CSV" + }, + "flattening": { + "type": "string", + "title": "Normalization (Flattening)", + "description": "Whether the input json data should be normalized (flattened) in the output CSV. Please refer to docs for details.", + "default": "No flattening", + "enum": [ "No flattening", "Root level flattening" ] + } + } + }, { + "title": "JSON Lines: newline-delimited JSON", + "required": [ "format_type" ], + "properties": { + "format_type": { + "type": "string", + "const": "JSONL" + } + } + } ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "overwrite", "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "resourceRequirements": { + "jobSpecific": [ { + "jobType": "sync", + "resourceRequirements": { + "memory_request": "1Gi", + "memory_limit": "1Gi" + } + } ] + } + }, { + "destinationDefinitionId": "0eeee7fb-518f-4045-bacc-9619e31c43ea", + "name": "Amazon SQS", + "dockerRepository": "airbyte/destination-amazon-sqs", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/amazon-sqs", + "icon": "awssqs.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/amazon-sqs", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Destination Amazon Sqs", + "type": "object", + "required": [ "queue_url", "region" ], + "additionalProperties": false, + "properties": { + "queue_url": { + "title": "Queue URL", + "description": "URL of the SQS Queue", + "type": "string", + "examples": [ "https://sqs.eu-west-1.amazonaws.com/1234567890/my-example-queue" ], + "order": 0 + }, + "region": { + "title": "AWS Region", + "description": "AWS Region of the SQS Queue", + "type": "string", + "enum": [ "us-east-1", "us-east-2", "us-west-1", "us-west-2", "af-south-1", "ap-east-1", "ap-south-1", "ap-northeast-1", "ap-northeast-2", "ap-northeast-3", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "cn-north-1", "cn-northwest-1", "eu-central-1", "eu-north-1", "eu-south-1", "eu-west-1", "eu-west-2", "eu-west-3", "sa-east-1", "me-south-1", "us-gov-east-1", "us-gov-west-1" ], + "order": 1 + }, + "message_delay": { + "title": "Message Delay", + "description": "Modify the Message Delay of the individual message from the Queue's default (seconds).", + "type": "integer", + "examples": [ "15" ], + "order": 2 + }, + "access_key": { + "title": "AWS IAM Access Key ID", + "description": "The Access Key ID of the AWS IAM Role to use for sending messages", + "type": "string", + "examples": [ "xxxxxHRNxxx3TBxxxxxx" ], + "order": 3, + "airbyte_secret": true + }, + "secret_key": { + "title": "AWS IAM Secret Key", + "description": "The Secret Key of the AWS IAM Role to use for sending messages", + "type": "string", + "examples": [ "hu+qE5exxxxT6o/ZrKsxxxxxxBhxxXLexxxxxVKz" ], + "order": 4, + "airbyte_secret": true + }, + "message_body_key": { + "title": "Message Body Key", + "description": "Use this property to extract the contents of the named key in the input record to use as the SQS message body. If not set, the entire content of the input record data is used as the message body.", + "type": "string", + "examples": [ "myDataPath" ], + "order": 5 + }, + "message_group_id": { + "title": "Message Group Id", + "description": "The tag that specifies that a message belongs to a specific message group. This parameter applies only to, and is REQUIRED by, FIFO queues.", + "type": "string", + "examples": [ "my-fifo-group" ], + "order": 6 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "05c161bf-ca73-4d48-b524-d392be417002", + "name": "Apache Doris", + "dockerRepository": "airbyte/destination-doris", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/doris", + "icon": "apachedoris.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/destinations/doris", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Doris Destination Spec", + "type": "object", + "required": [ "host", "httpport", "queryport", "username", "database" ], + "properties": { + "host": { + "title": "Host", + "description": "Hostname of the database", + "type": "string", + "order": 0 + }, + "httpport": { + "title": "HttpPort", + "description": "Http Port of the database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 8030, + "examples": [ "8030" ], + "order": 1 + }, + "queryport": { + "title": "QueryPort", + "description": "Query(SQL) Port of the database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 9030, + "examples": [ "9030" ], + "order": 2 + }, + "database": { + "title": "DataBase Name", + "description": "Name of the database.", + "type": "string", + "order": 3 + }, + "username": { + "title": "UserName", + "description": "Username to use to access the database.", + "type": "string", + "order": 4 + }, + "password": { + "title": "Password", + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 5 + } + } + }, + "supportsIncremental": false, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "append", "overwrite" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "df65a8f3-9908-451b-aa9b-445462803560", + "name": "Apache Iceberg", + "dockerRepository": "airbyte/destination-iceberg", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/iceberg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/iceberg", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Iceberg Destination Spec", + "type": "object", + "required": [ "catalog_config", "storage_config", "format_config" ], + "properties": { + "catalog_config": { + "title": "Iceberg catalog config", + "type": "object", + "description": "Catalog config of Iceberg.", + "oneOf": [ { + "title": "HiveCatalog: Use Apache Hive MetaStore", + "required": [ "catalog_type", "hive_thrift_uri" ], + "properties": { + "catalog_type": { + "title": "Catalog Type", + "type": "string", + "default": "Hive", + "enum": [ "Hive" ], + "order": 0 + }, + "hive_thrift_uri": { + "title": "Hive Metastore thrift uri", + "type": "string", + "description": "Hive MetaStore thrift server uri of iceberg catalog.", + "examples": [ "host:port" ], + "order": 1 + }, + "database": { + "title": "Default database", + "description": "The default database tables are written to if the source does not specify a namespace. The usual value for this field is \"default\".", + "type": "string", + "default": "default", + "examples": [ "default" ], + "order": 2 + } + } + }, { + "title": "HadoopCatalog: Use hierarchical file systems as same as storage config", + "description": "A Hadoop catalog doesn’t need to connect to a Hive MetaStore, but can only be used with HDFS or similar file systems that support atomic rename.", + "required": [ "catalog_type" ], + "properties": { + "catalog_type": { + "title": "Catalog Type", + "type": "string", + "default": "Hadoop", + "enum": [ "Hadoop" ], + "order": 0 + }, + "database": { + "title": "Default database", + "description": "The default database tables are written to if the source does not specify a namespace. The usual value for this field is \"default\".", + "type": "string", + "default": "default", + "examples": [ "default" ], + "order": 1 + } + } + }, { + "title": "JdbcCatalog: Use relational database", + "description": "Using a table in a relational database to manage Iceberg tables through JDBC. Read more here. Supporting: PostgreSQL", + "required": [ "catalog_type" ], + "properties": { + "catalog_type": { + "title": "Catalog Type", + "type": "string", + "default": "Jdbc", + "enum": [ "Jdbc" ], + "order": 0 + }, + "database": { + "title": "Default schema", + "description": "The default schema tables are written to if the source does not specify a namespace. The usual value for this field is \"public\".", + "type": "string", + "default": "public", + "examples": [ "public" ], + "order": 1 + }, + "jdbc_url": { + "title": "Jdbc url", + "type": "string", + "examples": [ "jdbc:postgresql://{host}:{port}/{database}" ], + "order": 2 + }, + "username": { + "title": "User", + "description": "Username to use to access the database.", + "type": "string", + "order": 3 + }, + "password": { + "title": "Password", + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 4 + }, + "ssl": { + "title": "SSL Connection", + "description": "Encrypt data using SSL. When activating SSL, please select one of the connection modes.", + "type": "boolean", + "default": false, + "order": 5 + }, + "catalog_schema": { + "title": "schema for Iceberg catalog", + "description": "Iceberg catalog metadata tables are written to catalog schema. The usual value for this field is \"public\".", + "type": "string", + "default": "public", + "examples": [ "public" ], + "order": 6 + } + } + } ], + "order": 0 + }, + "storage_config": { + "title": "Storage config", + "type": "object", + "description": "Storage config of Iceberg.", + "oneOf": [ { + "title": "S3", + "type": "object", + "description": "S3 object storage", + "required": [ "storage_type", "access_key_id", "secret_access_key", "s3_warehouse_uri" ], + "properties": { + "storage_type": { + "title": "Storage Type", + "type": "string", + "default": "S3", + "enum": [ "S3" ], + "order": 0 + }, + "access_key_id": { + "type": "string", + "description": "The access key ID to access the S3 bucket. Airbyte requires Read and Write permissions to the given bucket. Read more here.", + "title": "S3 Key ID", + "airbyte_secret": true, + "examples": [ "A012345678910EXAMPLE" ], + "order": 0 + }, + "secret_access_key": { + "type": "string", + "description": "The corresponding secret to the access key ID. Read more here", + "title": "S3 Access Key", + "airbyte_secret": true, + "examples": [ "a012345678910ABCDEFGH/AbCdEfGhEXAMPLEKEY" ], + "order": 1 + }, + "s3_warehouse_uri": { + "title": "S3 Warehouse Uri for Iceberg", + "type": "string", + "description": "The Warehouse Uri for Iceberg", + "examples": [ "s3a://my-bucket/path/to/warehouse", "s3://my-bucket/path/to/warehouse" ], + "order": 2 + }, + "s3_bucket_region": { + "title": "S3 Bucket Region", + "type": "string", + "default": "", + "description": "The region of the S3 bucket. See here for all region codes.", + "enum": [ "", "us-east-1", "us-east-2", "us-west-1", "us-west-2", "af-south-1", "ap-east-1", "ap-south-1", "ap-northeast-1", "ap-northeast-2", "ap-northeast-3", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "cn-north-1", "cn-northwest-1", "eu-central-1", "eu-north-1", "eu-south-1", "eu-west-1", "eu-west-2", "eu-west-3", "sa-east-1", "me-south-1", "us-gov-east-1", "us-gov-west-1" ], + "order": 3 + }, + "s3_endpoint": { + "title": "Endpoint", + "type": "string", + "default": "", + "description": "Your S3 endpoint url. Read more here", + "examples": [ "http://localhost:9000", "localhost:9000" ], + "order": 4 + }, + "s3_path_style_access": { + "type": "boolean", + "description": "Use path style access", + "examples": [ true, false ], + "default": true, + "order": 5 + } + } + } ], + "order": 1 + }, + "format_config": { + "title": "File format", + "type": "object", + "required": [ "format" ], + "description": "File format of Iceberg storage.", + "properties": { + "format": { + "title": "File storage format", + "type": "string", + "default": "Parquet", + "description": "", + "enum": [ "Parquet", "Avro" ], + "order": 0 + }, + "flush_batch_size": { + "title": "Data file flushing batch size", + "description": "Iceberg data file flush batch size. Incoming rows write to cache firstly; When cache size reaches this 'batch size', flush into real Iceberg data file.", + "type": "integer", + "default": 10000, + "order": 1 + }, + "auto_compact": { + "title": "Auto compact data files", + "description": "Auto compact data files when stream close", + "type": "boolean", + "default": false, + "order": 2 + }, + "compact_target_file_size_in_mb": { + "title": "Target size of compacted data file", + "description": "Specify the target size of Iceberg data file when performing a compaction action. ", + "type": "integer", + "default": 100, + "order": 3 + } + }, + "order": 2 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "overwrite", "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "99878c90-0fbd-46d3-9d98-ffde879d17fc", + "name": "AWS Datalake", + "dockerRepository": "airbyte/destination-aws-datalake", + "dockerImageTag": "0.1.3", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/aws-datalake", + "icon": "awsdatalake.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/aws-datalake", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "AWS Datalake Destination Spec", + "type": "object", + "required": [ "credentials", "region", "bucket_name", "lakeformation_database_name" ], + "additionalProperties": false, + "properties": { + "aws_account_id": { + "type": "string", + "title": "AWS Account Id", + "description": "target aws account id", + "examples": [ "111111111111" ], + "order": 1 + }, + "credentials": { + "title": "Authentication mode", + "description": "Choose How to Authenticate to AWS.", + "type": "object", + "oneOf": [ { + "type": "object", + "title": "IAM Role", + "required": [ "role_arn", "credentials_title" ], + "properties": { + "credentials_title": { + "type": "string", + "title": "Credentials Title", + "description": "Name of the credentials", + "const": "IAM Role", + "enum": [ "IAM Role" ], + "default": "IAM Role", + "order": 0 + }, + "role_arn": { + "title": "Target Role Arn", + "type": "string", + "description": "Will assume this role to write data to s3", + "airbyte_secret": false + } + } + }, { + "type": "object", + "title": "IAM User", + "required": [ "credentials_title", "aws_access_key_id", "aws_secret_access_key" ], + "properties": { + "credentials_title": { + "type": "string", + "title": "Credentials Title", + "description": "Name of the credentials", + "const": "IAM User", + "enum": [ "IAM User" ], + "default": "IAM User", + "order": 0 + }, + "aws_access_key_id": { + "title": "Access Key Id", + "type": "string", + "description": "AWS User Access Key Id", + "airbyte_secret": true + }, + "aws_secret_access_key": { + "title": "Secret Access Key", + "type": "string", + "description": "Secret Access Key", + "airbyte_secret": true + } + } + } ], + "order": 2 + }, + "region": { + "title": "S3 Bucket Region", + "type": "string", + "default": "", + "description": "The region of the S3 bucket. See here for all region codes.", + "enum": [ "", "us-east-1", "us-east-2", "us-west-1", "us-west-2", "af-south-1", "ap-east-1", "ap-south-1", "ap-northeast-1", "ap-northeast-2", "ap-northeast-3", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "cn-north-1", "cn-northwest-1", "eu-central-1", "eu-north-1", "eu-south-1", "eu-west-1", "eu-west-2", "eu-west-3", "sa-east-1", "me-south-1", "us-gov-east-1", "us-gov-west-1" ], + "order": 3 + }, + "bucket_name": { + "title": "S3 Bucket Name", + "type": "string", + "description": "The name of the S3 bucket. Read more here.", + "order": 4 + }, + "bucket_prefix": { + "title": "Target S3 Bucket Prefix", + "type": "string", + "description": "S3 prefix", + "order": 5 + }, + "lakeformation_database_name": { + "title": "Lake Formation Database Name", + "type": "string", + "description": "The default database this destination will use to create tables in per stream. Can be changed per connection by customizing the namespace.", + "order": 6 + }, + "lakeformation_database_default_tag_key": { + "title": "Lake Formation Database Tag Key", + "description": "Add a default tag key to databases created by this destination", + "examples": [ "pii_level" ], + "type": "string", + "order": 7 + }, + "lakeformation_database_default_tag_values": { + "title": "Lake Formation Database Tag Values", + "description": "Add default values for the `Tag Key` to databases created by this destination. Comma separate for multiple values.", + "examples": [ "private,public" ], + "type": "string", + "order": 8 + }, + "lakeformation_governed_tables": { + "title": "Lake Formation Governed Tables", + "description": "Whether to create tables as LF governed tables.", + "type": "boolean", + "default": false, + "order": 9 + }, + "format": { + "title": "Output Format *", + "type": "object", + "description": "Format of the data output.", + "oneOf": [ { + "title": "JSON Lines: Newline-delimited JSON", + "required": [ "format_type" ], + "properties": { + "format_type": { + "title": "Format Type *", + "type": "string", + "enum": [ "JSONL" ], + "default": "JSONL" + }, + "compression_codec": { + "title": "Compression Codec (Optional)", + "description": "The compression algorithm used to compress data.", + "type": "string", + "enum": [ "UNCOMPRESSED", "GZIP" ], + "default": "UNCOMPRESSED" + } + } + }, { + "title": "Parquet: Columnar Storage", + "required": [ "format_type" ], + "properties": { + "format_type": { + "title": "Format Type *", + "type": "string", + "enum": [ "Parquet" ], + "default": "Parquet" + }, + "compression_codec": { + "title": "Compression Codec (Optional)", + "description": "The compression algorithm used to compress data.", + "type": "string", + "enum": [ "UNCOMPRESSED", "SNAPPY", "GZIP", "ZSTD" ], + "default": "SNAPPY" + } + } + } ], + "order": 10 + }, + "partitioning": { + "title": "Choose how to partition data", + "description": "Partition data by cursor fields when a cursor field is a date", + "type": "string", + "enum": [ "NO PARTITIONING", "DATE", "YEAR", "MONTH", "DAY", "YEAR/MONTH", "YEAR/MONTH/DAY" ], + "default": "NO PARTITIONING", + "order": 11 + }, + "glue_catalog_float_as_decimal": { + "title": "Glue Catalog: Float as Decimal", + "description": "Cast float/double as decimal(38,18). This can help achieve higher accuracy and represent numbers correctly as received from the source.", + "type": "boolean", + "default": false, + "order": 12 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "overwrite", "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "22f6c74f-5699-40ff-833c-4a879ea40133", + "name": "BigQuery", + "dockerRepository": "airbyte/destination-bigquery", + "dockerImageTag": "1.3.0", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/bigquery", + "icon": "bigquery.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/bigquery", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "BigQuery Destination Spec", + "type": "object", + "required": [ "project_id", "dataset_location", "dataset_id" ], + "additionalProperties": true, + "properties": { + "project_id": { + "type": "string", + "description": "The GCP project ID for the project containing the target BigQuery dataset. Read more here.", + "title": "Project ID", + "order": 0 + }, + "dataset_location": { + "type": "string", + "description": "The location of the dataset. Warning: Changes made after creation will not be applied. Read more here.", + "title": "Dataset Location", + "order": 1, + "enum": [ "US", "EU", "asia-east1", "asia-east2", "asia-northeast1", "asia-northeast2", "asia-northeast3", "asia-south1", "asia-south2", "asia-southeast1", "asia-southeast2", "australia-southeast1", "australia-southeast2", "europe-central1", "europe-central2", "europe-north1", "europe-southwest1", "europe-west1", "europe-west2", "europe-west3", "europe-west4", "europe-west6", "europe-west7", "europe-west8", "europe-west9", "me-west1", "northamerica-northeast1", "northamerica-northeast2", "southamerica-east1", "southamerica-west1", "us-central1", "us-east1", "us-east2", "us-east3", "us-east4", "us-east5", "us-west1", "us-west2", "us-west3", "us-west4" ] + }, + "dataset_id": { + "type": "string", + "description": "The default BigQuery Dataset ID that tables are replicated to if the source does not specify a namespace. Read more here.", + "title": "Default Dataset ID", + "order": 2 + }, + "loading_method": { + "type": "object", + "title": "Loading Method", + "description": "Loading method used to send select the way data will be uploaded to BigQuery.
    Standard Inserts - Direct uploading using SQL INSERT statements. This method is extremely inefficient and provided only for quick testing. In almost all cases, you should use staging.
    GCS Staging - Writes large batches of records to a file, uploads the file to GCS, then uses COPY INTO table to upload the file. Recommended for most workloads for better speed and scalability. Read more about GCS Staging here.", + "order": 3, + "oneOf": [ { + "title": "Standard Inserts", + "required": [ "method" ], + "properties": { + "method": { + "type": "string", + "const": "Standard" + } + } + }, { + "title": "GCS Staging", + "required": [ "method", "gcs_bucket_name", "gcs_bucket_path", "credential" ], + "properties": { + "method": { + "type": "string", + "const": "GCS Staging", + "order": 0 + }, + "credential": { + "title": "Credential", + "description": "An HMAC key is a type of credential and can be associated with a service account or a user account in Cloud Storage. Read more here.", + "type": "object", + "order": 1, + "oneOf": [ { + "title": "HMAC key", + "required": [ "credential_type", "hmac_key_access_id", "hmac_key_secret" ], + "properties": { + "credential_type": { + "type": "string", + "const": "HMAC_KEY", + "order": 0 + }, + "hmac_key_access_id": { + "type": "string", + "description": "HMAC key access ID. When linked to a service account, this ID is 61 characters long; when linked to a user account, it is 24 characters long.", + "title": "HMAC Key Access ID", + "airbyte_secret": true, + "examples": [ "1234567890abcdefghij1234" ], + "order": 1 + }, + "hmac_key_secret": { + "type": "string", + "description": "The corresponding secret for the access ID. It is a 40-character base-64 encoded string.", + "title": "HMAC Key Secret", + "airbyte_secret": true, + "examples": [ "1234567890abcdefghij1234567890ABCDEFGHIJ" ], + "order": 2 + } + } + } ] + }, + "gcs_bucket_name": { + "title": "GCS Bucket Name", + "type": "string", + "description": "The name of the GCS bucket. Read more here.", + "examples": [ "airbyte_sync" ], + "order": 2 + }, + "gcs_bucket_path": { + "title": "GCS Bucket Path", + "description": "Directory under the GCS bucket where data will be written.", + "type": "string", + "examples": [ "data_sync/test" ], + "order": 3 + }, + "keep_files_in_gcs-bucket": { + "type": "string", + "description": "This upload method is supposed to temporary store records in GCS bucket. By this select you can chose if these records should be removed from GCS when migration has finished. The default \"Delete all tmp files from GCS\" value is used if not set explicitly.", + "title": "GCS Tmp Files Afterward Processing", + "default": "Delete all tmp files from GCS", + "enum": [ "Delete all tmp files from GCS", "Keep all tmp files in GCS" ], + "order": 4 + }, + "file_buffer_count": { + "title": "File Buffer Count", + "type": "integer", + "minimum": 10, + "maximum": 50, + "default": 10, + "description": "Number of file buffers allocated for writing data. Increasing this number is beneficial for connections using Change Data Capture (CDC) and up to the number of streams within a connection. Increasing the number of file buffers past the maximum number of streams has deteriorating effects", + "examples": [ "10" ], + "order": 5 + } + } + } ] + }, + "credentials_json": { + "type": "string", + "description": "The contents of the JSON service account key. Check out the docs if you need help generating this key. Default credentials will be used if this field is left empty.", + "title": "Service Account Key JSON (Required for cloud, optional for open-source)", + "airbyte_secret": true, + "order": 4, + "always_show": true + }, + "transformation_priority": { + "type": "string", + "description": "Interactive run type means that the query is executed as soon as possible, and these queries count towards concurrent rate limit and daily limit. Read more about interactive run type here. Batch queries are queued and started as soon as idle resources are available in the BigQuery shared resource pool, which usually occurs within a few minutes. Batch queries don’t count towards your concurrent rate limit. Read more about batch queries here. The default \"interactive\" value is used if not set explicitly.", + "title": "Transformation Query Run Type", + "default": "interactive", + "enum": [ "interactive", "batch" ], + "order": 5 + }, + "big_query_client_buffer_size_mb": { + "title": "Google BigQuery Client Chunk Size", + "description": "Google BigQuery client's chunk (buffer) size (MIN=1, MAX = 15) for each table. The size that will be written by a single RPC. Written data will be buffered and only flushed upon reaching this size or closing the channel. The default 15MB value is used if not set explicitly. Read more here.", + "type": "integer", + "minimum": 1, + "maximum": 15, + "default": 15, + "examples": [ "15" ], + "order": 6 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": true, + "supportsDBT": true, + "supported_destination_sync_modes": [ "overwrite", "append", "append_dedup" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "resourceRequirements": { + "jobSpecific": [ { + "jobType": "sync", + "resourceRequirements": { + "memory_request": "1Gi", + "memory_limit": "1Gi" + } + } ] + }, + "normalizationConfig": { + "normalizationRepository": "airbyte/normalization", + "normalizationTag": "0.4.0", + "normalizationIntegrationType": "bigquery" + }, + "supportsDbt": true + }, { + "destinationDefinitionId": "079d5540-f236-4294-ba7c-ade8fd918496", + "name": "BigQuery (denormalized typed struct)", + "dockerRepository": "airbyte/destination-bigquery-denormalized", + "dockerImageTag": "1.3.0", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/bigquery", + "icon": "bigquery.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/bigquery", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "BigQuery Denormalized Typed Struct Destination Spec", + "type": "object", + "required": [ "project_id", "dataset_id" ], + "additionalProperties": true, + "properties": { + "project_id": { + "type": "string", + "description": "The GCP project ID for the project containing the target BigQuery dataset. Read more here.", + "title": "Project ID", + "order": 0 + }, + "dataset_id": { + "type": "string", + "description": "The default BigQuery Dataset ID that tables are replicated to if the source does not specify a namespace. Read more here.", + "title": "Default Dataset ID", + "order": 1 + }, + "loading_method": { + "type": "object", + "title": "Loading Method", + "description": "Loading method used to send select the way data will be uploaded to BigQuery.
    Standard Inserts - Direct uploading using SQL INSERT statements. This method is extremely inefficient and provided only for quick testing. In almost all cases, you should use staging.
    GCS Staging - Writes large batches of records to a file, uploads the file to GCS, then uses COPY INTO table to upload the file. Recommended for most workloads for better speed and scalability. Read more about GCS Staging here.", + "order": 2, + "oneOf": [ { + "title": "Standard Inserts", + "required": [ "method" ], + "properties": { + "method": { + "type": "string", + "const": "Standard" + } + } + }, { + "title": "GCS Staging", + "type": "object", + "required": [ "method", "gcs_bucket_name", "gcs_bucket_path", "credential" ], + "properties": { + "method": { + "type": "string", + "const": "GCS Staging", + "order": 0 + }, + "credential": { + "title": "Credential", + "description": "An HMAC key is a type of credential and can be associated with a service account or a user account in Cloud Storage. Read more here.", + "type": "object", + "order": 1, + "oneOf": [ { + "title": "HMAC key", + "order": 0, + "required": [ "credential_type", "hmac_key_access_id", "hmac_key_secret" ], + "properties": { + "credential_type": { + "type": "string", + "const": "HMAC_KEY", + "order": 0 + }, + "hmac_key_access_id": { + "type": "string", + "description": "HMAC key access ID. When linked to a service account, this ID is 61 characters long; when linked to a user account, it is 24 characters long.", + "title": "HMAC Key Access ID", + "airbyte_secret": true, + "examples": [ "1234567890abcdefghij1234" ], + "order": 1 + }, + "hmac_key_secret": { + "type": "string", + "description": "The corresponding secret for the access ID. It is a 40-character base-64 encoded string.", + "title": "HMAC Key Secret", + "airbyte_secret": true, + "examples": [ "1234567890abcdefghij1234567890ABCDEFGHIJ" ], + "order": 2 + } + } + } ] + }, + "gcs_bucket_name": { + "title": "GCS Bucket Name", + "type": "string", + "description": "The name of the GCS bucket. Read more here.", + "examples": [ "airbyte_sync" ], + "order": 2 + }, + "gcs_bucket_path": { + "title": "GCS Bucket Path", + "description": "Directory under the GCS bucket where data will be written. Read more here.", + "type": "string", + "examples": [ "data_sync/test" ], + "order": 3 + }, + "keep_files_in_gcs-bucket": { + "type": "string", + "description": "This upload method is supposed to temporary store records in GCS bucket. By this select you can chose if these records should be removed from GCS when migration has finished. The default \"Delete all tmp files from GCS\" value is used if not set explicitly.", + "title": "GCS Tmp Files Afterward Processing", + "default": "Delete all tmp files from GCS", + "enum": [ "Delete all tmp files from GCS", "Keep all tmp files in GCS" ], + "order": 4 + }, + "file_buffer_count": { + "title": "File Buffer Count", + "type": "integer", + "minimum": 10, + "maximum": 50, + "default": 10, + "description": "Number of file buffers allocated for writing data. Increasing this number is beneficial for connections using Change Data Capture (CDC) and up to the number of streams within a connection. Increasing the number of file buffers past the maximum number of streams has deteriorating effects", + "examples": [ "10" ], + "order": 5 + } + } + } ] + }, + "credentials_json": { + "type": "string", + "description": "The contents of the JSON service account key. Check out the docs if you need help generating this key. Default credentials will be used if this field is left empty.", + "title": "Service Account Key JSON (Required for cloud, optional for open-source)", + "airbyte_secret": true, + "order": 3, + "always_show": true + }, + "dataset_location": { + "type": "string", + "description": "The location of the dataset. Warning: Changes made after creation will not be applied. The default \"US\" value is used if not set explicitly. Read more here.", + "title": "Dataset Location", + "default": "US", + "order": 4, + "enum": [ "US", "EU", "asia-east1", "asia-east2", "asia-northeast1", "asia-northeast2", "asia-northeast3", "asia-south1", "asia-south2", "asia-southeast1", "asia-southeast2", "australia-southeast1", "australia-southeast2", "europe-central1", "europe-central2", "europe-north1", "europe-southwest1", "europe-west1", "europe-west2", "europe-west3", "europe-west4", "europe-west6", "europe-west7", "europe-west8", "europe-west9", "me-west1", "northamerica-northeast1", "northamerica-northeast2", "southamerica-east1", "southamerica-west1", "us-central1", "us-east1", "us-east2", "us-east3", "us-east4", "us-east5", "us-west1", "us-west2", "us-west3", "us-west4" ] + }, + "big_query_client_buffer_size_mb": { + "title": "Google BigQuery Client Chunk Size", + "description": "Google BigQuery client's chunk (buffer) size (MIN=1, MAX = 15) for each table. The size that will be written by a single RPC. Written data will be buffered and only flushed upon reaching this size or closing the channel. The default 15MB value is used if not set explicitly. Read more here.", + "type": "integer", + "minimum": 1, + "maximum": 15, + "default": 15, + "examples": [ "15" ], + "order": 5 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "overwrite", "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "resourceRequirements": { + "jobSpecific": [ { + "jobType": "sync", + "resourceRequirements": { + "memory_request": "1Gi", + "memory_limit": "1Gi" + } + } ] + } + }, { + "destinationDefinitionId": "707456df-6f4f-4ced-b5c6-03f73bcad1c5", + "name": "Cassandra", + "dockerRepository": "airbyte/destination-cassandra", + "dockerImageTag": "0.1.4", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/cassandra", + "icon": "cassandra.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/cassandra", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Cassandra Destination Spec", + "type": "object", + "required": [ "keyspace", "username", "password", "address", "port" ], + "additionalProperties": true, + "properties": { + "keyspace": { + "title": "Keyspace", + "description": "Default Cassandra keyspace to create data in.", + "type": "string", + "order": 0 + }, + "username": { + "title": "Username", + "description": "Username to use to access Cassandra.", + "type": "string", + "order": 1 + }, + "password": { + "title": "Password", + "description": "Password associated with Cassandra.", + "type": "string", + "airbyte_secret": true, + "order": 2 + }, + "address": { + "title": "Address", + "description": "Address to connect to.", + "type": "string", + "examples": [ "localhost,127.0.0.1" ], + "order": 3 + }, + "port": { + "title": "Port", + "description": "Port of Cassandra.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 9042, + "order": 4 + }, + "datacenter": { + "title": "Datacenter", + "description": "Datacenter of the cassandra cluster.", + "type": "string", + "default": "datacenter1", + "order": 5 + }, + "replication": { + "title": "Replication factor", + "type": "integer", + "description": "Indicates to how many nodes the data should be replicated to.", + "default": 1, + "order": 6 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "overwrite", "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "e088acb6-9780-4568-880c-54c2dd7f431b", + "name": "Cumul.io", + "dockerRepository": "airbyte/destination-cumulio", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/cumulio", + "icon": "cumulio.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/cumulio", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Destination Cumulio", + "type": "object", + "required": [ "api_host", "api_key", "api_token" ], + "additionalProperties": true, + "properties": { + "api_host": { + "title": "Cumul.io API Host URL", + "description": "URL of the Cumul.io API (e.g. 'https://api.cumul.io', 'https://api.us.cumul.io', or VPC-specific API url). Defaults to 'https://api.cumul.io'.", + "default": "https://api.cumul.io", + "type": "string", + "order": 0 + }, + "api_key": { + "title": "Cumul.io API Key", + "description": "An API key generated in Cumul.io's platform (can be generated here: https://app.cumul.io/start/profile/integration).", + "type": "string", + "airbyte_secret": true, + "order": 1 + }, + "api_token": { + "title": "Cumul.io API Token", + "description": "The corresponding API token generated in Cumul.io's platform (can be generated here: https://app.cumul.io/start/profile/integration).", + "type": "string", + "airbyte_secret": true, + "order": 2 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "overwrite", "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "81740ce8-d764-4ea7-94df-16bb41de36ae", + "name": "Chargify (Keen)", + "dockerRepository": "airbyte/destination-keen", + "dockerImageTag": "0.2.4", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/keen", + "icon": "chargify.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/keen", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Keen Spec", + "type": "object", + "required": [ "project_id", "api_key" ], + "additionalProperties": false, + "properties": { + "project_id": { + "description": "To get Keen Project ID, navigate to the Access tab from the left-hand, side panel and check the Project Details section.", + "title": "Project ID", + "type": "string", + "examples": [ "58b4acc22ba938934e888322e" ] + }, + "api_key": { + "title": "API Key", + "description": "To get Keen Master API Key, navigate to the Access tab from the left-hand, side panel and check the Project Details section.", + "type": "string", + "examples": [ "ABCDEFGHIJKLMNOPRSTUWXYZ" ], + "airbyte_secret": true + }, + "infer_timestamp": { + "title": "Infer Timestamp", + "description": "Allow connector to guess keen.timestamp value based on the streamed data.", + "type": "boolean", + "default": true + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "overwrite", "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "ce0d828e-1dc4-496c-b122-2da42e637e48", + "name": "Clickhouse", + "dockerRepository": "airbyte/destination-clickhouse", + "dockerImageTag": "0.2.3", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/clickhouse", + "icon": "clickhouse.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/clickhouse", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "ClickHouse Destination Spec", + "type": "object", + "required": [ "host", "port", "database", "username" ], + "additionalProperties": true, + "properties": { + "host": { + "title": "Host", + "description": "Hostname of the database.", + "type": "string", + "order": 0 + }, + "port": { + "title": "Port", + "description": "HTTP port of the database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 8123, + "examples": [ "8123" ], + "order": 1 + }, + "database": { + "title": "DB Name", + "description": "Name of the database.", + "type": "string", + "order": 2 + }, + "username": { + "title": "User", + "description": "Username to use to access the database.", + "type": "string", + "order": 3 + }, + "password": { + "title": "Password", + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 4 + }, + "jdbc_url_params": { + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", + "title": "JDBC URL Params", + "type": "string", + "order": 5 + }, + "ssl": { + "title": "SSL Connection", + "description": "Encrypt data using SSL.", + "type": "boolean", + "default": false, + "order": 6 + }, + "tunnel_method": { + "type": "object", + "title": "SSH Tunnel Method", + "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", + "oneOf": [ { + "title": "No Tunnel", + "required": [ "tunnel_method" ], + "properties": { + "tunnel_method": { + "description": "No ssh tunnel needed to connect to database", + "type": "string", + "const": "NO_TUNNEL", + "order": 0 + } + } + }, { + "title": "SSH Key Authentication", + "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [ "22" ], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host.", + "type": "string", + "order": 3 + }, + "ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + }, { + "title": "Password Authentication", + "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [ "22" ], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host", + "type": "string", + "order": 3 + }, + "tunnel_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 4 + } + } + } ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": true, + "supportsDBT": false, + "supported_destination_sync_modes": [ "overwrite", "append", "append_dedup" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "normalizationConfig": { + "normalizationRepository": "airbyte/normalization-clickhouse", + "normalizationTag": "0.4.0", + "normalizationIntegrationType": "clickhouse" + }, + "supportsDbt": false + }, { + "destinationDefinitionId": "0fb07be9-7c3b-4336-850d-5efc006152ee", + "name": "Cloudflare R2", + "dockerRepository": "airbyte/destination-r2", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/r2", + "icon": "cloudflare-r2.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/r2", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "R2 Destination Spec", + "type": "object", + "required": [ "account_id", "access_key_id", "secret_access_key", "s3_bucket_name", "s3_bucket_path", "format" ], + "properties": { + "account_id": { + "type": "string", + "description": "Cloudflare account ID", + "title": "Cloudflare account ID", + "examples": [ "12345678aa1a1a11111aaa1234567abc" ], + "order": 0 + }, + "access_key_id": { + "type": "string", + "description": "The access key ID to access the R2 bucket. Airbyte requires Read and Write permissions to the given bucket. Read more here.", + "title": "R2 Key ID", + "airbyte_secret": true, + "examples": [ "A012345678910EXAMPLE" ], + "order": 1 + }, + "secret_access_key": { + "type": "string", + "description": "The corresponding secret to the access key ID. Read more here", + "title": "R2 Access Key", + "airbyte_secret": true, + "examples": [ "a012345678910ABCDEFGHAbCdEfGhEXAMPLEKEY" ], + "order": 2 + }, + "s3_bucket_name": { + "title": "R2 Bucket Name", + "type": "string", + "description": "The name of the R2 bucket. Read more here.", + "examples": [ "r2_sync" ], + "order": 3 + }, + "s3_bucket_path": { + "title": "R2 Bucket Path", + "description": "Directory under the R2 bucket where data will be written.", + "type": "string", + "examples": [ "data_sync/test" ], + "order": 4 + }, + "format": { + "title": "Output Format", + "type": "object", + "description": "Format of the data output. See here for more details", + "oneOf": [ { + "title": "Avro: Apache Avro", + "required": [ "format_type", "compression_codec" ], + "properties": { + "format_type": { + "title": "Format Type", + "type": "string", + "enum": [ "Avro" ], + "default": "Avro", + "order": 0 + }, + "compression_codec": { + "title": "Compression Codec", + "description": "The compression algorithm used to compress data. Default to no compression.", + "type": "object", + "oneOf": [ { + "title": "No Compression", + "required": [ "codec" ], + "properties": { + "codec": { + "type": "string", + "enum": [ "no compression" ], + "default": "no compression" + } + } + }, { + "title": "Deflate", + "required": [ "codec", "compression_level" ], + "properties": { + "codec": { + "type": "string", + "enum": [ "Deflate" ], + "default": "Deflate" + }, + "compression_level": { + "title": "Deflate Level", + "description": "0: no compression & fastest, 9: best compression & slowest.", + "type": "integer", + "default": 0, + "minimum": 0, + "maximum": 9 + } + } + }, { + "title": "bzip2", + "required": [ "codec" ], + "properties": { + "codec": { + "type": "string", + "enum": [ "bzip2" ], + "default": "bzip2" + } + } + }, { + "title": "xz", + "required": [ "codec", "compression_level" ], + "properties": { + "codec": { + "type": "string", + "enum": [ "xz" ], + "default": "xz" + }, + "compression_level": { + "title": "Compression Level", + "description": "See here for details.", + "type": "integer", + "default": 6, + "minimum": 0, + "maximum": 9 + } + } + }, { + "title": "zstandard", + "required": [ "codec", "compression_level" ], + "properties": { + "codec": { + "type": "string", + "enum": [ "zstandard" ], + "default": "zstandard" + }, + "compression_level": { + "title": "Compression Level", + "description": "Negative levels are 'fast' modes akin to lz4 or snappy, levels above 9 are generally for archival purposes, and levels above 18 use a lot of memory.", + "type": "integer", + "default": 3, + "minimum": -5, + "maximum": 22 + }, + "include_checksum": { + "title": "Include Checksum", + "description": "If true, include a checksum with each data block.", + "type": "boolean", + "default": false + } + } + }, { + "title": "snappy", + "required": [ "codec" ], + "properties": { + "codec": { + "type": "string", + "enum": [ "snappy" ], + "default": "snappy" + } + } + } ], + "order": 1 + } + } + }, { + "title": "CSV: Comma-Separated Values", + "required": [ "format_type", "flattening" ], + "properties": { + "format_type": { + "title": "Format Type", + "type": "string", + "enum": [ "CSV" ], + "default": "CSV" + }, + "flattening": { + "type": "string", + "title": "Normalization (Flattening)", + "description": "Whether the input json data should be normalized (flattened) in the output CSV. Please refer to docs for details.", + "default": "No flattening", + "enum": [ "No flattening", "Root level flattening" ] + }, + "compression": { + "title": "Compression", + "type": "object", + "description": "Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \".csv.gz\").", + "oneOf": [ { + "title": "No Compression", + "requires": [ "compression_type" ], + "properties": { + "compression_type": { + "type": "string", + "enum": [ "No Compression" ], + "default": "No Compression" + } + } + }, { + "title": "GZIP", + "requires": [ "compression_type" ], + "properties": { + "compression_type": { + "type": "string", + "enum": [ "GZIP" ], + "default": "GZIP" + } + } + } ] + } + } + }, { + "title": "JSON Lines: Newline-delimited JSON", + "required": [ "format_type" ], + "properties": { + "format_type": { + "title": "Format Type", + "type": "string", + "enum": [ "JSONL" ], + "default": "JSONL" + }, + "compression": { + "title": "Compression", + "type": "object", + "description": "Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \".jsonl.gz\").", + "oneOf": [ { + "title": "No Compression", + "requires": "compression_type", + "properties": { + "compression_type": { + "type": "string", + "enum": [ "No Compression" ], + "default": "No Compression" + } + } + }, { + "title": "GZIP", + "requires": "compression_type", + "properties": { + "compression_type": { + "type": "string", + "enum": [ "GZIP" ], + "default": "GZIP" + } + } + } ] + } + } + } ], + "order": 5 + }, + "s3_path_format": { + "title": "R2 Path Format", + "description": "Format string on how data will be organized inside the R2 bucket directory. Read more here", + "type": "string", + "examples": [ "${NAMESPACE}/${STREAM_NAME}/${YEAR}_${MONTH}_${DAY}_${EPOCH}_" ], + "order": 6 + }, + "file_name_pattern": { + "type": "string", + "description": "The pattern allows you to set the file-name format for the R2 staging file(s)", + "title": "R2 Filename pattern", + "examples": [ "{date}", "{date:yyyy_MM}", "{timestamp}", "{part_number}", "{sync_id}" ], + "order": 7 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "overwrite", "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "3eb4d99c-11fa-4561-a259-fc88e0c2f8f4", + "name": "Convex", + "dockerRepository": "airbyte/destination-convex", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.io/integrations/destinations/convex", + "icon": "convex.svg", + "spec": { + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Convex", + "type": "object", + "required": [ "deployment_url", "access_key" ], + "properties": { + "deployment_url": { + "type": "string", + "title": "Deployment Url", + "examples": [ "https://murky-swan-635.convex.cloud", "https://cluttered-owl-337.convex.cloud" ] + }, + "access_key": { + "type": "string", + "title": "Access Key", + "description": "API access key used to retrieve data from Convex.", + "airbyte_secret": true + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "overwrite", "append", "append_dedup" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "4528e960-6f7b-4412-8555-7e0097e1da17", + "name": "Starburst Galaxy", + "dockerRepository": "airbyte/destination-starburst-galaxy", + "dockerImageTag": "0.0.1", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/starburst-galaxy", + "icon": "starburst-galaxy.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/starburst-galaxy", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Starburst Galaxy Destination Spec", + "type": "object", + "required": [ "accept_terms", "server_hostname", "username", "password", "catalog", "staging_object_store" ], + "properties": { + "accept_terms": { + "title": "Agree to the Starburst Galaxy terms & conditions", + "type": "boolean", + "description": "You must agree to the Starburst Galaxy terms & conditions to use this connector.", + "default": false, + "order": 1 + }, + "server_hostname": { + "title": "Hostname", + "type": "string", + "description": "Starburst Galaxy cluster hostname.", + "examples": [ "abc-12345678-wxyz.trino.galaxy-demo.io" ], + "order": 2 + }, + "port": { + "title": "Port", + "type": "string", + "description": "Starburst Galaxy cluster port.", + "default": "443", + "examples": [ "443" ], + "order": 3 + }, + "username": { + "title": "User", + "type": "string", + "description": "Starburst Galaxy user.", + "examples": [ "user@example.com" ], + "order": 4 + }, + "password": { + "title": "Password", + "type": "string", + "description": "Starburst Galaxy password for the specified user.", + "examples": [ "password" ], + "airbyte_secret": true, + "order": 5 + }, + "catalog": { + "title": "Amazon S3 catalog", + "type": "string", + "description": "Name of the Starburst Galaxy Amazon S3 catalog.", + "examples": [ "sample_s3_catalog" ], + "order": 6 + }, + "catalog_schema": { + "title": "Amazon S3 catalog schema", + "type": "string", + "description": "The default Starburst Galaxy Amazon S3 catalog schema where tables are written to if the source does not specify a namespace. Defaults to \"public\".", + "default": "public", + "examples": [ "public" ], + "order": 7 + }, + "staging_object_store": { + "title": "Staging object store", + "type": "object", + "description": "Temporary storage on which temporary Iceberg table is created.", + "oneOf": [ { + "title": "Amazon S3", + "required": [ "object_store_type", "s3_bucket_name", "s3_bucket_path", "s3_bucket_region", "s3_access_key_id", "s3_secret_access_key" ], + "properties": { + "object_store_type": { + "type": "string", + "enum": [ "S3" ], + "default": "S3", + "order": 1 + }, + "s3_bucket_name": { + "title": "S3 bucket name", + "type": "string", + "description": "Name of the S3 bucket", + "examples": [ "airbyte_staging" ], + "order": 1 + }, + "s3_bucket_path": { + "title": "S3 bucket path", + "type": "string", + "description": "Directory in the S3 bucket where staging data is stored.", + "examples": [ "temp_airbyte__sync/test" ], + "order": 2 + }, + "s3_bucket_region": { + "title": "S3 bucket region", + "type": "string", + "default": "us-east-1", + "description": "The region of the S3 bucket.", + "enum": [ "ap-northeast-1", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "eu-central-1", "eu-west-1", "eu-west-2", "eu-west-3", "us-east-1", "us-east-2", "us-west-1", "us-west-2" ], + "order": 3 + }, + "s3_access_key_id": { + "title": "Access key", + "type": "string", + "description": "Access key with access to the bucket. Airbyte requires read and write permissions to a given bucket.", + "examples": [ "A012345678910EXAMPLE" ], + "airbyte_secret": true, + "order": 4 + }, + "s3_secret_access_key": { + "title": "Secret key", + "type": "string", + "description": "Secret key used with the specified access key.", + "examples": [ "a012345678910ABCDEFGH/AbCdEfGhEXAMPLEKEY" ], + "airbyte_secret": true, + "order": 5 + } + } + } ], + "order": 8 + }, + "purge_staging_table": { + "title": "Purge staging Iceberg table", + "type": "boolean", + "description": "Defaults to 'true'. Switch to 'false' for debugging purposes.", + "default": true, + "order": 9 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "overwrite", "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "072d5540-f236-4294-ba7c-ade8fd918496", + "name": "Databricks Lakehouse", + "dockerRepository": "airbyte/destination-databricks", + "dockerImageTag": "1.0.2", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/databricks", + "icon": "databricks.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/databricks", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Databricks Lakehouse Destination Spec", + "type": "object", + "required": [ "accept_terms", "databricks_server_hostname", "databricks_http_path", "databricks_personal_access_token", "data_source" ], + "properties": { + "accept_terms": { + "title": "Agree to the Databricks JDBC Driver Terms & Conditions", + "type": "boolean", + "description": "You must agree to the Databricks JDBC Driver Terms & Conditions to use this connector.", + "default": false, + "order": 1 + }, + "databricks_server_hostname": { + "title": "Server Hostname", + "type": "string", + "description": "Databricks Cluster Server Hostname.", + "examples": [ "abc-12345678-wxyz.cloud.databricks.com" ], + "order": 2 + }, + "databricks_http_path": { + "title": "HTTP Path", + "type": "string", + "description": "Databricks Cluster HTTP Path.", + "examples": [ "sql/protocolvx/o/1234567489/0000-1111111-abcd90" ], + "order": 3 + }, + "databricks_port": { + "title": "Port", + "type": "string", + "description": "Databricks Cluster Port.", + "default": "443", + "examples": [ "443" ], + "order": 4 + }, + "databricks_personal_access_token": { + "title": "Access Token", + "type": "string", + "description": "Databricks Personal Access Token for making authenticated requests.", + "examples": [ "dapi0123456789abcdefghij0123456789AB" ], + "airbyte_secret": true, + "order": 5 + }, + "database": { + "title": "Databricks catalog", + "description": "The name of the catalog. If not specified otherwise, the \"hive_metastore\" will be used.", + "type": "string", + "order": 6 + }, + "schema": { + "title": "Default Schema", + "description": "The default schema tables are written. If not specified otherwise, the \"default\" will be used.", + "type": "string", + "examples": [ "default" ], + "default": "default", + "order": 7 + }, + "data_source": { + "title": "Data Source", + "type": "object", + "description": "Storage on which the delta lake is built.", + "default": "MANAGED_TABLES_STORAGE", + "order": 8, + "oneOf": [ { + "title": "[Recommended] Managed tables", + "required": [ "data_source_type" ], + "properties": { + "data_source_type": { + "type": "string", + "const": "MANAGED_TABLES_STORAGE", + "order": 0 + } + } + }, { + "title": "Amazon S3", + "required": [ "data_source_type", "s3_bucket_name", "s3_bucket_path", "s3_bucket_region", "s3_access_key_id", "s3_secret_access_key" ], + "properties": { + "data_source_type": { + "type": "string", + "const": "S3_STORAGE", + "order": 1 + }, + "s3_bucket_name": { + "title": "S3 Bucket Name", + "type": "string", + "description": "The name of the S3 bucket to use for intermittent staging of the data.", + "examples": [ "airbyte.staging" ], + "order": 2 + }, + "s3_bucket_path": { + "title": "S3 Bucket Path", + "type": "string", + "description": "The directory under the S3 bucket where data will be written.", + "examples": [ "data_sync/test" ], + "order": 3 + }, + "s3_bucket_region": { + "title": "S3 Bucket Region", + "type": "string", + "default": "", + "description": "The region of the S3 staging bucket to use if utilising a copy strategy.", + "enum": [ "", "us-east-1", "us-east-2", "us-west-1", "us-west-2", "af-south-1", "ap-east-1", "ap-south-1", "ap-northeast-1", "ap-northeast-2", "ap-northeast-3", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "cn-north-1", "cn-northwest-1", "eu-central-1", "eu-north-1", "eu-south-1", "eu-west-1", "eu-west-2", "eu-west-3", "sa-east-1", "me-south-1", "us-gov-east-1", "us-gov-west-1" ], + "order": 4 + }, + "s3_access_key_id": { + "type": "string", + "description": "The Access Key Id granting allow one to access the above S3 staging bucket. Airbyte requires Read and Write permissions to the given bucket.", + "title": "S3 Access Key ID", + "examples": [ "A012345678910EXAMPLE" ], + "airbyte_secret": true, + "order": 5 + }, + "s3_secret_access_key": { + "title": "S3 Secret Access Key", + "type": "string", + "description": "The corresponding secret to the above access key id.", + "examples": [ "a012345678910ABCDEFGH/AbCdEfGhEXAMPLEKEY" ], + "airbyte_secret": true, + "order": 6 + }, + "file_name_pattern": { + "type": "string", + "description": "The pattern allows you to set the file-name format for the S3 staging file(s)", + "title": "S3 Filename pattern", + "examples": [ "{date}", "{date:yyyy_MM}", "{timestamp}", "{part_number}", "{sync_id}" ], + "order": 7 + } + } + }, { + "title": "Azure Blob Storage", + "required": [ "data_source_type", "azure_blob_storage_account_name", "azure_blob_storage_container_name", "azure_blob_storage_sas_token" ], + "properties": { + "data_source_type": { + "type": "string", + "const": "AZURE_BLOB_STORAGE", + "order": 0 + }, + "azure_blob_storage_endpoint_domain_name": { + "title": "Endpoint Domain Name", + "type": "string", + "default": "blob.core.windows.net", + "description": "This is Azure Blob Storage endpoint domain name. Leave default value (or leave it empty if run container from command line) to use Microsoft native from example.", + "examples": [ "blob.core.windows.net" ], + "order": 1 + }, + "azure_blob_storage_account_name": { + "title": "Azure Blob Storage Account Name", + "type": "string", + "description": "The account's name of the Azure Blob Storage.", + "examples": [ "airbyte5storage" ], + "order": 2 + }, + "azure_blob_storage_container_name": { + "title": "Azure Blob Storage Container Name", + "type": "string", + "description": "The name of the Azure blob storage container.", + "examples": [ "airbytetestcontainername" ], + "order": 3 + }, + "azure_blob_storage_sas_token": { + "title": "SAS Token", + "type": "string", + "airbyte_secret": true, + "description": "Shared access signature (SAS) token to grant limited access to objects in your storage account.", + "examples": [ "?sv=2016-05-31&ss=b&srt=sco&sp=rwdl&se=2018-06-27T10:05:50Z&st=2017-06-27T02:05:50Z&spr=https,http&sig=bgqQwoXwxzuD2GJfagRg7VOS8hzNr3QLT7rhS8OFRLQ%3D" ], + "order": 4 + } + } + } ] + }, + "purge_staging_data": { + "title": "Purge Staging Files and Tables", + "type": "boolean", + "description": "Default to 'true'. Switch it to 'false' for debugging purpose.", + "default": true, + "order": 9 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "overwrite", "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "8ccd8909-4e99-4141-b48d-4984b70b2d89", + "name": "DynamoDB", + "dockerRepository": "airbyte/destination-dynamodb", + "dockerImageTag": "0.1.7", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/dynamodb", + "icon": "dynamodb.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/dynamodb", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "DynamoDB Destination Spec", + "type": "object", + "required": [ "dynamodb_table_name_prefix", "dynamodb_region", "access_key_id", "secret_access_key" ], + "additionalProperties": false, + "properties": { + "dynamodb_endpoint": { + "title": "Endpoint", + "type": "string", + "default": "", + "description": "This is your DynamoDB endpoint url.(if you are working with AWS DynamoDB, just leave empty).", + "examples": [ "http://localhost:9000" ] + }, + "dynamodb_table_name_prefix": { + "title": "Table name prefix", + "type": "string", + "description": "The prefix to use when naming DynamoDB tables.", + "examples": [ "airbyte_sync" ] + }, + "dynamodb_region": { + "title": "DynamoDB Region", + "type": "string", + "default": "", + "description": "The region of the DynamoDB.", + "enum": [ "", "us-east-1", "us-east-2", "us-west-1", "us-west-2", "af-south-1", "ap-east-1", "ap-south-1", "ap-northeast-1", "ap-northeast-2", "ap-northeast-3", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "cn-north-1", "cn-northwest-1", "eu-central-1", "eu-north-1", "eu-south-1", "eu-west-1", "eu-west-2", "eu-west-3", "sa-east-1", "me-south-1", "us-gov-east-1", "us-gov-west-1" ] + }, + "access_key_id": { + "type": "string", + "description": "The access key id to access the DynamoDB. Airbyte requires Read and Write permissions to the DynamoDB.", + "title": "DynamoDB Key Id", + "airbyte_secret": true, + "examples": [ "A012345678910EXAMPLE" ] + }, + "secret_access_key": { + "type": "string", + "description": "The corresponding secret to the access key id.", + "title": "DynamoDB Access Key", + "airbyte_secret": true, + "examples": [ "a012345678910ABCDEFGH/AbCdEfGhEXAMPLEKEY" ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "overwrite", "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "2eb65e87-983a-4fd7-b3e3-9d9dc6eb8537", + "name": "E2E Testing", + "dockerRepository": "airbyte/destination-e2e-test", + "dockerImageTag": "0.2.4", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/e2e-test", + "icon": "airbyte.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/e2e-test", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "E2E Test Destination Spec", + "type": "object", + "oneOf": [ { + "title": "Logging", + "required": [ "type", "logging_config" ], + "properties": { + "type": { + "type": "string", + "const": "LOGGING", + "default": "LOGGING" + }, + "logging_config": { + "title": "Logging Configuration", + "type": "object", + "description": "Configurate how the messages are logged.", + "oneOf": [ { + "title": "First N Entries", + "description": "Log first N entries per stream.", + "type": "object", + "required": [ "logging_type", "max_entry_count" ], + "properties": { + "logging_type": { + "type": "string", + "enum": [ "FirstN" ], + "default": "FirstN" + }, + "max_entry_count": { + "title": "N", + "description": "Number of entries to log. This destination is for testing only. So it won't make sense to log infinitely. The maximum is 1,000 entries.", + "type": "number", + "default": 100, + "examples": [ 100 ], + "minimum": 1, + "maximum": 1000 + } + } + }, { + "title": "Every N-th Entry", + "description": "For each stream, log every N-th entry with a maximum cap.", + "type": "object", + "required": [ "logging_type", "nth_entry_to_log", "max_entry_count" ], + "properties": { + "logging_type": { + "type": "string", + "enum": [ "EveryNth" ], + "default": "EveryNth" + }, + "nth_entry_to_log": { + "title": "N", + "description": "The N-th entry to log for each stream. N starts from 1. For example, when N = 1, every entry is logged; when N = 2, every other entry is logged; when N = 3, one out of three entries is logged.", + "type": "number", + "example": [ 3 ], + "minimum": 1, + "maximum": 1000 + }, + "max_entry_count": { + "title": "Max Log Entries", + "description": "Max number of entries to log. This destination is for testing only. So it won't make sense to log infinitely. The maximum is 1,000 entries.", + "type": "number", + "default": 100, + "examples": [ 100 ], + "minimum": 1, + "maximum": 1000 + } + } + }, { + "title": "Random Sampling", + "description": "For each stream, randomly log a percentage of the entries with a maximum cap.", + "type": "object", + "required": [ "logging_type", "sampling_ratio", "max_entry_count" ], + "properties": { + "logging_type": { + "type": "string", + "enum": [ "RandomSampling" ], + "default": "RandomSampling" + }, + "sampling_ratio": { + "title": "Sampling Ratio", + "description": "A positive floating number smaller than 1.", + "type": "number", + "default": 0.001, + "examples": [ 0.001 ], + "minimum": 0, + "maximum": 1 + }, + "seed": { + "title": "Random Number Generator Seed", + "description": "When the seed is unspecified, the current time millis will be used as the seed.", + "type": "number", + "examples": [ 1900 ] + }, + "max_entry_count": { + "title": "Max Log Entries", + "description": "Max number of entries to log. This destination is for testing only. So it won't make sense to log infinitely. The maximum is 1,000 entries.", + "type": "number", + "default": 100, + "examples": [ 100 ], + "minimum": 1, + "maximum": 1000 + } + } + } ] + } + } + }, { + "title": "Silent", + "required": [ "type" ], + "properties": { + "type": { + "type": "string", + "const": "SILENT", + "default": "SILENT" + } + } + }, { + "title": "Throttled", + "required": [ "type", "millis_per_record" ], + "properties": { + "type": { + "type": "string", + "const": "THROTTLED", + "default": "THROTTLED" + }, + "millis_per_record": { + "description": "Number of milli-second to pause in between records.", + "type": "integer" + } + } + }, { + "title": "Failing", + "required": [ "type", "num_messages" ], + "properties": { + "type": { + "type": "string", + "const": "FAILING", + "default": "FAILING" + }, + "num_messages": { + "description": "Number of messages after which to fail.", + "type": "integer" + } + } + } ] + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "overwrite", "append" ] + }, + "tombstone": false, + "public": true, + "custom": false + }, { + "destinationDefinitionId": "68f351a7-2745-4bef-ad7f-996b8e51bb8c", + "name": "ElasticSearch", + "dockerRepository": "airbyte/destination-elasticsearch", + "dockerImageTag": "0.1.6", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/elasticsearch", + "icon": "elasticsearch.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/elasticsearch", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Elasticsearch Connection Configuration", + "type": "object", + "required": [ "endpoint" ], + "additionalProperties": false, + "properties": { + "endpoint": { + "title": "Server Endpoint", + "type": "string", + "description": "The full url of the Elasticsearch server" + }, + "upsert": { + "type": "boolean", + "title": "Upsert Records", + "description": "If a primary key identifier is defined in the source, an upsert will be performed using the primary key value as the elasticsearch doc id. Does not support composite primary keys.", + "default": true + }, + "ca_certificate": { + "type": "string", + "title": "CA certificate", + "description": "CA certificate", + "airbyte_secret": true, + "multiline": true + }, + "authenticationMethod": { + "title": "Authentication Method", + "type": "object", + "description": "The type of authentication to be used", + "oneOf": [ { + "title": "None", + "additionalProperties": false, + "description": "No authentication will be used", + "required": [ "method" ], + "properties": { + "method": { + "type": "string", + "const": "none" + } + } + }, { + "title": "Api Key/Secret", + "additionalProperties": false, + "description": "Use a api key and secret combination to authenticate", + "required": [ "method", "apiKeyId", "apiKeySecret" ], + "properties": { + "method": { + "type": "string", + "const": "secret" + }, + "apiKeyId": { + "title": "API Key ID", + "description": "The Key ID to used when accessing an enterprise Elasticsearch instance.", + "type": "string" + }, + "apiKeySecret": { + "title": "API Key Secret", + "description": "The secret associated with the API Key ID.", + "type": "string", + "airbyte_secret": true + } + } + }, { + "title": "Username/Password", + "additionalProperties": false, + "description": "Basic auth header with a username and password", + "required": [ "method", "username", "password" ], + "properties": { + "method": { + "type": "string", + "const": "basic" + }, + "username": { + "title": "Username", + "description": "Basic auth username to access a secure Elasticsearch server", + "type": "string" + }, + "password": { + "title": "Password", + "description": "Basic auth password to access a secure Elasticsearch server", + "type": "string", + "airbyte_secret": true + } + } + } ] + }, + "tunnel_method": { + "type": "object", + "title": "SSH Tunnel Method", + "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", + "oneOf": [ { + "title": "No Tunnel", + "required": [ "tunnel_method" ], + "properties": { + "tunnel_method": { + "description": "No ssh tunnel needed to connect to database", + "type": "string", + "const": "NO_TUNNEL", + "order": 0 + } + } + }, { + "title": "SSH Key Authentication", + "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [ "22" ], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host.", + "type": "string", + "order": 3 + }, + "ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + }, { + "title": "Password Authentication", + "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [ "22" ], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host", + "type": "string", + "order": 3 + }, + "tunnel_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 4 + } + } + } ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "overwrite", "append" ], + "supportsNamespaces": true + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "bb6071d9-6f34-4766-bec2-d1d4ed81a653", + "name": "Exasol", + "dockerRepository": "airbyte/destination-exasol", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/exasol", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/exasol", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Exasol Destination Spec", + "type": "object", + "required": [ "host", "port", "username", "schema" ], + "additionalProperties": true, + "properties": { + "host": { + "title": "Host", + "description": "Hostname of the database.", + "type": "string", + "order": 0 + }, + "port": { + "title": "Port", + "description": "Port of the database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 8563, + "examples": [ "8563" ], + "order": 1 + }, + "certificateFingerprint": { + "title": "Certificate Fingerprint", + "description": "Fingerprint of the Exasol server's TLS certificate", + "type": "string", + "examples": [ "ABC123..." ], + "order": 2 + }, + "username": { + "title": "User", + "description": "Username to use to access the database.", + "type": "string", + "order": 3 + }, + "password": { + "title": "Password", + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 4 + }, + "schema": { + "title": "Schema Name", + "description": "Schema Name", + "type": "string", + "order": 5 + }, + "jdbc_url_params": { + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol ';'. (example: key1=value1;key2=value2;key3=value3).", + "title": "JDBC URL Params", + "type": "string", + "order": 6 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "overwrite", "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "18081484-02a5-4662-8dba-b270b582f321", + "name": "Firebolt", + "dockerRepository": "airbyte/destination-firebolt", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/firebolt", + "icon": "firebolt.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/firebolt", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Firebolt Spec", + "type": "object", + "required": [ "username", "password", "database" ], + "additionalProperties": false, + "properties": { + "username": { + "type": "string", + "title": "Username", + "description": "Firebolt email address you use to login.", + "examples": [ "username@email.com" ], + "order": 0 + }, + "password": { + "type": "string", + "title": "Password", + "description": "Firebolt password.", + "airbyte_secret": true, + "order": 1 + }, + "account": { + "type": "string", + "title": "Account", + "description": "Firebolt account to login." + }, + "host": { + "type": "string", + "title": "Host", + "description": "The host name of your Firebolt database.", + "examples": [ "api.app.firebolt.io" ] + }, + "database": { + "type": "string", + "title": "Database", + "description": "The database to connect to." + }, + "engine": { + "type": "string", + "title": "Engine", + "description": "Engine name or url to connect to." + }, + "loading_method": { + "type": "object", + "title": "Loading Method", + "description": "Loading method used to select the way data will be uploaded to Firebolt", + "oneOf": [ { + "title": "SQL Inserts", + "additionalProperties": false, + "required": [ "method" ], + "properties": { + "method": { + "type": "string", + "const": "SQL" + } + } + }, { + "title": "External Table via S3", + "additionalProperties": false, + "required": [ "method", "s3_bucket", "s3_region", "aws_key_id", "aws_key_secret" ], + "properties": { + "method": { + "type": "string", + "const": "S3" + }, + "s3_bucket": { + "type": "string", + "title": "S3 bucket name", + "description": "The name of the S3 bucket." + }, + "s3_region": { + "type": "string", + "title": "S3 region name", + "description": "Region name of the S3 bucket.", + "examples": [ "us-east-1" ] + }, + "aws_key_id": { + "type": "string", + "title": "AWS Key ID", + "airbyte_secret": true, + "description": "AWS access key granting read and write access to S3." + }, + "aws_key_secret": { + "type": "string", + "title": "AWS Key Secret", + "airbyte_secret": true, + "description": "Corresponding secret part of the AWS Key" + } + } + } ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": true, + "supported_destination_sync_modes": [ "overwrite", "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "supportsDbt": true + }, { + "destinationDefinitionId": "ca8f6566-e555-4b40-943a-545bf123117a", + "name": "Google Cloud Storage (GCS)", + "dockerRepository": "airbyte/destination-gcs", + "dockerImageTag": "0.2.16", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/gcs", + "icon": "googlecloudstorage.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/gcs", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "GCS Destination Spec", + "type": "object", + "required": [ "gcs_bucket_name", "gcs_bucket_path", "credential", "format" ], + "properties": { + "gcs_bucket_name": { + "title": "GCS Bucket Name", + "order": 1, + "type": "string", + "description": "You can find the bucket name in the App Engine Admin console Application Settings page, under the label Google Cloud Storage Bucket. Read more here.", + "examples": [ "airbyte_sync" ] + }, + "gcs_bucket_path": { + "title": "GCS Bucket Path", + "description": "GCS Bucket Path string Subdirectory under the above bucket to sync the data into.", + "order": 2, + "type": "string", + "examples": [ "data_sync/test" ] + }, + "gcs_bucket_region": { + "title": "GCS Bucket Region", + "type": "string", + "order": 3, + "default": "us", + "description": "Select a Region of the GCS Bucket. Read more here.", + "enum": [ "northamerica-northeast1", "northamerica-northeast2", "us-central1", "us-east1", "us-east4", "us-west1", "us-west2", "us-west3", "us-west4", "southamerica-east1", "southamerica-west1", "europe-central2", "europe-north1", "europe-west1", "europe-west2", "europe-west3", "europe-west4", "europe-west6", "asia-east1", "asia-east2", "asia-northeast1", "asia-northeast2", "asia-northeast3", "asia-south1", "asia-south2", "asia-southeast1", "asia-southeast2", "australia-southeast1", "australia-southeast2", "asia", "eu", "us", "asia1", "eur4", "nam4" ] + }, + "credential": { + "title": "Authentication", + "description": "An HMAC key is a type of credential and can be associated with a service account or a user account in Cloud Storage. Read more here.", + "type": "object", + "order": 0, + "oneOf": [ { + "title": "HMAC Key", + "required": [ "credential_type", "hmac_key_access_id", "hmac_key_secret" ], + "properties": { + "credential_type": { + "type": "string", + "enum": [ "HMAC_KEY" ], + "default": "HMAC_KEY" + }, + "hmac_key_access_id": { + "type": "string", + "description": "When linked to a service account, this ID is 61 characters long; when linked to a user account, it is 24 characters long. Read more here.", + "title": "Access ID", + "airbyte_secret": true, + "order": 0, + "examples": [ "1234567890abcdefghij1234" ] + }, + "hmac_key_secret": { + "type": "string", + "description": "The corresponding secret for the access ID. It is a 40-character base-64 encoded string. Read more here.", + "title": "Secret", + "airbyte_secret": true, + "order": 1, + "examples": [ "1234567890abcdefghij1234567890ABCDEFGHIJ" ] + } + } + } ] + }, + "format": { + "title": "Output Format", + "type": "object", + "description": "Output data format. One of the following formats must be selected - AVRO format, PARQUET format, CSV format, or JSONL format.", + "order": 4, + "oneOf": [ { + "title": "Avro: Apache Avro", + "required": [ "format_type", "compression_codec" ], + "properties": { + "format_type": { + "type": "string", + "enum": [ "Avro" ], + "default": "Avro" + }, + "compression_codec": { + "title": "Compression Codec", + "description": "The compression algorithm used to compress data. Default to no compression.", + "type": "object", + "oneOf": [ { + "title": "No Compression", + "required": [ "codec" ], + "properties": { + "codec": { + "type": "string", + "enum": [ "no compression" ], + "default": "no compression" + } + } + }, { + "title": "Deflate", + "required": [ "codec" ], + "properties": { + "codec": { + "type": "string", + "enum": [ "Deflate" ], + "default": "Deflate" + }, + "compression_level": { + "title": "Deflate level", + "description": "0: no compression & fastest, 9: best compression & slowest.", + "type": "integer", + "default": 0, + "minimum": 0, + "maximum": 9 + } + } + }, { + "title": "bzip2", + "required": [ "codec" ], + "properties": { + "codec": { + "type": "string", + "enum": [ "bzip2" ], + "default": "bzip2" + } + } + }, { + "title": "xz", + "required": [ "codec" ], + "properties": { + "codec": { + "type": "string", + "enum": [ "xz" ], + "default": "xz" + }, + "compression_level": { + "title": "Compression Level", + "description": "The presets 0-3 are fast presets with medium compression. The presets 4-6 are fairly slow presets with high compression. The default preset is 6. The presets 7-9 are like the preset 6 but use bigger dictionaries and have higher compressor and decompressor memory requirements. Unless the uncompressed size of the file exceeds 8 MiB, 16 MiB, or 32 MiB, it is waste of memory to use the presets 7, 8, or 9, respectively. Read more here for details.", + "type": "integer", + "default": 6, + "minimum": 0, + "maximum": 9 + } + } + }, { + "title": "zstandard", + "required": [ "codec" ], + "properties": { + "codec": { + "type": "string", + "enum": [ "zstandard" ], + "default": "zstandard" + }, + "compression_level": { + "title": "Compression Level", + "description": "Negative levels are 'fast' modes akin to lz4 or snappy, levels above 9 are generally for archival purposes, and levels above 18 use a lot of memory.", + "type": "integer", + "default": 3, + "minimum": -5, + "maximum": 22 + }, + "include_checksum": { + "title": "Include Checksum", + "description": "If true, include a checksum with each data block.", + "type": "boolean", + "default": false + } + } + }, { + "title": "snappy", + "required": [ "codec" ], + "properties": { + "codec": { + "type": "string", + "enum": [ "snappy" ], + "default": "snappy" + } + } + } ] + } + } + }, { + "title": "CSV: Comma-Separated Values", + "required": [ "format_type" ], + "properties": { + "format_type": { + "type": "string", + "enum": [ "CSV" ], + "default": "CSV" + }, + "flattening": { + "type": "string", + "title": "Normalization", + "description": "Whether the input JSON data should be normalized (flattened) in the output CSV. Please refer to docs for details.", + "default": "No flattening", + "enum": [ "No flattening", "Root level flattening" ] + }, + "compression": { + "title": "Compression", + "type": "object", + "description": "Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \".csv.gz\").", + "oneOf": [ { + "title": "No Compression", + "requires": [ "compression_type" ], + "properties": { + "compression_type": { + "type": "string", + "enum": [ "No Compression" ], + "default": "No Compression" + } + } + }, { + "title": "GZIP", + "requires": [ "compression_type" ], + "properties": { + "compression_type": { + "type": "string", + "enum": [ "GZIP" ], + "default": "GZIP" + } + } + } ] + } + } + }, { + "title": "JSON Lines: newline-delimited JSON", + "required": [ "format_type" ], + "properties": { + "format_type": { + "type": "string", + "enum": [ "JSONL" ], + "default": "JSONL" + }, + "compression": { + "title": "Compression", + "type": "object", + "description": "Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \".jsonl.gz\").", + "oneOf": [ { + "title": "No Compression", + "requires": "compression_type", + "properties": { + "compression_type": { + "type": "string", + "enum": [ "No Compression" ], + "default": "No Compression" + } + } + }, { + "title": "GZIP", + "requires": "compression_type", + "properties": { + "compression_type": { + "type": "string", + "enum": [ "GZIP" ], + "default": "GZIP" + } + } + } ] + } + } + }, { + "title": "Parquet: Columnar Storage", + "required": [ "format_type" ], + "properties": { + "format_type": { + "type": "string", + "enum": [ "Parquet" ], + "default": "Parquet" + }, + "compression_codec": { + "title": "Compression Codec", + "description": "The compression algorithm used to compress data pages.", + "type": "string", + "default": "UNCOMPRESSED", + "enum": [ "UNCOMPRESSED", "SNAPPY", "GZIP", "LZO", "BROTLI", "LZ4", "ZSTD" ] + }, + "block_size_mb": { + "title": "Block Size (Row Group Size) (MB)", + "description": "This is the size of a row group being buffered in memory. It limits the memory usage when writing. Larger values will improve the IO when reading, but consume more memory when writing. Default: 128 MB.", + "type": "integer", + "default": 128, + "examples": [ 128 ] + }, + "max_padding_size_mb": { + "title": "Max Padding Size (MB)", + "description": "Maximum size allowed as padding to align row groups. This is also the minimum size of a row group. Default: 8 MB.", + "type": "integer", + "default": 8, + "examples": [ 8 ] + }, + "page_size_kb": { + "title": "Page Size (KB)", + "description": "The page size is for compression. A block is composed of pages. A page is the smallest unit that must be read fully to access a single record. If this value is too small, the compression will deteriorate. Default: 1024 KB.", + "type": "integer", + "default": 1024, + "examples": [ 1024 ] + }, + "dictionary_page_size_kb": { + "title": "Dictionary Page Size (KB)", + "description": "There is one dictionary page per column per row group when dictionary encoding is used. The dictionary page size works like the page size but for dictionary. Default: 1024 KB.", + "type": "integer", + "default": 1024, + "examples": [ 1024 ] + }, + "dictionary_encoding": { + "title": "Dictionary Encoding", + "description": "Default: true.", + "type": "boolean", + "default": true + } + } + } ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "overwrite", "append" ], + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "resourceRequirements": { + "jobSpecific": [ { + "jobType": "sync", + "resourceRequirements": { + "memory_request": "1Gi", + "memory_limit": "1Gi" + } + } ] + } + }, { + "destinationDefinitionId": "27dc7500-6d1b-40b1-8b07-e2f2aea3c9f4", + "name": "Google Firestore", + "dockerRepository": "airbyte/destination-firestore", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/firestore", + "icon": "firestore.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/firestore", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Destination Google Firestore", + "type": "object", + "required": [ "project_id" ], + "additionalProperties": false, + "properties": { + "project_id": { + "type": "string", + "description": "The GCP project ID for the project containing the target BigQuery dataset.", + "title": "Project ID" + }, + "credentials_json": { + "type": "string", + "description": "The contents of the JSON service account key. Check out the docs if you need help generating this key. Default credentials will be used if this field is left empty.", + "title": "Credentials JSON", + "airbyte_secret": true + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "append", "overwrite" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "356668e2-7e34-47f3-a3b0-67a8a481b692", + "name": "Google PubSub", + "dockerRepository": "airbyte/destination-pubsub", + "dockerImageTag": "0.2.0", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/pubsub", + "icon": "googlepubsub.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/pubsub", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Google PubSub Destination Spec", + "type": "object", + "required": [ "project_id", "topic_id", "credentials_json", "ordering_enabled", "batching_enabled" ], + "additionalProperties": true, + "properties": { + "project_id": { + "type": "string", + "description": "The GCP project ID for the project containing the target PubSub.", + "title": "Project ID" + }, + "topic_id": { + "type": "string", + "description": "The PubSub topic ID in the given GCP project ID.", + "title": "PubSub Topic ID" + }, + "credentials_json": { + "type": "string", + "description": "The contents of the JSON service account key. Check out the docs if you need help generating this key.", + "title": "Credentials JSON", + "airbyte_secret": true + }, + "ordering_enabled": { + "title": "Message Ordering Enabled", + "description": "If TRUE PubSub publisher will have message ordering enabled. Every message will have an ordering key of stream", + "type": "boolean", + "default": false + }, + "batching_enabled": { + "type": "boolean", + "title": "Message Batching Enabled", + "description": "If TRUE messages will be buffered instead of sending them one by one", + "default": false + }, + "batching_delay_threshold": { + "type": "integer", + "title": "Message Batching: Delay Threshold", + "description": "Number of ms before the buffer is flushed", + "default": 1, + "minimum": 1 + }, + "batching_element_count_threshold": { + "type": "integer", + "title": "Message Batching: Element Count Threshold", + "description": "Number of messages before the buffer is flushed", + "default": 1, + "minimum": 1 + }, + "batching_request_bytes_threshold": { + "type": "integer", + "title": "Message Batching: Request Bytes Threshold", + "description": "Number of bytes before the buffer is flushed", + "default": 1, + "minimum": 1 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "9f760101-60ae-462f-9ee6-b7a9dafd454d", + "name": "Kafka", + "dockerRepository": "airbyte/destination-kafka", + "dockerImageTag": "0.1.10", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/kafka", + "icon": "kafka.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/kafka", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Kafka Destination Spec", + "type": "object", + "required": [ "bootstrap_servers", "topic_pattern", "protocol", "acks", "enable_idempotence", "compression_type", "batch_size", "linger_ms", "max_in_flight_requests_per_connection", "client_dns_lookup", "buffer_memory", "max_request_size", "retries", "socket_connection_setup_timeout_ms", "socket_connection_setup_timeout_max_ms", "max_block_ms", "request_timeout_ms", "delivery_timeout_ms", "send_buffer_bytes", "receive_buffer_bytes" ], + "additionalProperties": true, + "properties": { + "bootstrap_servers": { + "title": "Bootstrap Servers", + "description": "A list of host/port pairs to use for establishing the initial connection to the Kafka cluster. The client will make use of all servers irrespective of which servers are specified here for bootstrapping—this list only impacts the initial hosts used to discover the full set of servers. This list should be in the form host1:port1,host2:port2,.... Since these servers are just used for the initial connection to discover the full cluster membership (which may change dynamically), this list need not contain the full set of servers (you may want more than one, though, in case a server is down).", + "type": "string", + "examples": [ "kafka-broker1:9092,kafka-broker2:9092" ] + }, + "topic_pattern": { + "title": "Topic Pattern", + "description": "Topic pattern in which the records will be sent. You can use patterns like '{namespace}' and/or '{stream}' to send the message to a specific topic based on these values. Notice that the topic name will be transformed to a standard naming convention.", + "type": "string", + "examples": [ "sample.topic", "{namespace}.{stream}.sample" ] + }, + "test_topic": { + "title": "Test Topic", + "description": "Topic to test if Airbyte can produce messages.", + "type": "string", + "examples": [ "test.topic" ] + }, + "sync_producer": { + "title": "Sync Producer", + "description": "Wait synchronously until the record has been sent to Kafka.", + "type": "boolean", + "default": false + }, + "protocol": { + "title": "Protocol", + "type": "object", + "description": "Protocol used to communicate with brokers.", + "oneOf": [ { + "title": "PLAINTEXT", + "required": [ "security_protocol" ], + "properties": { + "security_protocol": { + "type": "string", + "enum": [ "PLAINTEXT" ], + "default": "PLAINTEXT" + } + } + }, { + "title": "SASL PLAINTEXT", + "required": [ "security_protocol", "sasl_mechanism", "sasl_jaas_config" ], + "properties": { + "security_protocol": { + "type": "string", + "enum": [ "SASL_PLAINTEXT" ], + "default": "SASL_PLAINTEXT" + }, + "sasl_mechanism": { + "title": "SASL Mechanism", + "description": "SASL mechanism used for client connections. This may be any mechanism for which a security provider is available.", + "type": "string", + "default": "PLAIN", + "enum": [ "PLAIN" ] + }, + "sasl_jaas_config": { + "title": "SASL JAAS Config", + "description": "JAAS login context parameters for SASL connections in the format used by JAAS configuration files.", + "type": "string", + "default": "", + "airbyte_secret": true + } + } + }, { + "title": "SASL SSL", + "required": [ "security_protocol", "sasl_mechanism", "sasl_jaas_config" ], + "properties": { + "security_protocol": { + "type": "string", + "enum": [ "SASL_SSL" ], + "default": "SASL_SSL" + }, + "sasl_mechanism": { + "title": "SASL Mechanism", + "description": "SASL mechanism used for client connections. This may be any mechanism for which a security provider is available.", + "type": "string", + "default": "GSSAPI", + "enum": [ "GSSAPI", "OAUTHBEARER", "SCRAM-SHA-256", "SCRAM-SHA-512", "PLAIN" ] + }, + "sasl_jaas_config": { + "title": "SASL JAAS Config", + "description": "JAAS login context parameters for SASL connections in the format used by JAAS configuration files.", + "type": "string", + "default": "", + "airbyte_secret": true + } + } + } ] + }, + "client_id": { + "title": "Client ID", + "description": "An ID string to pass to the server when making requests. The purpose of this is to be able to track the source of requests beyond just ip/port by allowing a logical application name to be included in server-side request logging.", + "type": "string", + "examples": [ "airbyte-producer" ] + }, + "acks": { + "title": "ACKs", + "description": "The number of acknowledgments the producer requires the leader to have received before considering a request complete. This controls the durability of records that are sent.", + "type": "string", + "default": "1", + "enum": [ "0", "1", "all" ] + }, + "enable_idempotence": { + "title": "Enable Idempotence", + "description": "When set to 'true', the producer will ensure that exactly one copy of each message is written in the stream. If 'false', producer retries due to broker failures, etc., may write duplicates of the retried message in the stream.", + "type": "boolean", + "default": false + }, + "compression_type": { + "title": "Compression Type", + "description": "The compression type for all data generated by the producer.", + "type": "string", + "default": "none", + "enum": [ "none", "gzip", "snappy", "lz4", "zstd" ] + }, + "batch_size": { + "title": "Batch Size", + "description": "The producer will attempt to batch records together into fewer requests whenever multiple records are being sent to the same partition.", + "type": "integer", + "examples": [ 16384 ] + }, + "linger_ms": { + "title": "Linger ms", + "description": "The producer groups together any records that arrive in between request transmissions into a single batched request.", + "type": "string", + "examples": [ 0 ] + }, + "max_in_flight_requests_per_connection": { + "title": "Max in Flight Requests per Connection", + "description": "The maximum number of unacknowledged requests the client will send on a single connection before blocking. Can be greater than 1, and the maximum value supported with idempotency is 5.", + "type": "integer", + "examples": [ 5 ] + }, + "client_dns_lookup": { + "title": "Client DNS Lookup", + "description": "Controls how the client uses DNS lookups. If set to use_all_dns_ips, connect to each returned IP address in sequence until a successful connection is established. After a disconnection, the next IP is used. Once all IPs have been used once, the client resolves the IP(s) from the hostname again. If set to resolve_canonical_bootstrap_servers_only, resolve each bootstrap address into a list of canonical names. After the bootstrap phase, this behaves the same as use_all_dns_ips. If set to default (deprecated), attempt to connect to the first IP address returned by the lookup, even if the lookup returns multiple IP addresses.", + "type": "string", + "default": "use_all_dns_ips", + "enum": [ "default", "use_all_dns_ips", "resolve_canonical_bootstrap_servers_only", "use_all_dns_ips" ] + }, + "buffer_memory": { + "title": "Buffer Memory", + "description": "The total bytes of memory the producer can use to buffer records waiting to be sent to the server.", + "type": "string", + "examples": 33554432 + }, + "max_request_size": { + "title": "Max Request Size", + "description": "The maximum size of a request in bytes.", + "type": "integer", + "examples": [ 1048576 ] + }, + "retries": { + "title": "Retries", + "description": "Setting a value greater than zero will cause the client to resend any record whose send fails with a potentially transient error.", + "type": "integer", + "examples": [ 2147483647 ] + }, + "socket_connection_setup_timeout_ms": { + "title": "Socket Connection Setup Timeout", + "description": "The amount of time the client will wait for the socket connection to be established.", + "type": "string", + "examples": [ 10000 ] + }, + "socket_connection_setup_timeout_max_ms": { + "title": "Socket Connection Setup Max Timeout", + "description": "The maximum amount of time the client will wait for the socket connection to be established. The connection setup timeout will increase exponentially for each consecutive connection failure up to this maximum.", + "type": "string", + "examples": [ 30000 ] + }, + "max_block_ms": { + "title": "Max Block ms", + "description": "The configuration controls how long the KafkaProducer's send(), partitionsFor(), initTransactions(), sendOffsetsToTransaction(), commitTransaction() and abortTransaction() methods will block.", + "type": "string", + "examples": [ 60000 ] + }, + "request_timeout_ms": { + "title": "Request Timeout", + "description": "The configuration controls the maximum amount of time the client will wait for the response of a request. If the response is not received before the timeout elapses the client will resend the request if necessary or fail the request if retries are exhausted.", + "type": "integer", + "examples": [ 30000 ] + }, + "delivery_timeout_ms": { + "title": "Delivery Timeout", + "description": "An upper bound on the time to report success or failure after a call to 'send()' returns.", + "type": "integer", + "examples": [ 120000 ] + }, + "send_buffer_bytes": { + "title": "Send Buffer bytes", + "description": "The size of the TCP send buffer (SO_SNDBUF) to use when sending data. If the value is -1, the OS default will be used.", + "type": "integer", + "examples": [ 131072 ] + }, + "receive_buffer_bytes": { + "title": "Receive Buffer bytes", + "description": "The size of the TCP receive buffer (SO_RCVBUF) to use when reading data. If the value is -1, the OS default will be used.", + "type": "integer", + "examples": [ 32768 ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "6d1d66d4-26ab-4602-8d32-f85894b04955", + "name": "Kinesis", + "dockerRepository": "airbyte/destination-kinesis", + "dockerImageTag": "0.1.5", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/kinesis", + "icon": "kinesis.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/kinesis", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Kinesis Destination Spec", + "type": "object", + "required": [ "endpoint", "region", "shardCount", "accessKey", "privateKey", "bufferSize" ], + "additionalProperties": true, + "properties": { + "endpoint": { + "title": "Endpoint", + "description": "AWS Kinesis endpoint.", + "type": "string", + "examples": [ "kinesis.us‑west‑1.amazonaws.com" ], + "order": 0 + }, + "region": { + "title": "Region", + "description": "AWS region. Your account determines the Regions that are available to you.", + "type": "string", + "examples": [ "us‑west‑1" ], + "order": 1 + }, + "shardCount": { + "title": "Shard Count", + "description": "Number of shards to which the data should be streamed.", + "type": "integer", + "default": 5, + "order": 2 + }, + "accessKey": { + "title": "Access Key", + "description": "Generate the AWS Access Key for current user.", + "airbyte_secret": true, + "type": "string", + "order": 3 + }, + "privateKey": { + "title": "Private Key", + "description": "The AWS Private Key - a string of numbers and letters that are unique for each account, also known as a \"recovery phrase\".", + "airbyte_secret": true, + "type": "string", + "order": 4 + }, + "bufferSize": { + "title": "Buffer Size", + "description": "Buffer size for storing kinesis records before being batch streamed.", + "type": "integer", + "minimum": 1, + "maximum": 500, + "default": 100, + "order": 5 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "8be1cf83-fde1-477f-a4ad-318d23c9f3c6", + "name": "Local CSV", + "dockerRepository": "airbyte/destination-csv", + "dockerImageTag": "1.0.0", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/local-csv", + "icon": "file-csv.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/local-csv", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "CSV Destination Spec", + "type": "object", + "required": [ "destination_path" ], + "additionalProperties": true, + "properties": { + "destination_path": { + "description": "Path to the directory where csv files will be written. The destination uses the local mount \"/local\" and any data files will be placed inside that local mount. For more information check out our docs", + "type": "string", + "examples": [ "/local" ] + }, + "delimiter_type": { + "type": "object", + "title": "Delimiter", + "description": "The character delimiting individual cells in the CSV data.", + "oneOf": [ { + "title": "Comma", + "required": [ "delimiter" ], + "properties": { + "delimiter": { + "type": "string", + "const": "\\u002c" + } + } + }, { + "title": "Semicolon", + "required": [ "delimiter" ], + "properties": { + "delimiter": { + "type": "string", + "const": "\\u003b" + } + } + }, { + "title": "Pipe", + "required": [ "delimiter" ], + "properties": { + "delimiter": { + "type": "string", + "const": "\\u007c" + } + } + }, { + "title": "Tab", + "required": [ "delimiter" ], + "properties": { + "delimiter": { + "type": "string", + "const": "\\u0009" + } + } + }, { + "title": "Space", + "required": [ "delimiter" ], + "properties": { + "delimiter": { + "type": "string", + "const": "\\u0020" + } + } + } ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "overwrite", "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "a625d593-bba5-4a1c-a53d-2d246268a816", + "name": "Local JSON", + "dockerRepository": "airbyte/destination-local-json", + "dockerImageTag": "0.2.11", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/local-json", + "icon": "file-json.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/local-json", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Local Json Destination Spec", + "type": "object", + "required": [ "destination_path" ], + "additionalProperties": false, + "properties": { + "destination_path": { + "description": "Path to the directory where json files will be written. The files will be placed inside that local mount. For more information check out our docs", + "title": "Destination Path", + "type": "string", + "examples": [ "/json_data" ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "overwrite", "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "f3802bc4-5406-4752-9e8d-01e504ca8194", + "name": "MQTT", + "dockerRepository": "airbyte/destination-mqtt", + "dockerImageTag": "0.1.3", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mqtt", + "icon": "mqtt.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mqtt", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "MQTT Destination Spec", + "type": "object", + "required": [ "broker_host", "broker_port", "use_tls", "topic_pattern", "publisher_sync", "connect_timeout", "automatic_reconnect", "clean_session", "message_retained", "message_qos" ], + "additionalProperties": true, + "properties": { + "broker_host": { + "title": "MQTT broker host", + "description": "Host of the broker to connect to.", + "type": "string" + }, + "broker_port": { + "title": "MQTT broker port", + "description": "Port of the broker.", + "type": "integer" + }, + "use_tls": { + "title": "Use TLS", + "description": "Whether to use TLS encryption on the connection.", + "type": "boolean", + "default": false + }, + "username": { + "title": "Username", + "description": "User name to use for the connection.", + "type": "string" + }, + "password": { + "title": "Password", + "description": "Password to use for the connection.", + "type": "string", + "airbyte_secret": true + }, + "topic_pattern": { + "title": "Topic pattern", + "description": "Topic pattern in which the records will be sent. You can use patterns like '{namespace}' and/or '{stream}' to send the message to a specific topic based on these values. Notice that the topic name will be transformed to a standard naming convention.", + "type": "string", + "examples": [ "sample.topic", "{namespace}/{stream}/sample" ] + }, + "topic_test": { + "title": "Test topic", + "description": "Topic to test if Airbyte can produce messages.", + "type": "string", + "examples": [ "test/topic" ] + }, + "client": { + "title": "Client ID", + "description": "A client identifier that is unique on the server being connected to.", + "type": "string", + "examples": [ "airbyte-client1" ] + }, + "publisher_sync": { + "title": "Sync publisher", + "description": "Wait synchronously until the record has been sent to the broker.", + "type": "boolean", + "default": false + }, + "connect_timeout": { + "title": "Connect timeout", + "description": " Maximum time interval (in seconds) the client will wait for the network connection to the MQTT server to be established.", + "type": "integer", + "default": 30 + }, + "automatic_reconnect": { + "title": "Automatic reconnect", + "description": "Whether the client will automatically attempt to reconnect to the server if the connection is lost.", + "type": "boolean", + "default": true + }, + "clean_session": { + "title": "Clean session", + "description": "Whether the client and server should remember state across restarts and reconnects.", + "type": "boolean", + "default": true + }, + "message_retained": { + "title": "Message retained", + "description": "Whether or not the publish message should be retained by the messaging engine.", + "type": "boolean", + "default": false + }, + "message_qos": { + "title": "Message QoS", + "description": "Quality of service used for each message to be delivered.", + "default": "AT_LEAST_ONCE", + "enum": [ "AT_MOST_ONCE", "AT_LEAST_ONCE", "EXACTLY_ONCE" ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "d4353156-9217-4cad-8dd7-c108fd4f74cf", + "name": "MS SQL Server", + "dockerRepository": "airbyte/destination-mssql", + "dockerImageTag": "0.1.23", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mssql", + "icon": "mssql.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mssql", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "MS SQL Server Destination Spec", + "type": "object", + "required": [ "host", "port", "username", "database", "schema" ], + "properties": { + "host": { + "title": "Host", + "description": "The host name of the MSSQL database.", + "type": "string", + "order": 0 + }, + "port": { + "title": "Port", + "description": "The port of the MSSQL database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 1433, + "examples": [ "1433" ], + "order": 1 + }, + "database": { + "title": "DB Name", + "description": "The name of the MSSQL database.", + "type": "string", + "order": 2 + }, + "schema": { + "title": "Default Schema", + "description": "The default schema tables are written to if the source does not specify a namespace. The usual value for this field is \"public\".", + "type": "string", + "examples": [ "public" ], + "default": "public", + "order": 3 + }, + "username": { + "title": "User", + "description": "The username which is used to access the database.", + "type": "string", + "order": 4 + }, + "password": { + "title": "Password", + "description": "The password associated with this username.", + "type": "string", + "airbyte_secret": true, + "order": 5 + }, + "jdbc_url_params": { + "title": "JDBC URL Params", + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", + "type": "string", + "order": 6 + }, + "ssl_method": { + "title": "SSL Method", + "type": "object", + "description": "The encryption method which is used to communicate with the database.", + "order": 7, + "oneOf": [ { + "title": "Unencrypted", + "description": "The data transfer will not be encrypted.", + "required": [ "ssl_method" ], + "type": "object", + "properties": { + "ssl_method": { + "type": "string", + "const": "unencrypted", + "enum": [ "unencrypted" ], + "default": "unencrypted" + } + } + }, { + "title": "Encrypted (trust server certificate)", + "description": "Use the certificate provided by the server without verification. (For testing purposes only!)", + "required": [ "ssl_method" ], + "type": "object", + "properties": { + "ssl_method": { + "type": "string", + "const": "encrypted_trust_server_certificate", + "enum": [ "encrypted_trust_server_certificate" ], + "default": "encrypted_trust_server_certificate" + } + } + }, { + "title": "Encrypted (verify certificate)", + "description": "Verify and use the certificate provided by the server.", + "required": [ "ssl_method", "trustStoreName", "trustStorePassword" ], + "type": "object", + "properties": { + "ssl_method": { + "type": "string", + "const": "encrypted_verify_certificate", + "enum": [ "encrypted_verify_certificate" ], + "default": "encrypted_verify_certificate" + }, + "hostNameInCertificate": { + "title": "Host Name In Certificate", + "type": "string", + "description": "Specifies the host name of the server. The value of this property must match the subject property of the certificate.", + "order": 8 + } + } + } ] + }, + "tunnel_method": { + "type": "object", + "title": "SSH Tunnel Method", + "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", + "oneOf": [ { + "title": "No Tunnel", + "required": [ "tunnel_method" ], + "properties": { + "tunnel_method": { + "description": "No ssh tunnel needed to connect to database", + "type": "string", + "const": "NO_TUNNEL", + "order": 0 + } + } + }, { + "title": "SSH Key Authentication", + "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [ "22" ], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host.", + "type": "string", + "order": 3 + }, + "ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + }, { + "title": "Password Authentication", + "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [ "22" ], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host", + "type": "string", + "order": 3 + }, + "tunnel_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 4 + } + } + } ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": true, + "supportsDBT": true, + "supported_destination_sync_modes": [ "overwrite", "append", "append_dedup" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "normalizationConfig": { + "normalizationRepository": "airbyte/normalization-mssql", + "normalizationTag": "0.4.0", + "normalizationIntegrationType": "mssql" + }, + "supportsDbt": true + }, { + "destinationDefinitionId": "af7c921e-5892-4ff2-b6c1-4a5ab258fb7e", + "name": "MeiliSearch", + "dockerRepository": "airbyte/destination-meilisearch", + "dockerImageTag": "1.0.0", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/meilisearch", + "icon": "meilisearch.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/meilisearch", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Destination Meilisearch", + "type": "object", + "required": [ "host" ], + "additionalProperties": false, + "properties": { + "host": { + "title": "Host", + "description": "Hostname of the MeiliSearch instance.", + "type": "string", + "order": 0 + }, + "api_key": { + "title": "API Key", + "airbyte_secret": true, + "description": "MeiliSearch API Key. See the docs for more information on how to obtain this key.", + "type": "string", + "order": 1 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "overwrite", "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "8b746512-8c2e-6ac1-4adc-b59faafd473c", + "name": "MongoDB", + "dockerRepository": "airbyte/destination-mongodb", + "dockerImageTag": "0.1.9", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mongodb", + "icon": "mongodb.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mongodb", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "MongoDB Destination Spec", + "type": "object", + "required": [ "database", "auth_type" ], + "properties": { + "instance_type": { + "description": "MongoDb instance to connect to. For MongoDB Atlas and Replica Set TLS connection is used by default.", + "title": "MongoDb Instance Type", + "type": "object", + "order": 0, + "oneOf": [ { + "title": "Standalone MongoDb Instance", + "required": [ "instance", "host", "port" ], + "properties": { + "instance": { + "type": "string", + "enum": [ "standalone" ], + "default": "standalone" + }, + "host": { + "title": "Host", + "type": "string", + "description": "The Host of a Mongo database to be replicated.", + "order": 0 + }, + "port": { + "title": "Port", + "type": "integer", + "description": "The Port of a Mongo database to be replicated.", + "minimum": 0, + "maximum": 65536, + "default": 27017, + "examples": [ "27017" ], + "order": 1 + }, + "tls": { + "title": "TLS Connection", + "type": "boolean", + "description": "Indicates whether TLS encryption protocol will be used to connect to MongoDB. It is recommended to use TLS connection if possible. For more information see documentation.", + "default": false, + "order": 2 + } + } + }, { + "title": "Replica Set", + "required": [ "instance", "server_addresses" ], + "properties": { + "instance": { + "type": "string", + "enum": [ "replica" ], + "default": "replica" + }, + "server_addresses": { + "title": "Server addresses", + "type": "string", + "description": "The members of a replica set. Please specify `host`:`port` of each member seperated by comma.", + "examples": [ "host1:27017,host2:27017,host3:27017" ], + "order": 0 + }, + "replica_set": { + "title": "Replica Set", + "type": "string", + "description": "A replica set name.", + "order": 1 + } + } + }, { + "title": "MongoDB Atlas", + "required": [ "instance", "cluster_url" ], + "properties": { + "instance": { + "type": "string", + "enum": [ "atlas" ], + "default": "atlas" + }, + "cluster_url": { + "title": "Cluster URL", + "type": "string", + "description": "URL of a cluster to connect to.", + "order": 0 + } + } + } ] + }, + "database": { + "title": "DB Name", + "description": "Name of the database.", + "type": "string", + "order": 2 + }, + "auth_type": { + "title": "Authorization type", + "type": "object", + "description": "Authorization type.", + "oneOf": [ { + "title": "None", + "description": "None.", + "required": [ "authorization" ], + "type": "object", + "properties": { + "authorization": { + "type": "string", + "const": "none" + } + } + }, { + "title": "Login/Password", + "description": "Login/Password.", + "required": [ "authorization", "username", "password" ], + "type": "object", + "properties": { + "authorization": { + "type": "string", + "const": "login/password" + }, + "username": { + "title": "User", + "description": "Username to use to access the database.", + "type": "string", + "order": 1 + }, + "password": { + "title": "Password", + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 2 + } + } + } ] + }, + "tunnel_method": { + "type": "object", + "title": "SSH Tunnel Method", + "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", + "oneOf": [ { + "title": "No Tunnel", + "required": [ "tunnel_method" ], + "properties": { + "tunnel_method": { + "description": "No ssh tunnel needed to connect to database", + "type": "string", + "const": "NO_TUNNEL", + "order": 0 + } + } + }, { + "title": "SSH Key Authentication", + "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [ "22" ], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host.", + "type": "string", + "order": 3 + }, + "ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + }, { + "title": "Password Authentication", + "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [ "22" ], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host", + "type": "string", + "order": 3 + }, + "tunnel_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 4 + } + } + } ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "overwrite", "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "ca81ee7c-3163-4246-af40-094cc31e5e42", + "name": "MySQL", + "dockerRepository": "airbyte/destination-mysql", + "dockerImageTag": "0.1.20", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mysql", + "icon": "mysql.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mysql", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "MySQL Destination Spec", + "type": "object", + "required": [ "host", "port", "username", "database" ], + "additionalProperties": true, + "properties": { + "host": { + "title": "Host", + "description": "Hostname of the database.", + "type": "string", + "order": 0 + }, + "port": { + "title": "Port", + "description": "Port of the database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 3306, + "examples": [ "3306" ], + "order": 1 + }, + "database": { + "title": "DB Name", + "description": "Name of the database.", + "type": "string", + "order": 2 + }, + "username": { + "title": "User", + "description": "Username to use to access the database.", + "type": "string", + "order": 3 + }, + "password": { + "title": "Password", + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 4 + }, + "ssl": { + "title": "SSL Connection", + "description": "Encrypt data using SSL.", + "type": "boolean", + "default": true, + "order": 5 + }, + "jdbc_url_params": { + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", + "title": "JDBC URL Params", + "type": "string", + "order": 6 + }, + "tunnel_method": { + "type": "object", + "title": "SSH Tunnel Method", + "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", + "oneOf": [ { + "title": "No Tunnel", + "required": [ "tunnel_method" ], + "properties": { + "tunnel_method": { + "description": "No ssh tunnel needed to connect to database", + "type": "string", + "const": "NO_TUNNEL", + "order": 0 + } + } + }, { + "title": "SSH Key Authentication", + "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [ "22" ], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host.", + "type": "string", + "order": 3 + }, + "ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + }, { + "title": "Password Authentication", + "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [ "22" ], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host", + "type": "string", + "order": 3 + }, + "tunnel_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 4 + } + } + } ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": true, + "supportsDBT": true, + "supported_destination_sync_modes": [ "overwrite", "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "normalizationConfig": { + "normalizationRepository": "airbyte/normalization-mysql", + "normalizationTag": "0.4.0", + "normalizationIntegrationType": "mysql" + }, + "supportsDbt": true + }, { + "destinationDefinitionId": "3986776d-2319-4de9-8af8-db14c0996e72", + "name": "Oracle", + "dockerRepository": "airbyte/destination-oracle", + "dockerImageTag": "0.1.19", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/oracle", + "icon": "oracle.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/oracle", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Oracle Destination Spec", + "type": "object", + "required": [ "host", "port", "username", "sid" ], + "additionalProperties": true, + "properties": { + "host": { + "title": "Host", + "description": "The hostname of the database.", + "type": "string", + "order": 0 + }, + "port": { + "title": "Port", + "description": "The port of the database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 1521, + "examples": [ "1521" ], + "order": 1 + }, + "sid": { + "title": "SID", + "description": "The System Identifier uniquely distinguishes the instance from any other instance on the same computer.", + "type": "string", + "order": 2 + }, + "username": { + "title": "User", + "description": "The username to access the database. This user must have CREATE USER privileges in the database.", + "type": "string", + "order": 3 + }, + "password": { + "title": "Password", + "description": "The password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 4 + }, + "jdbc_url_params": { + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", + "title": "JDBC URL Params", + "type": "string", + "order": 5 + }, + "schema": { + "title": "Default Schema", + "description": "The default schema is used as the target schema for all statements issued from the connection that do not explicitly specify a schema name. The usual value for this field is \"airbyte\". In Oracle, schemas and users are the same thing, so the \"user\" parameter is used as the login credentials and this is used for the default Airbyte message schema.", + "type": "string", + "examples": [ "airbyte" ], + "default": "airbyte", + "order": 6 + }, + "encryption": { + "title": "Encryption", + "type": "object", + "description": "The encryption method which is used when communicating with the database.", + "order": 7, + "oneOf": [ { + "title": "Unencrypted", + "description": "Data transfer will not be encrypted.", + "required": [ "encryption_method" ], + "properties": { + "encryption_method": { + "type": "string", + "const": "unencrypted", + "enum": [ "unencrypted" ], + "default": "unencrypted" + } + } + }, { + "title": "Native Network Encryption (NNE)", + "description": "The native network encryption gives you the ability to encrypt database connections, without the configuration overhead of TCP/IP and SSL/TLS and without the need to open and listen on different ports.", + "required": [ "encryption_method" ], + "properties": { + "encryption_method": { + "type": "string", + "const": "client_nne", + "enum": [ "client_nne" ], + "default": "client_nne" + }, + "encryption_algorithm": { + "type": "string", + "description": "This parameter defines the database encryption algorithm.", + "title": "Encryption Algorithm", + "default": "AES256", + "enum": [ "AES256", "RC4_56", "3DES168" ] + } + } + }, { + "title": "TLS Encrypted (verify certificate)", + "description": "Verify and use the certificate provided by the server.", + "required": [ "encryption_method", "ssl_certificate" ], + "properties": { + "encryption_method": { + "type": "string", + "const": "encrypted_verify_certificate", + "enum": [ "encrypted_verify_certificate" ], + "default": "encrypted_verify_certificate" + }, + "ssl_certificate": { + "title": "SSL PEM file", + "description": "Privacy Enhanced Mail (PEM) files are concatenated certificate containers frequently used in certificate installations.", + "type": "string", + "airbyte_secret": true, + "multiline": true + } + } + } ] + }, + "tunnel_method": { + "type": "object", + "title": "SSH Tunnel Method", + "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", + "oneOf": [ { + "title": "No Tunnel", + "required": [ "tunnel_method" ], + "properties": { + "tunnel_method": { + "description": "No ssh tunnel needed to connect to database", + "type": "string", + "const": "NO_TUNNEL", + "order": 0 + } + } + }, { + "title": "SSH Key Authentication", + "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [ "22" ], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host.", + "type": "string", + "order": 3 + }, + "ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + }, { + "title": "Password Authentication", + "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [ "22" ], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host", + "type": "string", + "order": 3 + }, + "tunnel_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 4 + } + } + } ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "overwrite", "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "normalizationConfig": { + "normalizationRepository": "airbyte/normalization-oracle", + "normalizationTag": "0.4.0", + "normalizationIntegrationType": "oracle" + }, + "supportsDbt": true + }, { + "destinationDefinitionId": "25c5221d-dce2-4163-ade9-739ef790f503", + "name": "Postgres", + "dockerRepository": "airbyte/destination-postgres", + "dockerImageTag": "0.3.27", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/postgres", + "icon": "postgresql.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/postgres", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Postgres Destination Spec", + "type": "object", + "required": [ "host", "port", "username", "database", "schema" ], + "additionalProperties": true, + "properties": { + "host": { + "title": "Host", + "description": "Hostname of the database.", + "type": "string", + "order": 0 + }, + "port": { + "title": "Port", + "description": "Port of the database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 5432, + "examples": [ "5432" ], + "order": 1 + }, + "database": { + "title": "DB Name", + "description": "Name of the database.", + "type": "string", + "order": 2 + }, + "schema": { + "title": "Default Schema", + "description": "The default schema tables are written to if the source does not specify a namespace. The usual value for this field is \"public\".", + "type": "string", + "examples": [ "public" ], + "default": "public", + "order": 3 + }, + "username": { + "title": "User", + "description": "Username to use to access the database.", + "type": "string", + "order": 4 + }, + "password": { + "title": "Password", + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 5 + }, + "ssl": { + "title": "SSL Connection", + "description": "Encrypt data using SSL. When activating SSL, please select one of the connection modes.", + "type": "boolean", + "default": false, + "order": 6 + }, + "ssl_mode": { + "title": "SSL modes", + "description": "SSL connection modes. \n disable - Chose this mode to disable encryption of communication between Airbyte and destination database\n allow - Chose this mode to enable encryption only when required by the source database\n prefer - Chose this mode to allow unencrypted connection only if the source database does not support encryption\n require - Chose this mode to always require encryption. If the source database server does not support encryption, connection will fail\n verify-ca - Chose this mode to always require encryption and to verify that the source database server has a valid SSL certificate\n verify-full - This is the most secure mode. Chose this mode to always require encryption and to verify the identity of the source database server\n See more information - in the docs.", + "type": "object", + "order": 7, + "oneOf": [ { + "title": "disable", + "additionalProperties": false, + "description": "Disable SSL.", + "required": [ "mode" ], + "properties": { + "mode": { + "type": "string", + "const": "disable", + "enum": [ "disable" ], + "default": "disable", + "order": 0 + } + } + }, { + "title": "allow", + "additionalProperties": false, + "description": "Allow SSL mode.", + "required": [ "mode" ], + "properties": { + "mode": { + "type": "string", + "const": "allow", + "enum": [ "allow" ], + "default": "allow", + "order": 0 + } + } + }, { + "title": "prefer", + "additionalProperties": false, + "description": "Prefer SSL mode.", + "required": [ "mode" ], + "properties": { + "mode": { + "type": "string", + "const": "prefer", + "enum": [ "prefer" ], + "default": "prefer", + "order": 0 + } + } + }, { + "title": "require", + "additionalProperties": false, + "description": "Require SSL mode.", + "required": [ "mode" ], + "properties": { + "mode": { + "type": "string", + "const": "require", + "enum": [ "require" ], + "default": "require", + "order": 0 + } + } + }, { + "title": "verify-ca", + "additionalProperties": false, + "description": "Verify-ca SSL mode.", + "required": [ "mode", "ca_certificate" ], + "properties": { + "mode": { + "type": "string", + "const": "verify-ca", + "enum": [ "verify-ca" ], + "default": "verify-ca", + "order": 0 + }, + "ca_certificate": { + "type": "string", + "title": "CA certificate", + "description": "CA certificate", + "airbyte_secret": true, + "multiline": true, + "order": 1 + }, + "client_key_password": { + "type": "string", + "title": "Client key password", + "description": "Password for keystorage. This field is optional. If you do not add it - the password will be generated automatically.", + "airbyte_secret": true, + "order": 4 + } + } + }, { + "title": "verify-full", + "additionalProperties": false, + "description": "Verify-full SSL mode.", + "required": [ "mode", "ca_certificate", "client_certificate", "client_key" ], + "properties": { + "mode": { + "type": "string", + "const": "verify-full", + "enum": [ "verify-full" ], + "default": "verify-full", + "order": 0 + }, + "ca_certificate": { + "type": "string", + "title": "CA certificate", + "description": "CA certificate", + "airbyte_secret": true, + "multiline": true, + "order": 1 + }, + "client_certificate": { + "type": "string", + "title": "Client certificate", + "description": "Client certificate", + "airbyte_secret": true, + "multiline": true, + "order": 2 + }, + "client_key": { + "type": "string", + "title": "Client key", + "description": "Client key", + "airbyte_secret": true, + "multiline": true, + "order": 3 + }, + "client_key_password": { + "type": "string", + "title": "Client key password", + "description": "Password for keystorage. This field is optional. If you do not add it - the password will be generated automatically.", + "airbyte_secret": true, + "order": 4 + } + } + } ] + }, + "jdbc_url_params": { + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", + "title": "JDBC URL Params", + "type": "string", + "order": 8 + }, + "tunnel_method": { + "type": "object", + "title": "SSH Tunnel Method", + "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", + "oneOf": [ { + "title": "No Tunnel", + "required": [ "tunnel_method" ], + "properties": { + "tunnel_method": { + "description": "No ssh tunnel needed to connect to database", + "type": "string", + "const": "NO_TUNNEL", + "order": 0 + } + } + }, { + "title": "SSH Key Authentication", + "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [ "22" ], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host.", + "type": "string", + "order": 3 + }, + "ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + }, { + "title": "Password Authentication", + "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [ "22" ], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host", + "type": "string", + "order": 3 + }, + "tunnel_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 4 + } + } + } ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": true, + "supportsDBT": true, + "supported_destination_sync_modes": [ "overwrite", "append", "append_dedup" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "normalizationConfig": { + "normalizationRepository": "airbyte/normalization", + "normalizationTag": "0.4.0", + "normalizationIntegrationType": "postgres" + }, + "supportsDbt": true + }, { + "destinationDefinitionId": "2340cbba-358e-11ec-8d3d-0242ac130203", + "name": "Pulsar", + "dockerRepository": "airbyte/destination-pulsar", + "dockerImageTag": "0.1.3", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/pulsar", + "icon": "pulsar.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/pulsar", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Pulsar Destination Spec", + "type": "object", + "required": [ "brokers", "use_tls", "topic_type", "topic_tenant", "topic_namespace", "topic_pattern", "compression_type", "send_timeout_ms", "max_pending_messages", "max_pending_messages_across_partitions", "batching_enabled", "batching_max_messages", "batching_max_publish_delay", "block_if_queue_full" ], + "additionalProperties": true, + "properties": { + "brokers": { + "title": "Pulsar brokers", + "description": "A list of host/port pairs to use for establishing the initial connection to the Pulsar cluster.", + "type": "string", + "examples": [ "broker1:6650,broker2:6650" ] + }, + "use_tls": { + "title": "Use TLS", + "description": "Whether to use TLS encryption on the connection.", + "type": "boolean", + "default": false + }, + "topic_type": { + "title": "Topic type", + "description": "It identifies type of topic. Pulsar supports two kind of topics: persistent and non-persistent. In persistent topic, all messages are durably persisted on disk (that means on multiple disks unless the broker is standalone), whereas non-persistent topic does not persist message into storage disk.", + "type": "string", + "default": "persistent", + "enum": [ "persistent", "non-persistent" ] + }, + "topic_tenant": { + "title": "Topic tenant", + "description": "The topic tenant within the instance. Tenants are essential to multi-tenancy in Pulsar, and spread across clusters.", + "type": "string", + "default": "public", + "examples": [ "public" ] + }, + "topic_namespace": { + "title": "Topic namespace", + "description": "The administrative unit of the topic, which acts as a grouping mechanism for related topics. Most topic configuration is performed at the namespace level. Each tenant has one or multiple namespaces.", + "type": "string", + "default": "default", + "examples": [ "default" ] + }, + "topic_pattern": { + "title": "Topic pattern", + "description": "Topic pattern in which the records will be sent. You can use patterns like '{namespace}' and/or '{stream}' to send the message to a specific topic based on these values. Notice that the topic name will be transformed to a standard naming convention.", + "type": "string", + "examples": [ "sample.topic", "{namespace}.{stream}.sample" ] + }, + "topic_test": { + "title": "Test topic", + "description": "Topic to test if Airbyte can produce messages.", + "type": "string", + "examples": [ "test.topic" ] + }, + "producer_name": { + "title": "Producer name", + "description": "Name for the producer. If not filled, the system will generate a globally unique name which can be accessed with.", + "type": "string", + "examples": [ "airbyte-producer" ] + }, + "producer_sync": { + "title": "Sync producer", + "description": "Wait synchronously until the record has been sent to Pulsar.", + "type": "boolean", + "default": false + }, + "compression_type": { + "title": "Compression type", + "description": "Compression type for the producer.", + "type": "string", + "default": "NONE", + "enum": [ "NONE", "LZ4", "ZLIB", "ZSTD", "SNAPPY" ] + }, + "send_timeout_ms": { + "title": "Message send timeout", + "description": "If a message is not acknowledged by a server before the send-timeout expires, an error occurs (in ms).", + "type": "integer", + "default": 30000 + }, + "max_pending_messages": { + "title": "Max pending messages", + "description": "The maximum size of a queue holding pending messages.", + "type": "integer", + "default": 1000 + }, + "max_pending_messages_across_partitions": { + "title": "Max pending messages across partitions", + "description": "The maximum number of pending messages across partitions.", + "type": "integer", + "default": 50000 + }, + "batching_enabled": { + "title": "Enable batching", + "description": "Control whether automatic batching of messages is enabled for the producer.", + "type": "boolean", + "default": true + }, + "batching_max_messages": { + "title": "Batching max messages", + "description": "Maximum number of messages permitted in a batch.", + "type": "integer", + "default": 1000 + }, + "batching_max_publish_delay": { + "title": "Batching max publish delay", + "description": " Time period in milliseconds within which the messages sent will be batched.", + "type": "integer", + "default": 1 + }, + "block_if_queue_full": { + "title": "Block if queue is full", + "description": "If the send operation should block when the outgoing message queue is full.", + "type": "boolean", + "default": false + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "e06ad785-ad6f-4647-b2e8-3027a5c59454", + "name": "RabbitMQ", + "dockerRepository": "airbyte/destination-rabbitmq", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/rabbitmq", + "icon": "pulsar.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/rabbitmq", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Destination Rabbitmq", + "type": "object", + "required": [ "host", "routing_key" ], + "additionalProperties": false, + "properties": { + "ssl": { + "type": "boolean", + "description": "SSL enabled.", + "default": true + }, + "host": { + "type": "string", + "description": "The RabbitMQ host name." + }, + "port": { + "type": "integer", + "description": "The RabbitMQ port." + }, + "virtual_host": { + "type": "string", + "description": "The RabbitMQ virtual host name." + }, + "username": { + "type": "string", + "description": "The username to connect." + }, + "password": { + "type": "string", + "title": "Password", + "description": "The password to connect.", + "airbyte_secret": true + }, + "exchange": { + "type": "string", + "description": "The exchange name." + }, + "routing_key": { + "type": "string", + "description": "The routing key." + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "d4d3fef9-e319-45c2-881a-bd02ce44cc9f", + "name": "Redis", + "dockerRepository": "airbyte/destination-redis", + "dockerImageTag": "0.1.4", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/redis", + "icon": "redis.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/redis", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Redis Destination Spec", + "type": "object", + "required": [ "host", "username", "port", "cache_type" ], + "additionalProperties": false, + "properties": { + "host": { + "title": "Host", + "description": "Redis host to connect to.", + "type": "string", + "examples": [ "localhost,127.0.0.1" ], + "order": 1 + }, + "port": { + "title": "Port", + "description": "Port of Redis.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 6379, + "order": 2 + }, + "username": { + "title": "Username", + "description": "Username associated with Redis.", + "type": "string", + "order": 3 + }, + "password": { + "title": "Password", + "description": "Password associated with Redis.", + "type": "string", + "airbyte_secret": true, + "order": 4 + }, + "ssl": { + "title": "SSL Connection", + "type": "boolean", + "description": "Indicates whether SSL encryption protocol will be used to connect to Redis. It is recommended to use SSL connection if possible.", + "default": false, + "order": 5 + }, + "ssl_mode": { + "title": "SSL Modes", + "description": "SSL connection modes. \n
  • verify-full - This is the most secure mode. Always require encryption and verifies the identity of the source database server", + "type": "object", + "order": 6, + "oneOf": [ { + "title": "disable", + "additionalProperties": false, + "description": "Disable SSL.", + "required": [ "mode" ], + "properties": { + "mode": { + "type": "string", + "const": "disable", + "enum": [ "disable" ], + "default": "disable", + "order": 0 + } + } + }, { + "title": "verify-full", + "additionalProperties": false, + "description": "Verify-full SSL mode.", + "required": [ "mode", "ca_certificate", "client_certificate", "client_key" ], + "properties": { + "mode": { + "type": "string", + "const": "verify-full", + "enum": [ "verify-full" ], + "default": "verify-full", + "order": 0 + }, + "ca_certificate": { + "type": "string", + "title": "CA Certificate", + "description": "CA certificate", + "airbyte_secret": true, + "multiline": true, + "order": 1 + }, + "client_certificate": { + "type": "string", + "title": "Client Certificate", + "description": "Client certificate", + "airbyte_secret": true, + "multiline": true, + "order": 2 + }, + "client_key": { + "type": "string", + "title": "Client Key", + "description": "Client key", + "airbyte_secret": true, + "multiline": true, + "order": 3 + }, + "client_key_password": { + "type": "string", + "title": "Client key password", + "description": "Password for keystorage. If you do not add it - the password will be generated automatically.", + "airbyte_secret": true, + "order": 4 + } + } + } ] + }, + "cache_type": { + "title": "Cache type", + "type": "string", + "default": "hash", + "description": "Redis cache type to store data in.", + "enum": [ "hash" ], + "order": 7 + }, + "tunnel_method": { + "type": "object", + "title": "SSH Tunnel Method", + "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", + "oneOf": [ { + "title": "No Tunnel", + "required": [ "tunnel_method" ], + "properties": { + "tunnel_method": { + "description": "No ssh tunnel needed to connect to database", + "type": "string", + "const": "NO_TUNNEL", + "order": 0 + } + } + }, { + "title": "SSH Key Authentication", + "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [ "22" ], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host.", + "type": "string", + "order": 3 + }, + "ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + }, { + "title": "Password Authentication", + "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [ "22" ], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host", + "type": "string", + "order": 3 + }, + "tunnel_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 4 + } + } + } ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "overwrite", "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "f7a7d195-377f-cf5b-70a5-be6b819019dc", + "name": "Redshift", + "dockerRepository": "airbyte/destination-redshift", + "dockerImageTag": "0.4.5", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/redshift", + "icon": "redshift.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/redshift", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Redshift Destination Spec", + "type": "object", + "required": [ "host", "port", "database", "username", "password", "schema" ], + "additionalProperties": true, + "properties": { + "host": { + "description": "Host Endpoint of the Redshift Cluster (must include the cluster-id, region and end with .redshift.amazonaws.com)", + "type": "string", + "title": "Host", + "order": 1 + }, + "port": { + "description": "Port of the database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 5439, + "examples": [ "5439" ], + "title": "Port", + "order": 2 + }, + "username": { + "description": "Username to use to access the database.", + "type": "string", + "title": "Username", + "order": 3 + }, + "password": { + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "title": "Password", + "order": 4 + }, + "database": { + "description": "Name of the database.", + "type": "string", + "title": "Database", + "order": 5 + }, + "schema": { + "description": "The default schema tables are written to if the source does not specify a namespace. Unless specifically configured, the usual value for this field is \"public\".", + "type": "string", + "examples": [ "public" ], + "default": "public", + "title": "Default Schema", + "order": 6 + }, + "jdbc_url_params": { + "title": "JDBC URL Params", + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", + "type": "string", + "order": 7 + }, + "uploading_method": { + "title": "Uploading Method", + "type": "object", + "description": "The method how the data will be uploaded to the database.", + "order": 8, + "oneOf": [ { + "title": "Standard", + "required": [ "method" ], + "properties": { + "method": { + "type": "string", + "const": "Standard" + } + } + }, { + "title": "S3 Staging", + "required": [ "method", "s3_bucket_name", "s3_bucket_region", "access_key_id", "secret_access_key" ], + "properties": { + "method": { + "type": "string", + "const": "S3 Staging" + }, + "s3_bucket_name": { + "title": "S3 Bucket Name", + "type": "string", + "description": "The name of the staging S3 bucket to use if utilising a COPY strategy. COPY is recommended for production workloads for better speed and scalability. See AWS docs for more details.", + "examples": [ "airbyte.staging" ] + }, + "s3_bucket_path": { + "title": "S3 Bucket Path", + "type": "string", + "description": "The directory under the S3 bucket where data will be written. If not provided, then defaults to the root directory. See path's name recommendations for more details.", + "examples": [ "data_sync/test" ] + }, + "s3_bucket_region": { + "title": "S3 Bucket Region", + "type": "string", + "default": "", + "description": "The region of the S3 staging bucket to use if utilising a COPY strategy. See AWS docs for details.", + "enum": [ "", "us-east-1", "us-east-2", "us-west-1", "us-west-2", "af-south-1", "ap-east-1", "ap-south-1", "ap-northeast-1", "ap-northeast-2", "ap-northeast-3", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "cn-north-1", "cn-northwest-1", "eu-central-1", "eu-north-1", "eu-south-1", "eu-west-1", "eu-west-2", "eu-west-3", "sa-east-1", "me-south-1" ] + }, + "file_name_pattern": { + "type": "string", + "description": "The pattern allows you to set the file-name format for the S3 staging file(s)", + "title": "S3 Filename pattern", + "examples": [ "{date}", "{date:yyyy_MM}", "{timestamp}", "{part_number}", "{sync_id}" ], + "order": 8 + }, + "access_key_id": { + "type": "string", + "description": "This ID grants access to the above S3 staging bucket. Airbyte requires Read and Write permissions to the given bucket. See AWS docs on how to generate an access key ID and secret access key.", + "title": "S3 Key Id", + "airbyte_secret": true + }, + "secret_access_key": { + "type": "string", + "description": "The corresponding secret to the above access key id. See AWS docs on how to generate an access key ID and secret access key.", + "title": "S3 Access Key", + "airbyte_secret": true + }, + "purge_staging_data": { + "title": "Purge Staging Files and Tables", + "type": "boolean", + "description": "Whether to delete the staging files from S3 after completing the sync. See docs for details.", + "default": true + }, + "encryption": { + "title": "Encryption", + "type": "object", + "description": "How to encrypt the staging data", + "default": { + "encryption_type": "none" + }, + "oneOf": [ { + "title": "No encryption", + "description": "Staging data will be stored in plaintext.", + "type": "object", + "required": [ "encryption_type" ], + "properties": { + "encryption_type": { + "type": "string", + "const": "none", + "enum": [ "none" ], + "default": "none" + } + } + }, { + "title": "AES-CBC envelope encryption", + "description": "Staging data will be encrypted using AES-CBC envelope encryption.", + "type": "object", + "required": [ "encryption_type" ], + "properties": { + "encryption_type": { + "type": "string", + "const": "aes_cbc_envelope", + "enum": [ "aes_cbc_envelope" ], + "default": "aes_cbc_envelope" + }, + "key_encrypting_key": { + "type": "string", + "title": "Key", + "description": "The key, base64-encoded. Must be either 128, 192, or 256 bits. Leave blank to have Airbyte generate an ephemeral key for each sync.", + "airbyte_secret": true + } + } + } ] + }, + "file_buffer_count": { + "title": "File Buffer Count", + "type": "integer", + "minimum": 10, + "maximum": 50, + "default": 10, + "description": "Number of file buffers allocated for writing data. Increasing this number is beneficial for connections using Change Data Capture (CDC) and up to the number of streams within a connection. Increasing the number of file buffers past the maximum number of streams has deteriorating effects", + "examples": [ "10" ] + } + } + } ] + }, + "tunnel_method": { + "type": "object", + "title": "SSH Tunnel Method", + "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", + "oneOf": [ { + "title": "No Tunnel", + "required": [ "tunnel_method" ], + "properties": { + "tunnel_method": { + "description": "No ssh tunnel needed to connect to database", + "type": "string", + "const": "NO_TUNNEL", + "order": 0 + } + } + }, { + "title": "SSH Key Authentication", + "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [ "22" ], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host.", + "type": "string", + "order": 3 + }, + "ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + }, { + "title": "Password Authentication", + "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [ "22" ], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host", + "type": "string", + "order": 3 + }, + "tunnel_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 4 + } + } + } ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": true, + "supportsDBT": true, + "supported_destination_sync_modes": [ "overwrite", "append", "append_dedup" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "resourceRequirements": { + "jobSpecific": [ { + "jobType": "sync", + "resourceRequirements": { + "memory_request": "1Gi", + "memory_limit": "1Gi" + } + } ] + }, + "normalizationConfig": { + "normalizationRepository": "airbyte/normalization-redshift", + "normalizationTag": "0.4.0", + "normalizationIntegrationType": "redshift" + }, + "supportsDbt": true + }, { + "destinationDefinitionId": "825c5ee3-ed9a-4dd1-a2b6-79ed722f7b13", + "name": "Redpanda", + "dockerRepository": "airbyte/destination-redpanda", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/redpanda", + "icon": "redpanda.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/redpanda", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Redpanda destination connector", + "type": "object", + "required": [ "bootstrap_servers", "buffer_memory", "compression_type", "retries", "batch_size" ], + "properties": { + "bootstrap_servers": { + "title": "Bootstrap Servers", + "description": "A list of host/port pairs to use for establishing the initial connection to the Redpanda cluster. The client will make use of all servers irrespective of which servers are specified here for bootstrapping—this list only impacts the initial hosts used to discover the full set of servers. This list should be in the form host1:port1,host2:port2,.... Since these servers are just used for the initial connection to discover the full cluster membership (which may change dynamically), this list need not contain the full set of servers (you may want more than one, though, in case a server is down).", + "type": "string", + "examples": [ "redpanda-broker1:9092,redpanda-broker2:9092" ] + }, + "buffer_memory": { + "title": "Buffer Memory", + "description": "The total bytes of memory the producer can use to buffer records waiting to be sent to the server.", + "type": "string", + "examples": 33554432 + }, + "compression_type": { + "title": "Compression Type", + "description": "The compression type for all data generated by the producer.", + "type": "string", + "default": "none", + "enum": [ "none", "gzip", "snappy", "lz4", "zstd" ] + }, + "batch_size": { + "title": "Batch Size", + "description": "The producer will attempt to batch records together into fewer requests whenever multiple records are being sent to the same partition.", + "type": "integer", + "examples": [ 16384 ] + }, + "retries": { + "title": "Retries", + "description": "Setting a value greater than zero will cause the client to resend any record whose send fails with a potentially transient error.", + "type": "integer", + "examples": [ 2147483647 ] + }, + "topic_num_partitions": { + "title": "Number of topic partitions", + "description": "The number of topic partitions which will be created on topic creation", + "type": "integer", + "examples": [ 10 ] + }, + "topic_replication_factor": { + "title": "Topic replication factor", + "description": "The number of topics to which messages will be replicated", + "type": "integer", + "examples": [ 10 ] + }, + "socket_connection_setup_timeout_ms": { + "title": "Socket Connection Setup Timeout", + "description": "The amount of time the client will wait for the socket connection to be established.", + "type": "integer", + "examples": [ 10000 ] + }, + "socket_connection_setup_timeout_max_ms": { + "title": "Socket Connection Setup Max Timeout", + "description": "The maximum amount of time the client will wait for the socket connection to be established. The connection setup timeout will increase exponentially for each consecutive connection failure up to this maximum.", + "type": "integer", + "examples": [ 30000 ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "2c9d93a7-9a17-4789-9de9-f46f0097eb70", + "name": "Rockset", + "dockerRepository": "airbyte/destination-rockset", + "dockerImageTag": "0.1.4", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/rockset", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/rockset", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Rockset Destination Spec", + "type": "object", + "required": [ "api_key", "workspace" ], + "additionalProperties": false, + "properties": { + "api_key": { + "title": "Api Key", + "description": "Rockset api key", + "type": "string", + "order": 0, + "airbyte_secret": true + }, + "workspace": { + "title": "Workspace", + "description": "The Rockset workspace in which collections will be created + written to.", + "type": "string", + "examples": [ "commons", "my_workspace" ], + "default": "commons", + "airbyte_secret": false, + "order": 1 + }, + "api_server": { + "title": "Api Server", + "description": "Rockset api URL", + "type": "string", + "airbyte_secret": false, + "default": "https://api.rs2.usw2.rockset.com", + "pattern": "^https:\\/\\/.*.rockset.com$", + "order": 2 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "append", "overwrite" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "4816b78f-1489-44c1-9060-4b19d5fa9362", + "name": "S3", + "dockerRepository": "airbyte/destination-s3", + "dockerImageTag": "0.3.23", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/s3", + "icon": "s3.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/s3", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "S3 Destination Spec", + "type": "object", + "required": [ "s3_bucket_name", "s3_bucket_path", "s3_bucket_region", "format" ], + "properties": { + "access_key_id": { + "type": "string", + "description": "The access key ID to access the S3 bucket. Airbyte requires Read and Write permissions to the given bucket. Read more here.", + "title": "S3 Key ID", + "airbyte_secret": true, + "examples": [ "A012345678910EXAMPLE" ], + "order": 0 + }, + "secret_access_key": { + "type": "string", + "description": "The corresponding secret to the access key ID. Read more here", + "title": "S3 Access Key", + "airbyte_secret": true, + "examples": [ "a012345678910ABCDEFGH/AbCdEfGhEXAMPLEKEY" ], + "order": 1 + }, + "s3_bucket_name": { + "title": "S3 Bucket Name", + "type": "string", + "description": "The name of the S3 bucket. Read more here.", + "examples": [ "airbyte_sync" ], + "order": 2 + }, + "s3_bucket_path": { + "title": "S3 Bucket Path", + "description": "Directory under the S3 bucket where data will be written. Read more here", + "type": "string", + "examples": [ "data_sync/test" ], + "order": 3 + }, + "s3_bucket_region": { + "title": "S3 Bucket Region", + "type": "string", + "default": "", + "description": "The region of the S3 bucket. See here for all region codes.", + "enum": [ "", "us-east-1", "us-east-2", "us-west-1", "us-west-2", "af-south-1", "ap-east-1", "ap-south-1", "ap-northeast-1", "ap-northeast-2", "ap-northeast-3", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "cn-north-1", "cn-northwest-1", "eu-central-1", "eu-north-1", "eu-south-1", "eu-west-1", "eu-west-2", "eu-west-3", "sa-east-1", "me-south-1", "us-gov-east-1", "us-gov-west-1" ], + "order": 4 + }, + "format": { + "title": "Output Format", + "type": "object", + "description": "Format of the data output. See here for more details", + "oneOf": [ { + "title": "Avro: Apache Avro", + "required": [ "format_type", "compression_codec" ], + "properties": { + "format_type": { + "title": "Format Type", + "type": "string", + "enum": [ "Avro" ], + "default": "Avro", + "order": 0 + }, + "compression_codec": { + "title": "Compression Codec", + "description": "The compression algorithm used to compress data. Default to no compression.", + "type": "object", + "oneOf": [ { + "title": "No Compression", + "required": [ "codec" ], + "properties": { + "codec": { + "type": "string", + "enum": [ "no compression" ], + "default": "no compression" + } + } + }, { + "title": "Deflate", + "required": [ "codec", "compression_level" ], + "properties": { + "codec": { + "type": "string", + "enum": [ "Deflate" ], + "default": "Deflate" + }, + "compression_level": { + "title": "Deflate Level", + "description": "0: no compression & fastest, 9: best compression & slowest.", + "type": "integer", + "default": 0, + "minimum": 0, + "maximum": 9 + } + } + }, { + "title": "bzip2", + "required": [ "codec" ], + "properties": { + "codec": { + "type": "string", + "enum": [ "bzip2" ], + "default": "bzip2" + } + } + }, { + "title": "xz", + "required": [ "codec", "compression_level" ], + "properties": { + "codec": { + "type": "string", + "enum": [ "xz" ], + "default": "xz" + }, + "compression_level": { + "title": "Compression Level", + "description": "See here for details.", + "type": "integer", + "default": 6, + "minimum": 0, + "maximum": 9 + } + } + }, { + "title": "zstandard", + "required": [ "codec", "compression_level" ], + "properties": { + "codec": { + "type": "string", + "enum": [ "zstandard" ], + "default": "zstandard" + }, + "compression_level": { + "title": "Compression Level", + "description": "Negative levels are 'fast' modes akin to lz4 or snappy, levels above 9 are generally for archival purposes, and levels above 18 use a lot of memory.", + "type": "integer", + "default": 3, + "minimum": -5, + "maximum": 22 + }, + "include_checksum": { + "title": "Include Checksum", + "description": "If true, include a checksum with each data block.", + "type": "boolean", + "default": false + } + } + }, { + "title": "snappy", + "required": [ "codec" ], + "properties": { + "codec": { + "type": "string", + "enum": [ "snappy" ], + "default": "snappy" + } + } + } ], + "order": 1 + } + } + }, { + "title": "CSV: Comma-Separated Values", + "required": [ "format_type", "flattening" ], + "properties": { + "format_type": { + "title": "Format Type", + "type": "string", + "enum": [ "CSV" ], + "default": "CSV" + }, + "flattening": { + "type": "string", + "title": "Flattening", + "description": "Whether the input json data should be normalized (flattened) in the output CSV. Please refer to docs for details.", + "default": "No flattening", + "enum": [ "No flattening", "Root level flattening" ] + }, + "compression": { + "title": "Compression", + "type": "object", + "description": "Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \".csv.gz\").", + "oneOf": [ { + "title": "No Compression", + "requires": [ "compression_type" ], + "properties": { + "compression_type": { + "type": "string", + "enum": [ "No Compression" ], + "default": "No Compression" + } + } + }, { + "title": "GZIP", + "requires": [ "compression_type" ], + "properties": { + "compression_type": { + "type": "string", + "enum": [ "GZIP" ], + "default": "GZIP" + } + } + } ] + } + } + }, { + "title": "JSON Lines: Newline-delimited JSON", + "required": [ "format_type" ], + "properties": { + "format_type": { + "title": "Format Type", + "type": "string", + "enum": [ "JSONL" ], + "default": "JSONL" + }, + "flattening": { + "type": "string", + "title": "Flattening", + "description": "Whether the input json data should be normalized (flattened) in the output JSON Lines. Please refer to docs for details.", + "default": "No flattening", + "enum": [ "No flattening", "Root level flattening" ] + }, + "compression": { + "title": "Compression", + "type": "object", + "description": "Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \".jsonl.gz\").", + "oneOf": [ { + "title": "No Compression", + "requires": "compression_type", + "properties": { + "compression_type": { + "type": "string", + "enum": [ "No Compression" ], + "default": "No Compression" + } + } + }, { + "title": "GZIP", + "requires": "compression_type", + "properties": { + "compression_type": { + "type": "string", + "enum": [ "GZIP" ], + "default": "GZIP" + } + } + } ] + } + } + }, { + "title": "Parquet: Columnar Storage", + "required": [ "format_type" ], + "properties": { + "format_type": { + "title": "Format Type", + "type": "string", + "enum": [ "Parquet" ], + "default": "Parquet" + }, + "compression_codec": { + "title": "Compression Codec", + "description": "The compression algorithm used to compress data pages.", + "type": "string", + "enum": [ "UNCOMPRESSED", "SNAPPY", "GZIP", "LZO", "BROTLI", "LZ4", "ZSTD" ], + "default": "UNCOMPRESSED" + }, + "block_size_mb": { + "title": "Block Size (Row Group Size) (MB)", + "description": "This is the size of a row group being buffered in memory. It limits the memory usage when writing. Larger values will improve the IO when reading, but consume more memory when writing. Default: 128 MB.", + "type": "integer", + "default": 128, + "examples": [ 128 ] + }, + "max_padding_size_mb": { + "title": "Max Padding Size (MB)", + "description": "Maximum size allowed as padding to align row groups. This is also the minimum size of a row group. Default: 8 MB.", + "type": "integer", + "default": 8, + "examples": [ 8 ] + }, + "page_size_kb": { + "title": "Page Size (KB)", + "description": "The page size is for compression. A block is composed of pages. A page is the smallest unit that must be read fully to access a single record. If this value is too small, the compression will deteriorate. Default: 1024 KB.", + "type": "integer", + "default": 1024, + "examples": [ 1024 ] + }, + "dictionary_page_size_kb": { + "title": "Dictionary Page Size (KB)", + "description": "There is one dictionary page per column per row group when dictionary encoding is used. The dictionary page size works like the page size but for dictionary. Default: 1024 KB.", + "type": "integer", + "default": 1024, + "examples": [ 1024 ] + }, + "dictionary_encoding": { + "title": "Dictionary Encoding", + "description": "Default: true.", + "type": "boolean", + "default": true + } + } + } ], + "order": 5 + }, + "s3_endpoint": { + "title": "Endpoint", + "type": "string", + "default": "", + "description": "Your S3 endpoint url. Read more here", + "examples": [ "http://localhost:9000" ], + "order": 6 + }, + "s3_path_format": { + "title": "S3 Path Format", + "description": "Format string on how data will be organized inside the S3 bucket directory. Read more here", + "type": "string", + "examples": [ "${NAMESPACE}/${STREAM_NAME}/${YEAR}_${MONTH}_${DAY}_${EPOCH}_" ], + "order": 7 + }, + "file_name_pattern": { + "type": "string", + "description": "The pattern allows you to set the file-name format for the S3 staging file(s)", + "title": "S3 Filename pattern", + "examples": [ "{date}", "{date:yyyy_MM}", "{timestamp}", "{part_number}", "{sync_id}" ], + "order": 8 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "overwrite", "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "resourceRequirements": { + "jobSpecific": [ { + "jobType": "sync", + "resourceRequirements": { + "memory_request": "1Gi", + "memory_limit": "1Gi" + } + } ] + } + }, { + "destinationDefinitionId": "471e5cab-8ed1-49f3-ba11-79c687784737", + "name": "S3 Glue", + "dockerRepository": "airbyte/destination-s3-glue", + "dockerImageTag": "0.1.6", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/s3-glue", + "icon": "s3-glue.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/s3-glue", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "S3 Destination Spec", + "type": "object", + "required": [ "s3_bucket_name", "s3_bucket_path", "s3_bucket_region", "format", "glue_database", "glue_serialization_library" ], + "properties": { + "access_key_id": { + "type": "string", + "description": "The access key ID to access the S3 bucket. Airbyte requires Read and Write permissions to the given bucket. Read more here.", + "title": "S3 Key ID", + "airbyte_secret": true, + "examples": [ "A012345678910EXAMPLE" ], + "order": 0 + }, + "secret_access_key": { + "type": "string", + "description": "The corresponding secret to the access key ID. Read more here", + "title": "S3 Access Key", + "airbyte_secret": true, + "examples": [ "a012345678910ABCDEFGH/AbCdEfGhEXAMPLEKEY" ], + "order": 1 + }, + "s3_bucket_name": { + "title": "S3 Bucket Name", + "type": "string", + "description": "The name of the S3 bucket. Read more here.", + "examples": [ "airbyte_sync" ], + "order": 2 + }, + "s3_bucket_path": { + "title": "S3 Bucket Path", + "description": "Directory under the S3 bucket where data will be written. Read more here", + "type": "string", + "examples": [ "data_sync/test" ], + "order": 3 + }, + "s3_bucket_region": { + "title": "S3 Bucket Region", + "type": "string", + "default": "", + "description": "The region of the S3 bucket. See here for all region codes.", + "enum": [ "", "us-east-1", "us-east-2", "us-west-1", "us-west-2", "af-south-1", "ap-east-1", "ap-south-1", "ap-northeast-1", "ap-northeast-2", "ap-northeast-3", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "cn-north-1", "cn-northwest-1", "eu-central-1", "eu-north-1", "eu-south-1", "eu-west-1", "eu-west-2", "eu-west-3", "sa-east-1", "me-south-1", "us-gov-east-1", "us-gov-west-1" ], + "order": 4 + }, + "format": { + "title": "Output Format", + "type": "object", + "description": "Format of the data output. See here for more details", + "oneOf": [ { + "title": "JSON Lines: Newline-delimited JSON", + "required": [ "format_type" ], + "properties": { + "format_type": { + "title": "Format Type", + "type": "string", + "enum": [ "JSONL" ], + "default": "JSONL" + }, + "compression": { + "title": "Compression", + "type": "object", + "description": "Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \".jsonl.gz\").", + "oneOf": [ { + "title": "No Compression", + "requires": "compression_type", + "properties": { + "compression_type": { + "type": "string", + "enum": [ "No Compression" ], + "default": "No Compression" + } + } + }, { + "title": "GZIP", + "requires": "compression_type", + "properties": { + "compression_type": { + "type": "string", + "enum": [ "GZIP" ], + "default": "GZIP" + } + } + } ] + }, + "flattening": { + "type": "string", + "title": "Flattening", + "description": "Whether the input json data should be normalized (flattened) in the output JSON Lines. Please refer to docs for details.", + "default": "Root level flattening", + "enum": [ "No flattening", "Root level flattening" ] + } + } + } ], + "order": 5 + }, + "s3_endpoint": { + "title": "Endpoint", + "type": "string", + "default": "", + "description": "Your S3 endpoint url. Read more here", + "examples": [ "http://localhost:9000" ], + "order": 6 + }, + "s3_path_format": { + "title": "S3 Path Format", + "description": "Format string on how data will be organized inside the S3 bucket directory. Read more here", + "type": "string", + "examples": [ "${NAMESPACE}/${STREAM_NAME}/${YEAR}_${MONTH}_${DAY}_${EPOCH}_" ], + "order": 7 + }, + "file_name_pattern": { + "type": "string", + "description": "The pattern allows you to set the file-name format for the S3 staging file(s)", + "title": "S3 Filename pattern", + "examples": [ "{date}", "{date:yyyy_MM}", "{timestamp}", "{part_number}", "{sync_id}" ], + "order": 8 + }, + "glue_database": { + "type": "string", + "description": "Name of the glue database for creating the tables, leave blank if no integration", + "title": "Glue database name", + "examples": [ "airbyte_database" ], + "order": 9 + }, + "glue_serialization_library": { + "title": "Serialization Library", + "description": "The library that your query engine will use for reading and writing data in your lake.", + "type": "string", + "enum": [ "org.openx.data.jsonserde.JsonSerDe", "org.apache.hive.hcatalog.data.JsonSerDe" ], + "default": "org.openx.data.jsonserde.JsonSerDe", + "order": 10 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "overwrite", "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "50a559a7-6323-4e33-8aa0-51dfd9dfadac", + "name": "SelectDB", + "dockerRepository": "airbyte/destination-selectdb", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/selectdb", + "icon": "select.db", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/selectdb", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "SelectDB Destination Spec", + "type": "object", + "required": [ "load_url", "jdbc_url", "cluster_name", "user_name", "password", "database" ], + "properties": { + "load_url": { + "title": "loadURL", + "description": "load host and port: xxx.privatelink.aliyun.com:47057", + "type": "string", + "order": 0 + }, + "jdbc_url": { + "title": "jdbcURL", + "description": "jdbc host and port: xxx.privatelink.aliyun.com:30523", + "type": "string", + "order": 1 + }, + "cluster_name": { + "title": "ClusterName", + "description": "clusterName of SelectDB", + "type": "string", + "order": 2 + }, + "user_name": { + "title": "UserName", + "description": "Username to use to access the database.", + "type": "string", + "order": 3 + }, + "password": { + "title": "Password", + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 4 + }, + "database": { + "title": "DataBase Name", + "description": "Name of the database.", + "type": "string", + "order": 5 + } + } + }, + "supportsIncremental": false, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "append", "overwrite" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "e9810f61-4bab-46d2-bb22-edfc902e0644", + "name": "SFTP-JSON", + "dockerRepository": "airbyte/destination-sftp-json", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/sftp-json", + "icon": "sftp.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/sftp-json", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Destination SFTP JSON", + "type": "object", + "required": [ "host", "username", "password", "destination_path" ], + "additionalProperties": false, + "properties": { + "host": { + "title": "Host", + "description": "Hostname of the SFTP server.", + "type": "string", + "order": 0 + }, + "port": { + "title": "Port", + "description": "Port of the SFTP server.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [ 22 ], + "order": 1 + }, + "username": { + "title": "User", + "description": "Username to use to access the SFTP server.", + "type": "string", + "order": 2 + }, + "password": { + "title": "Password", + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 3 + }, + "destination_path": { + "title": "Destination path", + "type": "string", + "description": "Path to the directory where json files will be written.", + "examples": [ "/json_data" ], + "order": 4 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "overwrite", "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "424892c4-daac-4491-b35d-c6688ba547ba", + "name": "Snowflake", + "dockerRepository": "airbyte/destination-snowflake", + "dockerImageTag": "0.4.61", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/snowflake", + "icon": "snowflake.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/snowflake", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Snowflake Destination Spec", + "type": "object", + "required": [ "host", "role", "warehouse", "database", "schema", "username" ], + "additionalProperties": true, + "properties": { + "host": { + "description": "Enter your Snowflake account's locator (in the format ...snowflakecomputing.com)", + "examples": [ "accountname.us-east-2.aws.snowflakecomputing.com", "accountname.snowflakecomputing.com" ], + "type": "string", + "title": "Host", + "pattern": "^(http(s)?:\\/\\/)?([^./?#]+\\.)?([^./?#]+\\.)?([^./?#]+\\.)?([^./?#]+\\.snowflakecomputing\\.com)$", + "pattern_descriptor": "{account_name}.snowflakecomputing.com or {accountname}.{aws_location}.aws.snowflakecomputing.com", + "order": 0 + }, + "role": { + "description": "Enter the role that you want to use to access Snowflake", + "examples": [ "AIRBYTE_ROLE" ], + "type": "string", + "title": "Role", + "order": 1 + }, + "warehouse": { + "description": "Enter the name of the warehouse that you want to sync data into", + "examples": [ "AIRBYTE_WAREHOUSE" ], + "type": "string", + "title": "Warehouse", + "order": 2 + }, + "database": { + "description": "Enter the name of the database you want to sync data into", + "examples": [ "AIRBYTE_DATABASE" ], + "type": "string", + "title": "Database", + "order": 3 + }, + "schema": { + "description": "Enter the name of the default schema", + "examples": [ "AIRBYTE_SCHEMA" ], + "type": "string", + "title": "Default Schema", + "order": 4 + }, + "username": { + "description": "Enter the name of the user you want to use to access the database", + "examples": [ "AIRBYTE_USER" ], + "type": "string", + "title": "Username", + "order": 5 + }, + "credentials": { + "title": "Authorization Method", + "description": "", + "type": "object", + "oneOf": [ { + "title": "OAuth2.0", + "type": "object", + "order": 0, + "required": [ "access_token", "refresh_token" ], + "properties": { + "auth_type": { + "type": "string", + "const": "OAuth2.0", + "enum": [ "OAuth2.0" ], + "default": "OAuth2.0", + "order": 0 + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "Enter your application's Client ID", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "Enter your application's Client secret", + "airbyte_secret": true + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "Enter you application's Access Token", + "airbyte_secret": true + }, + "refresh_token": { + "type": "string", + "title": "Refresh Token", + "description": "Enter your application's Refresh Token", + "airbyte_secret": true + } + } + }, { + "title": "Key Pair Authentication", + "type": "object", + "order": 1, + "required": [ "private_key" ], + "properties": { + "auth_type": { + "type": "string", + "const": "Key Pair Authentication", + "enum": [ "Key Pair Authentication" ], + "default": "Key Pair Authentication", + "order": 0 + }, + "private_key": { + "type": "string", + "title": "Private Key", + "description": "RSA Private key to use for Snowflake connection. See the docs for more information on how to obtain this key.", + "multiline": true, + "airbyte_secret": true + }, + "private_key_password": { + "type": "string", + "title": "Passphrase", + "description": "Passphrase for private key", + "airbyte_secret": true + } + } + }, { + "title": "Username and Password", + "type": "object", + "required": [ "password" ], + "order": 2, + "properties": { + "auth_type": { + "type": "string", + "const": "Username and Password", + "enum": [ "Username and Password" ], + "default": "Username and Password", + "order": 0 + }, + "password": { + "description": "Enter the password associated with the username.", + "type": "string", + "airbyte_secret": true, + "title": "Password", + "order": 1 + } + } + } ], + "order": 6 + }, + "jdbc_url_params": { + "description": "Enter the additional properties to pass to the JDBC URL string when connecting to the database (formatted as key=value pairs separated by the symbol &). Example: key1=value1&key2=value2&key3=value3", + "title": "JDBC URL Params", + "type": "string", + "order": 7 + }, + "loading_method": { + "type": "object", + "title": "Data Staging Method", + "description": "Select a data staging method", + "order": 8, + "oneOf": [ { + "title": "Select another option", + "description": "Select another option", + "required": [ "method" ], + "properties": { + "method": { + "title": "", + "description": "", + "type": "string", + "enum": [ "Standard" ], + "default": "Standard" + } + } + }, { + "title": "[Recommended] Internal Staging", + "description": "Recommended for large production workloads for better speed and scalability.", + "required": [ "method" ], + "properties": { + "method": { + "title": "", + "description": "", + "type": "string", + "enum": [ "Internal Staging" ], + "default": "Internal Staging" + } + } + }, { + "title": "AWS S3 Staging", + "description": "Recommended for large production workloads for better speed and scalability.", + "required": [ "method", "s3_bucket_name", "access_key_id", "secret_access_key" ], + "properties": { + "method": { + "title": "", + "description": "", + "type": "string", + "enum": [ "S3 Staging" ], + "default": "S3 Staging", + "order": 0 + }, + "s3_bucket_name": { + "title": "S3 Bucket Name", + "type": "string", + "description": "Enter your S3 bucket name", + "examples": [ "airbyte.staging" ], + "order": 1 + }, + "s3_bucket_region": { + "title": "S3 Bucket Region", + "type": "string", + "default": "", + "description": "Enter the region where your S3 bucket resides", + "enum": [ "", "us-east-1", "us-east-2", "us-west-1", "us-west-2", "af-south-1", "ap-east-1", "ap-south-1", "ap-northeast-1", "ap-northeast-2", "ap-northeast-3", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "cn-north-1", "cn-northwest-1", "eu-central-1", "eu-west-1", "eu-west-2", "eu-west-3", "eu-south-1", "eu-north-1", "sa-east-1", "me-south-1" ], + "order": 2 + }, + "access_key_id": { + "type": "string", + "description": "Enter your AWS access key ID. Airbyte requires Read and Write permissions on your S3 bucket ", + "title": "AWS access key ID", + "airbyte_secret": true, + "order": 3 + }, + "secret_access_key": { + "type": "string", + "description": "Enter your AWS secret access key", + "title": "AWS secret access key", + "airbyte_secret": true, + "order": 4 + }, + "purge_staging_data": { + "title": "Purge Staging Files and Tables", + "type": "boolean", + "description": "Toggle to delete staging files from the S3 bucket after a successful sync", + "default": true, + "order": 5 + }, + "encryption": { + "title": "Encryption", + "type": "object", + "description": "Choose a data encryption method for the staging data", + "default": { + "encryption_type": "none" + }, + "order": 6, + "oneOf": [ { + "title": "No encryption", + "description": "Staging data will be stored in plaintext.", + "type": "object", + "required": [ "encryption_type" ], + "properties": { + "encryption_type": { + "type": "string", + "const": "none", + "enum": [ "none" ], + "default": "none" + } + } + }, { + "title": "AES-CBC envelope encryption", + "description": "Staging data will be encrypted using AES-CBC envelope encryption.", + "type": "object", + "required": [ "encryption_type" ], + "properties": { + "encryption_type": { + "type": "string", + "const": "aes_cbc_envelope", + "enum": [ "aes_cbc_envelope" ], + "default": "aes_cbc_envelope" + }, + "key_encrypting_key": { + "type": "string", + "title": "Key", + "description": "The key, base64-encoded. Must be either 128, 192, or 256 bits. Leave blank to have Airbyte generate an ephemeral key for each sync.", + "airbyte_secret": true + } + } + } ] + }, + "file_name_pattern": { + "type": "string", + "description": "The pattern allows you to set the file-name format for the S3 staging file(s)", + "title": "S3 Filename pattern", + "examples": [ "{date}", "{date:yyyy_MM}", "{timestamp}", "{part_number}", "{sync_id}" ], + "order": 7 + } + } + }, { + "title": "Google Cloud Storage Staging", + "description": "Recommended for large production workloads for better speed and scalability.", + "required": [ "method", "project_id", "bucket_name", "credentials_json" ], + "properties": { + "method": { + "title": "", + "description": "", + "type": "string", + "enum": [ "GCS Staging" ], + "default": "GCS Staging", + "order": 0 + }, + "project_id": { + "title": "Google Cloud project ID", + "type": "string", + "description": "Enter the Google Cloud project ID", + "examples": [ "my-project" ], + "order": 1 + }, + "bucket_name": { + "title": "Cloud Storage bucket name", + "type": "string", + "description": "Enter the Cloud Storage bucket name", + "examples": [ "airbyte-staging" ], + "order": 2 + }, + "credentials_json": { + "title": "Google Application Credentials", + "type": "string", + "description": "Enter your Google Cloud service account key in the JSON format with read/write access to your Cloud Storage staging bucket", + "airbyte_secret": true, + "multiline": true, + "order": 3 + } + } + }, { + "title": "Azure Blob Storage Staging", + "description": "Recommended for large production workloads for better speed and scalability.", + "required": [ "method", "azure_blob_storage_account_name", "azure_blob_storage_container_name", "azure_blob_storage_sas_token" ], + "properties": { + "method": { + "title": "", + "description": "", + "type": "string", + "enum": [ "Azure Blob Staging" ], + "default": "Azure Blob Staging", + "order": 0 + }, + "azure_blob_storage_endpoint_domain_name": { + "title": "Azure Blob Storage Endpoint", + "type": "string", + "default": "blob.core.windows.net", + "description": "Enter the Azure Blob Storage endpoint domain name", + "examples": [ "blob.core.windows.net" ], + "order": 1 + }, + "azure_blob_storage_account_name": { + "title": "Azure Blob Storage account name", + "type": "string", + "description": "Enter your Azure Blob Storage account name", + "examples": [ "airbyte5storage" ], + "order": 2 + }, + "azure_blob_storage_container_name": { + "title": "Azure Blob Storage Container Name", + "type": "string", + "description": "Enter your Azure Blob Storage container name", + "examples": [ "airbytetestcontainername" ], + "order": 3 + }, + "azure_blob_storage_sas_token": { + "title": "SAS Token", + "type": "string", + "airbyte_secret": true, + "description": "Enter the Shared access signature (SAS) token to grant Snowflake limited access to objects in your Azure Blob Storage account", + "examples": [ "?sv=2016-05-31&ss=b&srt=sco&sp=rwdl&se=2018-06-27T10:05:50Z&st=2017-06-27T02:05:50Z&spr=https,http&sig=bgqQwoXwxzuD2GJfagRg7VOS8hzNr3QLT7rhS8OFRLQ%3D" ], + "order": 4 + } + } + } ] + }, + "file_buffer_count": { + "title": "File Buffer Count", + "type": "integer", + "minimum": 10, + "maximum": 50, + "default": 10, + "description": "Number of file buffers allocated for writing data. Increasing this number is beneficial for connections using Change Data Capture (CDC) and up to the number of streams within a connection. Increasing the number of file buffers past the maximum number of streams has deteriorating effects", + "examples": [ "10" ], + "order": 9 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": true, + "supportsDBT": true, + "supported_destination_sync_modes": [ "overwrite", "append", "append_dedup" ], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": [ "credentials", "auth_type" ], + "predicate_value": "OAuth2.0", + "oauth_config_specification": { + "oauth_user_input_from_connector_config_specification": { + "type": "object", + "properties": { + "host": { + "type": "string", + "path_in_connector_config": [ "host" ] + } + } + }, + "complete_oauth_output_specification": { + "type": "object", + "properties": { + "access_token": { + "type": "string", + "path_in_connector_config": [ "credentials", "access_token" ] + }, + "refresh_token": { + "type": "string", + "path_in_connector_config": [ "credentials", "refresh_token" ] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_id" ] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_secret" ] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "resourceRequirements": { + "jobSpecific": [ { + "jobType": "sync", + "resourceRequirements": { + "memory_request": "1Gi", + "memory_limit": "1Gi" + } + } ] + }, + "normalizationConfig": { + "normalizationRepository": "airbyte/normalization-snowflake", + "normalizationTag": "0.4.0", + "normalizationIntegrationType": "snowflake" + }, + "supportsDbt": true + }, { + "destinationDefinitionId": "294a4790-429b-40ae-9516-49826b9702e1", + "name": "MariaDB ColumnStore", + "dockerRepository": "airbyte/destination-mariadb-columnstore", + "dockerImageTag": "0.1.7", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mariadb-columnstore", + "icon": "mariadb.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mariadb-columnstore", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "MariaDB Columnstore Destination Spec", + "type": "object", + "required": [ "host", "port", "username", "database" ], + "additionalProperties": true, + "properties": { + "host": { + "title": "Host", + "description": "The Hostname of the database.", + "type": "string", + "order": 0 + }, + "port": { + "title": "Port", + "description": "The Port of the database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 3306, + "examples": [ "3306" ], + "order": 1 + }, + "database": { + "title": "Database", + "description": "Name of the database.", + "type": "string", + "order": 2 + }, + "username": { + "title": "Username", + "description": "The Username which is used to access the database.", + "type": "string", + "order": 3 + }, + "password": { + "title": "Password", + "description": "The Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 4 + }, + "jdbc_url_params": { + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", + "title": "JDBC URL Params", + "type": "string", + "order": 5 + }, + "tunnel_method": { + "type": "object", + "title": "SSH Tunnel Method", + "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", + "oneOf": [ { + "title": "No Tunnel", + "required": [ "tunnel_method" ], + "properties": { + "tunnel_method": { + "description": "No ssh tunnel needed to connect to database", + "type": "string", + "const": "NO_TUNNEL", + "order": 0 + } + } + }, { + "title": "SSH Key Authentication", + "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [ "22" ], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host.", + "type": "string", + "order": 3 + }, + "ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + }, { + "title": "Password Authentication", + "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [ "22" ], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host", + "type": "string", + "order": 3 + }, + "tunnel_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 4 + } + } + } ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "overwrite", "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "eebd85cf-60b2-4af6-9ba0-edeca01437b0", + "name": "Streamr", + "dockerRepository": "ghcr.io/devmate-cloud/streamr-airbyte-connectors", + "dockerImageTag": "0.0.1", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/streamr", + "icon": "streamr.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/streamr", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Destination Streamr", + "type": "object", + "required": [ "privateKey", "streamId" ], + "additionalProperties": false, + "properties": { + "privateKey": { + "type": "string", + "description": "You private key on Streamr", + "airbyte_secret": true + }, + "streamId": { + "type": "string", + "description": "Your full Stream ID", + "examples": [ "0x0d0102474519cd2fc1b3e3f962a87e39cbcbead2/test-streamr" ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "append", "append_dedup" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "3dc6f384-cd6b-4be3-ad16-a41450899bf0", + "name": "Scylla", + "dockerRepository": "airbyte/destination-scylla", + "dockerImageTag": "0.1.3", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/scylla", + "icon": "scylla.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/scylla", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Scylla Destination Spec", + "type": "object", + "required": [ "keyspace", "username", "password", "address", "port" ], + "additionalProperties": true, + "properties": { + "keyspace": { + "title": "Keyspace", + "description": "Default Scylla keyspace to create data in.", + "type": "string", + "order": 0 + }, + "username": { + "title": "Username", + "description": "Username to use to access Scylla.", + "type": "string", + "order": 1 + }, + "password": { + "title": "Password", + "description": "Password associated with Scylla.", + "type": "string", + "airbyte_secret": true, + "order": 2 + }, + "address": { + "title": "Address", + "description": "Address to connect to.", + "type": "string", + "order": 3 + }, + "port": { + "title": "Port", + "description": "Port of Scylla.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 9042, + "order": 4 + }, + "replication": { + "title": "Replication factor", + "type": "integer", + "description": "Indicates to how many nodes the data should be replicated to.", + "default": 1, + "order": 5 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "overwrite", "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "a4cbd2d1-8dbe-4818-b8bc-b90ad782d12a", + "name": "Google Sheets", + "dockerRepository": "airbyte/destination-google-sheets", + "dockerImageTag": "0.1.2", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/google-sheets", + "icon": "google-sheets.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/google-sheets", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Destination Google Sheets", + "type": "object", + "required": [ "spreadsheet_id", "credentials" ], + "additionalProperties": false, + "properties": { + "spreadsheet_id": { + "type": "string", + "title": "Spreadsheet Link", + "description": "The link to your spreadsheet. See this guide for more details.", + "examples": [ "https://docs.google.com/spreadsheets/d/1hLd9Qqti3UyLXZB2aFfUWDT7BG/edit" ] + }, + "credentials": { + "type": "object", + "title": "Authentication via Google (OAuth)", + "description": "Google API Credentials for connecting to Google Sheets and Google Drive APIs", + "required": [ "client_id", "client_secret", "refresh_token" ], + "properties": { + "client_id": { + "title": "Client ID", + "type": "string", + "description": "The Client ID of your Google Sheets developer application.", + "airbyte_secret": true + }, + "client_secret": { + "title": "Client Secret", + "type": "string", + "description": "The Client Secret of your Google Sheets developer application.", + "airbyte_secret": true + }, + "refresh_token": { + "title": "Refresh Token", + "type": "string", + "description": "The token for obtaining new access token.", + "airbyte_secret": true + } + } + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "overwrite", "append", "append_dedup" ], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": [ "credentials" ], + "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], + "oauthFlowOutputParameters": [ [ "refresh_token" ] ] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "b76be0a6-27dc-4560-95f6-2623da0bd7b6", + "name": "Local SQLite", + "dockerRepository": "airbyte/destination-sqlite", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/local-sqlite", + "icon": "sqlite.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/sqlite", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Destination Sqlite", + "type": "object", + "required": [ "destination_path" ], + "additionalProperties": false, + "properties": { + "destination_path": { + "type": "string", + "description": "Path to the sqlite.db file. The file will be placed inside that local mount. For more information check out our docs", + "example": "/local/sqlite.db" + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "overwrite", "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "06ec60c7-7468-45c0-91ac-174f6e1a788b", + "name": "TiDB", + "dockerRepository": "airbyte/destination-tidb", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/tidb", + "icon": "tidb.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/tidb", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "TiDB Destination Spec", + "type": "object", + "required": [ "host", "port", "username", "database" ], + "additionalProperties": true, + "properties": { + "host": { + "title": "Host", + "description": "Hostname of the database.", + "type": "string", + "order": 0 + }, + "port": { + "title": "Port", + "description": "Port of the database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 4000, + "examples": [ "4000" ], + "order": 1 + }, + "database": { + "title": "Database", + "description": "Name of the database.", + "type": "string", + "order": 2 + }, + "username": { + "title": "User", + "description": "Username to use to access the database.", + "type": "string", + "order": 3 + }, + "password": { + "title": "Password", + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "default": "", + "order": 4 + }, + "ssl": { + "title": "SSL Connection", + "description": "Encrypt data using SSL.", + "type": "boolean", + "default": false, + "order": 5 + }, + "jdbc_url_params": { + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", + "title": "JDBC URL Params", + "type": "string", + "order": 6 + }, + "tunnel_method": { + "type": "object", + "title": "SSH Tunnel Method", + "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", + "oneOf": [ { + "title": "No Tunnel", + "required": [ "tunnel_method" ], + "properties": { + "tunnel_method": { + "description": "No ssh tunnel needed to connect to database", + "type": "string", + "const": "NO_TUNNEL", + "order": 0 + } + } + }, { + "title": "SSH Key Authentication", + "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [ "22" ], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host.", + "type": "string", + "order": 3 + }, + "ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + }, { + "title": "Password Authentication", + "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [ "22" ], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host", + "type": "string", + "order": 3 + }, + "tunnel_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 4 + } + } + } ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": true, + "supportsDBT": true, + "supported_destination_sync_modes": [ "overwrite", "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "normalizationConfig": { + "normalizationRepository": "airbyte/normalization-tidb", + "normalizationTag": "0.4.0", + "normalizationIntegrationType": "tidb" + }, + "supportsDbt": true + }, { + "destinationDefinitionId": "36be8dc6-9851-49af-b776-9d4c30e4ab6a", + "name": "Typesense", + "dockerRepository": "airbyte/destination-typesense", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/typesense", + "icon": "typesense.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/typesense", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Destination Typesense", + "type": "object", + "required": [ "api_key", "host" ], + "additionalProperties": false, + "properties": { + "api_key": { + "title": "API Key", + "type": "string", + "description": "Typesense API Key", + "order": 0 + }, + "host": { + "title": "Host", + "type": "string", + "description": "Hostname of the Typesense instance without protocol.", + "order": 1 + }, + "port": { + "title": "Port", + "type": "string", + "description": "Port of the Typesense instance. Ex: 8108, 80, 443. Default is 443", + "order": 2 + }, + "protocol": { + "title": "Protocol", + "type": "string", + "description": "Protocol of the Typesense instance. Ex: http or https. Default is https", + "order": 3 + }, + "batch_size": { + "title": "Batch size", + "type": "string", + "description": "How many documents should be imported together. Default 1000", + "order": 4 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "overwrite", "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "2300fdcf-a532-419f-9f24-a014336e7966", + "name": "YugabyteDB", + "dockerRepository": "airbyte/destination-yugabytedb", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/yugabytedb", + "icon": "yugabytedb.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/destinations/yugabytedb", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Yugabytedb destination spec", + "type": "object", + "required": [ "host", "port", "username", "database", "schema" ], + "additionalProperties": true, + "properties": { + "host": { + "title": "Host", + "description": "The Hostname of the database.", + "type": "string", + "order": 0 + }, + "port": { + "title": "Port", + "description": "The Port of the database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 3306, + "examples": [ "3306" ], + "order": 1 + }, + "database": { + "title": "Database", + "description": "Name of the database.", + "type": "string", + "order": 2 + }, + "username": { + "title": "Username", + "description": "The Username which is used to access the database.", + "type": "string", + "order": 4 + }, + "schema": { + "title": "Default Schema", + "description": "The default schema tables are written to if the source does not specify a namespace. The usual value for this field is \"public\".", + "type": "string", + "examples": [ "public" ], + "default": "public", + "order": 3 + }, + "password": { + "title": "Password", + "description": "The Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 5 + }, + "jdbc_url_params": { + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", + "title": "JDBC URL Params", + "type": "string", + "order": 6 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "overwrite", "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "302e4d8e-08d3-4098-acd4-ac67ca365b88", + "name": "Databend", + "dockerRepository": "airbyte/destination-databend", + "dockerImageTag": "0.1.2", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/databend", + "icon": "databend.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/databend", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Destination Databend", + "type": "object", + "required": [ "host", "username", "database" ], + "additionalProperties": true, + "properties": { + "host": { + "title": "Host", + "description": "Hostname of the database.", + "type": "string", + "order": 0 + }, + "port": { + "title": "Port", + "description": "Port of the database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 443, + "examples": [ "443" ], + "order": 2 + }, + "database": { + "title": "DB Name", + "description": "Name of the database.", + "type": "string", + "order": 3 + }, + "table": { + "title": "Default Table", + "description": "The default table was written to.", + "type": "string", + "examples": [ "default" ], + "default": "default", + "order": 4 + }, + "username": { + "title": "User", + "description": "Username to use to access the database.", + "type": "string", + "order": 5 + }, + "password": { + "title": "Password", + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 6 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "overwrite", "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "58e6f9da-904e-11ed-a1eb-0242ac120002", + "name": "Teradata Vantage", + "dockerRepository": "airbyte/destination-teradata", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.io/integrations/destinations/teradata", + "icon": "teradata.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/destinations/teradata", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Teradata Destination Spec", + "type": "object", + "required": [ "host", "username" ], + "additionalProperties": true, + "properties": { + "host": { + "title": "Host", + "description": "Hostname of the database.", + "type": "string", + "order": 0 + }, + "username": { + "title": "User", + "description": "Username to use to access the database.", + "type": "string", + "order": 1 + }, + "password": { + "title": "Password", + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 2 + }, + "schema": { + "title": "Default Schema", + "description": "The default schema tables are written to if the source does not specify a namespace. The usual value for this field is \"public\".", + "type": "string", + "examples": [ "airbyte_td" ], + "default": "airbyte_td", + "order": 3 + }, + "ssl": { + "title": "SSL Connection", + "description": "Encrypt data using SSL. When activating SSL, please select one of the connection modes.", + "type": "boolean", + "default": false, + "order": 5 + }, + "ssl_mode": { + "title": "SSL modes", + "description": "SSL connection modes. \n disable - Chose this mode to disable encryption of communication between Airbyte and destination database\n allow - Chose this mode to enable encryption only when required by the destination database\n prefer - Chose this mode to allow unencrypted connection only if the destination database does not support encryption\n require - Chose this mode to always require encryption. If the destination database server does not support encryption, connection will fail\n verify-ca - Chose this mode to always require encryption and to verify that the destination database server has a valid SSL certificate\n verify-full - This is the most secure mode. Chose this mode to always require encryption and to verify the identity of the destination database server\n See more information - in the docs.", + "type": "object", + "order": 6, + "oneOf": [ { + "title": "disable", + "additionalProperties": false, + "description": "Disable SSL.", + "required": [ "mode" ], + "properties": { + "mode": { + "type": "string", + "const": "disable", + "enum": [ "disable" ], + "default": "disable", + "order": 0 + } + } + }, { + "title": "allow", + "additionalProperties": false, + "description": "Allow SSL mode.", + "required": [ "mode" ], + "properties": { + "mode": { + "type": "string", + "const": "allow", + "enum": [ "allow" ], + "default": "allow", + "order": 0 + } + } + }, { + "title": "prefer", + "additionalProperties": false, + "description": "Prefer SSL mode.", + "required": [ "mode" ], + "properties": { + "mode": { + "type": "string", + "const": "prefer", + "enum": [ "prefer" ], + "default": "prefer", + "order": 0 + } + } + }, { + "title": "require", + "additionalProperties": false, + "description": "Require SSL mode.", + "required": [ "mode" ], + "properties": { + "mode": { + "type": "string", + "const": "require", + "enum": [ "require" ], + "default": "require", + "order": 0 + } + } + }, { + "title": "verify-ca", + "additionalProperties": false, + "description": "Verify-ca SSL mode.", + "required": [ "mode", "ssl_ca_certificate" ], + "properties": { + "mode": { + "type": "string", + "const": "verify-ca", + "enum": [ "verify-ca" ], + "default": "verify-ca", + "order": 0 + }, + "ssl_ca_certificate": { + "type": "string", + "title": "CA certificate", + "description": "Specifies the file name of a PEM file that contains Certificate Authority (CA) certificates for use with SSLMODE=verify-ca.\n See more information - in the docs.", + "airbyte_secret": true, + "multiline": true, + "order": 1 + } + } + }, { + "title": "verify-full", + "additionalProperties": false, + "description": "Verify-full SSL mode.", + "required": [ "mode", "ssl_ca_certificate" ], + "properties": { + "mode": { + "type": "string", + "const": "verify-full", + "enum": [ "verify-full" ], + "default": "verify-full", + "order": 0 + }, + "ssl_ca_certificate": { + "type": "string", + "title": "CA certificate", + "description": "Specifies the file name of a PEM file that contains Certificate Authority (CA) certificates for use with SSLMODE=verify-full.\n See more information - in the docs.", + "airbyte_secret": true, + "multiline": true, + "order": 1 + } + } + } ] + }, + "jdbc_url_params": { + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", + "title": "JDBC URL Params", + "type": "string", + "order": 7 + } + } + }, + "supportsIncremental": false, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "overwrite", "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "7b7d7a0d-954c-45a0-bcfc-39a634b97736", + "name": "Weaviate", + "dockerRepository": "airbyte/destination-weaviate", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/weaviate", + "icon": "weaviate.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/weaviate", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Destination Weaviate", + "type": "object", + "required": [ "url" ], + "additionalProperties": false, + "properties": { + "url": { + "type": "string", + "description": "The URL to the weaviate instance", + "examples": [ "http://localhost:8080", "https://your-instance.semi.network" ] + }, + "username": { + "type": "string", + "description": "Username used with OIDC authentication", + "examples": [ "xyz@weaviate.io" ] + }, + "password": { + "type": "string", + "description": "Password used with OIDC authentication", + "airbyte_secret": true + }, + "batch_size": { + "type": "integer", + "description": "Batch size for writing to Weaviate", + "default": 100 + }, + "vectors": { + "type": "string", + "description": "Comma separated list of strings of `stream_name.vector_column_name` to specify which field holds the vectors.", + "examples": [ "my_table.my_vector_column, another_table.vector", "mytable.vector" ] + }, + "id_schema": { + "type": "string", + "description": "Comma separated list of strings of `stream_name.id_column_name` to specify which field holds the ID of the record.", + "examples": [ "my_table.my_id_column, another_table.id", "users.user_id" ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "append", "overwrite" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "destinationDefinitionId": "94bd199c-2ff0-4aa2-b98e-17f0acb72610", + "name": "DuckDB", + "dockerRepository": "airbyte/destination-duckdb", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.io/integrations/destinations/duckdb", + "icon": "duckdb.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/destinations/duckdb", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "DuckDB Destination Spec", + "type": "object", + "required": [ "destination_path" ], + "additionalProperties": false, + "properties": { + "destination_path": { + "type": "string", + "description": "Path to the destination.duckdb file. The file will be placed inside that local mount. For more information check out our docs", + "example": "/local/destination.duckdb" + }, + "schema": { + "type": "string", + "description": "database schema, default for duckdb is main", + "example": "main" + } + } + }, + "supportsIncremental": true, + "supportsNormalization": true, + "supportsDBT": true, + "supported_destination_sync_modes": [ "overwrite", "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + } ], + "sources": [ { + "sourceDefinitionId": "9f32dab3-77cb-45a1-9d33-347aa5fbe363", + "name": "ActiveCampaign", + "dockerRepository": "airbyte/source-activecampaign", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/activecampaign", + "icon": "activecampaign.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/activecampaign", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Activecampaign Spec", + "type": "object", + "required": [ "api_key", "account_username" ], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "description": "API Key", + "airbyte_secret": true + }, + "account_username": { + "type": "string", + "description": "Account Username" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "d3b7fa46-111b-419a-998a-d7f046f6d66d", + "name": "Adjust", + "dockerRepository": "airbyte/source-adjust", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/adjust", + "icon": "adjust.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://raw.githubusercontent.com/appchoose/airbyte/feature/source-adjust/docs/integrations/sources/adjust.md", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Adjust reporting API connector.", + "properties": { + "additional_metrics": { + "description": "Metrics names that are not pre-defined, such as cohort metrics or app specific metrics.", + "items": { + "type": "string" + }, + "order": 3, + "title": "Additional metrics for ingestion", + "type": "array" + }, + "api_token": { + "airbyte_secret": true, + "description": "Adjust API key, see https://help.adjust.com/en/article/report-service-api-authentication", + "order": 0, + "title": "API Token", + "type": "string" + }, + "dimensions": { + "description": "Dimensions allow a user to break down metrics into groups using one or several parameters. For example, the number of installs by date, country and network. See https://help.adjust.com/en/article/reports-endpoint#dimensions for more information about the dimensions.", + "items": { + "enum": [ "os_name", "device_type", "app", "app_token", "store_id", "store_type", "app_network", "currency", "currency_code", "network", "campaign", "campaign_network", "campaign_id_network", "adgroup", "adgroup_network", "adgroup_id_network", "source_network", "source_id_network", "creative", "creative_network", "creative_id_network", "country", "country_code", "region", "partner_name", "partner_id" ], + "type": "string" + }, + "minItems": 1, + "order": 4, + "title": "Dimensions", + "type": "array", + "uniqueItems": true + }, + "ingest_start": { + "description": "Data ingest start date.", + "format": "date", + "order": 1, + "title": "Ingest Start Date", + "type": "string" + }, + "metrics": { + "description": "Select at least one metric to query.", + "items": { + "enum": [ "network_cost", "network_cost_diff", "network_clicks", "network_impressions", "network_installs", "network_installs_diff", "network_ecpc", "network_ecpi", "network_ecpm", "arpdau_ad", "arpdau", "arpdau_iap", "ad_impressions", "ad_rpm", "ad_revenue", "cohort_ad_revenue", "cost", "adjust_cost", "all_revenue", "cohort_all_revenue", "daus", "maus", "waus", "base_sessions", "ctr", "click_conversion_rate", "click_cost", "clicks", "paid_clicks", "deattributions", "ecpc", "gdpr_forgets", "gross_profit", "cohort_gross_profit", "impression_conversion_rate", "impression_cost", "impressions", "paid_impressions", "install_cost", "installs", "paid_installs", "installs_per_mile", "limit_ad_tracking_installs", "limit_ad_tracking_install_rate", "limit_ad_tracking_reattribution_rate", "limit_ad_tracking_reattributions", "non_organic_installs", "organic_installs", "roas_ad", "roas", "roas_iap", "reattributions", "return_on_investment", "revenue", "cohort_revenue", "revenue_events", "revenue_to_cost", "sessions", "events", "ecpi_all", "ecpi", "ecpm" ], + "type": "string" + }, + "minItems": 1, + "order": 2, + "title": "Metrics to ingest", + "type": "array", + "uniqueItems": true + }, + "until_today": { + "default": false, + "description": "Syncs data up until today. Useful when running daily incremental syncs, and duplicates are not desired.", + "order": 5, + "title": "Until Today", + "type": "boolean" + } + }, + "required": [ "api_token", "ingest_start", "metrics", "dimensions" ], + "title": "Adjust Spec", + "type": "object" + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "912eb6b7-a893-4a5b-b1c0-36ebbe2de8cd", + "name": "Aircall", + "dockerRepository": "airbyte/source-aircall", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/aircall", + "icon": "aircall.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/aircall", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Aircall Spec", + "type": "object", + "required": [ "api_id", "api_token", "start_date" ], + "additionalProperties": true, + "properties": { + "api_id": { + "title": "API ID", + "type": "string", + "description": "App ID found at settings https://dashboard.aircall.io/integrations/api-keys", + "airbyte_secret": true + }, + "api_token": { + "title": "API Token", + "type": "string", + "description": "App token found at settings (Ref- https://dashboard.aircall.io/integrations/api-keys)", + "airbyte_secret": true + }, + "start_date": { + "title": "Date-From Filter", + "type": "string", + "description": "Date time filter for incremental filter, Specify which date to extract from.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}Z$", + "examples": [ "2022-03-01T00:00:00.000Z" ], + "format": "date-time" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "14c6e7ea-97ed-4f5e-a7b5-25e9a80b8212", + "name": "Airtable", + "dockerRepository": "airbyte/source-airtable", + "dockerImageTag": "3.0.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/airtable", + "icon": "airtable.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/airtable", + "connectionSpecification": { + "$schema": "https://json-schema.org/draft-07/schema#", + "title": "Airtable Source Spec", + "type": "object", + "additionalProperties": true, + "properties": { + "credentials": { + "title": "Authentication", + "type": "object", + "oneOf": [ { + "type": "object", + "title": "OAuth2.0", + "required": [ "client_id", "client_secret", "refresh_token" ], + "properties": { + "auth_method": { + "type": "string", + "const": "oauth2.0" + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "The client ID of the Airtable developer application.", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "title": "Client secret", + "description": "The client secret the Airtable developer application.", + "airbyte_secret": true + }, + "access_token": { + "type": "string", + "description": "Access Token for making authenticated requests.", + "airbyte_secret": true + }, + "token_expiry_date": { + "type": "string", + "description": "The date-time when the access token should be refreshed.", + "format": "date-time" + }, + "refresh_token": { + "type": "string", + "title": "Refresh token", + "description": "The key to refresh the expired access token.", + "airbyte_secret": true + } + } + }, { + "title": "Personal Access Token", + "type": "object", + "required": [ "api_key" ], + "properties": { + "auth_method": { + "type": "string", + "const": "api_key" + }, + "api_key": { + "type": "string", + "description": "The Personal Access Token for the Airtable account. See the Support Guide for more information on how to obtain this token.", + "title": "Personal Access Token", + "airbyte_secret": true, + "examples": [ "key1234567890" ] + } + } + } ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": [ "credentials", "auth_method" ], + "predicate_value": "oauth2.0", + "oauth_config_specification": { + "complete_oauth_output_specification": { + "type": "object", + "properties": { + "access_token": { + "type": "string", + "path_in_connector_config": [ "credentials", "access_token" ] + }, + "refresh_token": { + "type": "string", + "path_in_connector_config": [ "credentials", "refresh_token" ] + }, + "token_expiry_date": { + "type": "string", + "format": "date-time", + "path_in_connector_config": [ "credentials", "token_expiry_date" ] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_id" ] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_secret" ] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "api.airtable.com", "airtable.com" ] + } + }, { + "sourceDefinitionId": "81ca39dc-4534-4dd2-b848-b0cfd2c11fce", + "name": "Aha", + "dockerRepository": "airbyte/source-aha", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/aha", + "icon": "aha.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/aha", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Aha Spec", + "type": "object", + "required": [ "api_key", "url" ], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "description": "API Key", + "title": "API Bearer Token" + }, + "url": { + "type": "string", + "description": "URL", + "title": "Aha Url Instance" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "db385323-9333-4fec-bec3-9e0ca9326c90", + "name": "Alpha Vantage", + "dockerRepository": "airbyte/source-alpha-vantage", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/alpha-vantage", + "icon": "alpha-vantage.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/alpha-vantage", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Alpha Vantage Spec", + "type": "object", + "required": [ "api_key", "symbol" ], + "properties": { + "api_key": { + "title": "API Key", + "type": "string", + "description": "API Key", + "airbyte_secret": true, + "order": 0 + }, + "symbol": { + "title": "Symbol", + "type": "string", + "description": "Stock symbol (with exchange code)", + "examples": [ "AAPL", "TSCO.LON" ], + "order": 1 + }, + "interval": { + "title": "Interval", + "type": "string", + "description": "Time-series data point interval. Required for intraday endpoints.\n", + "enum": [ "1min", "5min", "15min", "30min", "60min" ], + "default": "1min", + "order": 2 + }, + "adjusted": { + "title": "Adjusted?", + "type": "boolean", + "description": "Whether to return adjusted data. Only applicable to intraday endpoints.\n", + "default": false, + "order": 3 + }, + "outputsize": { + "title": "Output Size", + "type": "string", + "description": "Whether to return full or compact data (the last 100 data points).\n", + "enum": [ "compact", "full" ], + "default": "compact", + "order": 4 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "1fa90628-2b9e-11ed-a261-0242ac120002", + "name": "AlloyDB for PostgreSQL", + "dockerRepository": "airbyte/source-alloydb", + "dockerImageTag": "2.0.23", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/alloydb", + "icon": "alloydb.svg", + "sourceType": "database", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/postgres", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Postgres Source Spec", + "type": "object", + "required": [ "host", "port", "database", "username" ], + "properties": { + "host": { + "title": "Host", + "description": "Hostname of the database.", + "type": "string", + "order": 0, + "group": "db" + }, + "port": { + "title": "Port", + "description": "Port of the database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 5432, + "examples": [ "5432" ], + "order": 1, + "group": "db" + }, + "database": { + "title": "Database Name", + "description": "Name of the database.", + "type": "string", + "order": 2, + "group": "db" + }, + "schemas": { + "title": "Schemas", + "description": "The list of schemas (case sensitive) to sync from. Defaults to public.", + "type": "array", + "items": { + "type": "string" + }, + "minItems": 0, + "uniqueItems": true, + "default": [ "public" ], + "order": 3, + "group": "db" + }, + "username": { + "title": "Username", + "description": "Username to access the database.", + "type": "string", + "order": 4, + "group": "auth" + }, + "password": { + "title": "Password", + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 5, + "group": "auth", + "always_show": true + }, + "jdbc_url_params": { + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (Eg. key1=value1&key2=value2&key3=value3). For more information read about JDBC URL parameters.", + "title": "JDBC URL Parameters (Advanced)", + "type": "string", + "order": 6, + "group": "advanced", + "pattern_descriptor": "key1=value1&key2=value2" + }, + "ssl_mode": { + "title": "SSL Modes", + "description": "SSL connection modes. \n Read more in the docs.", + "type": "object", + "order": 8, + "group": "security", + "oneOf": [ { + "title": "disable", + "additionalProperties": true, + "description": "Disables encryption of communication between Airbyte and source database.", + "required": [ "mode" ], + "properties": { + "mode": { + "type": "string", + "const": "disable", + "order": 0 + } + } + }, { + "title": "allow", + "additionalProperties": true, + "description": "Enables encryption only when required by the source database.", + "required": [ "mode" ], + "properties": { + "mode": { + "type": "string", + "const": "allow", + "order": 0 + } + } + }, { + "title": "prefer", + "additionalProperties": true, + "description": "Allows unencrypted connection only if the source database does not support encryption.", + "required": [ "mode" ], + "properties": { + "mode": { + "type": "string", + "const": "prefer", + "order": 0 + } + } + }, { + "title": "require", + "additionalProperties": true, + "description": "Always require encryption. If the source database server does not support encryption, connection will fail.", + "required": [ "mode" ], + "properties": { + "mode": { + "type": "string", + "const": "require", + "order": 0 + } + } + }, { + "title": "verify-ca", + "additionalProperties": true, + "description": "Always require encryption and verifies that the source database server has a valid SSL certificate.", + "required": [ "mode", "ca_certificate" ], + "properties": { + "mode": { + "type": "string", + "const": "verify-ca", + "order": 0 + }, + "ca_certificate": { + "type": "string", + "title": "CA Certificate", + "description": "CA certificate", + "airbyte_secret": true, + "multiline": true, + "order": 1 + }, + "client_certificate": { + "type": "string", + "title": "Client Certificate", + "description": "Client certificate", + "airbyte_secret": true, + "multiline": true, + "order": 2, + "always_show": true + }, + "client_key": { + "type": "string", + "title": "Client Key", + "description": "Client key", + "airbyte_secret": true, + "multiline": true, + "order": 3, + "always_show": true + }, + "client_key_password": { + "type": "string", + "title": "Client key password", + "description": "Password for keystorage. If you do not add it - the password will be generated automatically.", + "airbyte_secret": true, + "order": 4 + } + } + }, { + "title": "verify-full", + "additionalProperties": true, + "description": "This is the most secure mode. Always require encryption and verifies the identity of the source database server.", + "required": [ "mode", "ca_certificate" ], + "properties": { + "mode": { + "type": "string", + "const": "verify-full", + "order": 0 + }, + "ca_certificate": { + "type": "string", + "title": "CA Certificate", + "description": "CA certificate", + "airbyte_secret": true, + "multiline": true, + "order": 1 + }, + "client_certificate": { + "type": "string", + "title": "Client Certificate", + "description": "Client certificate", + "airbyte_secret": true, + "multiline": true, + "order": 2, + "always_show": true + }, + "client_key": { + "type": "string", + "title": "Client Key", + "description": "Client key", + "airbyte_secret": true, + "multiline": true, + "order": 3, + "always_show": true + }, + "client_key_password": { + "type": "string", + "title": "Client key password", + "description": "Password for keystorage. If you do not add it - the password will be generated automatically.", + "airbyte_secret": true, + "order": 4 + } + } + } ] + }, + "replication_method": { + "type": "object", + "title": "Replication Method", + "description": "Replication method for extracting data from the database.", + "order": 9, + "group": "advanced", + "oneOf": [ { + "title": "Standard", + "description": "Standard replication requires no setup on the DB side but will not be able to represent deletions incrementally.", + "required": [ "method" ], + "properties": { + "method": { + "type": "string", + "const": "Standard", + "order": 0 + } + } + }, { + "title": "Logical Replication (CDC)", + "description": "Logical replication uses the Postgres write-ahead log (WAL) to detect inserts, updates, and deletes. This needs to be configured on the source database itself. Only available on Postgres 10 and above. Read the docs.", + "required": [ "method", "replication_slot", "publication" ], + "additionalProperties": true, + "properties": { + "method": { + "type": "string", + "const": "CDC", + "order": 1 + }, + "plugin": { + "type": "string", + "title": "Plugin", + "description": "A logical decoding plugin installed on the PostgreSQL server.", + "enum": [ "pgoutput" ], + "default": "pgoutput", + "order": 2 + }, + "replication_slot": { + "type": "string", + "title": "Replication Slot", + "description": "A plugin logical replication slot. Read about replication slots.", + "order": 3 + }, + "publication": { + "type": "string", + "title": "Publication", + "description": "A Postgres publication used for consuming changes. Read about publications and replication identities.", + "order": 4 + }, + "initial_waiting_seconds": { + "type": "integer", + "title": "Initial Waiting Time in Seconds (Advanced)", + "description": "The amount of time the connector will wait when it launches to determine if there is new data to sync or not. Defaults to 300 seconds. Valid range: 120 seconds to 1200 seconds. Read about initial waiting time.", + "default": 300, + "order": 5, + "min": 120, + "max": 1200 + }, + "lsn_commit_behaviour": { + "type": "string", + "title": "LSN commit behaviour", + "description": "Determines when Airbtye should flush the LSN of processed WAL logs in the source database. `After loading Data in the destination` is default. If `While reading Data` is selected, in case of a downstream failure (while loading data into the destination), next sync would result in a full sync.", + "enum": [ "While reading Data", "After loading Data in the destination" ], + "default": "After loading Data in the destination", + "order": 6 + } + } + } ] + }, + "tunnel_method": { + "type": "object", + "title": "SSH Tunnel Method", + "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", + "oneOf": [ { + "title": "No Tunnel", + "required": [ "tunnel_method" ], + "properties": { + "tunnel_method": { + "description": "No ssh tunnel needed to connect to database", + "type": "string", + "const": "NO_TUNNEL", + "order": 0 + } + } + }, { + "title": "SSH Key Authentication", + "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [ "22" ], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host.", + "type": "string", + "order": 3 + }, + "ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + }, { + "title": "Password Authentication", + "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [ "22" ], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host", + "type": "string", + "order": 3 + }, + "tunnel_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 4 + } + } + } ], + "group": "security" + } + }, + "groups": [ { + "id": "db" + }, { + "id": "auth" + }, { + "id": "security", + "title": "Security" + }, { + "id": "advanced", + "title": "Advanced" + } ] + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "${host}", "${tunnel_method.tunnel_host}" ] + } + }, { + "sourceDefinitionId": "6ff047c0-f5d5-4ce5-8c81-204a830fa7e1", + "name": "AWS CloudTrail", + "dockerRepository": "airbyte/source-aws-cloudtrail", + "dockerImageTag": "0.1.5", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/aws-cloudtrail", + "icon": "awscloudtrail.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/aws-cloudtrail", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Aws CloudTrail Spec", + "type": "object", + "required": [ "aws_key_id", "aws_secret_key", "aws_region_name", "start_date" ], + "additionalProperties": true, + "properties": { + "aws_key_id": { + "type": "string", + "title": "Key ID", + "description": "AWS CloudTrail Access Key ID. See the docs for more information on how to obtain this key.", + "airbyte_secret": true + }, + "aws_secret_key": { + "type": "string", + "title": "Secret Key", + "description": "AWS CloudTrail Access Key ID. See the docs for more information on how to obtain this key.", + "airbyte_secret": true + }, + "aws_region_name": { + "type": "string", + "title": "Region Name", + "description": "The default AWS Region to use, for example, us-west-1 or us-west-2. When specifying a Region inline during client initialization, this property is named region_name." + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "The date you would like to replicate data. Data in AWS CloudTrail is available for last 90 days only. Format: YYYY-MM-DD.", + "examples": [ "2021-01-01" ], + "default": "1970-01-01", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "format": "date" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "c6b0a29e-1da9-4512-9002-7bfd0cba2246", + "name": "Amazon Ads", + "dockerRepository": "airbyte/source-amazon-ads", + "dockerImageTag": "1.0.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/amazon-ads", + "icon": "amazonads.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/amazon-ads", + "connectionSpecification": { + "title": "Amazon Ads Spec", + "type": "object", + "properties": { + "auth_type": { + "title": "Auth Type", + "const": "oauth2.0", + "order": 0, + "type": "string" + }, + "client_id": { + "title": "Client ID", + "description": "The client ID of your Amazon Ads developer application. See the docs for more information.", + "order": 1, + "type": "string" + }, + "client_secret": { + "title": "Client Secret", + "description": "The client secret of your Amazon Ads developer application. See the docs for more information.", + "airbyte_secret": true, + "order": 2, + "type": "string" + }, + "refresh_token": { + "title": "Refresh Token", + "description": "Amazon Ads refresh token. See the docs for more information on how to obtain this token.", + "airbyte_secret": true, + "order": 3, + "type": "string" + }, + "region": { + "title": "Region", + "description": "Region to pull data from (EU/NA/FE). See docs for more details.", + "enum": [ "NA", "EU", "FE" ], + "type": "string", + "default": "NA", + "order": 4 + }, + "start_date": { + "title": "Start Date", + "description": "The Start date for collecting reports, should not be more than 60 days in the past. In YYYY-MM-DD format", + "examples": [ "2022-10-10", "2022-10-22" ], + "order": 5, + "type": "string" + }, + "profiles": { + "title": "Profile IDs", + "description": "Profile IDs you want to fetch data for. See docs for more details.", + "order": 6, + "type": "array", + "items": { + "type": "integer" + } + }, + "state_filter": { + "title": "State Filter", + "description": "Reflects the state of the Display, Product, and Brand Campaign streams as enabled, paused, or archived. If you do not populate this field, it will be ignored completely.", + "items": { + "type": "string", + "enum": [ "enabled", "paused", "archived" ] + }, + "type": "array", + "uniqueItems": true, + "order": 7 + }, + "look_back_window": { + "title": "Look Back Window", + "description": "The amount of days to go back in time to get the updated data from Amazon Ads", + "examples": [ 3, 10 ], + "type": "integer", + "default": 3, + "order": 8 + }, + "report_record_types": { + "title": "Report Record Types", + "description": "Optional configuration which accepts an array of string of record types. Leave blank for default behaviour to pull all report types. Use this config option only if you want to pull specific report type(s). See docs for more details", + "items": { + "type": "string", + "enum": [ "adGroups", "asins", "asins_keywords", "asins_targets", "campaigns", "keywords", "productAds", "targets" ] + }, + "type": "array", + "uniqueItems": true, + "order": 9 + } + }, + "required": [ "client_id", "client_secret", "refresh_token" ], + "additionalProperties": true + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": [ "auth_type" ], + "predicate_value": "oauth2.0", + "oauth_config_specification": { + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": true, + "properties": { + "refresh_token": { + "type": "string", + "path_in_connector_config": [ "refresh_token" ] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": true, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": true, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": [ "client_id" ] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": [ "client_secret" ] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "api.amazon.com", "advertising-api.amazon.com", "advertising-api-eu.amazon.com", "advertising-api-fe.amazon.com" ] + } + }, { + "sourceDefinitionId": "e55879a8-0ef8-4557-abcf-ab34c53ec460", + "name": "Amazon Seller Partner", + "dockerRepository": "airbyte/source-amazon-seller-partner", + "dockerImageTag": "1.0.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/amazon-seller-partner", + "icon": "amazonsellerpartner.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/amazon-seller-partner", + "changelogUrl": "https://docs.airbyte.com/integrations/sources/amazon-seller-partner", + "connectionSpecification": { + "title": "Amazon Seller Partner Spec", + "type": "object", + "properties": { + "app_id": { + "title": "App Id", + "description": "Your Amazon App ID", + "airbyte_secret": true, + "order": 0, + "type": "string" + }, + "auth_type": { + "title": "Auth Type", + "const": "oauth2.0", + "order": 1, + "type": "string" + }, + "lwa_app_id": { + "title": "LWA Client Id", + "description": "Your Login with Amazon Client ID.", + "order": 2, + "type": "string" + }, + "lwa_client_secret": { + "title": "LWA Client Secret", + "description": "Your Login with Amazon Client Secret.", + "airbyte_secret": true, + "order": 3, + "type": "string" + }, + "refresh_token": { + "title": "Refresh Token", + "description": "The Refresh Token obtained via OAuth flow authorization.", + "airbyte_secret": true, + "order": 4, + "type": "string" + }, + "aws_access_key": { + "title": "AWS Access Key", + "description": "Specifies the AWS access key used as part of the credentials to authenticate the user.", + "airbyte_secret": true, + "order": 5, + "type": "string" + }, + "aws_secret_key": { + "title": "AWS Secret Access Key", + "description": "Specifies the AWS secret key used as part of the credentials to authenticate the user.", + "airbyte_secret": true, + "order": 6, + "type": "string" + }, + "role_arn": { + "title": "Role ARN", + "description": "Specifies the Amazon Resource Name (ARN) of an IAM role that you want to use to perform operations requested using this profile. (Needs permission to 'Assume Role' STS).", + "airbyte_secret": true, + "order": 7, + "type": "string" + }, + "replication_start_date": { + "title": "Start Date", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": [ "2017-01-25T00:00:00Z" ], + "order": 8, + "type": "string" + }, + "replication_end_date": { + "title": "End Date", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data after this date will not be replicated.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$|^$", + "examples": [ "2017-01-25T00:00:00Z" ], + "order": 9, + "type": "string" + }, + "period_in_days": { + "title": "Period In Days", + "description": "Will be used for stream slicing for initial full_refresh sync when no updated state is present for reports that support sliced incremental sync.", + "default": 90, + "maximum": 90, + "examples": [ "1", "10", "30", "60", "90" ], + "order": 10, + "type": "integer" + }, + "report_options": { + "title": "Report Options", + "description": "Additional information passed to reports. This varies by report type. Must be a valid json string.", + "examples": [ "{\"GET_BRAND_ANALYTICS_SEARCH_TERMS_REPORT\": {\"reportPeriod\": \"WEEK\"}}", "{\"GET_SOME_REPORT\": {\"custom\": \"true\"}}" ], + "order": 11, + "type": "string" + }, + "max_wait_seconds": { + "title": "Max wait time for reports (in seconds)", + "description": "Sometimes report can take up to 30 minutes to generate. This will set the limit for how long to wait for a successful report.", + "default": 500, + "examples": [ "500", "1980" ], + "order": 12, + "type": "integer" + }, + "aws_environment": { + "title": "AWSEnvironment", + "description": "An enumeration.", + "enum": [ "PRODUCTION", "SANDBOX" ], + "type": "string" + }, + "region": { + "title": "AWSRegion", + "description": "An enumeration.", + "enum": [ "AE", "AU", "BE", "BR", "CA", "DE", "EG", "ES", "FR", "GB", "IN", "IT", "JP", "MX", "NL", "PL", "SA", "SE", "SG", "TR", "UK", "US" ], + "type": "string" + } + }, + "required": [ "app_id", "lwa_app_id", "lwa_client_secret", "refresh_token", "replication_start_date", "aws_environment", "region" ], + "additionalProperties": true, + "definitions": { + "AWSEnvironment": { + "title": "AWSEnvironment", + "description": "An enumeration.", + "enum": [ "PRODUCTION", "SANDBOX" ], + "type": "string" + }, + "AWSRegion": { + "title": "AWSRegion", + "description": "An enumeration.", + "enum": [ "AE", "AU", "BE", "BR", "CA", "DE", "EG", "ES", "FR", "GB", "IN", "IT", "JP", "MX", "NL", "PL", "SA", "SE", "SG", "TR", "UK", "US" ], + "type": "string" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": [ "auth_type" ], + "predicate_value": "oauth2.0", + "oauth_config_specification": { + "oauth_user_input_from_connector_config_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "app_id": { + "type": "string", + "path_in_connector_config": [ "app_id" ] + } + } + }, + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "refresh_token": { + "type": "string", + "path_in_connector_config": [ "refresh_token" ] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "lwa_app_id": { + "type": "string" + }, + "lwa_client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "lwa_app_id": { + "type": "string", + "path_in_connector_config": [ "lwa_app_id" ] + }, + "lwa_client_secret": { + "type": "string", + "path_in_connector_config": [ "lwa_client_secret" ] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "983fd355-6bf3-4709-91b5-37afa391eeb6", + "name": "Amazon SQS", + "dockerRepository": "airbyte/source-amazon-sqs", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/amazon-sqs", + "icon": "awssqs.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/amazon-sqs", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Amazon SQS Source Spec", + "type": "object", + "required": [ "queue_url", "region", "delete_messages" ], + "additionalProperties": false, + "properties": { + "queue_url": { + "title": "Queue URL", + "description": "URL of the SQS Queue", + "type": "string", + "examples": [ "https://sqs.eu-west-1.amazonaws.com/1234567890/my-example-queue" ], + "order": 0 + }, + "region": { + "title": "AWS Region", + "description": "AWS Region of the SQS Queue", + "type": "string", + "enum": [ "us-east-1", "us-east-2", "us-west-1", "us-west-2", "af-south-1", "ap-east-1", "ap-south-1", "ap-northeast-1", "ap-northeast-2", "ap-northeast-3", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "cn-north-1", "cn-northwest-1", "eu-central-1", "eu-north-1", "eu-south-1", "eu-west-1", "eu-west-2", "eu-west-3", "sa-east-1", "me-south-1", "us-gov-east-1", "us-gov-west-1" ], + "order": 1 + }, + "delete_messages": { + "title": "Delete Messages After Read", + "description": "If Enabled, messages will be deleted from the SQS Queue after being read. If Disabled, messages are left in the queue and can be read more than once. WARNING: Enabling this option can result in data loss in cases of failure, use with caution, see documentation for more detail. ", + "type": "boolean", + "default": false, + "order": 2 + }, + "max_batch_size": { + "title": "Max Batch Size", + "description": "Max amount of messages to get in one batch (10 max)", + "type": "integer", + "examples": [ "5" ], + "order": 3 + }, + "max_wait_time": { + "title": "Max Wait Time", + "description": "Max amount of time in seconds to wait for messages in a single poll (20 max)", + "type": "integer", + "examples": [ "5" ], + "order": 4 + }, + "attributes_to_return": { + "title": "Message Attributes To Return", + "description": "Comma separated list of Mesage Attribute names to return", + "type": "string", + "examples": [ "attr1,attr2" ], + "order": 5 + }, + "visibility_timeout": { + "title": "Message Visibility Timeout", + "description": "Modify the Visibility Timeout of the individual message from the Queue's default (seconds).", + "type": "integer", + "examples": [ "15" ], + "order": 6 + }, + "access_key": { + "title": "AWS IAM Access Key ID", + "description": "The Access Key ID of the AWS IAM Role to use for pulling messages", + "type": "string", + "examples": [ "xxxxxHRNxxx3TBxxxxxx" ], + "airbyte_secret": true, + "order": 7 + }, + "secret_key": { + "title": "AWS IAM Secret Key", + "description": "The Secret Key of the AWS IAM Role to use for pulling messages", + "type": "string", + "examples": [ "hu+qE5exxxxT6o/ZrKsxxxxxxBhxxXLexxxxxVKz" ], + "airbyte_secret": true, + "order": 8 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "fa9f58c6-2d03-4237-aaa4-07d75e0c1396", + "name": "Amplitude", + "dockerRepository": "airbyte/source-amplitude", + "dockerImageTag": "0.2.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/amplitude", + "icon": "amplitude.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/amplitude", + "connectionSpecification": { + "$schema": "https://json-schema.org/draft-07/schema#", + "title": "Amplitude Spec", + "type": "object", + "required": [ "api_key", "secret_key", "start_date" ], + "additionalProperties": true, + "properties": { + "data_region": { + "type": "string", + "title": "Data region", + "description": "Amplitude data region server", + "enum": [ "Standard Server", "EU Residency Server" ], + "default": "Standard Server" + }, + "api_key": { + "type": "string", + "title": "API Key", + "description": "Amplitude API Key. See the setup guide for more information on how to obtain this key.", + "airbyte_secret": true + }, + "secret_key": { + "type": "string", + "title": "Secret Key", + "description": "Amplitude Secret Key. See the setup guide for more information on how to obtain this key.", + "airbyte_secret": true + }, + "start_date": { + "type": "string", + "title": "Replication Start Date", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "description": "UTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.", + "examples": [ "2021-01-25T00:00:00Z" ] + }, + "request_time_range": { + "type": "integer", + "title": "Request time range", + "description": "According to Considerations too big time range in request can cause a timeout error. In this case, set shorter time interval in hours.", + "default": 24, + "minimum": 1, + "maximum": 8760 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "amplitude.com", "analytics.eu.amplitude.com" ] + } + }, { + "sourceDefinitionId": "47f17145-fe20-4ef5-a548-e29b048adf84", + "name": "Apify Dataset", + "dockerRepository": "airbyte/source-apify-dataset", + "dockerImageTag": "0.1.11", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/apify-dataset", + "icon": "apify.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/apify-dataset", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Apify Dataset Spec", + "type": "object", + "required": [ "datasetId" ], + "additionalProperties": false, + "properties": { + "datasetId": { + "type": "string", + "title": "Dataset ID", + "description": "ID of the dataset you would like to load to Airbyte." + }, + "clean": { + "type": "boolean", + "title": "Clean", + "description": "If set to true, only clean items will be downloaded from the dataset. See description of what clean means in Apify API docs. If not sure, set clean to false." + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "b4375641-e270-41d3-9c20-4f9cecad87a8", + "name": "Appfollow", + "dockerRepository": "airbyte/source-appfollow", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/appfollow", + "icon": "appfollow.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/appfollow", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Appfollow Spec", + "type": "object", + "required": [ "ext_id", "country", "cid", "api_secret" ], + "additionalProperties": true, + "properties": { + "ext_id": { + "type": "string", + "title": "app external id", + "description": "for App Store — this is 9-10 digits identification number; for Google Play — this is bundle name;" + }, + "cid": { + "type": "string", + "title": "client id", + "description": "client id provided by Appfollow" + }, + "api_secret": { + "type": "string", + "title": "api secret", + "description": "api secret provided by Appfollow", + "airbyte_secret": true + }, + "country": { + "type": "string", + "title": "country", + "description": "getting data by Country" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "e59c8416-c2fa-4bd3-9e95-52677ea281c1", + "name": "Apple Search Ads", + "dockerRepository": "airbyte/source-apple-search-ads", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/apple-search-ads", + "icon": "apple.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/apple-search-ads", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Apple Search Ads Spec", + "type": "object", + "required": [ "org_id", "client_id", "client_secret", "start_date" ], + "additionalProperties": true, + "properties": { + "org_id": { + "type": "integer", + "title": "Org Id", + "description": "The identifier of the organization that owns the campaign. Your Org Id is the same as your account in the Apple Search Ads UI." + }, + "client_id": { + "type": "string", + "title": "Client Id", + "description": "A user identifier for the token request. See here", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "A string that authenticates the user’s setup request. See here", + "airbyte_secret": true + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "Start getting data from that date.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": [ "2020-01-01" ] + }, + "end_date": { + "type": "string", + "title": "End Date", + "description": "Data is retrieved until that date (included)", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": [ "2021-01-01" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "16447954-e6a8-4593-b140-43dea13bc457", + "name": "AppsFlyer", + "dockerRepository": "airbyte/source-appsflyer", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/appsflyer", + "icon": "appsflyer.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Appsflyer Spec", + "type": "object", + "required": [ "app_id", "api_token", "start_date" ], + "additionalProperties": false, + "properties": { + "app_id": { + "type": "string", + "description": "App identifier as found in AppsFlyer." + }, + "api_token": { + "type": "string", + "description": "Pull API token for authentication. If you change the account admin, the token changes, and you must update scripts with the new token. Get the API token in the Dashboard.", + "airbyte_secret": true + }, + "start_date": { + "type": "string", + "description": "The default value to use if no bookmark exists for an endpoint. Raw Reports historical lookback is limited to 90 days.", + "examples": [ "2021-11-16", "2021-11-16 15:00:00" ], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}( [0-9]{2}:[0-9]{2}:[0-9]{2})?$" + }, + "timezone": { + "type": "string", + "description": "Time zone in which date times are stored. The project timezone may be found in the App settings in the AppsFlyer console.", + "default": "UTC", + "examples": [ "US/Pacific", "UTC" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "2af123bf-0aaf-4e0d-9784-cb497f23741a", + "name": "Appstore", + "dockerRepository": "airbyte/source-appstore-singer", + "dockerImageTag": "0.2.6", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/appstore", + "icon": "appstore.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/appstore", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Source Appstore Singer Spec", + "type": "object", + "required": [ "key_id", "private_key", "issuer_id", "vendor", "start_date" ], + "additionalProperties": false, + "properties": { + "key_id": { + "type": "string", + "title": "Key ID", + "description": "Appstore Key ID. See the docs for more information on how to obtain this key." + }, + "private_key": { + "type": "string", + "title": "Private Key", + "description": "Appstore Private Key. See the docs for more information on how to obtain this key.", + "airbyte_secret": true, + "multiline": true + }, + "issuer_id": { + "type": "string", + "title": "Issuer ID", + "description": "Appstore Issuer ID. See the docs for more information on how to obtain this ID." + }, + "vendor": { + "type": "string", + "title": "Vendor ID", + "description": "Appstore Vendor ID. See the docs for more information on how to obtain this ID." + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", + "examples": [ "2020-11-16T00:00:00Z" ], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "d0243522-dccf-4978-8ba0-37ed47a0bdbf", + "name": "Asana", + "dockerRepository": "airbyte/source-asana", + "dockerImageTag": "0.1.5", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/asana", + "icon": "asana.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Asana Spec", + "type": "object", + "additionalProperties": true, + "properties": { + "credentials": { + "title": "Authentication mechanism", + "description": "Choose how to authenticate to Github", + "type": "object", + "oneOf": [ { + "type": "object", + "title": "Authenticate with Personal Access Token", + "required": [ "personal_access_token" ], + "properties": { + "option_title": { + "type": "string", + "title": "Credentials title", + "description": "PAT Credentials", + "const": "PAT Credentials" + }, + "personal_access_token": { + "type": "string", + "title": "Personal Access Token", + "description": "Asana Personal Access Token (generate yours here).", + "airbyte_secret": true + } + } + }, { + "type": "object", + "title": "Authenticate via Asana (Oauth)", + "required": [ "client_id", "client_secret", "refresh_token" ], + "properties": { + "option_title": { + "type": "string", + "title": "Credentials title", + "description": "OAuth Credentials", + "const": "OAuth Credentials" + }, + "client_id": { + "type": "string", + "title": "", + "description": "", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "title": "", + "description": "", + "airbyte_secret": true + }, + "refresh_token": { + "type": "string", + "title": "", + "description": "", + "airbyte_secret": true + } + } + } ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": [ "credentials", "1" ], + "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], + "oauthFlowOutputParameters": [ [ "refresh_token" ] ] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta" + }, { + "sourceDefinitionId": "4e8c9fa0-3634-499b-b948-11581b5c3efa", + "name": "Ashby", + "dockerRepository": "airbyte/source-ashby", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/ashby", + "icon": "ashby.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://developers.ashbyhq.com/reference/introduction", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Ashby Spec", + "type": "object", + "required": [ "api_key", "start_date" ], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "title": "Ashby API key", + "description": "The Ashby API Key, see doc here.", + "airbyte_secret": true + }, + "start_date": { + "type": "string", + "title": "Start date", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", + "examples": [ "2017-01-25T00:00:00Z" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "6c504e48-14aa-4221-9a72-19cf5ff1ae78", + "name": "Auth0", + "dockerRepository": "airbyte/source-auth0", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/auth0", + "icon": "auth0.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://auth0.com/docs/api/management/v2/", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Auth0 Management API Spec", + "type": "object", + "required": [ "base_url", "credentials" ], + "additionalProperties": true, + "properties": { + "base_url": { + "type": "string", + "title": "Base URL", + "examples": [ "https://dev-yourOrg.us.auth0.com/" ], + "description": "The Authentication API is served over HTTPS. All URLs referenced in the documentation have the following base `https://YOUR_DOMAIN`" + }, + "credentials": { + "title": "Authentication Method", + "type": "object", + "oneOf": [ { + "type": "object", + "title": "OAuth2 Confidential Application", + "required": [ "auth_type", "client_id", "client_secret", "audience" ], + "properties": { + "auth_type": { + "type": "string", + "title": "Authentication Method", + "const": "oauth2_confidential_application", + "order": 0 + }, + "client_id": { + "title": "Client ID", + "description": "Your application's Client ID. You can find this value on the application's settings tab after you login the admin portal.", + "type": "string", + "examples": [ "Client_ID" ] + }, + "client_secret": { + "title": "Client Secret", + "description": "Your application's Client Secret. You can find this value on the application's settings tab after you login the admin portal.", + "type": "string", + "examples": [ "Client_Secret" ], + "airbyte_secret": true + }, + "audience": { + "title": "Audience", + "description": "The audience for the token, which is your API. You can find this in the Identifier field on your API's settings tab", + "type": "string", + "examples": [ "https://dev-yourOrg.us.auth0.com/api/v2/" ] + } + } + }, { + "type": "object", + "title": "OAuth2 Access Token", + "required": [ "access_token", "auth_type" ], + "properties": { + "auth_type": { + "type": "string", + "title": "Authentication Method", + "const": "oauth2_access_token", + "order": 0 + }, + "access_token": { + "title": "OAuth2 Access Token", + "description": "Also called API Access Token The access token used to call the Auth0 Management API Token. It's a JWT that contains specific grant permissions knowns as scopes.", + "type": "string", + "airbyte_secret": true + } + } + } ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "798ae795-5189-42b6-b64e-3cb91db93338", + "name": "Azure Table Storage", + "dockerRepository": "airbyte/source-azure-table", + "dockerImageTag": "0.1.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/azure-table", + "icon": "azureblobstorage.svg", + "sourceType": "database", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Azure Data Table Spec", + "type": "object", + "required": [ "storage_account_name", "storage_access_key" ], + "properties": { + "storage_account_name": { + "title": "Account Name", + "type": "string", + "description": "The name of your storage account.", + "order": 0, + "airbyte_secret": false + }, + "storage_access_key": { + "title": "Access Key", + "type": "string", + "description": "Azure Table Storage Access Key. See the docs for more information on how to obtain this key.", + "order": 1, + "airbyte_secret": true + }, + "storage_endpoint_suffix": { + "title": "Endpoint Suffix", + "type": "string", + "description": "Azure Table Storage service account URL suffix. See the docs for more information on how to obtain endpoint suffix", + "order": 2, + "default": "core.windows.net", + "examples": [ "core.windows.net", "core.chinacloudapi.cn" ], + "airbyte_secret": false + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "fdaaba68-4875-4ed9-8fcd-4ae1e0a25093", + "name": "Azure Blob Storage", + "dockerRepository": "airbyte/source-azure-blob-storage", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/azure-blob-storage", + "icon": "azureblobstorage.svg", + "sourceType": "file", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/azureblobstorage", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "AzureBlobStorage Source Spec", + "type": "object", + "required": [ "azure_blob_storage_account_name", "azure_blob_storage_account_key", "azure_blob_storage_container_name", "format" ], + "additionalProperties": true, + "properties": { + "azure_blob_storage_endpoint": { + "title": "Endpoint Domain Name", + "type": "string", + "default": "blob.core.windows.net", + "description": "This is Azure Blob Storage endpoint domain name. Leave default value (or leave it empty if run container from command line) to use Microsoft native from example.", + "examples": [ "blob.core.windows.net" ] + }, + "azure_blob_storage_container_name": { + "title": "Azure blob storage container (Bucket) Name", + "type": "string", + "description": "The name of the Azure blob storage container.", + "examples": [ "airbytetescontainername" ] + }, + "azure_blob_storage_account_name": { + "title": "Azure Blob Storage account name", + "type": "string", + "description": "The account's name of the Azure Blob Storage.", + "examples": [ "airbyte5storage" ] + }, + "azure_blob_storage_account_key": { + "title": "Azure Blob Storage account key", + "description": "The Azure blob storage account key.", + "airbyte_secret": true, + "type": "string", + "examples": [ "Z8ZkZpteggFx394vm+PJHnGTvdRncaYS+JhLKdj789YNmD+iyGTnG+PV+POiuYNhBg/ACS+LKjd%4FG3FHGN12Nd==" ] + }, + "azure_blob_storage_blobs_prefix": { + "title": "Azure Blob Storage blobs prefix", + "description": "The Azure blob storage prefix to be applied", + "type": "string", + "examples": [ "FolderA/FolderB/" ] + }, + "azure_blob_storage_schema_inference_limit": { + "title": "Azure Blob Storage schema inference limit", + "description": "The Azure blob storage blobs to scan for inferring the schema, useful on large amounts of data with consistent structure", + "type": "integer", + "examples": [ "500" ] + }, + "format": { + "title": "Input Format", + "type": "object", + "description": "Input data format", + "oneOf": [ { + "title": "JSON Lines: newline-delimited JSON", + "required": [ "format_type" ], + "properties": { + "format_type": { + "type": "string", + "const": "JSONL" + } + } + } ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "971c3e1e-78a5-411e-ad56-c4052b50876b", + "name": "Babelforce", + "dockerRepository": "airbyte/source-babelforce", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/babelforce", + "icon": "babelforce.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Babelforce Spec", + "type": "object", + "required": [ "region", "access_key_id", "access_token" ], + "additionalProperties": false, + "properties": { + "region": { + "type": "string", + "title": "Region", + "default": "services", + "description": "Babelforce region", + "enum": [ "services", "us-east", "ap-southeast" ], + "order": 1 + }, + "access_key_id": { + "type": "string", + "title": "Access Key ID", + "description": "The Babelforce access key ID", + "airbyte_secret": true, + "order": 2 + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "The Babelforce access token", + "airbyte_secret": true, + "order": 3 + }, + "date_created_from": { + "type": "integer", + "title": "Date Created from", + "description": "Timestamp in Unix the replication from Babelforce API will start from. For example 1651363200 which corresponds to 2022-05-01 00:00:00.", + "examples": [ 1651363200 ], + "order": 4 + }, + "date_created_to": { + "type": "integer", + "title": "Date Created to", + "description": "Timestamp in Unix the replication from Babelforce will be up to. For example 1651363200 which corresponds to 2022-05-01 00:00:00.", + "examples": [ 1651363200 ], + "order": 5 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "90916976-a132-4ce9-8bce-82a03dd58788", + "name": "BambooHR", + "dockerRepository": "airbyte/source-bamboo-hr", + "dockerImageTag": "0.2.2", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/bamboo-hr", + "icon": "bamboohr.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/bamboo-hr", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Bamboo HR Spec", + "type": "object", + "required": [ "subdomain", "api_key" ], + "additionalProperties": true, + "properties": { + "subdomain": { + "type": "string", + "description": "Sub Domain of bamboo hr" + }, + "api_key": { + "type": "string", + "description": "Api key of bamboo hr", + "airbyte_secret": true + }, + "custom_reports_fields": { + "type": "string", + "default": "", + "description": "Comma-separated list of fields to include in custom reports." + }, + "custom_reports_include_default_fields": { + "type": "boolean", + "default": true, + "description": "If true, the custom reports endpoint will include the default fields defined here: https://documentation.bamboohr.com/docs/list-of-field-names." + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "59c5501b-9f95-411e-9269-7143c939adbd", + "name": "BigCommerce", + "dockerRepository": "airbyte/source-bigcommerce", + "dockerImageTag": "0.1.10", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/bigcommerce", + "icon": "bigcommerce.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/bigcommerce", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "BigCommerce Source CDK Specifications", + "type": "object", + "required": [ "start_date", "store_hash", "access_token" ], + "additionalProperties": true, + "properties": { + "start_date": { + "type": "string", + "title": "Start Date", + "description": "The date you would like to replicate data. Format: YYYY-MM-DD.", + "examples": [ "2021-01-01" ], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" + }, + "store_hash": { + "type": "string", + "title": "Store Hash", + "description": "The hash code of the store. For https://api.bigcommerce.com/stores/HASH_CODE/v3/, The store's hash code is 'HASH_CODE'." + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "Access Token for making authenticated requests.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "bfd1ddf8-ae8a-4620-b1d7-55597d2ba08c", + "name": "BigQuery", + "dockerRepository": "airbyte/source-bigquery", + "dockerImageTag": "0.2.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/bigquery", + "icon": "bigquery.svg", + "sourceType": "database", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/bigquery", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "BigQuery Source Spec", + "type": "object", + "required": [ "project_id", "credentials_json" ], + "properties": { + "project_id": { + "type": "string", + "description": "The GCP project ID for the project containing the target BigQuery dataset.", + "title": "Project ID" + }, + "dataset_id": { + "type": "string", + "description": "The dataset ID to search for tables and views. If you are only loading data from one dataset, setting this option could result in much faster schema discovery.", + "title": "Default Dataset ID" + }, + "credentials_json": { + "type": "string", + "description": "The contents of your Service Account Key JSON file. See the docs for more information on how to obtain this key.", + "title": "Credentials JSON", + "airbyte_secret": true + } + } + }, + "supportsIncremental": true, + "supportsNormalization": true, + "supportsDBT": true, + "supported_destination_sync_modes": [ ], + "supported_sync_modes": [ "overwrite", "append", "append_dedup" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "47f25999-dd5e-4636-8c39-e7cea2453331", + "name": "Bing Ads", + "dockerRepository": "airbyte/source-bing-ads", + "dockerImageTag": "0.1.19", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/bing-ads", + "icon": "bingads.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/bing-ads", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Bing Ads Spec", + "type": "object", + "required": [ "developer_token", "client_id", "refresh_token", "reports_start_date" ], + "additionalProperties": true, + "properties": { + "auth_method": { + "type": "string", + "const": "oauth2.0" + }, + "tenant_id": { + "type": "string", + "title": "Tenant ID", + "description": "The Tenant ID of your Microsoft Advertising developer application. Set this to \"common\" unless you know you need a different value.", + "airbyte_secret": true, + "default": "common", + "order": 0 + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "The Client ID of your Microsoft Advertising developer application.", + "airbyte_secret": true, + "order": 1 + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "The Client Secret of your Microsoft Advertising developer application.", + "default": "", + "airbyte_secret": true, + "order": 2 + }, + "refresh_token": { + "type": "string", + "title": "Refresh Token", + "description": "Refresh Token to renew the expired Access Token.", + "airbyte_secret": true, + "order": 3 + }, + "developer_token": { + "type": "string", + "title": "Developer Token", + "description": "Developer token associated with user. See more info in the docs.", + "airbyte_secret": true, + "order": 4 + }, + "reports_start_date": { + "type": "string", + "title": "Reports replication start date", + "format": "date", + "default": "2020-01-01", + "description": "The start date from which to begin replicating report data. Any data generated before this date will not be replicated in reports. This is a UTC date in YYYY-MM-DD format.", + "order": 5 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": [ "auth_method" ], + "predicate_value": "oauth2.0", + "oauth_config_specification": { + "oauth_user_input_from_connector_config_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "tenant_id": { + "type": "string", + "path_in_connector_config": [ "tenant_id" ] + } + } + }, + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "refresh_token": { + "type": "string", + "path_in_connector_config": [ "refresh_token" ] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": [ "client_id" ] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": [ "client_secret" ] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "bingads.microsoft.com", "login.microsoftonline.com", "login.live.com", "login.windows-ppe.net", "ads.microsoft.com", "api.ads.microsoft.com" ] + } + }, { + "sourceDefinitionId": "63cea06f-1c75-458d-88fe-ad48c7cb27fd", + "name": "Braintree", + "dockerRepository": "airbyte/source-braintree", + "dockerImageTag": "0.1.4", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/braintree", + "icon": "braintree.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/braintree", + "connectionSpecification": { + "title": "Braintree Spec", + "type": "object", + "properties": { + "merchant_id": { + "title": "Merchant ID", + "description": "The unique identifier for your entire gateway account. See the docs for more information on how to obtain this ID.", + "name": "Merchant ID", + "type": "string" + }, + "public_key": { + "title": "Public Key", + "description": "Braintree Public Key. See the docs for more information on how to obtain this key.", + "name": "Public Key", + "type": "string" + }, + "private_key": { + "title": "Private Key", + "description": "Braintree Private Key. See the docs for more information on how to obtain this key.", + "name": "Private Key", + "airbyte_secret": true, + "type": "string" + }, + "start_date": { + "title": "Start Date", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", + "name": "Start Date", + "examples": [ "2020", "2020-12-30", "2020-11-22 20:20:05" ], + "type": "string", + "format": "date-time" + }, + "environment": { + "title": "Environment", + "description": "Environment specifies where the data will come from.", + "name": "Environment", + "examples": [ "sandbox", "production", "qa", "development" ], + "enum": [ "Development", "Sandbox", "Qa", "Production" ], + "type": "string" + } + }, + "required": [ "merchant_id", "public_key", "private_key", "environment" ] + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "7c37685e-8512-4901-addf-9afbef6c0de9", + "name": "Breezometer", + "dockerRepository": "airbyte/source-breezometer", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/breezometer", + "icon": "breezometer.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/breezometer", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Breezometer Spec", + "type": "object", + "required": [ "api_key", "latitude", "longitude" ], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "tittle": "API Key", + "description": "Your API Access Key. See here.", + "airbyte_secret": true + }, + "latitude": { + "type": "string", + "tittle": "Latitude", + "description": "Latitude of the monitored location.", + "examples": [ "54.675003" ] + }, + "longitude": { + "type": "string", + "tittle": "Longitude", + "description": "Longitude of the monitored location.", + "examples": [ "-113.550282" ] + }, + "days_to_forecast": { + "type": "integer", + "tittle": "Days to Forecast", + "description": "Number of days to forecast. Minimum 1, maximum 3. Valid for Polen and Weather Forecast streams.", + "examples": [ 3 ] + }, + "hours_to_forecast": { + "type": "integer", + "tittle": "Hours to Forecast", + "description": "Number of hours to forecast. Minimum 1, maximum 96. Valid for Air Quality Forecast stream.", + "examples": [ 30 ] + }, + "historic_hours": { + "type": "integer", + "tittle": "Historic Hours", + "description": "Number of hours retireve from Air Quality History stream. Minimum 1, maximum 720.", + "examples": [ 30 ] + }, + "radius": { + "type": "integer", + "tittle": "Radius", + "description": "Desired radius from the location provided. Minimum 5, maximum 100. Valid for Wildfires streams.", + "examples": [ 50 ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "dc98a6ad-2dd1-47b6-9529-2ec35820f9c6", + "name": "CallRail", + "dockerRepository": "airbyte/source-callrail", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/callrail", + "icon": "callrail.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/callrail", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Call Rail Spec", + "type": "object", + "required": [ "api_key", "account_id", "start_date" ], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "description": "API access key", + "airbyte_secret": true + }, + "account_id": { + "type": "string", + "description": "Account ID", + "airbyte_secret": true + }, + "start_date": { + "type": "string", + "description": "Start getting data from that date.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": [ "%Y-%m-%d" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "bb1a6d31-6879-4819-a2bd-3eed299ea8e2", + "name": "Cart.com", + "dockerRepository": "airbyte/source-cart", + "dockerImageTag": "0.2.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/cart", + "icon": "cart.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/cart", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Cart.com Spec", + "type": "object", + "required": [ "start_date" ], + "additionalProperties": true, + "properties": { + "credentials": { + "title": "Authorization Method", + "description": "", + "type": "object", + "oneOf": [ { + "title": "Central API Router", + "type": "object", + "order": 0, + "required": [ "auth_type", "user_name", "user_secret", "site_id" ], + "properties": { + "auth_type": { + "type": "string", + "const": "CENTRAL_API_ROUTER", + "order": 0 + }, + "user_name": { + "type": "string", + "title": "User Name", + "description": "Enter your application's User Name", + "airbyte_secret": true, + "order": 1 + }, + "user_secret": { + "type": "string", + "title": "User Secret", + "description": "Enter your application's User Secret", + "airbyte_secret": true, + "order": 2 + }, + "site_id": { + "type": "string", + "title": "Site ID", + "description": "You can determine a site provisioning site Id by hitting https://site.com/store/sitemonitor.aspx and reading the response param PSID", + "airbyte_secret": true, + "order": 3 + } + } + }, { + "title": "Single Store Access Token", + "type": "object", + "order": 1, + "required": [ "auth_type", "access_token", "store_name" ], + "properties": { + "auth_type": { + "type": "string", + "const": "SINGLE_STORE_ACCESS_TOKEN", + "order": 0 + }, + "access_token": { + "type": "string", + "title": "Access Token", + "airbyte_secret": true, + "order": 1, + "description": "Access Token for making authenticated requests." + }, + "store_name": { + "type": "string", + "title": "Store Name", + "order": 2, + "description": "The name of Cart.com Online Store. All API URLs start with https://[mystorename.com]/api/v1/, where [mystorename.com] is the domain name of your store." + } + } + } ] + }, + "start_date": { + "title": "Start Date", + "type": "string", + "description": "The date from which you'd like to replicate the data", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": [ "2021-01-01T00:00:00Z" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "686473f1-76d9-4994-9cc7-9b13da46147c", + "name": "Chargebee", + "dockerRepository": "airbyte/source-chargebee", + "dockerImageTag": "0.2.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/chargebee", + "icon": "chargebee.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://apidocs.chargebee.com/docs/api", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Chargebee Spec", + "type": "object", + "required": [ "site", "site_api_key", "start_date", "product_catalog" ], + "additionalProperties": true, + "properties": { + "site_api_key": { + "type": "string", + "title": "API Key", + "description": "Chargebee API Key. See the docs for more information on how to obtain this key.", + "airbyte_secret": true, + "order": 0 + }, + "site": { + "type": "string", + "title": "Site", + "description": "The site prefix for your Chargebee instance.", + "examples": [ "airbyte-test" ], + "order": 1 + }, + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "UTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": [ "2021-01-25T00:00:00Z" ], + "order": 2 + }, + "product_catalog": { + "type": "string", + "title": "Product Catalog", + "description": "Product Catalog version of your Chargebee site. Instructions on how to find your version you may find here under `API Version` section.", + "enum": [ "1.0", "2.0" ], + "order": 3 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "*.chargebee.com" ] + } + }, { + "sourceDefinitionId": "9b2d3607-7222-4709-9fa2-c2abdebbdd88", + "name": "Chargify", + "dockerRepository": "airbyte/source-chargify", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/chargify", + "icon": "chargify.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/chargify", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Chargify Spec", + "type": "object", + "required": [ "api_key", "domain" ], + "additionalProperties": false, + "properties": { + "api_key": { + "type": "string", + "description": "Chargify API Key.", + "airbyte_secret": true + }, + "domain": { + "type": "string", + "description": "Chargify domain. Normally this domain follows the following format companyname.chargify.com" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "b6604cbd-1b12-4c08-8767-e140d0fb0877", + "name": "Chartmogul", + "dockerRepository": "airbyte/source-chartmogul", + "dockerImageTag": "0.2.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/chartmogul", + "icon": "chartmogul.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/chartmogul", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Chartmogul Spec", + "type": "object", + "required": [ "api_key", "start_date", "interval" ], + "properties": { + "api_key": { + "type": "string", + "title": "API key", + "description": "Your Chartmogul API key. See the docs for info on how to obtain this.", + "airbyte_secret": true, + "order": 0 + }, + "start_date": { + "type": "string", + "title": "Start date", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. When feasible, any data before this date will not be replicated.", + "examples": [ "2017-01-25T00:00:00Z" ], + "order": 1, + "format": "date-time" + }, + "interval": { + "type": "string", + "title": "Interval", + "description": "Some APIs such as Metrics require intervals to cluster data.", + "enum": [ "day", "week", "month", "quarter" ], + "default": "month", + "order": 2 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": [ "api.chartmogul.com" ] + } + }, { + "sourceDefinitionId": "bad83517-5e54-4a3d-9b53-63e85fbd4d7c", + "name": "ClickHouse", + "dockerRepository": "airbyte/source-clickhouse", + "dockerImageTag": "0.1.17", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/clickhouse", + "icon": "clickhouse.svg", + "sourceType": "database", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/clickhouse", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "ClickHouse Source Spec", + "type": "object", + "required": [ "host", "port", "database", "username" ], + "properties": { + "host": { + "description": "The host endpoint of the Clickhouse cluster.", + "title": "Host", + "type": "string", + "order": 0 + }, + "port": { + "description": "The port of the database.", + "title": "Port", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 8123, + "examples": [ "8123" ], + "order": 1 + }, + "database": { + "description": "The name of the database.", + "title": "Database", + "type": "string", + "examples": [ "default" ], + "order": 2 + }, + "username": { + "description": "The username which is used to access the database.", + "title": "Username", + "type": "string", + "order": 3 + }, + "password": { + "description": "The password associated with this username.", + "title": "Password", + "type": "string", + "airbyte_secret": true, + "order": 4 + }, + "jdbc_url_params": { + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (Eg. key1=value1&key2=value2&key3=value3). For more information read about JDBC URL parameters.", + "title": "JDBC URL Parameters (Advanced)", + "type": "string", + "order": 5 + }, + "ssl": { + "title": "SSL Connection", + "description": "Encrypt data using SSL.", + "type": "boolean", + "default": true, + "order": 6 + }, + "tunnel_method": { + "type": "object", + "title": "SSH Tunnel Method", + "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", + "oneOf": [ { + "title": "No Tunnel", + "required": [ "tunnel_method" ], + "properties": { + "tunnel_method": { + "description": "No ssh tunnel needed to connect to database", + "type": "string", + "const": "NO_TUNNEL", + "order": 0 + } + } + }, { + "title": "SSH Key Authentication", + "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [ "22" ], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host.", + "type": "string", + "order": 3 + }, + "ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + }, { + "title": "Password Authentication", + "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [ "22" ], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host", + "type": "string", + "order": 3 + }, + "tunnel_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 4 + } + } + } ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": [ "${host}", "${tunnel_method.tunnel_host}" ] + } + }, { + "sourceDefinitionId": "311a7a27-3fb5-4f7e-8265-5e4afe258b66", + "name": "ClickUp", + "dockerRepository": "airbyte/source-clickup-api", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/click-up", + "icon": "clickup.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "ClickUp Api Spec", + "type": "object", + "required": [ "api_token" ], + "additionalProperties": true, + "properties": { + "api_token": { + "type": "string", + "description": "Every ClickUp API call required authentication. This field is your personal API token. See here.", + "airbyte_secret": true + }, + "team_id": { + "type": "string", + "description": "The ID of your team in ClickUp. Retrieve it from the `/team` of the ClickUp API. See here." + }, + "space_id": { + "type": "string", + "description": "The ID of your space in your workspace. Retrieve it from the `/team/{team_id}/space` of the ClickUp API. See here." + }, + "folder_id": { + "type": "string", + "description": "The ID of your folder in your space. Retrieve it from the `/space/{space_id}/folder` of the ClickUp API. See here." + }, + "list_id": { + "type": "string", + "description": "The ID of your list in your folder. Retrieve it from the `/folder/{folder_id}/list` of the ClickUp API. See here." + }, + "include_closed_tasks": { + "title": "Include Closed Tasks", + "type": "boolean", + "default": false, + "description": "Include or exclude closed tasks. By default, they are excluded. See here." + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "dfffecb7-9a13-43e9-acdc-b92af7997ca9", + "name": "Close.com", + "dockerRepository": "airbyte/source-close-com", + "dockerImageTag": "0.2.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/close-com", + "icon": "close.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/close-com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Close.com Spec", + "type": "object", + "required": [ "api_key" ], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "description": "Close.com API key (usually starts with 'api_'; find yours here).", + "airbyte_secret": true + }, + "start_date": { + "type": "string", + "description": "The start date to sync data. Leave blank for full sync. Format: YYYY-MM-DD.", + "examples": [ "2021-01-01" ], + "default": "2021-01-01", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "format": "date-time" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": [ "api.close.com" ] + } + }, { + "sourceDefinitionId": "9cdd4183-d0ba-40c3-aad3-6f46d4103974", + "name": "CoinGecko Coins", + "dockerRepository": "airbyte/source-coingecko-coins", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/coingecko-coins", + "icon": "coingeckocoins.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "CoinGecko Coins Spec", + "type": "object", + "required": [ "coin_id", "vs_currency", "days", "start_date" ], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "description": "API Key (for pro users)", + "airbyte_secret": true, + "order": 0 + }, + "coin_id": { + "type": "string", + "description": "CoinGecko coin ID (e.g. bitcoin). Can be retrieved from the\n`/coins/list` endpoint.\n", + "order": 1 + }, + "vs_currency": { + "type": "string", + "description": "The target currency of market data (e.g. usd, eur, jpy, etc.)\n", + "order": 2 + }, + "days": { + "type": "string", + "description": "The number of days of data for market chart.\n", + "enum": [ "1", "7", "14", "30", "90", "180", "365", "max" ], + "default": "30", + "order": 3 + }, + "start_date": { + "type": "string", + "description": "The start date for the historical data stream in dd-mm-yyyy format.\n", + "format": "date", + "pattern": "^[0-9]{2}-[0-9]{2}-[0-9]{4}$", + "order": 4 + }, + "end_date": { + "type": "string", + "description": "The end date for the historical data stream in dd-mm-yyyy format.\n", + "format": "date", + "pattern": "^[0-9]{2}-[0-9]{2}-[0-9]{4}$", + "order": 5 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "9fa5862c-da7c-11eb-8d19-0242ac130003", + "name": "Cockroachdb", + "dockerRepository": "airbyte/source-cockroachdb", + "dockerImageTag": "0.1.22", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/cockroachdb", + "icon": "cockroachdb.svg", + "sourceType": "database", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/cockroachdb", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Cockroach Source Spec", + "type": "object", + "required": [ "host", "port", "database", "username" ], + "properties": { + "host": { + "title": "Host", + "description": "Hostname of the database.", + "type": "string", + "order": 0 + }, + "port": { + "title": "Port", + "description": "Port of the database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 5432, + "examples": [ "5432" ], + "order": 1 + }, + "database": { + "title": "DB Name", + "description": "Name of the database.", + "type": "string", + "order": 2 + }, + "username": { + "title": "User", + "description": "Username to use to access the database.", + "type": "string", + "order": 3 + }, + "password": { + "title": "Password", + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 4 + }, + "jdbc_url_params": { + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (Eg. key1=value1&key2=value2&key3=value3). For more information read about JDBC URL parameters.", + "title": "JDBC URL Parameters (Advanced)", + "type": "string", + "order": 5 + }, + "ssl": { + "title": "Connect using SSL", + "description": "Encrypt client/server communications for increased security.", + "type": "boolean", + "default": false, + "order": 6 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": [ "${host}" ] + } + }, { + "sourceDefinitionId": "27f910fd-f832-4b2e-bcfd-6ab342e434d8", + "name": "Coda", + "dockerRepository": "airbyte/source-coda", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/coda", + "icon": "coda.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/coda", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Required attributes for hitting apis", + "type": "object", + "required": [ "auth_token" ], + "additionalProperties": true, + "properties": { + "auth_token": { + "title": "Authentication token", + "type": "string", + "description": "Bearer token", + "airbyte_secret": true, + "order": 0 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "919984ef-53a2-479b-8ffe-9c1ddb9fc3f3", + "name": "Coin API", + "dockerRepository": "airbyte/source-coin-api", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/coin-api", + "icon": "coinapi.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/coin-api", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Coin API Spec", + "type": "object", + "required": [ "api_key", "environment", "symbol_id", "period", "start_date" ], + "properties": { + "api_key": { + "type": "string", + "description": "API Key", + "airbyte_secret": true, + "order": 0 + }, + "environment": { + "type": "string", + "description": "The environment to use. Either sandbox or production.\n", + "enum": [ "sandbox", "production" ], + "default": "sandbox", + "order": 1 + }, + "symbol_id": { + "type": "string", + "description": "The symbol ID to use. See the documentation for a list.\nhttps://docs.coinapi.io/#list-all-symbols-get\n", + "order": 2 + }, + "period": { + "type": "string", + "description": "The period to use. See the documentation for a list. https://docs.coinapi.io/#list-all-periods-get", + "examples": [ "5SEC", "2MTH" ] + }, + "start_date": { + "type": "string", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}$", + "description": "The start date in ISO 8601 format.", + "examples": [ "2019-01-01T00:00:00" ] + }, + "end_date": { + "type": "string", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}$", + "description": "The end date in ISO 8601 format. If not supplied, data will be returned\nfrom the start date to the current time, or when the count of result\nelements reaches its limit.\n", + "examples": [ "2019-01-01T00:00:00" ] + }, + "limit": { + "type": "integer", + "description": "The maximum number of elements to return. If not supplied, the default\nis 100. For numbers larger than 100, each 100 items is counted as one\nrequest for pricing purposes. Maximum value is 100000.\n", + "minimum": 1, + "maximum": 100000, + "default": 100 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "239463f5-64bb-4d88-b4bd-18ce673fd572", + "name": "CoinMarketCap", + "dockerRepository": "airbyte/source-coinmarketcap", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/coinmarketcap", + "icon": "coinmarketcap.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/coinmarketcap", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Coinmarketcap Spec", + "type": "object", + "required": [ "api_key", "data_type" ], + "additionalProperties": true, + "properties": { + "api_key": { + "title": "API Key", + "type": "string", + "description": "Your API Key. See here. The token is case sensitive.", + "airbyte_secret": true + }, + "data_type": { + "title": "Data type", + "type": "string", + "enum": [ "latest", "historical" ], + "description": "/latest: Latest market ticker quotes and averages for cryptocurrencies and exchanges. /historical: Intervals of historic market data like OHLCV data or data for use in charting libraries. See here." + }, + "symbols": { + "title": "Symbol", + "type": "array", + "items": { + "type": "string" + }, + "description": "Cryptocurrency symbols. (only used for quotes stream)", + "minItems": 1, + "examples": [ "AVAX", "BTC" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "008b2e26-11a3-11ec-82a8-0242ac130003", + "name": "Commercetools", + "dockerRepository": "airbyte/source-commercetools", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/commercetools", + "icon": "commercetools.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/commercetools", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Commercetools Source CDK Specifications", + "type": "object", + "required": [ "region", "start_date", "host", "project_key", "client_id", "client_secret" ], + "additionalProperties": false, + "properties": { + "region": { + "type": "string", + "description": "The region of the platform.", + "examples": [ "us-central1", "australia-southeast1" ] + }, + "host": { + "type": "string", + "enum": [ "gcp", "aws" ], + "description": "The cloud provider your shop is hosted. See: https://docs.commercetools.com/api/authorization" + }, + "start_date": { + "type": "string", + "description": "The date you would like to replicate data. Format: YYYY-MM-DD.", + "examples": [ "2021-01-01" ], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" + }, + "project_key": { + "type": "string", + "description": "The project key" + }, + "client_id": { + "type": "string", + "description": "Id of API Client.", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "description": "The password of secret of API Client.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "4fd7565c-8b99-439b-80d0-2d965e1d958c", + "name": "ConfigCat", + "dockerRepository": "airbyte/source-configcat", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/configcat", + "icon": "configcat.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/configcat", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Configcat Spec", + "type": "object", + "required": [ "username", "password" ], + "additionalProperties": true, + "properties": { + "username": { + "title": "Username", + "type": "string", + "description": "Basic auth user name. See here." + }, + "password": { + "title": "Password", + "type": "string", + "description": "Basic auth password. See here.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "cf40a7f8-71f8-45ce-a7fa-fca053e4028c", + "name": "Confluence", + "dockerRepository": "airbyte/source-confluence", + "dockerImageTag": "0.1.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/confluence", + "icon": "confluence.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Confluence Spec", + "type": "object", + "required": [ "api_token", "domain_name", "email" ], + "additionalProperties": true, + "properties": { + "api_token": { + "title": "API Token", + "type": "string", + "description": "Please follow the Jira confluence for generating an API token: generating an API token.", + "airbyte_secret": true + }, + "domain_name": { + "title": "Domain name", + "type": "string", + "description": "Your Confluence domain name", + "examples": [ "example.atlassian.net" ] + }, + "email": { + "title": "Email", + "type": "string", + "description": "Your Confluence login email", + "examples": [ "abc@example.com" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": [ "${subdomain}.atlassian.net" ] + } + }, { + "sourceDefinitionId": "be9ee02f-6efe-4970-979b-95f797a37188", + "name": "ConvertKit", + "dockerRepository": "airbyte/source-convertkit", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/convertkit", + "icon": "convertkit.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/convertkit", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Convertkit Spec", + "type": "object", + "required": [ "api_secret" ], + "additionalProperties": true, + "properties": { + "api_secret": { + "type": "string", + "description": "API Secret", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "f39208dc-7e1c-48b8-919b-5006360cc27f", + "name": "Commcare", + "dockerRepository": "airbyte/source-commcare", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/commcare", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Commcare Source Spec", + "type": "object", + "required": [ "api_key", "app_id", "start_date" ], + "properties": { + "api_key": { + "type": "string", + "title": "API Key", + "description": "Commcare API Key", + "airbyte_secret": true, + "order": 0 + }, + "project_space": { + "type": "string", + "title": "Project Space", + "description": "Project Space for commcare", + "order": 1 + }, + "app_id": { + "type": "string", + "title": "Application ID", + "description": "The Application ID we are interested in", + "airbyte_secret": true, + "order": 2 + }, + "start_date": { + "type": "string", + "title": "Start date for extracting records", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "default": "2022-10-01T00:00:00Z", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Only records after this date will be replicated.", + "order": 3 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "44f3002f-2df9-4f6d-b21c-02cd3b47d0dc", + "name": "Copper", + "dockerRepository": "airbyte/source-copper", + "dockerImageTag": "0.2.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/copper", + "icon": "copper.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/copper", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Copper Spec", + "type": "object", + "required": [ "api_key", "user_email" ], + "properties": { + "api_key": { + "type": "string", + "title": "API Key", + "description": "Copper API key", + "airbyte_secret": true + }, + "user_email": { + "type": "string", + "title": "User email", + "description": "user email used to login in to Copper" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "c332628c-f55c-4017-8222-378cfafda9b2", + "name": "Convex", + "dockerRepository": "airbyte/source-convex", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/convex", + "icon": "convex.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/convex", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Convex Source Spec", + "type": "object", + "required": [ "deployment_url", "access_key" ], + "properties": { + "deployment_url": { + "type": "string", + "title": "Deployment Url", + "examples": [ "https://murky-swan-635.convex.cloud", "https://cluttered-owl-337.convex.cloud" ] + }, + "access_key": { + "type": "string", + "title": "Access Key", + "description": "API access key used to retrieve data from Convex.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "0541b2cd-2367-4986-b5f1-b79ff55439e4", + "name": "Courier", + "dockerRepository": "airbyte/source-courier", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/courier", + "icon": "courier.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/courier", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Courier Source Spec", + "type": "object", + "required": [ "api_key" ], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "description": "Courier API Key to retrieve your data.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "e71aae8a-5143-11ed-bdc3-0242ac120002", + "name": "Clockify", + "dockerRepository": "airbyte/source-clockify", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/clockify", + "icon": "clockify.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/clockify", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Clockify Spec", + "type": "object", + "required": [ "workspace_id", "api_key" ], + "additionalProperties": true, + "properties": { + "workspace_id": { + "title": "Workspace Id", + "description": "WorkSpace Id", + "type": "string" + }, + "api_key": { + "title": "API Key", + "description": "You can get your api access_key here This API is Case Sensitive.", + "type": "string", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "c47d6804-8b98-449f-970a-5ddb5cb5d7aa", + "name": "Customer.io", + "dockerRepository": "farosai/airbyte-customer-io-source", + "dockerImageTag": "0.1.23", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/customer-io", + "icon": "customer-io.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.faros.ai", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Customer.io Spec", + "type": "object", + "required": [ "app_api_key" ], + "additionalProperties": false, + "properties": { + "app_api_key": { + "type": "string", + "title": "Customer.io App API Key", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "1cfc30c7-82db-43f4-9fd7-ac1b42312cda", + "name": "Datadog", + "dockerRepository": "airbyte/source-datadog", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/datadog", + "icon": "datadog.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/datadog", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Datadog Source Spec", + "type": "object", + "required": [ "api_key", "application_key" ], + "additionalProperties": true, + "properties": { + "api_key": { + "title": "API Key", + "description": "Datadog API key", + "type": "string", + "airbyte_secret": true, + "order": 1 + }, + "application_key": { + "title": "Application Key", + "description": "Datadog application key", + "type": "string", + "airbyte_secret": true, + "order": 2 + }, + "query": { + "title": "Query", + "description": "The search query. This just applies to Incremental syncs. If empty, it'll collect all logs.", + "type": "string", + "order": 3 + }, + "max_records_per_request": { + "type": "integer", + "title": "Max records per requests", + "default": 5000, + "minimum": 1, + "maximum": 5000, + "description": "Maximum number of records to collect per request.", + "order": 4 + }, + "start_date": { + "title": "Start date", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated. This just applies to Incremental syncs.", + "type": "string", + "examples": [ "2022-10-01T00:00:00Z" ], + "order": 5 + }, + "end_date": { + "title": "End date", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Data after this date will not be replicated. An empty value will represent the current datetime for each execution. This just applies to Incremental syncs.", + "examples": [ "2022-10-01T00:00:00Z" ], + "type": "string", + "order": 6 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "8e1ae2d2-4790-44d3-9d83-75b3fc3940ff", + "name": "Datascope", + "dockerRepository": "airbyte/source-datascope", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/datascope", + "icon": "datascope.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/datascope", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Datascope Spec", + "type": "object", + "required": [ "api_key", "start_date" ], + "additionalProperties": true, + "properties": { + "start_date": { + "title": "Start Date", + "type": "string", + "description": "Start date for the data to be replicated", + "examples": [ "dd/mm/YYYY HH:MM" ], + "pattern": "^[0-9]{2}/[0-9]{2}/[0-9]{4} [0-9]{2}:[0-9]{2}$" + }, + "api_key": { + "title": "Authorization", + "type": "string", + "description": "API Key", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "cc88c43f-6f53-4e8a-8c4d-b284baaf9635", + "name": "Delighted", + "dockerRepository": "airbyte/source-delighted", + "dockerImageTag": "0.2.2", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/delighted", + "icon": "delighted.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Delighted Spec", + "type": "object", + "required": [ "since", "api_key" ], + "additionalProperties": true, + "properties": { + "api_key": { + "title": "Delighted API Key", + "type": "string", + "description": "A Delighted API key.", + "airbyte_secret": true, + "order": 0 + }, + "since": { + "title": "Date Since", + "type": "string", + "description": "The date from which you'd like to replicate the data", + "examples": [ "2022-05-30T04:50:23Z", "2022-05-30 04:50:23" ], + "pattern": "^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?Z?$", + "order": 1, + "format": "date-time" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": [ "api.delighted.com" ] + } + }, { + "sourceDefinitionId": "0b5c867e-1b12-4d02-ab74-97b2184ff6d7", + "name": "Dixa", + "dockerRepository": "airbyte/source-dixa", + "dockerImageTag": "0.1.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/dixa", + "icon": "dixa.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/dixa", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Dixa Spec", + "type": "object", + "required": [ "api_token", "start_date" ], + "additionalProperties": false, + "properties": { + "api_token": { + "type": "string", + "description": "Dixa API token", + "airbyte_secret": true + }, + "start_date": { + "type": "string", + "description": "The connector pulls records updated from this date onwards.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": [ "YYYY-MM-DD" ] + }, + "batch_size": { + "type": "integer", + "description": "Number of days to batch into one request. Max 31.", + "pattern": "^[0-9]{1,2}$", + "examples": [ 1, 31 ], + "default": 31 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "72d405a3-56d8-499f-a571-667c03406e43", + "name": "Dockerhub", + "dockerRepository": "airbyte/source-dockerhub", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/dockerhub", + "icon": "dockerhub.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/dockerhub", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Dockerhub Spec", + "type": "object", + "required": [ "docker_username" ], + "additionalProperties": false, + "properties": { + "docker_username": { + "type": "string", + "description": "Username of DockerHub person or organization (for https://hub.docker.com/v2/repositories/USERNAME/ API call)", + "pattern": "^[a-z0-9_\\-]+$", + "examples": [ "airbyte" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "d99e9ace-8621-46c2-9144-76ae4751d64b", + "name": "Dremio", + "dockerRepository": "airbyte/source-dremio", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/dremio", + "icon": "dremio.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/dremio", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Dremio Spec", + "type": "object", + "additionalProperties": true, + "required": [ "api_key", "base_url" ], + "properties": { + "api_key": { + "type": "string", + "description": "API Key that is generated when you authenticate to Dremio API", + "airbyte_secret": true + }, + "base_url": { + "type": "string", + "description": "URL of your Dremio instance", + "default": "https://app.dremio.cloud" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "445831eb-78db-4b1f-8f1f-0d96ad8739e2", + "name": "Drift", + "dockerRepository": "airbyte/source-drift", + "dockerImageTag": "0.2.6", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/drift", + "icon": "drift.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/drift", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Drift Spec", + "type": "object", + "required": [ ], + "additionalProperties": true, + "properties": { + "credentials": { + "title": "Authorization Method", + "type": "object", + "oneOf": [ { + "type": "object", + "title": "OAuth2.0", + "required": [ "client_id", "client_secret", "access_token", "refresh_token" ], + "properties": { + "credentials": { + "type": "string", + "const": "oauth2.0", + "order": 0 + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "The Client ID of your Drift developer application.", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "The Client Secret of your Drift developer application.", + "airbyte_secret": true + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "Access Token for making authenticated requests.", + "airbyte_secret": true + }, + "refresh_token": { + "type": "string", + "title": "Refresh Token", + "description": "Refresh Token to renew the expired Access Token.", + "default": "", + "airbyte_secret": true + } + } + }, { + "title": "Access Token", + "type": "object", + "required": [ "access_token" ], + "properties": { + "credentials": { + "type": "string", + "const": "access_token", + "order": 0 + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "Drift Access Token. See the docs for more information on how to generate this key.", + "airbyte_secret": true + } + } + } ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": [ "credentials", "0" ], + "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], + "oauthFlowOutputParameters": [ [ "access_token" ], [ "refresh_token" ] ] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": [ "driftapi.com" ] + } + }, { + "sourceDefinitionId": "1356e1d9-977f-4057-ad4b-65f25329cf61", + "name": "DV 360", + "dockerRepository": "airbyte/source-dv-360", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/dv-360", + "icon": "dv360.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Display & Video 360 Spec", + "type": "object", + "required": [ "credentials", "partner_id", "start_date" ], + "additionalProperties": true, + "properties": { + "credentials": { + "type": "object", + "description": "Oauth2 credentials", + "order": 0, + "required": [ "access_token", "refresh_token", "token_uri", "client_id", "client_secret" ], + "properties": { + "access_token": { + "type": "string", + "description": "Access token", + "airbyte_secret": true + }, + "refresh_token": { + "type": "string", + "description": "Refresh token", + "airbyte_secret": true + }, + "token_uri": { + "type": "string", + "description": "Token URI", + "airbyte_secret": true + }, + "client_id": { + "type": "string", + "description": "Client ID", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "description": "Client secret", + "airbyte_secret": true + } + } + }, + "partner_id": { + "type": "integer", + "description": "Partner ID", + "order": 1 + }, + "start_date": { + "type": "string", + "description": "UTC date and time in the format 2017-01-25. Any data before this date will not be replicated", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "order": 2 + }, + "end_date": { + "type": "string", + "description": "UTC date and time in the format 2017-01-25. Any data after this date will not be replicated.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "order": 3 + }, + "filters": { + "type": "array", + "description": "filters for the dimensions. each filter object had 2 keys: 'type' for the name of the dimension to be used as. and 'value' for the value of the filter", + "default": [ ], + "order": 4 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "50401137-8871-4c5a-abb7-1f5fda35545a", + "name": "DynamoDB", + "dockerRepository": "airbyte/source-dynamodb", + "dockerImageTag": "0.1.2", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/dynamodb", + "icon": "dynamodb.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/dynamodb", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Dynamodb Source Spec", + "type": "object", + "required": [ "access_key_id", "secret_access_key" ], + "additionalProperties": false, + "properties": { + "endpoint": { + "title": "Dynamodb Endpoint", + "type": "string", + "default": "", + "description": "the URL of the Dynamodb database", + "examples": [ "https://{aws_dynamo_db_url}.com" ] + }, + "region": { + "title": "Dynamodb Region", + "type": "string", + "default": "", + "description": "The region of the Dynamodb database", + "enum": [ "", "us-east-1", "us-east-2", "us-west-1", "us-west-2", "af-south-1", "ap-east-1", "ap-south-1", "ap-northeast-1", "ap-northeast-2", "ap-northeast-3", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "cn-north-1", "cn-northwest-1", "eu-central-1", "eu-north-1", "eu-south-1", "eu-west-1", "eu-west-2", "eu-west-3", "sa-east-1", "me-south-1", "us-gov-east-1", "us-gov-west-1" ] + }, + "access_key_id": { + "title": "Dynamodb Key Id", + "type": "string", + "description": "The access key id to access Dynamodb. Airbyte requires read permissions to the database", + "airbyte_secret": true, + "examples": [ "A012345678910EXAMPLE" ] + }, + "secret_access_key": { + "title": "Dynamodb Access Key", + "type": "string", + "description": "The corresponding secret to the access key id.", + "airbyte_secret": true, + "examples": [ "a012345678910ABCDEFGH/AbCdEfGhEXAMPLEKEY" ] + }, + "reserved_attribute_names": { + "title": "Reserved attribute names", + "type": "string", + "description": "Comma separated reserved attribute names present in your tables", + "airbyte_secret": true, + "examples": [ "name, field_name, field-name" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "d53f9084-fa6b-4a5a-976c-5b8392f4ad8a", + "name": "E2E Testing", + "dockerRepository": "airbyte/source-e2e-test", + "dockerImageTag": "2.1.4", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/e2e-test", + "icon": "airbyte.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/e2e-test", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "E2E Test Source Spec", + "additionalProperties": true, + "type": "object", + "oneOf": [ { + "title": "Legacy Infinite Feed", + "description": "This mode is used for Platform acceptance tests. The catalog has one \"data\" stream, which has one string field \"column1\". This mode will emit messages infinitely.", + "required": [ "type", "max_records" ], + "type": "object", + "additionalProperties": true, + "properties": { + "type": { + "type": "string", + "const": "INFINITE_FEED", + "default": "INFINITE_FEED" + }, + "max_records": { + "title": "Max Records", + "description": "Number of records to emit. If not set, defaults to infinity.", + "type": "integer" + }, + "message_interval": { + "title": "Message Interval", + "description": "Interval between messages in ms.", + "type": "integer" + } + } + }, { + "title": "Legacy Exception After N", + "description": "This mode is used for Platform acceptance tests. The catalog has one \"data\" stream, which has one string field \"column1\". This mode will throw an exception after N messages.", + "required": [ "type", "throw_after_n_records" ], + "type": "object", + "additionalProperties": true, + "properties": { + "type": { + "type": "string", + "const": "EXCEPTION_AFTER_N", + "default": "EXCEPTION_AFTER_N" + }, + "throw_after_n_records": { + "title": "Throw After N Records", + "description": "Number of records to emit before throwing an exception. Min 1.", + "type": "integer", + "min": 1 + } + } + }, { + "title": "Continuous Feed", + "type": "object", + "required": [ "type", "max_messages", "mock_catalog" ], + "additionalProperties": true, + "properties": { + "type": { + "type": "string", + "const": "CONTINUOUS_FEED", + "default": "CONTINUOUS_FEED", + "order": 10 + }, + "max_messages": { + "title": "Max Records", + "description": "Number of records to emit per stream. Min 1. Max 100 billion.", + "type": "integer", + "default": 100, + "min": 1, + "max": 100000000000, + "order": 20 + }, + "seed": { + "title": "Random Seed", + "description": "When the seed is unspecified, the current time millis will be used as the seed. Range: [0, 1000000].", + "type": "integer", + "default": 0, + "examples": [ 42 ], + "min": 0, + "max": 1000000, + "order": 30 + }, + "message_interval_ms": { + "title": "Message Interval (ms)", + "description": "Interval between messages in ms. Min 0 ms. Max 60000 ms (1 minute).", + "type": "integer", + "min": 0, + "max": 60000, + "default": 0, + "order": 40 + }, + "mock_catalog": { + "title": "Mock Catalog", + "type": "object", + "order": 50, + "oneOf": [ { + "title": "Single Schema", + "description": "A catalog with one or multiple streams that share the same schema.", + "type": "object", + "required": [ "type", "stream_name", "stream_schema" ], + "properties": { + "type": { + "type": "string", + "const": "SINGLE_STREAM", + "default": "SINGLE_STREAM" + }, + "stream_name": { + "title": "Stream Name", + "description": "Name of the data stream.", + "type": "string", + "default": "data_stream" + }, + "stream_schema": { + "title": "Stream Schema", + "description": "A Json schema for the stream. The schema should be compatible with draft-07. See this doc for examples.", + "type": "string", + "default": "{ \"type\": \"object\", \"properties\": { \"column1\": { \"type\": \"string\" } } }" + }, + "stream_duplication": { + "title": "Duplicate the stream N times", + "description": "Duplicate the stream for easy load testing. Each stream name will have a number suffix. For example, if the stream name is \"ds\", the duplicated streams will be \"ds_0\", \"ds_1\", etc.", + "type": "integer", + "default": 1, + "min": 1, + "max": 10000 + } + } + }, { + "title": "Multi Schema", + "type": "object", + "description": "A catalog with multiple data streams, each with a different schema.", + "required": [ "type", "stream_schemas" ], + "properties": { + "type": { + "type": "string", + "const": "MULTI_STREAM", + "default": "MULTI_STREAM" + }, + "stream_schemas": { + "title": "Streams and Schemas", + "description": "A Json object specifying multiple data streams and their schemas. Each key in this object is one stream name. Each value is the schema for that stream. The schema should be compatible with draft-07. See this doc for examples.", + "type": "string", + "default": "{ \"stream1\": { \"type\": \"object\", \"properties\": { \"field1\": { \"type\": \"string\" } } }, \"stream2\": { \"type\": \"object\", \"properties\": { \"field1\": { \"type\": \"boolean\" } } } }" + } + } + } ] + } + } + }, { + "title": "Benchmark", + "description": "This mode is used for speed benchmarks. Specifically, it should be used for testing the throughput of the platform and destination. It optimizes for emitting records very quickly, so that it should never be the bottleneck.", + "type": "object", + "required": [ "type", "schema", "terminationCondition" ], + "additionalProperties": true, + "properties": { + "type": { + "type": "string", + "const": "BENCHMARK", + "default": "BENCHMARK" + }, + "schema": { + "title": "Schema", + "description": "schema of the data in the benchmark.", + "type": "string", + "enum": [ "FIVE_STRING_COLUMNS" ] + }, + "terminationCondition": { + "title": "Termination Condition", + "description": "when does the benchmark stop?", + "type": "object", + "oneOf": [ { + "title": "max records", + "type": "object", + "required": [ "type", "max" ], + "properties": { + "type": { + "type": "string", + "const": "MAX_RECORDS", + "default": "MAX_RECORDS" + }, + "max": { + "type": "number" + } + } + } ] + } + } + } ] + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "protocol_version": "0.2.1" + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "46b25e70-c980-4590-a811-8deaf50ee09f", + "name": "EmailOctopus", + "dockerRepository": "airbyte/source-emailoctopus", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/emailoctopus", + "icon": "emailoctopus.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/emailoctopus", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "EmailOctopus Spec", + "type": "object", + "required": [ "api_key" ], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "title": "EmailOctopus API key", + "description": "EmailOctopus API Key. See the docs for information on how to generate this key.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "e2b40e36-aa0e-4bed-b41b-bcea6fa348b1", + "name": "Exchange Rates Api", + "dockerRepository": "airbyte/source-exchange-rates", + "dockerImageTag": "1.2.8", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/exchangeratesapi", + "icon": "exchangeratesapi.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/exchangeratesapi", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "exchangeratesapi.io Source Spec", + "type": "object", + "required": [ "start_date", "access_key" ], + "additionalProperties": true, + "properties": { + "start_date": { + "type": "string", + "description": "Start getting data from that date.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": [ "YYYY-MM-DD" ], + "format": "date" + }, + "access_key": { + "type": "string", + "description": "Your API Key. See here. The key is case sensitive.", + "airbyte_secret": true + }, + "base": { + "type": "string", + "description": "ISO reference currency. See here. Free plan doesn't support Source Currency Switching, default base currency is EUR", + "examples": [ "EUR", "USD" ] + }, + "ignore_weekends": { + "type": "boolean", + "description": "Ignore weekends? (Exchanges don't run on weekends)", + "default": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": [ "${subdomain}.apilayer.com", "apilayer.com" ] + } + }, { + "sourceDefinitionId": "6babfc42-c734-4ef6-a817-6eca15f0f9b7", + "name": "Everhour", + "dockerRepository": "airbyte/source-everhour", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/everhour", + "icon": "everhour.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/everhour", + "connectionSpecification": { + "title": "Everhour Spec", + "type": "object", + "required": [ "api_key" ], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "title": "API Key", + "description": "Everhour API Key. See the docs for information on how to generate this key.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": [ "api.everhour.com" ] + } + }, { + "sourceDefinitionId": "e7778cfc-e97c-4458-9ecb-b4f2bba8946c", + "name": "Facebook Marketing", + "dockerRepository": "airbyte/source-facebook-marketing", + "dockerImageTag": "0.3.4", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/facebook-marketing", + "icon": "facebook.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/facebook-marketing", + "changelogUrl": "https://docs.airbyte.com/integrations/sources/facebook-marketing", + "connectionSpecification": { + "title": "Source Facebook Marketing", + "type": "object", + "properties": { + "account_id": { + "title": "Account ID", + "description": "The Facebook Ad account ID to use when pulling data from the Facebook Marketing API. Open your Meta Ads Manager. The Ad account ID number is in the account dropdown menu or in your browser's address bar. See the docs for more information.", + "order": 0, + "examples": [ "111111111111111" ], + "type": "string" + }, + "start_date": { + "title": "Start Date", + "description": "The date from which you'd like to replicate data for all incremental streams, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", + "order": 1, + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": [ "2017-01-25T00:00:00Z" ], + "type": "string", + "format": "date-time" + }, + "end_date": { + "title": "End Date", + "description": "The date until which you'd like to replicate data for all incremental streams, in the format YYYY-MM-DDT00:00:00Z. All data generated between the start date and this end date will be replicated. Not setting this option will result in always syncing the latest data.", + "order": 2, + "pattern": "^$|^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": [ "2017-01-26T00:00:00Z" ], + "type": "string" + }, + "access_token": { + "title": "Access Token", + "description": "The value of the generated access token. From your App’s Dashboard, click on \"Marketing API\" then \"Tools\". Select permissions ads_management, ads_read, read_insights, business_management. Then click on \"Get token\". See the docs for more information.", + "order": 3, + "airbyte_secret": true, + "type": "string" + }, + "include_deleted": { + "title": "Include Deleted Campaigns, Ads, and AdSets", + "description": "Set to active if you want to include data from deleted Campaigns, Ads, and AdSets.", + "default": false, + "order": 4, + "type": "boolean" + }, + "fetch_thumbnail_images": { + "title": "Fetch Thumbnail Images from Ad Creative", + "description": "Set to active if you want to fetch the thumbnail_url and store the result in thumbnail_data_url for each Ad Creative.", + "default": false, + "order": 5, + "type": "boolean" + }, + "custom_insights": { + "title": "Custom Insights", + "description": "A list which contains ad statistics entries, each entry must have a name and can contains fields, breakdowns or action_breakdowns. Click on \"add\" to fill this field.", + "order": 6, + "type": "array", + "items": { + "title": "InsightConfig", + "description": "Config for custom insights", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "The name value of insight", + "type": "string" + }, + "level": { + "title": "Level", + "description": "Chosen level for API", + "default": "ad", + "enum": [ "ad", "adset", "campaign", "account" ], + "type": "string" + }, + "fields": { + "title": "Fields", + "description": "A list of chosen fields for fields parameter", + "default": [ ], + "type": "array", + "items": { + "title": "ValidEnums", + "description": "Generic enumeration.\n\nDerive from this class to define new enumerations.", + "enum": [ "account_currency", "account_id", "account_name", "action_values", "actions", "ad_bid_value", "ad_click_actions", "ad_id", "ad_impression_actions", "ad_name", "adset_bid_value", "adset_end", "adset_id", "adset_name", "adset_start", "age_targeting", "attribution_setting", "auction_bid", "auction_competitiveness", "auction_max_competitor_bid", "buying_type", "campaign_id", "campaign_name", "canvas_avg_view_percent", "canvas_avg_view_time", "catalog_segment_actions", "catalog_segment_value", "catalog_segment_value_mobile_purchase_roas", "catalog_segment_value_omni_purchase_roas", "catalog_segment_value_website_purchase_roas", "clicks", "conversion_rate_ranking", "conversion_values", "conversions", "converted_product_quantity", "converted_product_value", "cost_per_15_sec_video_view", "cost_per_2_sec_continuous_video_view", "cost_per_action_type", "cost_per_ad_click", "cost_per_conversion", "cost_per_dda_countby_convs", "cost_per_estimated_ad_recallers", "cost_per_inline_link_click", "cost_per_inline_post_engagement", "cost_per_one_thousand_ad_impression", "cost_per_outbound_click", "cost_per_thruplay", "cost_per_unique_action_type", "cost_per_unique_click", "cost_per_unique_conversion", "cost_per_unique_inline_link_click", "cost_per_unique_outbound_click", "cpc", "cpm", "cpp", "created_time", "ctr", "date_start", "date_stop", "dda_countby_convs", "dda_results", "engagement_rate_ranking", "estimated_ad_recall_rate", "estimated_ad_recall_rate_lower_bound", "estimated_ad_recall_rate_upper_bound", "estimated_ad_recallers", "estimated_ad_recallers_lower_bound", "estimated_ad_recallers_upper_bound", "frequency", "full_view_impressions", "full_view_reach", "gender_targeting", "impressions", "inline_link_click_ctr", "inline_link_clicks", "inline_post_engagement", "instant_experience_clicks_to_open", "instant_experience_clicks_to_start", "instant_experience_outbound_clicks", "interactive_component_tap", "labels", "location", "mobile_app_purchase_roas", "objective", "optimization_goal", "outbound_clicks", "outbound_clicks_ctr", "place_page_name", "purchase_roas", "qualifying_question_qualify_answer_rate", "quality_ranking", "quality_score_ectr", "quality_score_ecvr", "quality_score_organic", "reach", "social_spend", "spend", "total_postbacks", "total_postbacks_detailed", "unique_actions", "unique_clicks", "unique_conversions", "unique_ctr", "unique_inline_link_click_ctr", "unique_inline_link_clicks", "unique_link_clicks_ctr", "unique_outbound_clicks", "unique_outbound_clicks_ctr", "unique_video_continuous_2_sec_watched_actions", "unique_video_view_15_sec", "updated_time", "video_15_sec_watched_actions", "video_30_sec_watched_actions", "video_avg_time_watched_actions", "video_continuous_2_sec_watched_actions", "video_p100_watched_actions", "video_p25_watched_actions", "video_p50_watched_actions", "video_p75_watched_actions", "video_p95_watched_actions", "video_play_actions", "video_play_curve_actions", "video_play_retention_0_to_15s_actions", "video_play_retention_20_to_60s_actions", "video_play_retention_graph_actions", "video_thruplay_watched_actions", "video_time_watched_actions", "website_ctr", "website_purchase_roas", "wish_bid" ] + } + }, + "breakdowns": { + "title": "Breakdowns", + "description": "A list of chosen breakdowns for breakdowns", + "default": [ ], + "type": "array", + "items": { + "title": "ValidBreakdowns", + "description": "Generic enumeration.\n\nDerive from this class to define new enumerations.", + "enum": [ "ad_format_asset", "age", "app_id", "body_asset", "call_to_action_asset", "country", "description_asset", "device_platform", "dma", "frequency_value", "gender", "hourly_stats_aggregated_by_advertiser_time_zone", "hourly_stats_aggregated_by_audience_time_zone", "image_asset", "impression_device", "is_conversion_id_modeled", "link_url_asset", "mmm", "place_page_id", "platform_position", "product_id", "publisher_platform", "region", "skan_campaign_id", "skan_conversion_id", "title_asset", "video_asset" ] + } + }, + "action_breakdowns": { + "title": "Action Breakdowns", + "description": "A list of chosen action_breakdowns for action_breakdowns", + "default": [ ], + "type": "array", + "items": { + "title": "ValidActionBreakdowns", + "description": "Generic enumeration.\n\nDerive from this class to define new enumerations.", + "enum": [ "action_canvas_component_name", "action_carousel_card_id", "action_carousel_card_name", "action_destination", "action_device", "action_reaction", "action_target_id", "action_type", "action_video_sound", "action_video_type" ] + } + }, + "time_increment": { + "title": "Time Increment", + "description": "Time window in days by which to aggregate statistics. The sync will be chunked into N day intervals, where N is the number of days you specified. For example, if you set this value to 7, then all statistics will be reported as 7-day aggregates by starting from the start_date. If the start and end dates are October 1st and October 30th, then the connector will output 5 records: 01 - 06, 07 - 13, 14 - 20, 21 - 27, and 28 - 30 (3 days only).", + "default": 1, + "exclusiveMaximum": 90, + "exclusiveMinimum": 0, + "type": "integer" + }, + "start_date": { + "title": "Start Date", + "description": "The date from which you'd like to replicate data for this stream, in the format YYYY-MM-DDT00:00:00Z.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": [ "2017-01-25T00:00:00Z" ], + "type": "string", + "format": "date-time" + }, + "end_date": { + "title": "End Date", + "description": "The date until which you'd like to replicate data for this stream, in the format YYYY-MM-DDT00:00:00Z. All data generated between the start date and this end date will be replicated. Not setting this option will result in always syncing the latest data.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": [ "2017-01-26T00:00:00Z" ], + "type": "string", + "format": "date-time" + }, + "insights_lookback_window": { + "title": "Custom Insights Lookback Window", + "description": "The attribution window", + "default": 28, + "maximum": 28, + "mininum": 1, + "exclusiveMinimum": 0, + "type": "integer" + } + }, + "required": [ "name" ] + } + }, + "page_size": { + "title": "Page Size of Requests", + "description": "Page size used when sending requests to Facebook API to specify number of records per page when response has pagination. Most users do not need to set this field unless they specifically need to tune the connector to address specific issues or use cases.", + "default": 100, + "order": 7, + "exclusiveMinimum": 0, + "type": "integer" + }, + "insights_lookback_window": { + "title": "Insights Lookback Window", + "description": "The attribution window. Facebook freezes insight data 28 days after it was generated, which means that all data from the past 28 days may have changed since we last emitted it, so you can retrieve refreshed insights from the past by setting this parameter. If you set a custom lookback window value in Facebook account, please provide the same value here.", + "default": 28, + "order": 8, + "maximum": 28, + "mininum": 1, + "exclusiveMinimum": 0, + "type": "integer" + }, + "max_batch_size": { + "title": "Maximum size of Batched Requests", + "description": "Maximum batch size used when sending batch requests to Facebook API. Most users do not need to set this field unless they specifically need to tune the connector to address specific issues or use cases.", + "default": 50, + "order": 9, + "exclusiveMinimum": 0, + "type": "integer" + }, + "action_breakdowns_allow_empty": { + "title": "Action Breakdowns Allow Empty", + "description": "Allows action_breakdowns to be an empty list", + "default": true, + "airbyte_hidden": true, + "type": "boolean" + } + }, + "required": [ "account_id", "start_date", "access_token" ] + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "append" ], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": [ ], + "oauthFlowInitParameters": [ ], + "oauthFlowOutputParameters": [ [ "access_token" ] ] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "graph.facebook.com" ] + } + }, { + "sourceDefinitionId": "010eb12f-837b-4685-892d-0a39f76a98f5", + "name": "Facebook Pages", + "dockerRepository": "airbyte/source-facebook-pages", + "dockerImageTag": "0.2.4", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/facebook-pages", + "icon": "facebook.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/facebook-pages", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Facebook Pages Spec", + "type": "object", + "required": [ "access_token", "page_id" ], + "additionalProperties": true, + "properties": { + "access_token": { + "type": "string", + "title": "Page Access Token", + "description": "Facebook Page Access Token", + "airbyte_secret": true, + "order": 0 + }, + "page_id": { + "type": "string", + "title": "Page ID", + "description": "Page ID", + "order": 1 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": [ "graph.facebook.com" ] + } + }, { + "sourceDefinitionId": "dfd88b22-b603-4c3d-aad7-3701784586b1", + "name": "Sample Data (Faker)", + "dockerRepository": "airbyte/source-faker", + "dockerImageTag": "2.0.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/faker", + "icon": "faker.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/faker", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Faker Source Spec", + "type": "object", + "required": [ "count" ], + "additionalProperties": true, + "properties": { + "count": { + "title": "Count", + "description": "How many users should be generated in total. This setting does not apply to the purchases or products stream.", + "type": "integer", + "minimum": 1, + "default": 1000, + "order": 0 + }, + "seed": { + "title": "Seed", + "description": "Manually control the faker random seed to return the same values on subsequent runs (leave -1 for random)", + "type": "integer", + "default": -1, + "order": 1 + }, + "records_per_sync": { + "title": "Records Per Sync", + "description": "How many fake records will be returned for each sync, for each stream? By default, it will take 2 syncs to create the requested 1000 records.", + "type": "integer", + "minimum": 1, + "default": 500, + "order": 2 + }, + "records_per_slice": { + "title": "Records Per Stream Slice", + "description": "How many fake records will be in each page (stream slice), before a state message is emitted?", + "type": "integer", + "minimum": 1, + "default": 1000, + "order": 3 + }, + "parallelism": { + "title": "Parallelism", + "description": "How many parallel workers should we use to generate fake data? Choose a value equal to the number of CPUs you will allocate to this source.", + "type": "integer", + "minimum": 1, + "default": 4, + "order": 4 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "resourceRequirements": { + "jobSpecific": [ { + "jobType": "sync", + "resourceRequirements": { + "cpu_request": "1.0", + "cpu_limit": "4.0" + } + } ] + }, + "allowedHosts": { + "hosts": [ ] + }, + "suggestedStreams": { + "streams": [ "users", "products", "purchases" ] + } + }, { + "sourceDefinitionId": "eb3e9c1c-0467-4eb7-a172-5265e04ccd0a", + "name": "Fastbill", + "dockerRepository": "airbyte/source-fastbill", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/fastbill", + "icon": "fastbill.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/fastbill", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Fastbill Spec", + "type": "object", + "required": [ "username", "api_key" ], + "properties": { + "username": { + "title": "Username", + "type": "string", + "description": "Username for Fastbill account" + }, + "api_key": { + "title": "API Key", + "type": "string", + "description": "Fastbill API key", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "3825db3e-c94b-42ac-bd53-b5a9507ace2b", + "name": "Fauna", + "dockerRepository": "airbyte/source-fauna", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/fauna", + "icon": "fauna.svg", + "sourceType": "database", + "spec": { + "documentationUrl": "https://github.com/fauna/airbyte/blob/source-fauna/docs/integrations/sources/fauna.md", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Fauna Spec", + "type": "object", + "required": [ "domain", "port", "scheme", "secret" ], + "additionalProperties": true, + "properties": { + "domain": { + "order": 0, + "type": "string", + "title": "Domain", + "description": "Domain of Fauna to query. Defaults db.fauna.com. See the docs.", + "default": "db.fauna.com" + }, + "port": { + "order": 1, + "type": "integer", + "title": "Port", + "description": "Endpoint port.", + "default": 443 + }, + "scheme": { + "order": 2, + "type": "string", + "title": "Scheme", + "description": "URL scheme.", + "default": "https" + }, + "secret": { + "order": 3, + "type": "string", + "title": "Fauna Secret", + "description": "Fauna secret, used when authenticating with the database.", + "airbyte_secret": true + }, + "collection": { + "order": 5, + "type": "object", + "title": "Collection", + "description": "Settings for the Fauna Collection.", + "required": [ "page_size", "deletions" ], + "properties": { + "page_size": { + "order": 4, + "type": "integer", + "title": "Page Size", + "default": 64, + "description": "The page size used when reading documents from the database. The larger the page size, the faster the connector processes documents. However, if a page is too large, the connector may fail.
    \nChoose your page size based on how large the documents are.
    \nSee the docs." + }, + "deletions": { + "order": 5, + "type": "object", + "title": "Deletion Mode", + "description": "This only applies to incremental syncs.
    \nEnabling deletion mode informs your destination of deleted documents.
    \nDisabled - Leave this feature disabled, and ignore deleted documents.
    \nEnabled - Enables this feature. When a document is deleted, the connector exports a record with a \"deleted at\" column containing the time that the document was deleted.", + "oneOf": [ { + "title": "Disabled", + "type": "object", + "order": 0, + "required": [ "deletion_mode" ], + "properties": { + "deletion_mode": { + "type": "string", + "const": "ignore" + } + } + }, { + "title": "Enabled", + "type": "object", + "order": 1, + "required": [ "deletion_mode", "column" ], + "properties": { + "deletion_mode": { + "type": "string", + "const": "deleted_field" + }, + "column": { + "type": "string", + "title": "Deleted At Column", + "description": "Name of the \"deleted at\" column.", + "default": "deleted_at" + } + } + } ] + } + } + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "778daa7c-feaf-4db6-96f3-70fd645acc77", + "name": "File (CSV, JSON, Excel, Feather, Parquet)", + "dockerRepository": "airbyte/source-file", + "dockerImageTag": "0.2.38", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/file", + "icon": "file.svg", + "sourceType": "file", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/file", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "File Source Spec", + "type": "object", + "additionalProperties": true, + "required": [ "dataset_name", "format", "url", "provider" ], + "properties": { + "dataset_name": { + "type": "string", + "title": "Dataset Name", + "description": "The Name of the final table to replicate this file into (should include letters, numbers dash and underscores only)." + }, + "format": { + "type": "string", + "enum": [ "csv", "json", "jsonl", "excel", "excel_binary", "feather", "parquet", "yaml" ], + "default": "csv", + "title": "File Format", + "description": "The Format of the file which should be replicated (Warning: some formats may be experimental, please refer to the docs)." + }, + "reader_options": { + "type": "string", + "title": "Reader Options", + "description": "This should be a string in JSON format. It depends on the chosen file format to provide additional options and tune its behavior.", + "examples": [ "{}", "{\"sep\": \" \"}", "{\"sep\": \"\t\", \"header\": 0, \"names\": [\"column1\", \"column2\"] }" ] + }, + "url": { + "type": "string", + "title": "URL", + "description": "The URL path to access the file which should be replicated.", + "examples": [ "https://storage.googleapis.com/covid19-open-data/v2/latest/epidemiology.csv", "gs://my-google-bucket/data.csv", "s3://gdelt-open-data/events/20190914.export.csv" ] + }, + "provider": { + "type": "object", + "title": "Storage Provider", + "description": "The storage Provider or Location of the file(s) which should be replicated.", + "default": "Public Web", + "oneOf": [ { + "title": "HTTPS: Public Web", + "required": [ "storage" ], + "properties": { + "storage": { + "type": "string", + "const": "HTTPS" + }, + "user_agent": { + "type": "boolean", + "title": "User-Agent", + "default": false, + "description": "Add User-Agent to request" + } + } + }, { + "title": "GCS: Google Cloud Storage", + "required": [ "storage" ], + "properties": { + "storage": { + "type": "string", + "title": "Storage", + "const": "GCS" + }, + "service_account_json": { + "type": "string", + "title": "Service Account JSON", + "description": "In order to access private Buckets stored on Google Cloud, this connector would need a service account json credentials with the proper permissions as described here. Please generate the credentials.json file and copy/paste its content to this field (expecting JSON formats). If accessing publicly available data, this field is not necessary." + } + } + }, { + "title": "S3: Amazon Web Services", + "required": [ "storage" ], + "properties": { + "storage": { + "type": "string", + "title": "Storage", + "const": "S3" + }, + "aws_access_key_id": { + "type": "string", + "title": "AWS Access Key ID", + "description": "In order to access private Buckets stored on AWS S3, this connector would need credentials with the proper permissions. If accessing publicly available data, this field is not necessary." + }, + "aws_secret_access_key": { + "type": "string", + "title": "AWS Secret Access Key", + "description": "In order to access private Buckets stored on AWS S3, this connector would need credentials with the proper permissions. If accessing publicly available data, this field is not necessary.", + "airbyte_secret": true + } + } + }, { + "title": "AzBlob: Azure Blob Storage", + "required": [ "storage", "storage_account" ], + "properties": { + "storage": { + "type": "string", + "title": "Storage", + "const": "AzBlob" + }, + "storage_account": { + "type": "string", + "title": "Storage Account", + "description": "The globally unique name of the storage account that the desired blob sits within. See here for more details." + }, + "sas_token": { + "type": "string", + "title": "SAS Token", + "description": "To access Azure Blob Storage, this connector would need credentials with the proper permissions. One option is a SAS (Shared Access Signature) token. If accessing publicly available data, this field is not necessary.", + "airbyte_secret": true + }, + "shared_key": { + "type": "string", + "title": "Shared Key", + "description": "To access Azure Blob Storage, this connector would need credentials with the proper permissions. One option is a storage account shared key (aka account key or access key). If accessing publicly available data, this field is not necessary.", + "airbyte_secret": true + } + } + }, { + "title": "SSH: Secure Shell", + "required": [ "storage", "user", "host" ], + "properties": { + "storage": { + "type": "string", + "title": "Storage", + "const": "SSH" + }, + "user": { + "type": "string", + "title": "User", + "description": "" + }, + "password": { + "type": "string", + "title": "Password", + "description": "", + "airbyte_secret": true + }, + "host": { + "type": "string", + "title": "Host", + "description": "" + }, + "port": { + "type": "string", + "title": "Port", + "default": "22", + "description": "" + } + } + }, { + "title": "SCP: Secure copy protocol", + "required": [ "storage", "user", "host" ], + "properties": { + "storage": { + "type": "string", + "title": "Storage", + "const": "SCP" + }, + "user": { + "type": "string", + "title": "User", + "description": "" + }, + "password": { + "type": "string", + "title": "Password", + "description": "", + "airbyte_secret": true + }, + "host": { + "type": "string", + "title": "Host", + "description": "" + }, + "port": { + "type": "string", + "title": "Port", + "default": "22", + "description": "" + } + } + }, { + "title": "SFTP: Secure File Transfer Protocol", + "required": [ "storage", "user", "host" ], + "properties": { + "storage": { + "type": "string", + "title": "Storage", + "const": "SFTP" + }, + "user": { + "type": "string", + "title": "User", + "description": "" + }, + "password": { + "type": "string", + "title": "Password", + "description": "", + "airbyte_secret": true + }, + "host": { + "type": "string", + "title": "Host", + "description": "" + }, + "port": { + "type": "string", + "title": "Port", + "default": "22", + "description": "" + } + } + }, { + "title": "Local Filesystem (limited)", + "required": [ "storage" ], + "properties": { + "storage": { + "type": "string", + "title": "Storage", + "description": "WARNING: Note that the local storage URL available for reading must start with the local mount \"/local/\" at the moment until we implement more advanced docker mounting options.", + "const": "local" + } + } + } ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "*" ] + } + }, { + "sourceDefinitionId": "acb5f973-a565-441e-992f-4946f3e65662", + "name": "Firebase Realtime Database", + "dockerRepository": "airbyte/source-firebase-realtime-database", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.io/integrations/sources/firebase-realtime-database", + "sourceType": "database", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/firebase-realtime-database", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Firebase Realtime Database Spec", + "type": "object", + "required": [ "database_name", "google_application_credentials" ], + "properties": { + "database_name": { + "title": "Database Name", + "type": "string", + "description": "Database name (This will be part of the url pointing to the database, https://.firebaseio.com/)" + }, + "google_application_credentials": { + "title": "Service Account Key JSON", + "type": "string", + "description": "Cert credentials in JSON format of Service Account with Firebase Realtime Database Viewer role. (see, https://firebase.google.com/docs/projects/iam/roles-predefined-product#realtime-database)", + "airbyte_secret": true + }, + "path": { + "title": "Node Path", + "type": "string", + "description": "Path to a node in the Firebase realtime database" + }, + "buffer_size": { + "title": "Buffer Size", + "type": "number", + "description": "Number of records to fetch at once" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "supported_sync_modes": [ "full_refresh" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": [ "*" ] + } + }, { + "sourceDefinitionId": "8a5d48f6-03bb-4038-a942-a8d3f175cca3", + "name": "Freshcaller", + "dockerRepository": "airbyte/source-freshcaller", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/freshcaller", + "icon": "freshcaller.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/freshcaller", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Freshcaller Spec", + "type": "object", + "required": [ "domain", "api_key", "start_date" ], + "additionalProperties": true, + "properties": { + "domain": { + "type": "string", + "title": "Domain for Freshcaller account", + "description": "Used to construct Base URL for the Freshcaller APIs", + "examples": [ "snaptravel" ] + }, + "api_key": { + "type": "string", + "title": "API Key", + "description": "Freshcaller API Key. See the docs for more information on how to obtain this key.", + "airbyte_secret": true + }, + "requests_per_minute": { + "title": "Requests per minute", + "type": "integer", + "description": "The number of requests per minute that this source allowed to use. There is a rate limit of 50 requests per minute per app per account." + }, + "start_date": { + "title": "Start Date", + "description": "UTC date and time. Any data created after this date will be replicated.", + "format": "date-time", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": [ "2022-01-01T12:00:00Z" ] + }, + "sync_lag_minutes": { + "title": "Lag in minutes for each sync", + "type": "integer", + "description": "Lag in minutes for each sync, i.e., at time T, data for the time range [prev_sync_time, T-30] will be fetched" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false + }, { + "sourceDefinitionId": "f95337f1-2ad1-4baf-922f-2ca9152de630", + "name": "Flexport", + "dockerRepository": "airbyte/source-flexport", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/flexport", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/flexport", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Flexport Spec", + "additionalProperties": true, + "type": "object", + "required": [ "api_key", "start_date" ], + "properties": { + "api_key": { + "order": 0, + "type": "string", + "title": "API Key", + "airbyte_secret": true + }, + "start_date": { + "order": 1, + "title": "Start Date", + "type": "string", + "format": "date-time" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "ec4b9503-13cb-48ab-a4ab-6ade4be46567", + "name": "Freshdesk", + "dockerRepository": "airbyte/source-freshdesk", + "dockerImageTag": "3.0.2", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/freshdesk", + "icon": "freshdesk.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/freshdesk", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Freshdesk Spec", + "type": "object", + "required": [ "domain", "api_key" ], + "additionalProperties": true, + "properties": { + "domain": { + "type": "string", + "description": "Freshdesk domain", + "title": "Domain", + "examples": [ "myaccount.freshdesk.com" ], + "pattern": "^[a-zA-Z0-9._-]*\\.freshdesk\\.com$" + }, + "api_key": { + "type": "string", + "title": "API Key", + "description": "Freshdesk API Key. See the docs for more information on how to obtain this key.", + "airbyte_secret": true + }, + "requests_per_minute": { + "title": "Requests per minute", + "type": "integer", + "description": "The number of requests per minute that this source allowed to use. There is a rate limit of 50 requests per minute per app per account." + }, + "start_date": { + "title": "Start Date", + "type": "string", + "description": "UTC date and time. Any data created after this date will be replicated. If this parameter is not set, all data will be replicated.", + "format": "date-time", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": [ "2020-12-01T00:00:00Z" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "*.freshdesk.com" ] + } + }, { + "sourceDefinitionId": "eca08d79-7b92-4065-b7f3-79c14836ebe7", + "name": "Freshsales", + "dockerRepository": "airbyte/source-freshsales", + "dockerImageTag": "0.1.4", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/freshsales", + "icon": "freshsales.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/freshsales", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Freshsales Spec", + "type": "object", + "required": [ "domain_name", "api_key" ], + "additionalProperties": true, + "properties": { + "domain_name": { + "type": "string", + "title": "Domain Name", + "description": "The Name of your Freshsales domain", + "examples": [ "mydomain.myfreshworks.com" ] + }, + "api_key": { + "type": "string", + "title": "API Key", + "description": "Freshsales API Key. See here. The key is case sensitive.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": [ "*.myfreshworks.com" ] + } + }, { + "sourceDefinitionId": "9bb85338-ea95-4c93-b267-6be89125b267", + "name": "Freshservice", + "dockerRepository": "airbyte/source-freshservice", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/freshservice", + "icon": "freshservice.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/freshservice", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Freshservice Spec", + "type": "object", + "required": [ "domain_name", "api_key", "start_date" ], + "additionalProperties": false, + "properties": { + "domain_name": { + "type": "string", + "title": "Domain Name", + "description": "The name of your Freshservice domain", + "examples": [ "mydomain.freshservice.com" ] + }, + "api_key": { + "title": "API Key", + "type": "string", + "description": "Freshservice API Key. See here. The key is case sensitive.", + "airbyte_secret": true + }, + "start_date": { + "title": "Start Date", + "type": "string", + "description": "UTC date and time in the format 2020-10-01T00:00:00Z. Any data before this date will not be replicated.", + "examples": [ "2020-10-01T00:00:00Z" ], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "2a8c41ae-8c23-4be0-a73f-2ab10ca1a820", + "name": "GCS", + "dockerRepository": "airbyte/source-gcs", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/gcs", + "icon": "gcs.svg", + "sourceType": "file", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Gcs Spec", + "type": "object", + "required": [ "gcs_bucket", "gcs_path", "service_account" ], + "properties": { + "gcs_bucket": { + "type": "string", + "title": "GCS bucket", + "description": "GCS bucket name" + }, + "gcs_path": { + "type": "string", + "title": "GCS Path", + "description": "GCS path to data" + }, + "service_account": { + "type": "string", + "title": "Service Account Information.", + "description": "Enter your Google Cloud service account key in JSON format", + "airbyte_secret": true, + "examples": [ "{ \"type\": \"service_account\", \"project_id\": YOUR_PROJECT_ID, \"private_key_id\": YOUR_PRIVATE_KEY, ... }" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false + }, { + "sourceDefinitionId": "5ea4459a-8f1a-452a-830f-a65c38cc438d", + "name": "Genesys", + "dockerRepository": "airbyte/source-genesys", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/genesys", + "icon": "genesys.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/genesys", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Genesys Connector Configuration", + "type": "object", + "required": [ "start_date", "tenant_endpoint", "client_id", "client_secret" ], + "properties": { + "client_id": { + "type": "string", + "title": "Client ID", + "description": "Your OAuth user Client ID", + "airbyte_secret": true, + "order": 0 + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "Your OAuth user Client Secret", + "airbyte_secret": true, + "order": 1 + }, + "tenant_endpoint": { + "title": "Tenant Endpoint Location", + "type": "string", + "description": "Please choose the right endpoint where your Tenant is located. More info by this Link", + "enum": [ "Americas (US East)", "Americas (US East 2)", "Americas (US West)", "Americas (Canada)", "Americas (São Paulo)", "EMEA (Frankfurt)", "EMEA (Dublin)", "EMEA (London)", "Asia Pacific (Mumbai)", "Asia Pacific (Seoul)", "Asia Pacific (Sydney)" ], + "order": 2 + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "Start Date in format: YYYY-MM-DD", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "order": 3 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false + }, { + "sourceDefinitionId": "e1a3866b-d3b2-43b6-b6d7-8c1ee4d7f53f", + "name": "GetLago", + "dockerRepository": "airbyte/source-getlago", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/getlago", + "icon": "getlago.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/getlago", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Getlago Spec", + "type": "object", + "required": [ "api_key" ], + "additionalProperties": true, + "properties": { + "api_key": { + "title": "API Key", + "type": "string", + "description": "Your API Key. See here.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "6cbea164-3237-433b-9abb-36d384ee4cbf", + "name": "Gridly", + "dockerRepository": "airbyte/source-gridly", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/gridly", + "icon": "gridly.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/gridly", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Gridly Spec", + "type": "object", + "required": [ "api_key", "grid_id" ], + "properties": { + "api_key": { + "type": "string", + "title": "API Key", + "airbyte_secret": true + }, + "grid_id": { + "type": "string", + "title": "Grid ID", + "description": "ID of a grid, or can be ID of a branch" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "ef69ef6e-aa7f-4af1-a01d-ef775033524e", + "name": "GitHub", + "dockerRepository": "airbyte/source-github", + "dockerImageTag": "0.4.7", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/github", + "icon": "github.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/github", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "GitHub Source Spec", + "type": "object", + "required": [ "start_date", "repository" ], + "additionalProperties": true, + "properties": { + "credentials": { + "title": "Authentication", + "description": "Choose how to authenticate to GitHub", + "type": "object", + "order": 0, + "group": "auth", + "oneOf": [ { + "type": "object", + "title": "OAuth", + "required": [ "access_token" ], + "properties": { + "option_title": { + "type": "string", + "const": "OAuth Credentials", + "order": 0 + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "OAuth access token", + "airbyte_secret": true + } + } + }, { + "type": "object", + "title": "Personal Access Token", + "required": [ "personal_access_token" ], + "properties": { + "option_title": { + "type": "string", + "const": "PAT Credentials", + "order": 0 + }, + "personal_access_token": { + "type": "string", + "title": "Personal Access Tokens", + "description": "Log into GitHub and then generate a personal access token. To load balance your API quota consumption across multiple API tokens, input multiple tokens separated with \",\"", + "airbyte_secret": true + } + } + } ] + }, + "start_date": { + "type": "string", + "title": "Start date", + "description": "The date from which you'd like to replicate data from GitHub in the format YYYY-MM-DDT00:00:00Z. For the streams which support this configuration, only data generated on or after the start date will be replicated. This field doesn't apply to all streams, see the docs for more info", + "examples": [ "2021-03-01T00:00:00Z" ], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "order": 1, + "format": "date-time" + }, + "repository": { + "type": "string", + "examples": [ "airbytehq/airbyte airbytehq/another-repo", "airbytehq/*", "airbytehq/airbyte" ], + "title": "GitHub Repositories", + "description": "Space-delimited list of GitHub organizations/repositories, e.g. `airbytehq/airbyte` for single repository, `airbytehq/*` for get all repositories from organization and `airbytehq/airbyte airbytehq/another-repo` for multiple repositories.", + "order": 2, + "pattern_descriptor": "org/repo1 org/repo2" + }, + "branch": { + "type": "string", + "title": "Branch", + "examples": [ "airbytehq/airbyte/master airbytehq/airbyte/my-branch" ], + "description": "Space-delimited list of GitHub repository branches to pull commits for, e.g. `airbytehq/airbyte/master`. If no branches are specified for a repository, the default branch will be pulled.", + "order": 3, + "pattern_descriptor": "org/repo/branch1 org/repo/branch2" + }, + "page_size_for_large_streams": { + "type": "integer", + "title": "Page size for large streams", + "minimum": 1, + "maximum": 100, + "default": 10, + "description": "The Github connector contains several streams with a large amount of data. The page size of such streams depends on the size of your repository. We recommended that you specify values between 10 and 30.", + "order": 4 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": [ "credentials", "option_title" ], + "predicate_value": "OAuth Credentials", + "oauth_config_specification": { + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "access_token": { + "type": "string", + "path_in_connector_config": [ "credentials", "access_token" ] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_id" ] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_secret" ] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "api.github.com" ] + }, + "suggestedStreams": { + "streams": [ "branches", "comments", "issues", "organizations", "pull_requests", "repositories", "stargazers", "tags", "teams", "users" ] + }, + "maxSecondsBetweenMessages": 5400 + }, { + "sourceDefinitionId": "5e6175e5-68e1-4c17-bff9-56103bbb0d80", + "name": "Gitlab", + "dockerRepository": "airbyte/source-gitlab", + "dockerImageTag": "1.0.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/gitlab", + "icon": "gitlab.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/gitlab", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Source Gitlab Spec", + "type": "object", + "required": [ "api_url", "start_date", "credentials" ], + "additionalProperties": true, + "properties": { + "credentials": { + "title": "Authorization Method", + "type": "object", + "order": 0, + "oneOf": [ { + "type": "object", + "title": "OAuth2.0", + "required": [ "client_id", "client_secret", "refresh_token", "access_token", "token_expiry_date" ], + "properties": { + "auth_type": { + "type": "string", + "const": "oauth2.0" + }, + "client_id": { + "type": "string", + "description": "The API ID of the Gitlab developer application.", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "description": "The API Secret the Gitlab developer application.", + "airbyte_secret": true + }, + "access_token": { + "type": "string", + "description": "Access Token for making authenticated requests.", + "airbyte_secret": true + }, + "token_expiry_date": { + "type": "string", + "description": "The date-time when the access token should be refreshed.", + "format": "date-time" + }, + "refresh_token": { + "type": "string", + "description": "The key to refresh the expired access_token.", + "airbyte_secret": true + } + } + }, { + "title": "Private Token", + "type": "object", + "required": [ "access_token" ], + "properties": { + "auth_type": { + "type": "string", + "const": "access_token" + }, + "access_token": { + "type": "string", + "title": "Private Token", + "description": "Log into your Gitlab account and then generate a personal Access Token.", + "airbyte_secret": true + } + } + } ] + }, + "api_url": { + "type": "string", + "examples": [ "gitlab.com" ], + "title": "API URL", + "default": "gitlab.com", + "description": "Please enter your basic URL from GitLab instance.", + "order": 1 + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "The date from which you'd like to replicate data for GitLab API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", + "examples": [ "2021-03-01T00:00:00Z" ], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "order": 2, + "format": "date-time" + }, + "groups": { + "type": "string", + "examples": [ "airbyte.io" ], + "title": "Groups", + "description": "Space-delimited list of groups. e.g. airbyte.io.", + "order": 3 + }, + "projects": { + "type": "string", + "title": "Projects", + "examples": [ "airbyte.io/documentation" ], + "description": "Space-delimited list of projects. e.g. airbyte.io/documentation meltano/tap-gitlab.", + "order": 4 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": [ "credentials", "auth_type" ], + "predicate_value": "oauth2.0", + "oauth_config_specification": { + "oauth_user_input_from_connector_config_specification": { + "type": "object", + "properties": { + "domain": { + "type": "string", + "path_in_connector_config": [ "api_url" ] + } + } + }, + "complete_oauth_output_specification": { + "type": "object", + "properties": { + "access_token": { + "type": "string", + "path_in_connector_config": [ "credentials", "access_token" ] + }, + "refresh_token": { + "type": "string", + "path_in_connector_config": [ "credentials", "refresh_token" ] + }, + "token_expiry_date": { + "type": "string", + "format": "date-time", + "path_in_connector_config": [ "credentials", "token_expiry_date" ] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_id" ] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_secret" ] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": [ "*" ] + } + }, { + "sourceDefinitionId": "cf8ff320-6272-4faa-89e6-4402dc17e5d5", + "name": "Glassfrog", + "dockerRepository": "airbyte/source-glassfrog", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/glassfrog", + "icon": "glassfrog.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/glassfrog", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Glassfrog Spec", + "type": "object", + "required": [ "api_key" ], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "description": "API key provided by Glassfrog", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "ce38aec4-5a77-439a-be29-9ca44fd4e811", + "name": "GNews", + "dockerRepository": "airbyte/source-gnews", + "dockerImageTag": "0.1.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/gnews", + "icon": "gnews.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/gnews", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Gnews Spec", + "type": "object", + "required": [ "api_key", "query" ], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "title": "API Key", + "description": "API Key", + "order": 0, + "airbyte_secret": true + }, + "query": { + "type": "string", + "order": 1, + "title": "Query", + "description": "This parameter allows you to specify your search keywords to find the news articles you are looking for. The keywords will be used to return the most relevant articles. It is possible to use logical operators with keywords. - Phrase Search Operator: This operator allows you to make an exact search. Keywords surrounded by \n quotation marks are used to search for articles with the exact same keyword sequence. \n For example the query: \"Apple iPhone\" will return articles matching at least once this sequence of keywords.\n- Logical AND Operator: This operator allows you to make sure that several keywords are all used in the article\n search. By default the space character acts as an AND operator, it is possible to replace the space character \n by AND to obtain the same result. For example the query: Apple Microsoft is equivalent to Apple AND Microsoft\n- Logical OR Operator: This operator allows you to retrieve articles matching the keyword a or the keyword b.\n It is important to note that this operator has a higher precedence than the AND operator. For example the \n query: Apple OR Microsoft will return all articles matching the keyword Apple as well as all articles matching \n the keyword Microsoft\n- Logical NOT Operator: This operator allows you to remove from the results the articles corresponding to the\n specified keywords. To use it, you need to add NOT in front of each word or phrase surrounded by quotes.\n For example the query: Apple NOT iPhone will return all articles matching the keyword Apple but not the keyword\n iPhone", + "examples": [ "Microsoft Windows 10", "Apple OR Microsoft", "Apple AND NOT iPhone", "(Windows 7) AND (Windows 10)", "Intel AND (i7 OR i9)" ] + }, + "language": { + "type": "string", + "title": "Language", + "decription": "This parameter allows you to specify the language of the news articles returned by the API. You have to set as value the 2 letters code of the language you want to filter.", + "order": 2, + "enum": [ "ar", "zh", "nl", "en", "fr", "de", "el", "he", "hi", "it", "ja", "ml", "mr", "no", "pt", "ro", "ru", "es", "sv", "ta", "te", "uk" ] + }, + "country": { + "type": "string", + "title": "Country", + "description": "This parameter allows you to specify the country where the news articles returned by the API were published, the contents of the articles are not necessarily related to the specified country. You have to set as value the 2 letters code of the country you want to filter.", + "order": 3, + "enum": [ "au", "br", "ca", "cn", "eg", "fr", "de", "gr", "hk", "in", "ie", "il", "it", "jp", "nl", "no", "pk", "pe", "ph", "pt", "ro", "ru", "sg", "es", "se", "ch", "tw", "ua", "gb", "us" ] + }, + "in": { + "type": "array", + "title": "In", + "description": "This parameter allows you to choose in which attributes the keywords are searched. The attributes that can be set are title, description and content. It is possible to combine several attributes.", + "order": 4, + "items": { + "type": "string", + "enum": [ "title", "description", "content" ] + } + }, + "nullable": { + "type": "array", + "title": "Nullable", + "description": "This parameter allows you to specify the attributes that you allow to return null values. The attributes that can be set are title, description and content. It is possible to combine several attributes", + "order": 5, + "items": { + "type": "string", + "enum": [ "title", "description", "content" ] + } + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "This parameter allows you to filter the articles that have a publication date greater than or equal to the specified value. The date must respect the following format: YYYY-MM-DD hh:mm:ss (in UTC)", + "order": 6, + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$", + "examples": [ "2022-08-21 16:27:09" ] + }, + "end_date": { + "type": "string", + "title": "End Date", + "description": "This parameter allows you to filter the articles that have a publication date smaller than or equal to the specified value. The date must respect the following format: YYYY-MM-DD hh:mm:ss (in UTC)", + "order": 6, + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$", + "examples": [ "2022-08-21 16:27:09" ] + }, + "sortby": { + "type": "string", + "title": "Sort By", + "description": "This parameter allows you to choose with which type of sorting the articles should be returned. Two values are possible:\n - publishedAt = sort by publication date, the articles with the most recent publication date are returned first\n - relevance = sort by best match to keywords, the articles with the best match are returned first", + "order": 7, + "enum": [ "publishedAt", "relevance" ] + }, + "top_headlines_query": { + "type": "string", + "order": 8, + "title": "Top Headlines Query", + "description": "This parameter allows you to specify your search keywords to find the news articles you are looking for. The keywords will be used to return the most relevant articles. It is possible to use logical operators with keywords. - Phrase Search Operator: This operator allows you to make an exact search. Keywords surrounded by \n quotation marks are used to search for articles with the exact same keyword sequence. \n For example the query: \"Apple iPhone\" will return articles matching at least once this sequence of keywords.\n- Logical AND Operator: This operator allows you to make sure that several keywords are all used in the article\n search. By default the space character acts as an AND operator, it is possible to replace the space character \n by AND to obtain the same result. For example the query: Apple Microsoft is equivalent to Apple AND Microsoft\n- Logical OR Operator: This operator allows you to retrieve articles matching the keyword a or the keyword b.\n It is important to note that this operator has a higher precedence than the AND operator. For example the \n query: Apple OR Microsoft will return all articles matching the keyword Apple as well as all articles matching \n the keyword Microsoft\n- Logical NOT Operator: This operator allows you to remove from the results the articles corresponding to the\n specified keywords. To use it, you need to add NOT in front of each word or phrase surrounded by quotes.\n For example the query: Apple NOT iPhone will return all articles matching the keyword Apple but not the keyword\n iPhone", + "examples": [ "Microsoft Windows 10", "Apple OR Microsoft", "Apple AND NOT iPhone", "(Windows 7) AND (Windows 10)", "Intel AND (i7 OR i9)" ] + }, + "top_headlines_topic": { + "type": "string", + "title": "Top Headlines Topic", + "description": "This parameter allows you to change the category for the request.", + "order": 9, + "enum": [ "breaking-news", "world", "nation", "business", "technology", "entertainment", "sports", "science", "health" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "ba15ac82-5c6a-4fb2-bf24-925c23a1180c", + "name": "GoCardless", + "dockerRepository": "airbyte/source-gocardless", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/gocardless", + "icon": "gocardless.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/gocardless", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Gocardless Spec", + "type": "object", + "required": [ "access_token", "gocardless_environment", "gocardless_version", "start_date" ], + "properties": { + "access_token": { + "title": "Access Token", + "type": "string", + "pattern": "^(sandbox|live)_.+$", + "description": "Gocardless API TOKEN", + "airbyte_secret": true, + "order": 0 + }, + "gocardless_environment": { + "title": "GoCardless API Environment", + "type": "string", + "enum": [ "sandbox", "live" ], + "default": "sandbox", + "description": "Environment you are trying to connect to.", + "order": 1 + }, + "gocardless_version": { + "title": "GoCardless API Version", + "type": "string", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "description": "GoCardless version. This is a date. You can find the latest here: \nhttps://developer.gocardless.com/api-reference/#api-usage-making-requests\n", + "order": 2 + }, + "start_date": { + "title": "Start Date", + "type": "string", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data\nbefore this date will not be replicated.\n", + "examples": [ "2017-01-25T00:00:00Z" ], + "order": 3 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "32382e40-3b49-4b99-9c5c-4076501914e7", + "name": "Gong", + "dockerRepository": "airbyte/source-gong", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/gong", + "icon": "gong.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/gong", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Gong Spec", + "type": "object", + "required": [ "access_key", "access_key_secret" ], + "additionalProperties": true, + "properties": { + "access_key": { + "type": "string", + "title": "Gong Access Key", + "description": "Gong Access Key", + "airbyte_secret": true + }, + "access_key_secret": { + "type": "string", + "title": "Gong Access Key Secret", + "description": "Gong Access Key Secret", + "airbyte_secret": true + }, + "start_date": { + "type": "string", + "title": "Start date", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "description": "The date from which to list calls, in the ISO-8601 format; if not specified, the calls start with the earliest recorded call. For web-conference calls recorded by Gong, the date denotes its scheduled time, otherwise, it denotes its actual start time.", + "examples": [ "2018-02-18T08:00:00Z" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "253487c0-2246-43ba-a21f-5116b20a2c50", + "name": "Google Ads", + "dockerRepository": "airbyte/source-google-ads", + "dockerImageTag": "0.2.14", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-ads", + "icon": "google-adwords.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-ads", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Google Ads Spec", + "type": "object", + "required": [ "credentials", "start_date", "customer_id" ], + "additionalProperties": true, + "properties": { + "credentials": { + "type": "object", + "description": "", + "title": "Google Credentials", + "order": 0, + "required": [ "developer_token", "client_id", "client_secret", "refresh_token" ], + "properties": { + "developer_token": { + "type": "string", + "title": "Developer Token", + "order": 0, + "description": "Developer token granted by Google to use their APIs. More instruction on how to find this value in our docs", + "airbyte_secret": true + }, + "client_id": { + "type": "string", + "title": "Client ID", + "order": 1, + "description": "The Client ID of your Google Ads developer application. More instruction on how to find this value in our docs" + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "order": 2, + "description": "The Client Secret of your Google Ads developer application. More instruction on how to find this value in our docs", + "airbyte_secret": true + }, + "refresh_token": { + "type": "string", + "title": "Refresh Token", + "order": 3, + "description": "The token for obtaining a new access token. More instruction on how to find this value in our docs", + "airbyte_secret": true + }, + "access_token": { + "type": "string", + "title": "Access Token", + "order": 4, + "description": "Access Token for making authenticated requests. More instruction on how to find this value in our docs", + "airbyte_secret": true + } + } + }, + "customer_id": { + "title": "Customer ID(s)", + "type": "string", + "description": "Comma separated list of (client) customer IDs. Each customer ID must be specified as a 10-digit number without dashes. More instruction on how to find this value in our docs. Metrics streams like AdGroupAdReport cannot be requested for a manager account.", + "pattern": "^[0-9]{10}(,[0-9]{10})*$", + "examples": [ "6783948572,5839201945" ], + "order": 1 + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "UTC date and time in the format 2017-01-25. Any data before this date will not be replicated.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": [ "2017-01-25" ], + "order": 2, + "format": "date" + }, + "end_date": { + "type": "string", + "title": "End Date", + "description": "UTC date and time in the format 2017-01-25. Any data after this date will not be replicated.", + "pattern": "^$|^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": [ "2017-01-30" ], + "order": 6, + "format": "date" + }, + "custom_queries": { + "type": "array", + "title": "Custom GAQL Queries", + "description": "", + "order": 3, + "items": { + "type": "object", + "required": [ "query", "table_name" ], + "properties": { + "query": { + "type": "string", + "title": "Custom Query", + "description": "A custom defined GAQL query for building the report. Should not contain segments.date expression because it is used by incremental streams. See Google's query builder for more information.", + "examples": [ "SELECT segments.ad_destination_type, campaign.advertising_channel_sub_type FROM campaign WHERE campaign.status = 'PAUSED'" ] + }, + "table_name": { + "type": "string", + "title": "Destination Table Name", + "description": "The table name in your destination database for choosen query." + } + } + } + }, + "login_customer_id": { + "type": "string", + "title": "Login Customer ID for Managed Accounts", + "description": "If your access to the customer account is through a manager account, this field is required and must be set to the customer ID of the manager account (10-digit number without dashes). More information about this field you can see here", + "pattern": "^([0-9]{10})?$", + "examples": [ "7349206847" ], + "order": 4 + }, + "conversion_window_days": { + "title": "Conversion Window", + "type": "integer", + "description": "A conversion window is the period of time after an ad interaction (such as an ad click or video view) during which a conversion, such as a purchase, is recorded in Google Ads. For more information, see Google's documentation.", + "minimum": 0, + "maximum": 1095, + "default": 14, + "examples": [ 14 ], + "order": 5 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": [ "credentials" ], + "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ], [ "developer_token" ] ], + "oauthFlowOutputParameters": [ [ "access_token" ], [ "refresh_token" ] ] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "accounts.google.com", "googleads.googleapis.com" ] + } + }, { + "sourceDefinitionId": "eff3616a-f9c3-11eb-9a03-0242ac130003", + "name": "Google Analytics (Universal Analytics)", + "dockerRepository": "airbyte/source-google-analytics-v4", + "dockerImageTag": "0.1.34", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-analytics-v4", + "icon": "google-analytics.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-analytics-universal-analytics", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Google Analytics (Universal Analytics) Spec", + "type": "object", + "required": [ "view_id", "start_date" ], + "additionalProperties": true, + "properties": { + "credentials": { + "order": 0, + "type": "object", + "title": "Credentials", + "description": "Credentials for the service", + "oneOf": [ { + "title": "Authenticate via Google (Oauth)", + "type": "object", + "required": [ "client_id", "client_secret", "refresh_token" ], + "properties": { + "auth_type": { + "type": "string", + "const": "Client", + "order": 0 + }, + "client_id": { + "title": "Client ID", + "type": "string", + "description": "The Client ID of your Google Analytics developer application.", + "airbyte_secret": true, + "order": 1 + }, + "client_secret": { + "title": "Client Secret", + "type": "string", + "description": "The Client Secret of your Google Analytics developer application.", + "airbyte_secret": true, + "order": 2 + }, + "refresh_token": { + "title": "Refresh Token", + "type": "string", + "description": "The token for obtaining a new access token.", + "airbyte_secret": true, + "order": 3 + }, + "access_token": { + "title": "Access Token", + "type": "string", + "description": "Access Token for making authenticated requests.", + "airbyte_secret": true, + "order": 4 + } + } + }, { + "type": "object", + "title": "Service Account Key Authentication", + "required": [ "credentials_json" ], + "properties": { + "auth_type": { + "type": "string", + "const": "Service", + "order": 0 + }, + "credentials_json": { + "title": "Service Account JSON Key", + "type": "string", + "description": "The JSON key of the service account to use for authorization", + "examples": [ "{ \"type\": \"service_account\", \"project_id\": YOUR_PROJECT_ID, \"private_key_id\": YOUR_PRIVATE_KEY, ... }" ], + "airbyte_secret": true + } + } + } ] + }, + "start_date": { + "order": 1, + "type": "string", + "title": "Replication Start Date", + "description": "The date in the format YYYY-MM-DD. Any data before this date will not be replicated.", + "examples": [ "2020-06-01" ] + }, + "view_id": { + "order": 2, + "type": "string", + "title": "View ID", + "description": "The ID for the Google Analytics View you want to fetch data from. This can be found from the Google Analytics Account Explorer." + }, + "custom_reports": { + "order": 3, + "type": "string", + "title": "Custom Reports", + "description": "A JSON array describing the custom reports you want to sync from Google Analytics. See the docs for more information about the exact format you can use to fill out this field." + }, + "window_in_days": { + "type": "integer", + "title": "Data request time increment in days", + "description": "The time increment used by the connector when requesting data from the Google Analytics API. More information is available in the the docs. The bigger this value is, the faster the sync will be, but the more likely that sampling will be applied to your data, potentially causing inaccuracies in the returned results. We recommend setting this to 1 unless you have a hard requirement to make the sync faster at the expense of accuracy. The minimum allowed value for this field is 1, and the maximum is 364. ", + "examples": [ 30, 60, 90, 120, 200, 364 ], + "default": 1, + "order": 4 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": [ "credentials", "0" ], + "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], + "oauthFlowOutputParameters": [ [ "access_token" ], [ "refresh_token" ] ] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "oauth2.googleapis.com", "www.googleapis.com", "analyticsdata.googleapis.com", "analyticsreporting.googleapis.com" ] + } + }, { + "sourceDefinitionId": "3cc2eafd-84aa-4dca-93af-322d9dfeec1a", + "name": "Google Analytics 4 (GA4)", + "dockerRepository": "airbyte/source-google-analytics-data-api", + "dockerImageTag": "0.1.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-analytics-data-api", + "icon": "google-analytics.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-analytics-data-api", + "connectionSpecification": { + "$schema": "https://json-schema.org/draft-07/schema#", + "title": "Google Analytics (Data API) Spec", + "type": "object", + "required": [ "property_id", "date_ranges_start_date" ], + "additionalProperties": true, + "properties": { + "credentials": { + "order": 0, + "type": "object", + "title": "Credentials", + "description": "Credentials for the service", + "oneOf": [ { + "title": "Authenticate via Google (Oauth)", + "type": "object", + "required": [ "client_id", "client_secret", "refresh_token" ], + "properties": { + "auth_type": { + "type": "string", + "const": "Client", + "order": 0 + }, + "client_id": { + "title": "Client ID", + "type": "string", + "description": "The Client ID of your Google Analytics developer application.", + "order": 1 + }, + "client_secret": { + "title": "Client Secret", + "type": "string", + "description": "The Client Secret of your Google Analytics developer application.", + "airbyte_secret": true, + "order": 2 + }, + "refresh_token": { + "title": "Refresh Token", + "type": "string", + "description": "The token for obtaining a new access token.", + "airbyte_secret": true, + "order": 3 + }, + "access_token": { + "title": "Access Token", + "type": "string", + "description": "Access Token for making authenticated requests.", + "airbyte_secret": true, + "order": 4 + } + } + }, { + "type": "object", + "title": "Service Account Key Authentication", + "required": [ "credentials_json" ], + "properties": { + "auth_type": { + "type": "string", + "const": "Service", + "order": 0 + }, + "credentials_json": { + "title": "Service Account JSON Key", + "type": "string", + "description": "The JSON key of the service account to use for authorization", + "examples": [ "{ \"type\": \"service_account\", \"project_id\": YOUR_PROJECT_ID, \"private_key_id\": YOUR_PRIVATE_KEY, ... }" ], + "airbyte_secret": true, + "order": 1 + } + } + } ] + }, + "property_id": { + "type": "string", + "title": "Property ID", + "description": "A Google Analytics GA4 property identifier whose events are tracked. Specified in the URL path and not the body", + "order": 1 + }, + "date_ranges_start_date": { + "type": "string", + "title": "Start Date", + "description": "The start date from which to replicate report data in the format YYYY-MM-DD. Data generated before this date will not be included in the report.", + "format": "date", + "order": 2 + }, + "custom_reports": { + "order": 3, + "type": "string", + "title": "Custom Reports", + "description": "A JSON array describing the custom reports you want to sync from Google Analytics. See the docs for more information about the exact format you can use to fill out this field." + }, + "window_in_days": { + "type": "integer", + "title": "Data request time increment in days", + "description": "The time increment used by the connector when requesting data from the Google Analytics API. More information is available in the the docs. The bigger this value is, the faster the sync will be, but the more likely that sampling will be applied to your data, potentially causing inaccuracies in the returned results. We recommend setting this to 1 unless you have a hard requirement to make the sync faster at the expense of accuracy. The minimum allowed value for this field is 1, and the maximum is 364.", + "examples": [ 30, 60, 90, 120, 200, 364 ], + "minimum": 1, + "maximum": 364, + "default": 1, + "order": 4 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": [ "credentials", "0" ], + "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], + "oauthFlowOutputParameters": [ [ "access_token" ], [ "refresh_token" ] ] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "oauth2.googleapis.com", "www.googleapis.com", "analyticsdata.googleapis.com" ] + } + }, { + "sourceDefinitionId": "d19ae824-e289-4b14-995a-0632eb46d246", + "name": "Google Directory", + "dockerRepository": "airbyte/source-google-directory", + "dockerImageTag": "0.1.9", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-directory", + "icon": "googledirectory.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-directory", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Google Directory Spec", + "type": "object", + "required": [ ], + "additionalProperties": true, + "properties": { + "credentials": { + "title": "Google Credentials", + "description": "Google APIs use the OAuth 2.0 protocol for authentication and authorization. The Source supports Web server application and Service accounts scenarios.", + "type": "object", + "oneOf": [ { + "title": "Sign in via Google (OAuth)", + "description": "For these scenario user only needs to give permission to read Google Directory data.", + "type": "object", + "required": [ "client_id", "client_secret", "refresh_token" ], + "properties": { + "credentials_title": { + "type": "string", + "title": "Credentials Title", + "description": "Authentication Scenario", + "const": "Web server app", + "enum": [ "Web server app" ], + "default": "Web server app", + "order": 0 + }, + "client_id": { + "title": "Client ID", + "type": "string", + "description": "The Client ID of the developer application.", + "airbyte_secret": true + }, + "client_secret": { + "title": "Client secret", + "type": "string", + "description": "The Client Secret of the developer application.", + "airbyte_secret": true + }, + "refresh_token": { + "title": "Refresh Token", + "type": "string", + "description": "The Token for obtaining a new access token.", + "airbyte_secret": true + } + } + }, { + "title": "Service Account Key", + "description": "For these scenario user should obtain service account's credentials from the Google API Console and provide delegated email.", + "type": "object", + "required": [ "credentials_json", "email" ], + "properties": { + "credentials_title": { + "type": "string", + "title": "Credentials Title", + "description": "Authentication Scenario", + "const": "Service accounts", + "enum": [ "Service accounts" ], + "default": "Service accounts", + "order": 0 + }, + "credentials_json": { + "type": "string", + "title": "Credentials JSON", + "description": "The contents of the JSON service account key. See the docs for more information on how to generate this key.", + "airbyte_secret": true + }, + "email": { + "type": "string", + "title": "Email", + "description": "The email of the user, which has permissions to access the Google Workspace Admin APIs." + } + } + } ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": [ "credentials", "0" ], + "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], + "oauthFlowOutputParameters": [ [ "refresh_token" ] ] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "1e9086ab-ddac-4c1d-aafd-ba43ff575fe4", + "name": "Google PageSpeed Insights", + "dockerRepository": "airbyte/source-google-pagespeed-insights", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-pagespeed-insights", + "icon": "google-pagespeed-insights.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/google-pagespeed-insights", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Google PageSpeed Insights Spec", + "type": "object", + "required": [ "urls", "strategies", "categories" ], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "title": "API Key", + "description": "Google PageSpeed API Key. See here. The key is optional - however the API is heavily rate limited when using without API Key. Creating and using the API key therefore is recommended. The key is case sensitive.", + "airbyte_secret": true + }, + "urls": { + "type": "array", + "items": { + "type": "string", + "pattern": "^(?:origin:)?(http(s)?:\\/\\/)[\\w.-]+(?:\\.[\\w\\.-]+)+[\\w\\-\\._~:\\/?#[\\]@!\\$&'\\(\\)\\*\\+,;=.]+$" + }, + "title": "URLs to analyse", + "description": "The URLs to retrieve pagespeed information from. The connector will attempt to sync PageSpeed reports for all the defined URLs. Format: https://(www.)url.domain", + "example": "https://example.com" + }, + "strategies": { + "type": "array", + "items": { + "type": "string", + "enum": [ "desktop", "mobile" ] + }, + "title": "Analyses Strategies", + "description": "The analyses strategy to use. Either \"desktop\" or \"mobile\"." + }, + "categories": { + "type": "array", + "items": { + "type": "string", + "enum": [ "accessibility", "best-practices", "performance", "pwa", "seo" ] + }, + "title": "Lighthouse Categories", + "description": "Defines which Lighthouse category to run. One or many of: \"accessibility\", \"best-practices\", \"performance\", \"pwa\", \"seo\"." + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "eb4c9e00-db83-4d63-a386-39cfa91012a8", + "name": "Google Search Console", + "dockerRepository": "airbyte/source-google-search-console", + "dockerImageTag": "0.1.22", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-search-console", + "icon": "googlesearchconsole.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-search-console", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Google Search Console Spec", + "type": "object", + "required": [ "site_urls", "start_date", "authorization" ], + "properties": { + "site_urls": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Website URL Property", + "description": "The URLs of the website property attached to your GSC account. Read more here.", + "examples": [ "https://example1.com/", "sc-domain:example2.com" ], + "order": 0 + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "UTC date in the format 2017-01-25. Any data before this date will not be replicated.", + "examples": [ "2021-01-01" ], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "order": 1, + "format": "date" + }, + "end_date": { + "type": "string", + "title": "End Date", + "description": "UTC date in the format 2017-01-25. Any data after this date will not be replicated. Must be greater or equal to the start date field.", + "examples": [ "2021-12-12" ], + "pattern": "^$|^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "order": 2, + "format": "date" + }, + "authorization": { + "type": "object", + "title": "Authentication Type", + "description": "", + "order": 3, + "oneOf": [ { + "title": "OAuth", + "type": "object", + "required": [ "auth_type", "client_id", "client_secret", "refresh_token" ], + "properties": { + "auth_type": { + "type": "string", + "const": "Client", + "order": 0 + }, + "client_id": { + "title": "Client ID", + "type": "string", + "description": "The client ID of your Google Search Console developer application. Read more here.", + "airbyte_secret": true + }, + "client_secret": { + "title": "Client Secret", + "type": "string", + "description": "The client secret of your Google Search Console developer application. Read more here.", + "airbyte_secret": true + }, + "access_token": { + "title": "Access Token", + "type": "string", + "description": "Access token for making authenticated requests. Read more here.", + "airbyte_secret": true + }, + "refresh_token": { + "title": "Refresh Token", + "type": "string", + "description": "The token for obtaining a new access token. Read more here.", + "airbyte_secret": true + } + } + }, { + "type": "object", + "title": "Service Account Key Authentication", + "required": [ "auth_type", "service_account_info", "email" ], + "properties": { + "auth_type": { + "type": "string", + "const": "Service", + "order": 0 + }, + "service_account_info": { + "title": "Service Account JSON Key", + "type": "string", + "description": "The JSON key of the service account to use for authorization. Read more here.", + "examples": [ "{ \"type\": \"service_account\", \"project_id\": YOUR_PROJECT_ID, \"private_key_id\": YOUR_PRIVATE_KEY, ... }" ], + "airbyte_secret": true + }, + "email": { + "title": "Admin Email", + "type": "string", + "description": "The email of the user which has permissions to access the Google Workspace Admin APIs." + } + } + } ] + }, + "custom_reports": { + "order": 4, + "type": "string", + "title": "Custom Reports", + "description": "A JSON array describing the custom reports you want to sync from Google Search Console. See the docs for more information about the exact format you can use to fill out this field." + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": [ "authorization", "0" ], + "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], + "oauthFlowOutputParameters": [ [ "access_token" ], [ "refresh_token" ] ] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "*.googleapis.com" ] + } + }, { + "sourceDefinitionId": "71607ba1-c0ac-4799-8049-7f4b90dd50f7", + "name": "Google Sheets", + "dockerRepository": "airbyte/source-google-sheets", + "dockerImageTag": "0.2.37", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-sheets", + "icon": "google-sheets.svg", + "sourceType": "file", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-sheets", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Google Sheets Source Spec", + "type": "object", + "required": [ "spreadsheet_id", "credentials" ], + "additionalProperties": true, + "properties": { + "spreadsheet_id": { + "type": "string", + "title": "Spreadsheet Link", + "description": "Enter the link to the Google spreadsheet you want to sync", + "examples": [ "https://docs.google.com/spreadsheets/d/1hLd9Qqti3UyLXZB2aFfUWDT7BG-arw2xy4HR3D-dwUb/edit" ] + }, + "row_batch_size": { + "type": "integer", + "title": "Row Batch Size", + "description": "Number of rows fetched when making a Google Sheet API call. Defaults to 200.", + "default": 200 + }, + "names_conversion": { + "type": "boolean", + "title": "Columns Name Conversion", + "description": "Columns name conversion using a set of rules, for example, 'My Name' -> 'my-name'.", + "default": false + }, + "credentials": { + "type": "object", + "title": "Authentication", + "description": "Credentials for connecting to the Google Sheets API", + "oneOf": [ { + "title": "Authenticate via Google (OAuth)", + "type": "object", + "required": [ "auth_type", "client_id", "client_secret", "refresh_token" ], + "properties": { + "auth_type": { + "type": "string", + "const": "Client" + }, + "client_id": { + "title": "Client ID", + "type": "string", + "description": "Enter your Google application's Client ID", + "airbyte_secret": true + }, + "client_secret": { + "title": "Client Secret", + "type": "string", + "description": "Enter your Google application's Client Secret", + "airbyte_secret": true + }, + "refresh_token": { + "title": "Refresh Token", + "type": "string", + "description": "Enter your Google application's refresh token", + "airbyte_secret": true + } + } + }, { + "title": "Service Account Key Authentication", + "type": "object", + "required": [ "auth_type", "service_account_info" ], + "properties": { + "auth_type": { + "type": "string", + "const": "Service" + }, + "service_account_info": { + "type": "string", + "title": "Service Account Information.", + "description": "Enter your Google Cloud service account key in JSON format", + "airbyte_secret": true, + "examples": [ "{ \"type\": \"service_account\", \"project_id\": YOUR_PROJECT_ID, \"private_key_id\": YOUR_PRIVATE_KEY, ... }" ] + } + } + } ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": [ "credentials", "0" ], + "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], + "oauthFlowOutputParameters": [ [ "refresh_token" ] ] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "*.googleapis.com" ] + } + }, { + "sourceDefinitionId": "a68fbcde-b465-4ab3-b2a6-b0590a875835", + "name": "Google Webfonts", + "dockerRepository": "airbyte/source-google-webfonts", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-webfonts", + "icon": "googleworkpace.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-webfonts", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Google Webfonts Spec", + "type": "object", + "required": [ "api_key" ], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "description": "API key is required to access google apis, For getting your's goto google console and generate api key for Webfonts", + "airbyte_secret": true + }, + "sort": { + "type": "string", + "description": "Optional, to find how to sort" + }, + "prettyPrint": { + "type": "string", + "description": "Optional, boolean type" + }, + "alt": { + "type": "string", + "description": "Optional, Available params- json, media, proto" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "ed9dfefa-1bbc-419d-8c5e-4d78f0ef6734", + "name": "Google Workspace Admin Reports", + "dockerRepository": "airbyte/source-google-workspace-admin-reports", + "dockerImageTag": "0.1.8", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-workspace-admin-reports", + "icon": "googleworkpace.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-workspace-admin-reports", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Google Directory Spec", + "type": "object", + "required": [ "credentials_json", "email" ], + "additionalProperties": false, + "properties": { + "credentials_json": { + "type": "string", + "title": "Credentials JSON", + "description": "The contents of the JSON service account key. See the docs for more information on how to generate this key.", + "airbyte_secret": true + }, + "email": { + "type": "string", + "title": "Email", + "description": "The email of the user, who has permissions to access the Google Workspace Admin APIs." + }, + "lookback": { + "type": "integer", + "title": "Lookback Window in Days", + "minimum": 0, + "maximum": 180, + "description": "Sets the range of time shown in the report. The maximum value allowed by the Google API is 180 days." + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "59f1e50a-331f-4f09-b3e8-2e8d4d355f44", + "name": "Greenhouse", + "dockerRepository": "airbyte/source-greenhouse", + "dockerImageTag": "0.3.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/greenhouse", + "icon": "greenhouse.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/greenhouse", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Greenhouse Spec", + "type": "object", + "required": [ "api_key" ], + "additionalProperties": true, + "properties": { + "api_key": { + "title": "API Key", + "type": "string", + "description": "Greenhouse API Key. See the docs for more information on how to generate this key.", + "airbyte_secret": true, + "order": 0 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "harvest.greenhouse.io" ] + } + }, { + "sourceDefinitionId": "bff9a277-e01d-420d-81ee-80f28a307318", + "name": "Gutendex", + "dockerRepository": "airbyte/source-gutendex", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/gutendex", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/gutendex", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Gutendex Spec", + "type": "object", + "additionalProperties": true, + "properties": { + "author_year_start": { + "type": "string", + "description": "(Optional) Defines the minimum birth year of the authors. Books by authors born prior to the start year will not be returned. Supports both positive (CE) or negative (BCE) integer values", + "pattern": "^[-]?[0-9]{1,4}$", + "examples": [ 2002, 500, -500, 2020 ] + }, + "author_year_end": { + "type": "string", + "description": "(Optional) Defines the maximum birth year of the authors. Books by authors born after the end year will not be returned. Supports both positive (CE) or negative (BCE) integer values", + "pattern": "^[-]?[0-9]{1,4}$", + "examples": [ 2002, 500, -500, 2020 ] + }, + "copyright": { + "type": "string", + "description": "(Optional) Use this to find books with a certain copyright status - true for books with existing copyrights, false for books in the public domain in the USA, or null for books with no available copyright information.", + "pattern": "^(true|false|null)$", + "examples": [ true, false, null ] + }, + "languages": { + "type": "string", + "description": "(Optional) Use this to find books in any of a list of languages. They must be comma-separated, two-character language codes.", + "examples": [ "en", "en,fr,fi" ] + }, + "search": { + "type": "string", + "description": "(Optional) Use this to search author names and book titles with given words. They must be separated by a space (i.e. %20 in URL-encoded format) and are case-insensitive.", + "examples": [ "dickens%20great%20expect", "dickens" ] + }, + "sort": { + "type": "string", + "description": "(Optional) Use this to sort books - ascending for Project Gutenberg ID numbers from lowest to highest, descending for IDs highest to lowest, or popular (the default) for most popular to least popular by number of downloads.", + "pattern": "^(ascending|descending|popular)$", + "examples": [ "ascending", "descending", "popular" ] + }, + "topic": { + "type": "string", + "description": "(Optional) Use this to search for a case-insensitive key-phrase in books' bookshelves or subjects.", + "examples": [ "children", "fantasy" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "6fe89830-d04d-401b-aad6-6552ffa5c4af", + "name": "Harness", + "dockerRepository": "farosai/airbyte-harness-source", + "dockerImageTag": "0.1.23", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/harness", + "icon": "harness.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.faros.ai", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Harness Spec", + "type": "object", + "required": [ "api_key", "account_id" ], + "additionalProperties": false, + "properties": { + "api_key": { + "type": "string", + "title": "Harness API key", + "airbyte_secret": true + }, + "account_id": { + "type": "string", + "title": "Harness account ID" + }, + "api_url": { + "type": "string", + "title": "Harness API URL", + "default": "https://app.harness.io", + "examples": [ "https://my-harness-server.example.com" ] + }, + "cutoff_days": { + "type": "number", + "title": "Harness Cutoff Days", + "default": 90, + "description": "Only fetch deployments updated after cutoff" + }, + "page_size": { + "type": "number", + "title": "Harness Page Size", + "default": 100, + "description": "number of pipelines (builds) to fetch per call" + }, + "deployment_timeout": { + "type": "number", + "title": "Harness Deployment Timeout", + "default": 24, + "description": "Max number of hours to consider for a deployment to be running/queued before giving up on syncing it" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "fe2b4084-3386-4d3b-9ad6-308f61a6f1e6", + "name": "Harvest", + "dockerRepository": "airbyte/source-harvest", + "dockerImageTag": "0.1.17", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/harvest", + "icon": "harvest.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/harvest", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Harvest Spec", + "type": "object", + "required": [ "account_id", "replication_start_date" ], + "additionalProperties": true, + "properties": { + "account_id": { + "title": "Account ID", + "description": "Harvest account ID. Required for all Harvest requests in pair with Personal Access Token", + "airbyte_secret": true, + "type": "string", + "order": 0 + }, + "replication_start_date": { + "title": "Start Date", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": [ "2017-01-25T00:00:00Z" ], + "type": "string", + "order": 1, + "format": "date-time" + }, + "replication_end_date": { + "title": "End Date", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data after this date will not be replicated.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": [ "2017-01-25T00:00:00Z" ], + "type": "string", + "airbyte_hidden": true, + "order": 2, + "format": "date-time" + }, + "credentials": { + "title": "Authentication mechanism", + "description": "Choose how to authenticate to Harvest.", + "type": "object", + "order": 3, + "oneOf": [ { + "type": "object", + "title": "Authenticate via Harvest (OAuth)", + "required": [ "client_id", "client_secret", "refresh_token" ], + "additionalProperties": true, + "properties": { + "auth_type": { + "type": "string", + "const": "Client", + "order": 0 + }, + "client_id": { + "title": "Client ID", + "type": "string", + "description": "The Client ID of your Harvest developer application." + }, + "client_secret": { + "title": "Client Secret", + "type": "string", + "description": "The Client Secret of your Harvest developer application.", + "airbyte_secret": true + }, + "refresh_token": { + "title": "Refresh Token", + "type": "string", + "description": "Refresh Token to renew the expired Access Token.", + "airbyte_secret": true + } + } + }, { + "type": "object", + "title": "Authenticate with Personal Access Token", + "required": [ "api_token" ], + "additionalProperties": true, + "properties": { + "auth_type": { + "type": "string", + "const": "Token", + "order": 0 + }, + "api_token": { + "title": "Personal Access Token", + "description": "Log into Harvest and then create new personal access token.", + "type": "string", + "airbyte_secret": true + } + } + } ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "append" ], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": [ "credentials", "0" ], + "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], + "oauthFlowOutputParameters": [ [ "refresh_token" ] ] + } + }, + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": [ "credentials", "auth_type" ], + "predicate_value": "Client", + "oauth_config_specification": { + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": true, + "properties": { + "refresh_token": { + "type": "string", + "path_in_connector_config": [ "credentials", "refresh_token" ] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": true, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": true, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_id" ] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_secret" ] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "api.harvestapp.com" ] + } + }, { + "sourceDefinitionId": "492b56d1-937c-462e-8076-21ad2031e784", + "name": "Hellobaton", + "dockerRepository": "airbyte/source-hellobaton", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/hellobaton", + "icon": "hellobaton.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Hellobaton Spec", + "type": "object", + "required": [ "api_key", "company" ], + "additionalProperties": false, + "properties": { + "api_key": { + "type": "string", + "description": "authentication key required to access the api endpoints", + "airbyte_secret": true + }, + "company": { + "type": "string", + "description": "Company name that generates your base api url", + "examples": [ "google", "facebook", "microsoft" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "8097ceb9-383f-42f6-9f92-d3fd4bcc7689", + "name": "Hubplanner", + "dockerRepository": "airbyte/source-hubplanner", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/hubplanner", + "icon": "hubplanner.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/hubplanner", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Hubplanner Spec", + "type": "object", + "required": [ "api_key" ], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "description": "Hubplanner API key. See https://github.com/hubplanner/API#authentication for more details.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "36c891d9-4bd9-43ac-bad2-10e12756272c", + "name": "HubSpot", + "dockerRepository": "airbyte/source-hubspot", + "dockerImageTag": "0.6.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/hubspot", + "icon": "hubspot.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/hubspot", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "HubSpot Source Spec", + "type": "object", + "required": [ "start_date", "credentials" ], + "additionalProperties": true, + "properties": { + "start_date": { + "type": "string", + "title": "Start date", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", + "examples": [ "2017-01-25T00:00:00Z" ], + "format": "date-time" + }, + "credentials": { + "title": "Authentication", + "description": "Choose how to authenticate to HubSpot.", + "type": "object", + "oneOf": [ { + "type": "object", + "title": "OAuth", + "required": [ "client_id", "client_secret", "refresh_token", "credentials_title" ], + "properties": { + "credentials_title": { + "type": "string", + "title": "Credentials", + "description": "Name of the credentials", + "const": "OAuth Credentials", + "order": 0 + }, + "client_id": { + "title": "Client ID", + "description": "The Client ID of your HubSpot developer application. See the Hubspot docs if you need help finding this ID.", + "type": "string", + "examples": [ "123456789000" ] + }, + "client_secret": { + "title": "Client Secret", + "description": "The client secret for your HubSpot developer application. See the Hubspot docs if you need help finding this secret.", + "type": "string", + "examples": [ "secret" ], + "airbyte_secret": true + }, + "refresh_token": { + "title": "Refresh Token", + "description": "Refresh token to renew an expired access token. See the Hubspot docs if you need help finding this token.", + "type": "string", + "examples": [ "refresh_token" ], + "airbyte_secret": true + } + } + }, { + "type": "object", + "title": "Private App", + "required": [ "access_token", "credentials_title" ], + "properties": { + "credentials_title": { + "type": "string", + "title": "Credentials", + "description": "Name of the credentials set", + "const": "Private App Credentials", + "order": 0 + }, + "access_token": { + "title": "Access token", + "description": "HubSpot Access token. See the Hubspot docs if you need help finding this token.", + "type": "string", + "airbyte_secret": true + } + } + } ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": [ "credentials", "0" ], + "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], + "oauthFlowOutputParameters": [ [ "refresh_token" ] ] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "api.hubapi.com" ] + } + }, { + "sourceDefinitionId": "f23b7b7c-d705-49a3-9042-09add3b104a5", + "name": "IP2Whois", + "dockerRepository": "airbyte/source-ip2whois", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/ip2whois", + "icon": "ip2whois.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/ip2whois", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Ip2whois Spec", + "type": "object", + "additionalProperties": true, + "properties": { + "api_key": { + "title": "API key", + "type": "string", + "description": "Your API Key. See here.", + "airbyte_secret": true + }, + "domain": { + "title": "Domain", + "type": "string", + "description": "Domain name. See here.", + "examples": [ "www.google.com", "www.facebook.com" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "447e0381-3780-4b46-bb62-00a4e3c8b8e2", + "name": "IBM Db2", + "dockerRepository": "airbyte/source-db2", + "dockerImageTag": "0.1.19", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/db2", + "icon": "db2.svg", + "sourceType": "database", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/db2", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "IBM Db2 Source Spec", + "type": "object", + "required": [ "host", "port", "db", "username", "password", "encryption" ], + "properties": { + "host": { + "description": "Host of the Db2.", + "type": "string", + "order": 0 + }, + "port": { + "description": "Port of the database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 8123, + "examples": [ "8123" ], + "order": 1 + }, + "db": { + "description": "Name of the database.", + "type": "string", + "examples": [ "default" ], + "order": 2 + }, + "username": { + "description": "Username to use to access the database.", + "type": "string", + "order": 3 + }, + "password": { + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 4 + }, + "jdbc_url_params": { + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", + "title": "JDBC URL Params", + "type": "string", + "order": 5 + }, + "encryption": { + "title": "Encryption", + "type": "object", + "description": "Encryption method to use when communicating with the database", + "order": 6, + "oneOf": [ { + "title": "Unencrypted", + "description": "Data transfer will not be encrypted.", + "required": [ "encryption_method" ], + "properties": { + "encryption_method": { + "type": "string", + "const": "unencrypted" + } + } + }, { + "title": "TLS Encrypted (verify certificate)", + "description": "Verify and use the cert provided by the server.", + "required": [ "encryption_method", "ssl_certificate" ], + "properties": { + "encryption_method": { + "type": "string", + "const": "encrypted_verify_certificate" + }, + "ssl_certificate": { + "title": "SSL PEM file", + "description": "Privacy Enhanced Mail (PEM) files are concatenated certificate containers frequently used in certificate installations", + "type": "string", + "airbyte_secret": true, + "multiline": true + }, + "key_store_password": { + "title": "Key Store Password. This field is optional. If you do not fill in this field, the password will be randomly generated.", + "description": "Key Store Password", + "type": "string", + "airbyte_secret": true + } + } + } ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": [ "${host}" ] + } + }, { + "sourceDefinitionId": "38f84314-fe6a-4257-97be-a8dcd942d693", + "name": "Insightly", + "dockerRepository": "airbyte/source-insightly", + "dockerImageTag": "0.1.2", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/insightly", + "icon": "insightly.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/insightly", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Insightly Spec", + "type": "object", + "required": [ "token", "start_date" ], + "additionalProperties": true, + "properties": { + "token": { + "type": [ "string", "null" ], + "title": "API Token", + "description": "Your Insightly API token.", + "airbyte_secret": true + }, + "start_date": { + "type": [ "string", "null" ], + "title": "Start Date", + "description": "The date from which you'd like to replicate data for Insightly in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated. Note that it will be used only for incremental streams.", + "examples": [ "2021-03-01T00:00:00Z" ], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "6acf6b55-4f1e-4fca-944e-1a3caef8aba8", + "name": "Instagram", + "dockerRepository": "airbyte/source-instagram", + "dockerImageTag": "1.0.5", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/instagram", + "icon": "instagram.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/instagram", + "changelogUrl": "https://docs.airbyte.com/integrations/sources/instagram", + "connectionSpecification": { + "title": "Source Instagram", + "type": "object", + "properties": { + "start_date": { + "title": "Start Date", + "description": "The date from which you'd like to replicate data for User Insights, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": [ "2017-01-25T00:00:00Z" ], + "type": "string", + "format": "date-time" + }, + "access_token": { + "title": "Access Token", + "description": "The value of the access token generated with instagram_basic, instagram_manage_insights, pages_show_list, pages_read_engagement, Instagram Public Content Access permissions. See the docs for more information", + "airbyte_secret": true, + "type": "string" + } + }, + "required": [ "start_date", "access_token" ] + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "append" ], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": [ ], + "oauthFlowInitParameters": [ ], + "oauthFlowOutputParameters": [ [ "access_token" ] ] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "graph.facebook.com" ] + } + }, { + "sourceDefinitionId": "1901024c-0249-45d0-bcac-31a954652927", + "name": "Instatus", + "dockerRepository": "airbyte/source-instatus", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/instatus", + "icon": "instatus.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/instatus", + "connectionSpecification": { + "title": "Instatus Spec", + "type": "object", + "additionalProperties": true, + "required": [ "api_key" ], + "properties": { + "api_key": { + "type": "string", + "title": "Rest API Key", + "airbyte_secret": true, + "description": "Instatus REST API key" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "d8313939-3782-41b0-be29-b3ca20d8dd3a", + "name": "Intercom", + "dockerRepository": "airbyte/source-intercom", + "dockerImageTag": "0.2.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/intercom", + "icon": "intercom.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/intercom", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Source Intercom Spec", + "type": "object", + "required": [ "start_date", "access_token" ], + "additionalProperties": true, + "properties": { + "start_date": { + "type": "string", + "title": "Start date", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", + "examples": [ "2020-11-16T00:00:00Z" ], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "format": "date-time" + }, + "access_token": { + "title": "Access token", + "type": "string", + "description": "Access token for making authenticated requests. See the Intercom docs for more information.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": [ ], + "oauthFlowInitParameters": [ ], + "oauthFlowOutputParameters": [ [ "access_token" ] ] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "api.intercom.io" ] + } + }, { + "sourceDefinitionId": "3d15163b-11d8-412f-b808-795c9b2c3a3a", + "name": "Intruder", + "dockerRepository": "airbyte/source-intruder", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/intruder", + "icon": "intruder.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/intruder", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Intruder Spec", + "type": "object", + "required": [ "access_token" ], + "additionalProperties": true, + "properties": { + "access_token": { + "title": "API Access token", + "type": "string", + "description": "Your API Access token. See here.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "2e875208-0c0b-4ee4-9e92-1cb3156ea799", + "name": "Iterable", + "dockerRepository": "airbyte/source-iterable", + "dockerImageTag": "0.1.27", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/iterable", + "icon": "iterable.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/iterable", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Iterable Spec", + "type": "object", + "required": [ "start_date", "api_key" ], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "title": "API Key", + "description": "Iterable API Key. See the docs for more information on how to obtain this key.", + "airbyte_secret": true, + "order": 0 + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "The date from which you'd like to replicate data for Iterable, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", + "examples": [ "2021-04-01T00:00:00Z" ], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "order": 1, + "format": "date-time" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "api.iterable.com" ] + } + }, { + "sourceDefinitionId": "d6f73702-d7a0-4e95-9758-b0fb1af0bfba", + "name": "Jenkins", + "dockerRepository": "farosai/airbyte-jenkins-source", + "dockerImageTag": "0.1.23", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/jenkins", + "icon": "jenkins.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.faros.ai", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Jenkins Spec", + "type": "object", + "required": [ "server_url", "user", "token" ], + "additionalProperties": false, + "properties": { + "server_url": { + "type": "string", + "title": "Jenkins Server URL", + "examples": [ "https://my-jenkins-server.example.com" ] + }, + "user": { + "type": "string", + "description": "Jenkins User" + }, + "token": { + "type": "string", + "title": "Jenkins Token", + "airbyte_secret": true + }, + "depth": { + "type": "number", + "title": "Depth", + "description": "Jenkins JSON API does not support deep scan, it is required to generate a suitable tree for the corresponding depth. Job in some cases have many sub jobs, depth needs to quantify how many sub jobs are showed. If depth is not provided we will try to compute it automatically" + }, + "pageSize": { + "type": "integer", + "minimum": 1, + "default": 10, + "title": "Page Size", + "description": "Quantity of jobs on a single page fetched from Jenkins" + }, + "last100Builds": { + "type": "boolean", + "default": false, + "title": "Last 100 Builds Only", + "description": "Fetch only 100 last builds from Jenkins server" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "68e63de2-bb83-4c7e-93fa-a8a9051e3993", + "name": "Jira", + "dockerRepository": "airbyte/source-jira", + "dockerImageTag": "0.3.7", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/jira", + "icon": "jira.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/jira", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Jira Spec", + "type": "object", + "required": [ "api_token", "domain", "email" ], + "additionalProperties": true, + "properties": { + "api_token": { + "type": "string", + "title": "API Token", + "description": "Jira API Token. See the docs for more information on how to generate this key.", + "airbyte_secret": true, + "order": 0 + }, + "domain": { + "type": "string", + "title": "Domain", + "examples": [ ".atlassian.net", ".jira.com", "jira..com" ], + "description": "The Domain for your Jira account, e.g. airbyteio.atlassian.net, airbyteio.jira.com, jira.your-domain.com", + "order": 1 + }, + "email": { + "type": "string", + "title": "Email", + "description": "The user email for your Jira account.", + "order": 2 + }, + "projects": { + "type": "array", + "title": "Projects", + "items": { + "type": "string" + }, + "examples": [ "PROJ1", "PROJ2" ], + "description": "List of Jira project keys to replicate data for.", + "order": 3 + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "The date from which you want to replicate data from Jira, use the format YYYY-MM-DDT00:00:00Z. Note that this field only applies to certain streams, and only data generated on or after the start date will be replicated. For more information, refer to the documentation.", + "examples": [ "2021-03-01T00:00:00Z" ], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "format": "date-time", + "order": 4 + }, + "expand_issue_changelog": { + "type": "boolean", + "title": "Expand Issue Changelog", + "description": "Expand the changelog when replicating issues.", + "default": false, + "order": 5 + }, + "render_fields": { + "type": "boolean", + "title": "Render Issue Fields", + "description": "Render issue fields in HTML format in addition to Jira JSON-like format.", + "default": false, + "order": 6 + }, + "enable_experimental_streams": { + "type": "boolean", + "title": "Enable Experimental Streams", + "description": "Allow the use of experimental streams which rely on undocumented Jira API endpoints. See https://docs.airbyte.com/integrations/sources/jira#experimental-tables for more info.", + "default": false, + "order": 7 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": [ "${domain}" ] + }, + "maxSecondsBetweenMessages": 21600 + }, { + "sourceDefinitionId": "e300ece7-b073-43a3-852e-8aff36a57f13", + "name": "K6 Cloud", + "dockerRepository": "airbyte/source-k6-cloud", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/k6-cloud", + "icon": "k6cloud.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/k6-cloud", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "K6 Cloud Spec", + "type": "object", + "required": [ "api_token" ], + "additionalProperties": true, + "properties": { + "api_token": { + "title": "Api Token", + "type": "string", + "description": "Your API Token. See here. The key is case sensitive.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "d917a47b-8537-4d0d-8c10-36a9928d4265", + "name": "Kafka", + "dockerRepository": "airbyte/source-kafka", + "dockerImageTag": "0.2.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/kafka", + "icon": "kafka.svg", + "sourceType": "database", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/kafka", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Kafka Source Spec", + "type": "object", + "required": [ "bootstrap_servers", "subscription", "protocol" ], + "additionalProperties": true, + "properties": { + "MessageFormat": { + "title": "MessageFormat", + "type": "object", + "description": "The serialization used based on this ", + "oneOf": [ { + "title": "JSON", + "properties": { + "deserialization_type": { + "type": "string", + "const": "JSON" + } + } + }, { + "title": "AVRO", + "properties": { + "deserialization_type": { + "const": "AVRO" + }, + "deserialization_strategy": { + "type": "string", + "enum": [ "TopicNameStrategy", "RecordNameStrategy", "TopicRecordNameStrategy" ], + "default": "TopicNameStrategy" + }, + "schema_registry_url": { + "type": "string", + "examples": [ "http://localhost:8081" ] + }, + "schema_registry_username": { + "type": "string", + "default": "" + }, + "schema_registry_password": { + "type": "string", + "default": "" + } + } + } ] + }, + "bootstrap_servers": { + "title": "Bootstrap Servers", + "description": "A list of host/port pairs to use for establishing the initial connection to the Kafka cluster. The client will make use of all servers irrespective of which servers are specified here for bootstrapping—this list only impacts the initial hosts used to discover the full set of servers. This list should be in the form host1:port1,host2:port2,.... Since these servers are just used for the initial connection to discover the full cluster membership (which may change dynamically), this list need not contain the full set of servers (you may want more than one, though, in case a server is down).", + "type": "string", + "examples": [ "kafka-broker1:9092,kafka-broker2:9092" ] + }, + "subscription": { + "title": "Subscription Method", + "type": "object", + "description": "You can choose to manually assign a list of partitions, or subscribe to all topics matching specified pattern to get dynamically assigned partitions.", + "oneOf": [ { + "title": "Manually assign a list of partitions", + "required": [ "subscription_type", "topic_partitions" ], + "properties": { + "subscription_type": { + "description": "Manually assign a list of partitions to this consumer. This interface does not allow for incremental assignment and will replace the previous assignment (if there is one).\nIf the given list of topic partitions is empty, it is treated the same as unsubscribe().", + "type": "string", + "const": "assign" + }, + "topic_partitions": { + "title": "List of topic:partition Pairs", + "type": "string", + "examples": [ "sample.topic:0, sample.topic:1" ] + } + } + }, { + "title": "Subscribe to all topics matching specified pattern", + "required": [ "subscription_type", "topic_pattern" ], + "properties": { + "subscription_type": { + "description": "The Topic pattern from which the records will be read.", + "type": "string", + "const": "subscribe" + }, + "topic_pattern": { + "title": "Topic Pattern", + "type": "string", + "examples": [ "sample.topic" ] + } + } + } ] + }, + "test_topic": { + "title": "Test Topic", + "description": "The Topic to test in case the Airbyte can consume messages.", + "type": "string", + "examples": [ "test.topic" ] + }, + "group_id": { + "title": "Group ID", + "description": "The Group ID is how you distinguish different consumer groups.", + "type": "string", + "examples": [ "group.id" ] + }, + "max_poll_records": { + "title": "Max Poll Records", + "description": "The maximum number of records returned in a single call to poll(). Note, that max_poll_records does not impact the underlying fetching behavior. The consumer will cache the records from each fetch request and returns them incrementally from each poll.", + "type": "integer", + "default": 500 + }, + "polling_time": { + "title": "Polling Time", + "description": "Amount of time Kafka connector should try to poll for messages.", + "type": "integer", + "default": 100 + }, + "protocol": { + "title": "Protocol", + "type": "object", + "description": "The Protocol used to communicate with brokers.", + "oneOf": [ { + "title": "PLAINTEXT", + "required": [ "security_protocol" ], + "properties": { + "security_protocol": { + "type": "string", + "const": "PLAINTEXT" + } + } + }, { + "title": "SASL PLAINTEXT", + "required": [ "security_protocol", "sasl_mechanism", "sasl_jaas_config" ], + "properties": { + "security_protocol": { + "type": "string", + "const": "SASL_PLAINTEXT" + }, + "sasl_mechanism": { + "title": "SASL Mechanism", + "description": "The SASL mechanism used for client connections. This may be any mechanism for which a security provider is available.", + "type": "string", + "const": "PLAIN" + }, + "sasl_jaas_config": { + "title": "SASL JAAS Config", + "description": "The JAAS login context parameters for SASL connections in the format used by JAAS configuration files.", + "type": "string", + "default": "", + "airbyte_secret": true + } + } + }, { + "title": "SASL SSL", + "required": [ "security_protocol", "sasl_mechanism", "sasl_jaas_config" ], + "properties": { + "security_protocol": { + "type": "string", + "const": "SASL_SSL" + }, + "sasl_mechanism": { + "title": "SASL Mechanism", + "description": "The SASL mechanism used for client connections. This may be any mechanism for which a security provider is available.", + "type": "string", + "default": "GSSAPI", + "enum": [ "GSSAPI", "OAUTHBEARER", "SCRAM-SHA-256", "SCRAM-SHA-512", "PLAIN" ] + }, + "sasl_jaas_config": { + "title": "SASL JAAS Config", + "description": "The JAAS login context parameters for SASL connections in the format used by JAAS configuration files.", + "type": "string", + "default": "", + "airbyte_secret": true + } + } + } ] + }, + "client_id": { + "title": "Client ID", + "description": "An ID string to pass to the server when making requests. The purpose of this is to be able to track the source of requests beyond just ip/port by allowing a logical application name to be included in server-side request logging.", + "type": "string", + "examples": [ "airbyte-consumer" ] + }, + "enable_auto_commit": { + "title": "Enable Auto Commit", + "description": "If true, the consumer's offset will be periodically committed in the background.", + "type": "boolean", + "default": true + }, + "auto_commit_interval_ms": { + "title": "Auto Commit Interval, ms", + "description": "The frequency in milliseconds that the consumer offsets are auto-committed to Kafka if enable.auto.commit is set to true.", + "type": "integer", + "default": 5000 + }, + "client_dns_lookup": { + "title": "Client DNS Lookup", + "description": "Controls how the client uses DNS lookups. If set to use_all_dns_ips, connect to each returned IP address in sequence until a successful connection is established. After a disconnection, the next IP is used. Once all IPs have been used once, the client resolves the IP(s) from the hostname again. If set to resolve_canonical_bootstrap_servers_only, resolve each bootstrap address into a list of canonical names. After the bootstrap phase, this behaves the same as use_all_dns_ips. If set to default (deprecated), attempt to connect to the first IP address returned by the lookup, even if the lookup returns multiple IP addresses.", + "type": "string", + "default": "use_all_dns_ips", + "enum": [ "default", "use_all_dns_ips", "resolve_canonical_bootstrap_servers_only" ] + }, + "retry_backoff_ms": { + "title": "Retry Backoff, ms", + "description": "The amount of time to wait before attempting to retry a failed request to a given topic partition. This avoids repeatedly sending requests in a tight loop under some failure scenarios.", + "type": "integer", + "default": 100 + }, + "request_timeout_ms": { + "title": "Request Timeout, ms", + "description": "The configuration controls the maximum amount of time the client will wait for the response of a request. If the response is not received before the timeout elapses the client will resend the request if necessary or fail the request if retries are exhausted.", + "type": "integer", + "default": 30000 + }, + "receive_buffer_bytes": { + "title": "Receive Buffer, bytes", + "description": "The size of the TCP receive buffer (SO_RCVBUF) to use when reading data. If the value is -1, the OS default will be used.", + "type": "integer", + "default": 32768 + }, + "auto_offset_reset": { + "title": "Auto Offset Reset", + "description": "What to do when there is no initial offset in Kafka or if the current offset does not exist any more on the server - earliest: automatically reset the offset to the earliest offset, latest: automatically reset the offset to the latest offset, none: throw exception to the consumer if no previous offset is found for the consumer's group, anything else: throw exception to the consumer.", + "type": "string", + "default": "latest", + "enum": [ "latest", "earliest", "none" ] + }, + "repeated_calls": { + "title": "Repeated Calls", + "description": "The number of repeated calls to poll() if no messages were received.", + "type": "integer", + "default": 3 + }, + "max_records_process": { + "title": "Maximum Records", + "description": "The Maximum to be processed per execution", + "type": "integer", + "default": 100000 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "supported_source_sync_modes": [ "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "60c24725-00ae-490c-991d-55b78c3197e0", + "name": "Klarna", + "dockerRepository": "airbyte/source-klarna", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/klarna", + "icon": "klarna.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/klarna", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Klarna Spec", + "type": "object", + "required": [ "region", "playground", "username", "password" ], + "additionalProperties": true, + "properties": { + "region": { + "title": "Region", + "type": "string", + "enum": [ "eu", "us", "oc" ], + "description": "Base url region (For playground eu https://docs.klarna.com/klarna-payments/api/payments-api/#tag/API-URLs). Supported 'eu', 'us', 'oc'" + }, + "playground": { + "title": "Playground", + "type": "boolean", + "description": "Propertie defining if connector is used against playground or production environment", + "default": false + }, + "username": { + "title": "Username", + "type": "string", + "description": "Consists of your Merchant ID (eid) - a unique number that identifies your e-store, combined with a random string (https://developers.klarna.com/api/#authentication)" + }, + "password": { + "title": "Password", + "type": "string", + "description": "A string which is associated with your Merchant ID and is used to authorize use of Klarna's APIs (https://developers.klarna.com/api/#authentication)", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "95e8cffd-b8c4-4039-968e-d32fb4a69bde", + "name": "Klaviyo", + "dockerRepository": "airbyte/source-klaviyo", + "dockerImageTag": "0.3.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/klaviyo", + "icon": "klaviyo.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/klaviyo", + "changelogUrl": "https://docs.airbyte.com/integrations/sources/klaviyo", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Klaviyo Spec", + "type": "object", + "properties": { + "api_key": { + "title": "Api Key", + "description": "Klaviyo API Key. See our docs if you need help finding this key.", + "airbyte_secret": true, + "type": "string" + }, + "start_date": { + "title": "Start Date", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": [ "2017-01-25T00:00:00Z" ], + "type": "string", + "format": "date-time" + } + }, + "required": [ "api_key", "start_date" ] + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "a.klaviyo.com", "klaviyo.com" ] + } + }, { + "sourceDefinitionId": "547dc08e-ab51-421d-953b-8f3745201a8c", + "name": "Kyriba", + "dockerRepository": "airbyte/source-kyriba", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/kyriba", + "icon": "kyriba.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Kyriba Spec", + "type": "object", + "required": [ "domain", "username", "password", "start_date" ], + "additionalProperties": false, + "properties": { + "domain": { + "type": "string", + "description": "Kyriba domain", + "title": "Domain", + "examples": [ "demo.kyriba.com" ], + "pattern": "^[a-zA-Z0-9._-]*\\.[a-zA-Z0-9._-]*\\.[a-z]*" + }, + "username": { + "type": "string", + "description": "Username to be used in basic auth", + "title": "Username" + }, + "password": { + "type": "string", + "description": "Password to be used in basic auth", + "title": "Password", + "airbyte_secret": true + }, + "start_date": { + "type": "string", + "description": "The date the sync should start from.", + "title": "Start Date", + "examples": [ "2021-01-10" ], + "pattern": "^\\d{4}\\-(0[1-9]|1[012])\\-(0[1-9]|[12][0-9]|3[01])$" + }, + "end_date": { + "type": "string", + "description": "The date the sync should end. If let empty the sync will run to the current date.", + "title": "End Date", + "examples": [ "2022-03-01" ], + "pattern": "^(?:(\\d{4}\\-(0[1-9]|1[012])\\-(0[1-9]|[12][0-9]|3[01]))|)$" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "f96bb511-5e3c-48fc-b408-547953cd81a4", + "name": "LaunchDarkly", + "dockerRepository": "airbyte/source-launchdarkly", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/launchdarkly", + "icon": "launchdarkly.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/launchdarkly", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Launchdarkly Spec", + "type": "object", + "required": [ "access_token" ], + "additionalProperties": true, + "properties": { + "access_token": { + "title": "Access token", + "type": "string", + "description": "Your Access token. See here.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "789f8e7a-2d28-11ec-8d3d-0242ac130003", + "name": "Lemlist", + "dockerRepository": "airbyte/source-lemlist", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/lemlist", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/lemlist", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Lemlist Spec", + "type": "object", + "required": [ "api_key" ], + "additionalProperties": false, + "properties": { + "api_key": { + "type": "string", + "title": "API key", + "description": "Lemlist API key.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "3981c999-bd7d-4afc-849b-e53dea90c948", + "name": "Lever Hiring", + "dockerRepository": "airbyte/source-lever-hiring", + "dockerImageTag": "0.1.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/lever-hiring", + "icon": "leverhiring.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/lever-hiring", + "changelogUrl": "https://docs.airbyte.com/integrations/sources/lever-hiring#changelog", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Lever Hiring Source Spec", + "type": "object", + "required": [ "start_date" ], + "additionalProperties": true, + "properties": { + "credentials": { + "order": 3, + "title": "Authentication Mechanism", + "description": "Choose how to authenticate to Lever Hiring.", + "type": "object", + "oneOf": [ { + "type": "object", + "title": "Authenticate via Lever (OAuth)", + "required": [ "refresh_token" ], + "properties": { + "auth_type": { + "type": "string", + "const": "Client", + "order": 0 + }, + "client_id": { + "title": "Client ID", + "type": "string", + "description": "The Client ID of your Lever Hiring developer application." + }, + "client_secret": { + "title": "Client Secret", + "type": "string", + "description": "The Client Secret of your Lever Hiring developer application.", + "airbyte_secret": true + }, + "refresh_token": { + "type": "string", + "title": "Refresh Token", + "description": "The token for obtaining new access token.", + "airbyte_secret": true + } + } + }, { + "type": "object", + "title": "Authenticate via Lever (Api Key)", + "required": [ "api_key" ], + "properties": { + "auth_type": { + "type": "string", + "const": "Api Key", + "order": 0 + }, + "api_key": { + "title": "Api key", + "type": "string", + "description": "The Api Key of your Lever Hiring account.", + "airbyte_secret": true, + "order": 1 + } + } + } ] + }, + "start_date": { + "order": 0, + "type": "string", + "title": "Start Date", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated. Note that it will be used only in the following incremental streams: comments, commits, and issues.", + "examples": [ "2021-03-01T00:00:00Z" ], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$" + }, + "environment": { + "order": 1, + "type": "string", + "title": "Environment", + "description": "The environment in which you'd like to replicate data for Lever. This is used to determine which Lever API endpoint to use.", + "default": "Sandbox", + "enum": [ "Production", "Sandbox" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": [ "credentials", "0" ], + "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], + "oauthFlowOutputParameters": [ [ "refresh_token" ] ] + } + }, + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": [ "credentials", "auth_type" ], + "predicate_value": "Client", + "oauth_config_specification": { + "oauth_user_input_from_connector_config_specification": { + "type": "object", + "properties": { + "environment": { + "type": "string", + "path_in_connector_config": [ "environment" ] + } + } + }, + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "refresh_token": { + "type": "string", + "path_in_connector_config": [ "credentials", "refresh_token" ] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_id" ] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_secret" ] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "137ece28-5434-455c-8f34-69dc3782f451", + "name": "LinkedIn Ads", + "dockerRepository": "airbyte/source-linkedin-ads", + "dockerImageTag": "0.1.15", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/linkedin-ads", + "icon": "linkedin.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/linkedin-ads", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Linkedin Ads Spec", + "type": "object", + "required": [ "start_date" ], + "additionalProperties": true, + "properties": { + "credentials": { + "title": "Authentication", + "type": "object", + "oneOf": [ { + "type": "object", + "title": "OAuth2.0", + "required": [ "client_id", "client_secret", "refresh_token" ], + "properties": { + "auth_method": { + "type": "string", + "const": "oAuth2.0" + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "The client ID of the LinkedIn Ads developer application.", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "title": "Client secret", + "description": "The client secret the LinkedIn Ads developer application.", + "airbyte_secret": true + }, + "refresh_token": { + "type": "string", + "title": "Refresh token", + "description": "The key to refresh the expired access token.", + "airbyte_secret": true + } + } + }, { + "title": "Access token", + "type": "object", + "required": [ "access_token" ], + "properties": { + "auth_method": { + "type": "string", + "const": "access_token" + }, + "access_token": { + "type": "string", + "title": "Access token", + "description": "The token value generated using the authentication code. See the docs to obtain yours.", + "airbyte_secret": true + } + } + } ] + }, + "start_date": { + "type": "string", + "title": "Start date", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "description": "UTC date in the format 2020-09-17. Any data before this date will not be replicated.", + "examples": [ "2021-05-17" ], + "format": "date" + }, + "account_ids": { + "title": "Account IDs", + "type": "array", + "description": "Specify the account IDs separated by a space, to pull the data from. Leave empty, if you want to pull the data from all associated accounts. See the LinkedIn Ads docs for more info.", + "items": { + "type": "integer" + }, + "default": [ ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": [ "credentials", "0" ], + "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], + "oauthFlowOutputParameters": [ [ "refresh_token" ] ] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "api.linkedin.com" ] + }, + "maxSecondsBetweenMessages": 21600 + }, { + "sourceDefinitionId": "af54297c-e8f8-4d63-a00d-a94695acc9d3", + "name": "LinkedIn Pages", + "dockerRepository": "airbyte/source-linkedin-pages", + "dockerImageTag": "1.0.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/linkedin-pages", + "icon": "linkedin.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/linkedin-pages/", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Linkedin Pages Spec", + "type": "object", + "required": [ "org_id" ], + "additionalProperties": true, + "properties": { + "org_id": { + "title": "Organization ID", + "type": "string", + "airbyte_secret": true, + "description": "Specify the Organization ID", + "examples": [ "123456789" ] + }, + "credentials": { + "title": "Authentication", + "type": "object", + "oneOf": [ { + "type": "object", + "title": "OAuth2.0", + "required": [ "client_id", "client_secret", "refresh_token" ], + "properties": { + "auth_method": { + "type": "string", + "const": "oAuth2.0" + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "The client ID of the LinkedIn developer application.", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "title": "Client secret", + "description": "The client secret of the LinkedIn developer application.", + "airbyte_secret": true + }, + "refresh_token": { + "type": "string", + "title": "Refresh token", + "description": "The token value generated using the LinkedIn Developers OAuth Token Tools. See the docs to obtain yours.", + "airbyte_secret": true + } + } + }, { + "title": "Access token", + "type": "object", + "required": [ "access_token" ], + "properties": { + "auth_method": { + "type": "string", + "const": "access_token" + }, + "access_token": { + "type": "string", + "title": "Access token", + "description": "The token value generated using the LinkedIn Developers OAuth Token Tools. See the docs to obtain yours.", + "airbyte_secret": true + } + } + } ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "7b86879e-26c5-4ef6-a5ce-2be5c7b46d1e", + "name": "Linnworks", + "dockerRepository": "airbyte/source-linnworks", + "dockerImageTag": "0.1.5", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/linnworks", + "icon": "linnworks.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/linnworks", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Linnworks Spec", + "type": "object", + "required": [ "application_id", "application_secret", "token", "start_date" ], + "additionalProperties": false, + "properties": { + "application_id": { + "title": "Application ID.", + "description": "Linnworks Application ID", + "type": "string" + }, + "application_secret": { + "title": "Application Secret", + "description": "Linnworks Application Secret", + "type": "string", + "airbyte_secret": true + }, + "token": { + "title": "API Token", + "type": "string" + }, + "start_date": { + "title": "Start Date", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", + "type": "string", + "format": "date-time" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "45e0b135-615c-40ac-b38e-e65b0944197f", + "name": "Lokalise", + "dockerRepository": "airbyte/source-lokalise", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/lokalise", + "icon": "lokalise.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/lokalise", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Lokalise Spec", + "type": "object", + "required": [ "api_key", "project_id" ], + "additionalProperties": true, + "properties": { + "api_key": { + "title": "API Key", + "type": "string", + "description": "Lokalise API Key with read-access. Available at Profile settings > API tokens. See here.", + "airbyte_secret": true + }, + "project_id": { + "title": "Project Id", + "type": "string", + "description": "Lokalise project ID. Available at Project Settings > General." + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "00405b19-9768-4e0c-b1ae-9fc2ee2b2a8c", + "name": "Looker", + "dockerRepository": "airbyte/source-looker", + "dockerImageTag": "0.2.8", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/looker", + "icon": "looker.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/looker", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Looker Spec", + "type": "object", + "required": [ "domain", "client_id", "client_secret" ], + "additionalProperties": true, + "properties": { + "domain": { + "type": "string", + "title": "Domain", + "examples": [ "domainname.looker.com", "looker.clientname.com", "123.123.124.123:8000" ], + "description": "Domain for your Looker account, e.g. airbyte.cloud.looker.com,looker.[clientname].com,IP address" + }, + "client_id": { + "title": "Client ID", + "type": "string", + "description": "The Client ID is first part of an API3 key that is specific to each Looker user. See the docs for more information on how to generate this key." + }, + "client_secret": { + "title": "Client Secret", + "type": "string", + "description": "The Client Secret is second part of an API3 key.", + "airbyte_secret": true + }, + "run_look_ids": { + "title": "Look IDs to Run", + "type": "array", + "items": { + "type": "string", + "pattern": "^[0-9]*$" + }, + "description": "The IDs of any Looks to run" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "b03a9f3e-22a5-11eb-adc1-0242ac120002", + "name": "Mailchimp", + "dockerRepository": "airbyte/source-mailchimp", + "dockerImageTag": "0.3.5", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailchimp", + "icon": "mailchimp.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailchimp", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Mailchimp Spec", + "type": "object", + "required": [ ], + "additionalProperties": true, + "properties": { + "credentials": { + "type": "object", + "title": "Authentication", + "oneOf": [ { + "title": "OAuth2.0", + "type": "object", + "required": [ "auth_type", "access_token" ], + "properties": { + "auth_type": { + "type": "string", + "const": "oauth2.0", + "order": 0 + }, + "client_id": { + "title": "Client ID", + "type": "string", + "description": "The Client ID of your OAuth application.", + "airbyte_secret": true + }, + "client_secret": { + "title": "Client Secret", + "type": "string", + "description": "The Client Secret of your OAuth application.", + "airbyte_secret": true + }, + "access_token": { + "title": "Access Token", + "type": "string", + "description": "An access token generated using the above client ID and secret.", + "airbyte_secret": true + } + } + }, { + "type": "object", + "title": "API Key", + "required": [ "auth_type", "apikey" ], + "properties": { + "auth_type": { + "type": "string", + "const": "apikey", + "order": 1 + }, + "apikey": { + "type": "string", + "title": "API Key", + "description": "Mailchimp API Key. See the docs for information on how to generate this key.", + "airbyte_secret": true + } + } + } ] + }, + "campaign_id": { + "type": "string", + "title": "ID of a campaign to sync email activities", + "airbyte_hidden": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": [ "credentials", "auth_type" ], + "predicate_value": "oauth2.0", + "oauth_config_specification": { + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "access_token": { + "type": "string", + "path_in_connector_config": [ "credentials", "access_token" ] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_id" ] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_secret" ] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "*.api.mailchimp.com" ] + } + }, { + "sourceDefinitionId": "56582331-5de2-476b-b913-5798de77bbdf", + "name": "Mailjet Mail", + "dockerRepository": "airbyte/source-mailjet-mail", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailjet-mail", + "icon": "mailjetmail.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailjet-mail", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Mailjet Mail Spec", + "type": "object", + "required": [ "api_key", "api_key_secret" ], + "additionalProperties": true, + "properties": { + "api_key": { + "title": "API Key", + "type": "string", + "description": "Your API Key. See here." + }, + "api_key_secret": { + "title": "API Secret Key", + "type": "string", + "description": "Your API Secret Key. See here.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "6ec2acea-7fd1-4378-b403-41a666e0c028", + "name": "Mailjet SMS", + "dockerRepository": "airbyte/source-mailjet-sms", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailjet-sms", + "icon": "mailjetsms.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailjet-sms", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Mailjet Sms Spec", + "type": "object", + "required": [ "token" ], + "additionalProperties": true, + "properties": { + "token": { + "title": "Access Token", + "type": "string", + "description": "Your access token. See here.", + "airbyte_secret": true + }, + "start_date": { + "title": "Start date", + "type": "integer", + "description": "Retrieve SMS messages created after the specified timestamp. Required format - Unix timestamp.", + "pattern": "^[0-9]*$", + "examples": [ 1666261656 ] + }, + "end_date": { + "title": "End date", + "type": "integer", + "description": "Retrieve SMS messages created before the specified timestamp. Required format - Unix timestamp.", + "pattern": "^[0-9]*$", + "examples": [ 1666281656 ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "dc3b9003-2432-4e93-a7f4-4620b0f14674", + "name": "MailerLite", + "dockerRepository": "airbyte/source-mailerlite", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailerlite", + "icon": "mailerlite.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailerlite", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Mailerlite Spec", + "type": "object", + "required": [ "api_token" ], + "additionalProperties": true, + "properties": { + "api_token": { + "type": "string", + "description": "Your API Token. See here.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "2707d529-3c04-46eb-9c7e-40d4038df6f7", + "name": "MailerSend", + "dockerRepository": "airbyte/source-mailersend", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailersend", + "icon": "mailersend.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailersend", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Mailersend Spec", + "type": "object", + "required": [ "api_token", "domain_id" ], + "additionalProperties": true, + "properties": { + "api_token": { + "type": "string", + "description": "Your API Token. See here.", + "airbyte_secret": true + }, + "domain_id": { + "type": "string", + "description": "The domain entity in mailersend", + "examples": [ "airbyte.com", "linkana.com" ] + }, + "start_date": { + "type": "number", + "description": "Timestamp is assumed to be UTC.", + "examples": [ 123131321 ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "5b9cb09e-1003-4f9c-983d-5779d1b2cd51", + "name": "Mailgun", + "dockerRepository": "airbyte/source-mailgun", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailgun", + "icon": "mailgun.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailgun", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Source Mailgun Spec", + "type": "object", + "required": [ "private_key" ], + "additionalProperties": true, + "properties": { + "private_key": { + "type": "string", + "airbyte_secret": true, + "description": "Primary account API key to access your Mailgun data.", + "title": "Private API Key" + }, + "domain_region": { + "type": "string", + "description": "Domain region code. 'EU' or 'US' are possible values. The default is 'US'.", + "title": "Domain Region Code" + }, + "start_date": { + "title": "Replication Start Date", + "description": "UTC date and time in the format 2020-10-01 00:00:00. Any data before this date will not be replicated. If omitted, defaults to 3 days ago.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$", + "examples": [ "2020-10-01 00:00:00" ], + "type": "string", + "format": "date-time" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "9e0556f4-69df-4522-a3fb-03264d36b348", + "name": "Marketo", + "dockerRepository": "airbyte/source-marketo", + "dockerImageTag": "1.0.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/marketo", + "icon": "marketo.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/marketo", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Source Marketo Spec", + "type": "object", + "required": [ "domain_url", "client_id", "client_secret", "start_date" ], + "additionalProperties": true, + "properties": { + "domain_url": { + "title": "Domain URL", + "type": "string", + "order": 3, + "description": "Your Marketo Base URL. See the docs for info on how to obtain this.", + "examples": [ "https://000-AAA-000.mktorest.com" ], + "airbyte_secret": true + }, + "client_id": { + "title": "Client ID", + "type": "string", + "description": "The Client ID of your Marketo developer application. See the docs for info on how to obtain this.", + "order": 0, + "airbyte_secret": true + }, + "client_secret": { + "title": "Client Secret", + "type": "string", + "description": "The Client Secret of your Marketo developer application. See the docs for info on how to obtain this.", + "order": 1, + "airbyte_secret": true + }, + "start_date": { + "title": "Start Date", + "type": "string", + "order": 2, + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", + "examples": [ "2020-09-25T00:00:00Z" ], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "format": "date-time" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "*.mktorest.com" ] + } + }, { + "sourceDefinitionId": "c7cb421b-942e-4468-99ee-e369bcabaec5", + "name": "Metabase", + "dockerRepository": "airbyte/source-metabase", + "dockerImageTag": "0.3.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/metabase", + "icon": "metabase.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/metabase", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Metabase Source Spec", + "type": "object", + "required": [ "instance_api_url" ], + "additionalProperties": true, + "properties": { + "instance_api_url": { + "type": "string", + "title": "Metabase Instance API URL", + "description": "URL to your metabase instance API", + "examples": [ "https://localhost:3000/api/" ], + "pattern": "^https://", + "order": 0 + }, + "username": { + "type": "string", + "order": 1 + }, + "password": { + "type": "string", + "airbyte_secret": true, + "order": 2 + }, + "session_token": { + "type": "string", + "description": "To generate your session token, you need to run the following command: ``` curl -X POST \\\n -H \"Content-Type: application/json\" \\\n -d '{\"username\": \"person@metabase.com\", \"password\": \"fakepassword\"}' \\\n http://localhost:3000/api/session\n``` Then copy the value of the `id` field returned by a successful call to that API.\nNote that by default, sessions are good for 14 days and needs to be regenerated.", + "airbyte_secret": true, + "order": 3 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta" + }, { + "sourceDefinitionId": "b5ea17b1-f170-46dc-bc31-cc744ca984c1", + "name": "Microsoft SQL Server (MSSQL)", + "dockerRepository": "airbyte/source-mssql", + "dockerImageTag": "1.0.14", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mssql", + "icon": "mssql.svg", + "sourceType": "database", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mssql", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "MSSQL Source Spec", + "type": "object", + "required": [ "host", "port", "database", "username" ], + "properties": { + "host": { + "description": "The hostname of the database.", + "title": "Host", + "type": "string", + "order": 0 + }, + "port": { + "description": "The port of the database.", + "title": "Port", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "examples": [ "1433" ], + "order": 1 + }, + "database": { + "description": "The name of the database.", + "title": "Database", + "type": "string", + "examples": [ "master" ], + "order": 2 + }, + "schemas": { + "title": "Schemas", + "description": "The list of schemas to sync from. Defaults to user. Case sensitive.", + "type": "array", + "items": { + "type": "string" + }, + "minItems": 0, + "uniqueItems": true, + "default": [ "dbo" ], + "order": 3 + }, + "username": { + "description": "The username which is used to access the database.", + "title": "Username", + "type": "string", + "order": 4 + }, + "password": { + "description": "The password associated with the username.", + "title": "Password", + "type": "string", + "airbyte_secret": true, + "order": 5 + }, + "jdbc_url_params": { + "title": "JDBC URL Params", + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", + "type": "string", + "order": 6 + }, + "ssl_method": { + "title": "SSL Method", + "type": "object", + "description": "The encryption method which is used when communicating with the database.", + "order": 7, + "oneOf": [ { + "title": "Unencrypted", + "description": "Data transfer will not be encrypted.", + "required": [ "ssl_method" ], + "properties": { + "ssl_method": { + "type": "string", + "const": "unencrypted" + } + } + }, { + "title": "Encrypted (trust server certificate)", + "description": "Use the certificate provided by the server without verification. (For testing purposes only!)", + "required": [ "ssl_method" ], + "properties": { + "ssl_method": { + "type": "string", + "const": "encrypted_trust_server_certificate" + } + } + }, { + "title": "Encrypted (verify certificate)", + "description": "Verify and use the certificate provided by the server.", + "required": [ "ssl_method", "trustStoreName", "trustStorePassword" ], + "properties": { + "ssl_method": { + "type": "string", + "const": "encrypted_verify_certificate" + }, + "hostNameInCertificate": { + "title": "Host Name In Certificate", + "type": "string", + "description": "Specifies the host name of the server. The value of this property must match the subject property of the certificate.", + "order": 7 + } + } + } ] + }, + "replication_method": { + "type": "object", + "title": "Replication Method", + "description": "The replication method used for extracting data from the database. STANDARD replication requires no setup on the DB side but will not be able to represent deletions incrementally. CDC uses {TBC} to detect inserts, updates, and deletes. This needs to be configured on the source database itself.", + "default": "STANDARD", + "order": 8, + "oneOf": [ { + "title": "Standard", + "description": "Standard replication requires no setup on the DB side but will not be able to represent deletions incrementally.", + "required": [ "method" ], + "properties": { + "method": { + "type": "string", + "const": "STANDARD", + "order": 0 + } + } + }, { + "title": "Logical Replication (CDC)", + "description": "CDC uses {TBC} to detect inserts, updates, and deletes. This needs to be configured on the source database itself.", + "required": [ "method" ], + "properties": { + "method": { + "type": "string", + "const": "CDC", + "order": 0 + }, + "data_to_sync": { + "title": "Data to Sync", + "type": "string", + "default": "Existing and New", + "enum": [ "Existing and New", "New Changes Only" ], + "description": "What data should be synced under the CDC. \"Existing and New\" will read existing data as a snapshot, and sync new changes through CDC. \"New Changes Only\" will skip the initial snapshot, and only sync new changes through CDC.", + "order": 1 + }, + "snapshot_isolation": { + "title": "Initial Snapshot Isolation Level", + "type": "string", + "default": "Snapshot", + "enum": [ "Snapshot", "Read Committed" ], + "description": "Existing data in the database are synced through an initial snapshot. This parameter controls the isolation level that will be used during the initial snapshotting. If you choose the \"Snapshot\" level, you must enable the snapshot isolation mode on the database.", + "order": 2 + }, + "initial_waiting_seconds": { + "type": "integer", + "title": "Initial Waiting Time in Seconds (Advanced)", + "description": "The amount of time the connector will wait when it launches to determine if there is new data to sync or not. Defaults to 300 seconds. Valid range: 120 seconds to 1200 seconds. Read about initial waiting time.", + "default": 300, + "min": 120, + "max": 1200, + "order": 3 + } + } + } ] + }, + "tunnel_method": { + "type": "object", + "title": "SSH Tunnel Method", + "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", + "oneOf": [ { + "title": "No Tunnel", + "required": [ "tunnel_method" ], + "properties": { + "tunnel_method": { + "description": "No ssh tunnel needed to connect to database", + "type": "string", + "const": "NO_TUNNEL", + "order": 0 + } + } + }, { + "title": "SSH Key Authentication", + "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [ "22" ], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host.", + "type": "string", + "order": 3 + }, + "ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + }, { + "title": "Password Authentication", + "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [ "22" ], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host", + "type": "string", + "order": 3 + }, + "tunnel_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 4 + } + } + } ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": [ "${host}", "${tunnel_method.tunnel_host}" ] + } + }, { + "sourceDefinitionId": "eaf50f04-21dd-4620-913b-2a83f5635227", + "name": "Microsoft teams", + "dockerRepository": "airbyte/source-microsoft-teams", + "dockerImageTag": "0.2.5", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/microsoft-teams", + "icon": "microsoft-teams.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/microsoft-teams", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Microsoft Teams Spec", + "type": "object", + "required": [ "period" ], + "additionalProperties": true, + "properties": { + "period": { + "type": "string", + "title": "Period", + "description": "Specifies the length of time over which the Team Device Report stream is aggregated. The supported values are: D7, D30, D90, and D180.", + "examples": [ "D7" ] + }, + "credentials": { + "title": "Authentication mechanism", + "description": "Choose how to authenticate to Microsoft", + "type": "object", + "oneOf": [ { + "type": "object", + "title": "Authenticate via Microsoft (OAuth 2.0)", + "required": [ "tenant_id", "client_id", "client_secret", "refresh_token" ], + "additionalProperties": false, + "properties": { + "auth_type": { + "type": "string", + "const": "Client", + "enum": [ "Client" ], + "default": "Client", + "order": 0 + }, + "tenant_id": { + "title": "Directory (tenant) ID", + "type": "string", + "description": "A globally unique identifier (GUID) that is different than your organization name or domain. Follow these steps to obtain: open one of the Teams where you belong inside the Teams Application -> Click on the … next to the Team title -> Click on Get link to team -> Copy the link to the team and grab the tenant ID form the URL" + }, + "client_id": { + "title": "Client ID", + "type": "string", + "description": "The Client ID of your Microsoft Teams developer application." + }, + "client_secret": { + "title": "Client Secret", + "type": "string", + "description": "The Client Secret of your Microsoft Teams developer application.", + "airbyte_secret": true + }, + "refresh_token": { + "title": "Refresh Token", + "type": "string", + "description": "A Refresh Token to renew the expired Access Token.", + "airbyte_secret": true + } + } + }, { + "type": "object", + "title": "Authenticate via Microsoft", + "required": [ "tenant_id", "client_id", "client_secret" ], + "additionalProperties": false, + "properties": { + "auth_type": { + "type": "string", + "const": "Token", + "enum": [ "Token" ], + "default": "Token", + "order": 0 + }, + "tenant_id": { + "title": "Directory (tenant) ID", + "type": "string", + "description": "A globally unique identifier (GUID) that is different than your organization name or domain. Follow these steps to obtain: open one of the Teams where you belong inside the Teams Application -> Click on the … next to the Team title -> Click on Get link to team -> Copy the link to the team and grab the tenant ID form the URL" + }, + "client_id": { + "title": "Client ID", + "type": "string", + "description": "The Client ID of your Microsoft Teams developer application." + }, + "client_secret": { + "title": "Client Secret", + "type": "string", + "description": "The Client Secret of your Microsoft Teams developer application.", + "airbyte_secret": true + } + } + } ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": [ "credentials", "auth_type" ], + "predicate_value": "Client", + "oauth_config_specification": { + "oauth_user_input_from_connector_config_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "tenant_id": { + "type": "string", + "path_in_connector_config": [ "credentials", "tenant_id" ] + } + } + }, + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "refresh_token": { + "type": "string", + "path_in_connector_config": [ "credentials", "refresh_token" ] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_id" ] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_secret" ] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "9220e3de-3b60-4bb2-a46f-046d59ea235a", + "name": "Microsoft Dataverse", + "dockerRepository": "airbyte/source-microsoft-dataverse", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/microsoft-dataverse", + "icon": "microsoftdataverse.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/microsoft-dataverse", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Microsoft Dataverse Spec", + "type": "object", + "required": [ "url", "tenant_id", "client_id", "client_secret_value" ], + "additionalProperties": true, + "properties": { + "url": { + "type": "string", + "description": "URL to Microsoft Dataverse API", + "title": "URL", + "examples": [ "https://.crm.dynamics.com" ], + "order": 0 + }, + "tenant_id": { + "type": "string", + "description": "Tenant Id of your Microsoft Dataverse Instance", + "title": "Tenant Id", + "airbyte_secret": true, + "order": 1 + }, + "client_id": { + "type": "string", + "description": "App Registration Client Id", + "title": "Client Id", + "airbyte_secret": true, + "order": 2 + }, + "client_secret_value": { + "type": "string", + "description": "App Registration Client Secret", + "title": "Client Secret", + "airbyte_secret": true, + "order": 3 + }, + "odata_maxpagesize": { + "type": "integer", + "description": "Max number of results per page. Default=5000", + "title": "Max page size", + "default": 5000, + "order": 4 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "12928b32-bf0a-4f1e-964f-07e12e37153a", + "name": "Mixpanel", + "dockerRepository": "airbyte/source-mixpanel", + "dockerImageTag": "0.1.31", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mixpanel", + "icon": "mixpanel.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mixpanel", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Source Mixpanel Spec", + "type": "object", + "properties": { + "credentials": { + "title": "Authentication *", + "description": "Choose how to authenticate to Mixpanel", + "type": "object", + "order": 0, + "oneOf": [ { + "type": "object", + "title": "Service Account", + "required": [ "username", "secret" ], + "properties": { + "option_title": { + "type": "string", + "const": "Service Account", + "order": 0 + }, + "username": { + "order": 1, + "title": "Username", + "type": "string", + "description": "Mixpanel Service Account Username. See the docs for more information on how to obtain this." + }, + "secret": { + "order": 2, + "title": "Secret", + "type": "string", + "description": "Mixpanel Service Account Secret. See the docs for more information on how to obtain this.", + "airbyte_secret": true + } + } + }, { + "type": "object", + "title": "Project Secret", + "required": [ "api_secret" ], + "properties": { + "option_title": { + "type": "string", + "const": "Project Secret", + "order": 0 + }, + "api_secret": { + "order": 1, + "title": "Project Secret", + "type": "string", + "description": "Mixpanel project secret. See the docs for more information on how to obtain this.", + "airbyte_secret": true + } + } + } ] + }, + "project_id": { + "order": 1, + "title": "Project ID", + "description": "Your project ID number. See the docs for more information on how to obtain this.", + "type": "integer" + }, + "attribution_window": { + "order": 2, + "title": "Attribution Window", + "type": "integer", + "description": " A period of time for attributing results to ads and the lookback period after those actions occur during which ad results are counted. Default attribution window is 5 days.", + "default": 5 + }, + "project_timezone": { + "order": 3, + "title": "Project Timezone", + "type": "string", + "description": "Time zone in which integer date times are stored. The project timezone may be found in the project settings in the Mixpanel console.", + "default": "US/Pacific", + "examples": [ "US/Pacific", "UTC" ] + }, + "select_properties_by_default": { + "order": 4, + "title": "Select Properties By Default", + "type": "boolean", + "description": "Setting this config parameter to TRUE ensures that new properties on events and engage records are captured. Otherwise new properties will be ignored.", + "default": true + }, + "start_date": { + "order": 5, + "title": "Start Date", + "type": "string", + "description": "The date in the format YYYY-MM-DD. Any data before this date will not be replicated. If this option is not set, the connector will replicate data from up to one year ago by default.", + "examples": [ "2021-11-16" ], + "pattern": "^$|^[0-9]{4}-[0-9]{2}-[0-9]{2}(T[0-9]{2}:[0-9]{2}:[0-9]{2}Z)?$", + "format": "date-time" + }, + "end_date": { + "order": 6, + "title": "End Date", + "type": "string", + "description": "The date in the format YYYY-MM-DD. Any data after this date will not be replicated. Left empty to always sync to most recent date", + "examples": [ "2021-11-16" ], + "pattern": "^$|^[0-9]{4}-[0-9]{2}-[0-9]{2}(T[0-9]{2}:[0-9]{2}:[0-9]{2}Z)?$", + "format": "date-time" + }, + "region": { + "order": 7, + "title": "Region", + "description": "The region of mixpanel domain instance either US or EU.", + "type": "string", + "enum": [ "US", "EU" ], + "default": "US" + }, + "date_window_size": { + "order": 8, + "title": "Date slicing window", + "description": "Defines window size in days, that used to slice through data. You can reduce it, if amount of data in each window is too big for your environment.", + "type": "integer", + "minimum": 1, + "default": 30 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "mixpanel.com", "eu.mixpanel.com" ] + } + }, { + "sourceDefinitionId": "80a54ea2-9959-4040-aac1-eee42423ec9b", + "name": "Monday", + "dockerRepository": "airbyte/source-monday", + "dockerImageTag": "0.2.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/monday", + "icon": "monday.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/monday", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Monday Spec", + "type": "object", + "required": [ ], + "additionalProperties": true, + "properties": { + "credentials": { + "title": "Authorization Method", + "type": "object", + "oneOf": [ { + "type": "object", + "title": "OAuth2.0", + "required": [ "auth_type", "client_id", "client_secret", "access_token" ], + "properties": { + "subdomain": { + "type": "string", + "title": "Subdomain/Slug", + "description": "Slug/subdomain of the account, or the first part of the URL that comes before .monday.com", + "default": "", + "order": 0 + }, + "auth_type": { + "type": "string", + "const": "oauth2.0", + "order": 1 + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "The Client ID of your OAuth application.", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "The Client Secret of your OAuth application.", + "airbyte_secret": true + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "Access Token for making authenticated requests.", + "airbyte_secret": true + } + } + }, { + "type": "object", + "title": "API Token", + "required": [ "auth_type", "api_token" ], + "properties": { + "auth_type": { + "type": "string", + "const": "api_token", + "order": 0 + }, + "api_token": { + "type": "string", + "title": "Personal API Token", + "description": "API Token for making authenticated requests.", + "airbyte_secret": true + } + } + } ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": [ "credentials", "auth_type" ], + "predicate_value": "oauth2.0", + "oauth_config_specification": { + "oauth_user_input_from_connector_config_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "subdomain": { + "type": "string", + "path_in_connector_config": [ "credentials", "subdomain" ] + } + } + }, + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "access_token": { + "type": "string", + "path_in_connector_config": [ "credentials", "access_token" ] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": true, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_id" ] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_secret" ] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": [ "api.monday.com" ] + } + }, { + "sourceDefinitionId": "b2e713cd-cc36-4c0a-b5bd-b47cb8a0561e", + "name": "MongoDb", + "dockerRepository": "airbyte/source-mongodb-v2", + "dockerImageTag": "0.1.19", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mongodb-v2", + "icon": "mongodb.svg", + "sourceType": "database", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mongodb-v2", + "changelogUrl": "https://docs.airbyte.com/integrations/sources/mongodb-v2", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "MongoDb Source Spec", + "type": "object", + "required": [ "database" ], + "additionalProperties": true, + "properties": { + "instance_type": { + "type": "object", + "title": "MongoDb Instance Type", + "description": "The MongoDb instance to connect to. For MongoDB Atlas and Replica Set TLS connection is used by default.", + "order": 0, + "oneOf": [ { + "title": "Standalone MongoDb Instance", + "required": [ "instance", "host", "port" ], + "properties": { + "instance": { + "type": "string", + "enum": [ "standalone" ], + "default": "standalone" + }, + "host": { + "title": "Host", + "type": "string", + "description": "The host name of the Mongo database.", + "order": 0 + }, + "port": { + "title": "Port", + "type": "integer", + "description": "The port of the Mongo database.", + "minimum": 0, + "maximum": 65536, + "default": 27017, + "examples": [ "27017" ], + "order": 1 + }, + "tls": { + "title": "TLS Connection", + "type": "boolean", + "description": "Indicates whether TLS encryption protocol will be used to connect to MongoDB. It is recommended to use TLS connection if possible. For more information see documentation.", + "default": false, + "order": 2 + } + } + }, { + "title": "Replica Set", + "required": [ "instance", "server_addresses" ], + "properties": { + "instance": { + "type": "string", + "enum": [ "replica" ], + "default": "replica" + }, + "server_addresses": { + "title": "Server Addresses", + "type": "string", + "description": "The members of a replica set. Please specify `host`:`port` of each member separated by comma.", + "examples": [ "host1:27017,host2:27017,host3:27017" ], + "order": 0 + }, + "replica_set": { + "title": "Replica Set", + "type": "string", + "description": "A replica set in MongoDB is a group of mongod processes that maintain the same data set.", + "order": 1 + } + } + }, { + "title": "MongoDB Atlas", + "additionalProperties": false, + "required": [ "instance", "cluster_url" ], + "properties": { + "instance": { + "type": "string", + "enum": [ "atlas" ], + "default": "atlas" + }, + "cluster_url": { + "title": "Cluster URL", + "type": "string", + "description": "The URL of a cluster to connect to.", + "order": 0 + } + } + } ] + }, + "database": { + "title": "Database Name", + "type": "string", + "description": "The database you want to replicate.", + "order": 1 + }, + "user": { + "title": "User", + "type": "string", + "description": "The username which is used to access the database.", + "order": 2 + }, + "password": { + "title": "Password", + "type": "string", + "description": "The password associated with this username.", + "airbyte_secret": true, + "order": 3 + }, + "auth_source": { + "title": "Authentication Source", + "type": "string", + "description": "The authentication source where the user information is stored.", + "default": "admin", + "examples": [ "admin" ], + "order": 4 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "722ba4bf-06ec-45a4-8dd5-72e4a5cf3903", + "name": "My Hours", + "dockerRepository": "airbyte/source-my-hours", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/my-hours", + "icon": "my-hours.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/my-hours", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "My Hours Spec", + "type": "object", + "required": [ "email", "password", "start_date" ], + "additionalProperties": false, + "properties": { + "email": { + "title": "Email", + "type": "string", + "description": "Your My Hours username", + "example": "john@doe.com" + }, + "password": { + "title": "Password", + "type": "string", + "description": "The password associated to the username", + "airbyte_secret": true + }, + "start_date": { + "title": "Start Date", + "description": "Start date for collecting time logs", + "examples": [ "%Y-%m-%d", "2016-01-01" ], + "type": "string", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" + }, + "logs_batch_size": { + "title": "Time logs batch size", + "description": "Pagination size used for retrieving logs in days", + "examples": [ 30 ], + "type": "integer", + "minimum": 1, + "maximum": 365, + "default": 30 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "435bb9a5-7887-4809-aa58-28c27df0d7ad", + "name": "MySQL", + "dockerRepository": "airbyte/source-mysql", + "dockerImageTag": "2.0.18", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mysql", + "icon": "mysql.svg", + "sourceType": "database", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mysql", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "MySql Source Spec", + "type": "object", + "required": [ "host", "port", "database", "username", "replication_method" ], + "properties": { + "host": { + "description": "The host name of the database.", + "title": "Host", + "type": "string", + "order": 0 + }, + "port": { + "description": "The port to connect to.", + "title": "Port", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 3306, + "examples": [ "3306" ], + "order": 1 + }, + "database": { + "description": "The database name.", + "title": "Database", + "type": "string", + "order": 2 + }, + "username": { + "description": "The username which is used to access the database.", + "title": "Username", + "type": "string", + "order": 3 + }, + "password": { + "description": "The password associated with the username.", + "title": "Password", + "type": "string", + "airbyte_secret": true, + "order": 4 + }, + "jdbc_url_params": { + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3). For more information read about JDBC URL parameters.", + "title": "JDBC URL Parameters (Advanced)", + "type": "string", + "order": 5 + }, + "ssl": { + "title": "SSL Connection", + "description": "Encrypt data using SSL.", + "type": "boolean", + "default": true, + "order": 6 + }, + "ssl_mode": { + "title": "SSL modes", + "description": "SSL connection modes. Read more in the docs.", + "type": "object", + "order": 7, + "oneOf": [ { + "title": "preferred", + "description": "Automatically attempt SSL connection. If the MySQL server does not support SSL, continue with a regular connection.", + "required": [ "mode" ], + "properties": { + "mode": { + "type": "string", + "const": "preferred", + "order": 0 + } + } + }, { + "title": "required", + "description": "Always connect with SSL. If the MySQL server doesn’t support SSL, the connection will not be established. Certificate Authority (CA) and Hostname are not verified.", + "required": [ "mode" ], + "properties": { + "mode": { + "type": "string", + "const": "required", + "order": 0 + } + } + }, { + "title": "Verify CA", + "description": "Always connect with SSL. Verifies CA, but allows connection even if Hostname does not match.", + "required": [ "mode", "ca_certificate" ], + "properties": { + "mode": { + "type": "string", + "const": "verify_ca", + "order": 0 + }, + "ca_certificate": { + "type": "string", + "title": "CA certificate", + "description": "CA certificate", + "airbyte_secret": true, + "multiline": true, + "order": 1 + }, + "client_certificate": { + "type": "string", + "title": "Client certificate", + "description": "Client certificate (this is not a required field, but if you want to use it, you will need to add the Client key as well)", + "airbyte_secret": true, + "multiline": true, + "order": 2, + "always_show": true + }, + "client_key": { + "type": "string", + "title": "Client key", + "description": "Client key (this is not a required field, but if you want to use it, you will need to add the Client certificate as well)", + "airbyte_secret": true, + "multiline": true, + "order": 3, + "always_show": true + }, + "client_key_password": { + "type": "string", + "title": "Client key password", + "description": "Password for keystorage. This field is optional. If you do not add it - the password will be generated automatically.", + "airbyte_secret": true, + "order": 4 + } + } + }, { + "title": "Verify Identity", + "description": "Always connect with SSL. Verify both CA and Hostname.", + "required": [ "mode", "ca_certificate" ], + "properties": { + "mode": { + "type": "string", + "const": "verify_identity", + "order": 0 + }, + "ca_certificate": { + "type": "string", + "title": "CA certificate", + "description": "CA certificate", + "airbyte_secret": true, + "multiline": true, + "order": 1 + }, + "client_certificate": { + "type": "string", + "title": "Client certificate", + "description": "Client certificate (this is not a required field, but if you want to use it, you will need to add the Client key as well)", + "airbyte_secret": true, + "multiline": true, + "order": 2, + "always_show": true + }, + "client_key": { + "type": "string", + "title": "Client key", + "description": "Client key (this is not a required field, but if you want to use it, you will need to add the Client certificate as well)", + "airbyte_secret": true, + "multiline": true, + "order": 3, + "always_show": true + }, + "client_key_password": { + "type": "string", + "title": "Client key password", + "description": "Password for keystorage. This field is optional. If you do not add it - the password will be generated automatically.", + "airbyte_secret": true, + "order": 4 + } + } + } ] + }, + "replication_method": { + "type": "object", + "title": "Replication Method", + "description": "Replication method to use for extracting data from the database.", + "order": 8, + "oneOf": [ { + "title": "Standard", + "description": "Standard replication requires no setup on the DB side but will not be able to represent deletions incrementally.", + "required": [ "method" ], + "properties": { + "method": { + "type": "string", + "const": "STANDARD", + "order": 0 + } + } + }, { + "title": "Logical Replication (CDC)", + "description": "CDC uses the Binlog to detect inserts, updates, and deletes. This needs to be configured on the source database itself.", + "required": [ "method" ], + "properties": { + "method": { + "type": "string", + "const": "CDC", + "order": 0 + }, + "initial_waiting_seconds": { + "type": "integer", + "title": "Initial Waiting Time in Seconds (Advanced)", + "description": "The amount of time the connector will wait when it launches to determine if there is new data to sync or not. Defaults to 300 seconds. Valid range: 120 seconds to 1200 seconds. Read about initial waiting time.", + "default": 300, + "min": 120, + "max": 1200, + "order": 1 + }, + "server_time_zone": { + "type": "string", + "title": "Configured server timezone for the MySQL source (Advanced)", + "description": "Enter the configured MySQL server timezone. This should only be done if the configured timezone in your MySQL instance does not conform to IANNA standard.", + "order": 2 + } + } + } ] + }, + "tunnel_method": { + "type": "object", + "title": "SSH Tunnel Method", + "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", + "oneOf": [ { + "title": "No Tunnel", + "required": [ "tunnel_method" ], + "properties": { + "tunnel_method": { + "description": "No ssh tunnel needed to connect to database", + "type": "string", + "const": "NO_TUNNEL", + "order": 0 + } + } + }, { + "title": "SSH Key Authentication", + "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [ "22" ], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host.", + "type": "string", + "order": 3 + }, + "ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + }, { + "title": "Password Authentication", + "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [ "22" ], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host", + "type": "string", + "order": 3 + }, + "tunnel_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 4 + } + } + } ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": [ "${host}", "${tunnel_method.tunnel_host}" ] + } + }, { + "sourceDefinitionId": "4a961f66-5e99-4430-8320-a73afe52f7a2", + "name": "n8n", + "dockerRepository": "airbyte/source-n8n", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/n8n", + "icon": "n8n.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/n8n", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "N8n Spec", + "type": "object", + "required": [ "host", "api_key" ], + "additionalProperties": true, + "properties": { + "host": { + "type": "string", + "description": "Hostname of the n8n instance" + }, + "api_key": { + "type": "string", + "description": "Your API KEY. See here" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "1a8667d7-7978-43cd-ba4d-d32cbd478971", + "name": "NASA", + "dockerRepository": "airbyte/source-nasa", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/nasa", + "icon": "nasa.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/nasa-apod", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "NASA spec", + "type": "object", + "required": [ "api_key" ], + "properties": { + "api_key": { + "type": "string", + "description": "API access key used to retrieve data from the NASA APOD API.", + "airbyte_secret": true + }, + "concept_tags": { + "type": "boolean", + "default": false, + "description": "Indicates whether concept tags should be returned with the rest of the response. The concept tags are not necessarily included in the explanation, but rather derived from common search tags that are associated with the description text. (Better than just pure text search.) Defaults to False." + }, + "count": { + "type": "integer", + "minimum": 1, + "maximum": 100, + "description": "A positive integer, no greater than 100. If this is specified then `count` randomly chosen images will be returned in a JSON array. Cannot be used in conjunction with `date` or `start_date` and `end_date`." + }, + "start_date": { + "type": "string", + "description": "Indicates the start of a date range. All images in the range from `start_date` to `end_date` will be returned in a JSON array. Must be after 1995-06-16, the first day an APOD picture was posted. There are no images for tomorrow available through this API.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": [ "2022-10-20" ], + "format": "date" + }, + "end_date": { + "type": "string", + "description": "Indicates that end of a date range. If `start_date` is specified without an `end_date` then `end_date` defaults to the current date.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": [ "2022-10-20" ], + "format": "date" + }, + "thumbs": { + "type": "boolean", + "default": false, + "description": "Indicates whether the API should return a thumbnail image URL for video files. If set to True, the API returns URL of video thumbnail. If an APOD is not a video, this parameter is ignored." + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": [ "api.nasa.gov" ] + } + }, { + "sourceDefinitionId": "4f2f093d-ce44-4121-8118-9d13b7bfccd0", + "name": "Netsuite", + "dockerRepository": "airbyte/source-netsuite", + "dockerImageTag": "0.1.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/netsuite", + "icon": "netsuite.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Netsuite Spec", + "type": "object", + "required": [ "realm", "consumer_key", "consumer_secret", "token_key", "token_secret", "start_datetime" ], + "additionalProperties": true, + "properties": { + "realm": { + "type": "string", + "title": "Realm (Account Id)", + "description": "Netsuite realm e.g. 2344535, as for `production` or 2344535_SB1, as for the `sandbox`", + "order": 0, + "airbyte_secret": true + }, + "consumer_key": { + "type": "string", + "title": "Consumer Key", + "description": "Consumer key associated with your integration", + "order": 1, + "airbyte_secret": true + }, + "consumer_secret": { + "type": "string", + "title": "Consumer Secret", + "description": "Consumer secret associated with your integration", + "order": 2, + "airbyte_secret": true + }, + "token_key": { + "type": "string", + "title": "Token Key (Token Id)", + "description": "Access token key", + "order": 3, + "airbyte_secret": true + }, + "token_secret": { + "type": "string", + "title": "Token Secret", + "description": "Access token secret", + "order": 4, + "airbyte_secret": true + }, + "object_types": { + "type": "array", + "title": "Object Types", + "items": { + "type": "string" + }, + "description": "The API names of the Netsuite objects you want to sync. Setting this speeds up the connection setup process by limiting the number of schemas that need to be retrieved from Netsuite.", + "order": 5, + "examples": [ "customer", "salesorder", "etc" ], + "default": [ ] + }, + "start_datetime": { + "type": "string", + "title": "Start Date", + "description": "Starting point for your data replication, in format of \"YYYY-MM-DDTHH:mm:ssZ\"", + "order": 6, + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": [ "2017-01-25T00:00:00Z" ] + }, + "window_in_days": { + "type": "integer", + "title": "Window in Days", + "description": "The amount of days used to query the data with date chunks. Set smaller value, if you have lots of data.", + "order": 7, + "default": 30 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "df38991e-f35b-4af2-996d-36817f614587", + "name": "News API", + "dockerRepository": "airbyte/source-news-api", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/news-api", + "icon": "newsapi.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/news-api", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "News Api Spec", + "type": "object", + "required": [ "api_key", "country", "category", "sort_by" ], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "description": "API Key", + "airbyte_secret": true, + "order": 0 + }, + "search_query": { + "type": "string", + "description": "Search query. See https://newsapi.org/docs/endpoints/everything for \ninformation.\n", + "examples": [ "+bitcoin OR +crypto", "sunak AND (truss OR johnson)" ], + "order": 1 + }, + "search_in": { + "type": "array", + "description": "Where to apply search query. Possible values are: title, description,\ncontent.\n", + "items": { + "type": "string", + "enum": [ "title", "description", "content" ] + }, + "order": 2 + }, + "sources": { + "type": "array", + "description": "Identifiers (maximum 20) for the news sources or blogs you want\nheadlines from. Use the `/sources` endpoint to locate these\nprogrammatically or look at the sources index:\nhttps://newsapi.com/sources. Will override both country and category.\n", + "items": { + "type": "string" + }, + "order": 3 + }, + "domains": { + "type": "array", + "description": "A comma-seperated string of domains (eg bbc.co.uk, techcrunch.com,\nengadget.com) to restrict the search to.\n", + "items": { + "type": "string" + }, + "order": 4 + }, + "exclude_domains": { + "type": "array", + "description": "A comma-seperated string of domains (eg bbc.co.uk, techcrunch.com,\nengadget.com) to remove from the results.\n", + "items": { + "type": "string" + }, + "order": 5 + }, + "start_date": { + "type": "string", + "description": "A date and optional time for the oldest article allowed. This should\nbe in ISO 8601 format (e.g. 2021-01-01 or 2021-01-01T12:00:00).\n", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}(T[0-9]{2}:[0-9]{2}:[0-9]{2})?$", + "order": 6 + }, + "end_date": { + "type": "string", + "description": "A date and optional time for the newest article allowed. This should\nbe in ISO 8601 format (e.g. 2021-01-01 or 2021-01-01T12:00:00).\n", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}(T[0-9]{2}:[0-9]{2}:[0-9]{2})?$", + "order": 7 + }, + "language": { + "type": "string", + "description": "The 2-letter ISO-639-1 code of the language you want to get headlines\nfor. Possible options: ar de en es fr he it nl no pt ru se ud zh.\n", + "enum": [ "ar", "de", "en", "es", "fr", "he", "it", "nl", false, "pt", "ru", "se", "ud", "zh" ], + "order": 8 + }, + "country": { + "type": "string", + "description": "The 2-letter ISO 3166-1 code of the country you want to get headlines\nfor. You can't mix this with the sources parameter.\n", + "enum": [ "ae", "ar", "at", "au", "be", "bg", "br", "ca", "ch", "cn", "co", "cu", "cz", "de", "eg", "fr", "gb", "gr", "hk", "hu", "id", "ie", "il", "in", "it", "jp", "kr", "lt", "lv", "ma", "mx", "my", "ng", "nl", false, "nz", "ph", "pl", "pt", "ro", "rs", "ru", "sa", "se", "sg", "si", "sk", "th", "tr", "tw", "ua", "us", "ve", "za" ], + "default": "us", + "order": 9 + }, + "category": { + "type": "string", + "description": "The category you want to get top headlines for.", + "enum": [ "business", "entertainment", "general", "health", "science", "sports", "technology" ], + "default": "business", + "order": 10 + }, + "sort_by": { + "type": "string", + "description": "The order to sort the articles in. Possible options: relevancy,\npopularity, publishedAt.\n", + "enum": [ "relevancy", "popularity", "publishedAt" ], + "default": "publishedAt", + "order": 11 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "60bd11d8-2632-4daa-a688-b47336d32093", + "name": "Newsdata", + "dockerRepository": "airbyte/source-newsdata", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/newsdata", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/newsdata", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Newsdata Spec", + "type": "object", + "required": [ "api_key" ], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "description": "API Key", + "airbyte_secret": true, + "order": 0 + }, + "OneOf": { + "query": { + "type": "string", + "description": "Keywords or phrases to search for in the news title and content. Advanced Search options:\n - Search `Social`: query = \"social\"\n - Search `Social Pizza`: query = \"social pizza\"\n - Search `Social` but not with `pizza`: query = \"social -pizza\"\n - Search `Social` but not with `pizza` and `wildfire`: query = \"social -pizza -wildfire\"\n - Search `Social` and `pizza`: query = \"social AND pizza\"\n - Search `Social` and `pizza` and `pasta`: query = \"social AND pizza AND pasta\"\n - Search `Social` or `pizza`: query = \"social OR pizza\"\n - Search `Social` or `pizza` but not `pasta`: query = \"social OR pizza -pasta\"\n - Search `Social` or `pizza` or `pasta`: query = \"social OR pizza OR pasta\"\nNote: You can't use AND and OR in the same query.", + "order": 1 + }, + "query_in_title": { + "type": "string", + "description": "Same as `query`, but restricting the search to only the news title. It cannot be used along with `query`.", + "order": 1 + } + }, + "domain": { + "type": "array", + "description": "Domains (maximum 5) to restrict the search to. Use the sources stream to find top sources id.", + "maxitems": 5, + "items": { + "type": "string" + }, + "order": 2 + }, + "country": { + "type": "array", + "description": "2-letter ISO 3166-1 countries (maximum 5) to restrict the search to.", + "maxitems": 5, + "order": 3, + "items": { + "type": "string", + "enum": [ "ar", "au", "at", "bd", "by", "be", "br", "bg", "ca", "cl", "cn", "co", "cr", "cu", "cz", "dk", "do", "ec", "eg", "ee", "et", "fi", "fr", "de", "gr", "hk", "hu", "in", "id", "iq", "ie", "il", "it", "jp", "kz", "kw", "lv", "lb", "lt", "my", "mx", "ma", "mm", "nl", "nz", "ng", "kp", "no", "pk", "pe", "ph", "pl", "pt", "pr", "ro", "ru", "sa", "rs", "sg", "sk", "si", "za", "kr", "es", "se", "ch", "tw", "tz", "th", "tr", "ua", "ae", "gb", "us", "ve", "vi" ] + } + }, + "category": { + "type": "array", + "description": "Categories (maximum 5) to restrict the search to.", + "maxitems": 5, + "order": 4, + "items": { + "type": "string", + "enum": [ "business", "entertainment", "environment", "food", "health", "politics", "science", "sports", "technology", "top", "world" ] + } + }, + "language": { + "type": "array", + "description": "Languages (maximum 5) to restrict the search to.", + "maxitems": 5, + "order": 5, + "items": { + "type": "string", + "enum": [ "be", "am", "ar", "bn", "bs", "bg", "my", "ckb", "zh", "hr", "cs", "da", "nl", "en", "et", "fi", "fr", "de", "el", "he", "hi", "hu", "in", "it", "jp", "ko", "lv", "lt", "ms", "no", "pl", "pt", "ro", "ru", "sr", "sk", "sl", "es", "sw", "sv", "th", "tr", "uk", "ur", "vi" ] + } + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "6e00b415-b02e-4160-bf02-58176a0ae687", + "name": "Notion", + "dockerRepository": "airbyte/source-notion", + "dockerImageTag": "1.0.4", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/notion", + "icon": "notion.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/notion", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Notion Source Spec", + "type": "object", + "required": [ "start_date" ], + "properties": { + "start_date": { + "title": "Start Date", + "description": "UTC date and time in the format 2017-01-25T00:00:00.000Z. Any data before this date will not be replicated.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}Z$", + "examples": [ "2020-11-16T00:00:00.000Z" ], + "type": "string", + "format": "date-time" + }, + "credentials": { + "title": "Authenticate using", + "description": "Pick an authentication method.", + "type": "object", + "order": 1, + "oneOf": [ { + "type": "object", + "title": "OAuth2.0", + "required": [ "auth_type", "client_id", "client_secret", "access_token" ], + "properties": { + "auth_type": { + "type": "string", + "const": "OAuth2.0" + }, + "client_id": { + "title": "Client ID", + "type": "string", + "description": "The ClientID of your Notion integration.", + "airbyte_secret": true + }, + "client_secret": { + "title": "Client Secret", + "type": "string", + "description": "The ClientSecret of your Notion integration.", + "airbyte_secret": true + }, + "access_token": { + "title": "Access Token", + "type": "string", + "description": "Access Token is a token you received by complete the OauthWebFlow of Notion.", + "airbyte_secret": true + } + } + }, { + "type": "object", + "title": "Access Token", + "required": [ "auth_type", "token" ], + "properties": { + "auth_type": { + "type": "string", + "const": "token" + }, + "token": { + "title": "Access Token", + "description": "Notion API access token, see the docs for more information on how to obtain this token.", + "type": "string", + "airbyte_secret": true + } + } + } ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": [ "credentials", "0" ], + "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], + "oauthFlowOutputParameters": [ [ "access_token" ] ] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "api.notion.com" ] + } + }, { + "sourceDefinitionId": "0fae6a9a-04eb-44d4-96e1-e02d3dbc1d83", + "name": "New York Times", + "dockerRepository": "airbyte/source-nytimes", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/nytimes", + "icon": "nytimes.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/nytimes", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Nytimes Spec", + "type": "object", + "required": [ "api_key", "start_date", "period" ], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "title": "API Key", + "description": "API Key", + "airbyte_secret": true, + "order": 0 + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "Start date to begin the article retrieval (format YYYY-MM)", + "pattern": "^[0-9]{4}-[0-9]{2}$", + "examples": [ "2022-08", "1851-01" ], + "format": "date", + "order": 1 + }, + "end_date": { + "type": "string", + "title": "End Date", + "description": "End date to stop the article retrieval (format YYYY-MM)", + "pattern": "^[0-9]{4}-[0-9]{2}$", + "examples": [ "2022-08", "1851-01" ], + "format": "date", + "order": 2 + }, + "period": { + "type": "integer", + "title": "Period (used for Most Popular streams)", + "description": "Period of time (in days)", + "order": 3, + "enum": [ 1, 7, 30 ] + }, + "share_type": { + "type": "string", + "title": "Share Type (used for Most Popular Shared stream)", + "description": "Share Type", + "order": 4, + "enum": [ "facebook" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "1d4fdb25-64fc-4569-92da-fcdca79a8372", + "name": "Okta", + "dockerRepository": "airbyte/source-okta", + "dockerImageTag": "0.1.14", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/okta", + "icon": "okta.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/okta", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Okta Spec", + "type": "object", + "required": [ ], + "additionalProperties": true, + "properties": { + "domain": { + "type": "string", + "title": "Okta domain", + "description": "The Okta domain. See the docs for instructions on how to find it.", + "airbyte_secret": false + }, + "start_date": { + "type": "string", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "description": "UTC date and time in the format YYYY-MM-DDTHH:MM:SSZ. Any data before this date will not be replicated.", + "examples": [ "2022-07-22T00:00:00Z" ], + "title": "Start Date" + }, + "credentials": { + "title": "Authorization Method", + "type": "object", + "oneOf": [ { + "type": "object", + "title": "OAuth2.0", + "required": [ "auth_type", "client_id", "client_secret", "refresh_token" ], + "properties": { + "auth_type": { + "type": "string", + "const": "oauth2.0", + "order": 0 + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "The Client ID of your OAuth application.", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "The Client Secret of your OAuth application.", + "airbyte_secret": true + }, + "refresh_token": { + "type": "string", + "title": "Refresh Token", + "description": "Refresh Token to obtain new Access Token, when it's expired.", + "airbyte_secret": true + } + } + }, { + "type": "object", + "title": "API Token", + "required": [ "auth_type", "api_token" ], + "properties": { + "auth_type": { + "type": "string", + "const": "api_token", + "order": 0 + }, + "api_token": { + "type": "string", + "title": "Personal API Token", + "description": "An Okta token. See the docs for instructions on how to generate it.", + "airbyte_secret": true + } + } + } ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "e7f0c5e2-4815-48c4-90cf-f47124209835", + "name": "Omnisend", + "dockerRepository": "airbyte/source-omnisend", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/omnisend", + "icon": "omnisend.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/omnisend", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Omnisend Spec", + "type": "object", + "required": [ "api_key" ], + "additionalProperties": true, + "properties": { + "api_key": { + "title": "API Key", + "type": "string", + "description": "API Key", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "bb6afd81-87d5-47e3-97c4-e2c2901b1cf8", + "name": "OneSignal", + "dockerRepository": "airbyte/source-onesignal", + "dockerImageTag": "1.0.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/onesignal", + "icon": "onesignal.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/onesignal", + "connectionSpecification": { + "$schema": "https://json-schema.org/draft-07/schema#", + "title": "OneSignal Source Spec", + "type": "object", + "required": [ "user_auth_key", "start_date", "outcome_names", "applications" ], + "additionalProperties": true, + "properties": { + "user_auth_key": { + "type": "string", + "title": "User Auth Key", + "description": "OneSignal User Auth Key, see the docs for more information on how to obtain this key.", + "airbyte_secret": true, + "order": 0 + }, + "applications": { + "type": "array", + "title": "Applications", + "description": "Applications keys, see the docs for more information on how to obtain this data", + "items": { + "type": "object", + "properties": { + "app_name": { + "type": "string", + "title": "OneSignal App Name", + "order": 0 + }, + "app_id": { + "type": "string", + "title": "OneSignal App ID", + "order": 1, + "airbyte_secret": true + }, + "app_api_key": { + "type": "string", + "title": "REST API Key", + "order": 2, + "airbyte_secret": true + } + }, + "required": [ "app_id", "app_api_key" ] + }, + "order": 1 + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "The date from which you'd like to replicate data for OneSignal API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", + "examples": [ "2020-11-16T00:00:00Z" ], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "format": "date-time", + "order": 2 + }, + "outcome_names": { + "type": "string", + "title": "Outcome Names", + "description": "Comma-separated list of names and the value (sum/count) for the returned outcome data. See the docs for more details", + "examples": [ "os__session_duration.count,os__click.count,CustomOutcomeName.sum" ], + "order": 3 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "77d5ca6b-d345-4dce-ba1e-1935a75778b8", + "name": "Open Exchange Rates", + "dockerRepository": "airbyte/source-open-exchange-rates", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/open-exchange-rates", + "icon": "airbyte.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/openexchangesrates", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Open Exchange Rates Spec", + "type": "object", + "required": [ "app_id", "start_date" ], + "properties": { + "app_id": { + "type": "string", + "description": "App ID provided by Open Exchange Rates", + "airbyte_secret": true + }, + "start_date": { + "type": "string", + "description": "Start getting data from that date.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": [ "YYYY-MM-DD" ] + }, + "base": { + "type": "string", + "description": "Change base currency (3-letter code, default is USD - only modifiable in paid plans)", + "examples": [ "EUR", "USD" ], + "default": "USD" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "d8540a80-6120-485d-b7d6-272bca477d9b", + "name": "OpenWeather", + "dockerRepository": "airbyte/source-openweather", + "dockerImageTag": "0.1.6", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/openweather", + "icon": "openweather.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Open Weather Spec", + "type": "object", + "required": [ "appid", "lat", "lon" ], + "additionalProperties": true, + "properties": { + "lat": { + "title": "Latitude", + "type": "string", + "pattern": "^[-]?\\d{1,2}(\\.\\d+)?$", + "examples": [ "45.7603", "-21.249107858038816" ], + "description": "Latitude for which you want to get weather condition from. (min -90, max 90)" + }, + "lon": { + "title": "Longitude", + "type": "string", + "pattern": "^[-]?\\d{1,3}(\\.\\d+)?$", + "examples": [ "4.835659", "-70.39482074115321" ], + "description": "Longitude for which you want to get weather condition from. (min -180, max 180)" + }, + "appid": { + "title": "App ID", + "type": "string", + "description": "Your OpenWeather API Key. See here. The key is case sensitive.", + "airbyte_secret": true + }, + "units": { + "title": "Units", + "type": "string", + "description": "Units of measurement. standard, metric and imperial units are available. If you do not use the units parameter, standard units will be applied by default.", + "enum": [ "standard", "metric", "imperial" ], + "examples": [ "standard", "metric", "imperial" ] + }, + "lang": { + "title": "Language", + "type": "string", + "description": "You can use lang parameter to get the output in your language. The contents of the description field will be translated. See here for the list of supported languages.", + "enum": [ "af", "al", "ar", "az", "bg", "ca", "cz", "da", "de", "el", "en", "eu", "fa", "fi", "fr", "gl", "he", "hi", "hr", "hu", "id", "it", "ja", "kr", "la", "lt", "mk", "no", "nl", "pl", "pt", "pt_br", "ro", "ru", "sv", "se", "sk", "sl", "sp", "es", "sr", "th", "tr", "ua", "uk", "vi", "zh_cn", "zh_tw", "zu" ], + "examples": [ "en", "fr", "pt_br", "uk", "zh_cn", "zh_tw" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "06bdb480-2598-40b8-8b0f-fc2e2d2abdda", + "name": "Opsgenie", + "dockerRepository": "airbyte/source-opsgenie", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/opsgenie", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Opsgenie Spec", + "type": "object", + "required": [ "api_token", "endpoint" ], + "additionalProperties": true, + "properties": { + "api_token": { + "type": "string", + "description": "API token used to access the Opsgenie platform", + "airbyte_secret": true + }, + "endpoint": { + "type": "string", + "description": "Service endpoint to use for API calls.", + "examples": [ "api.opsgenie.com", "api.eu.opsgenie.com" ], + "default": "api.opsgenie.com" + }, + "start_date": { + "type": "string", + "description": "The date from which you'd like to replicate data from Opsgenie in the format of YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated. Note that it will be used only in the following incremental streams: issues.", + "examples": [ "2022-07-01T00:00:00Z" ], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "b39a7370-74c3-45a6-ac3a-380d48520a83", + "name": "Oracle DB", + "dockerRepository": "airbyte/source-oracle", + "dockerImageTag": "0.3.24", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/oracle", + "icon": "oracle.svg", + "sourceType": "database", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/oracle", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Oracle Source Spec", + "type": "object", + "required": [ "host", "port", "username" ], + "properties": { + "host": { + "title": "Host", + "description": "Hostname of the database.", + "type": "string", + "order": 1 + }, + "port": { + "title": "Port", + "description": "Port of the database.\nOracle Corporations recommends the following port numbers:\n1521 - Default listening port for client connections to the listener. \n2484 - Recommended and officially registered listening port for client connections to the listener using TCP/IP with SSL", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 1521, + "order": 2 + }, + "connection_data": { + "title": "Connect by", + "type": "object", + "description": "Connect data that will be used for DB connection", + "order": 3, + "oneOf": [ { + "title": "Service name", + "description": "Use service name", + "required": [ "service_name" ], + "properties": { + "connection_type": { + "type": "string", + "const": "service_name", + "order": 0 + }, + "service_name": { + "title": "Service name", + "type": "string", + "order": 1 + } + } + }, { + "title": "System ID (SID)", + "description": "Use SID (Oracle System Identifier)", + "required": [ "sid" ], + "properties": { + "connection_type": { + "type": "string", + "const": "sid", + "order": 0 + }, + "sid": { + "title": "System ID (SID)", + "type": "string", + "order": 1 + } + } + } ] + }, + "username": { + "title": "User", + "description": "The username which is used to access the database.", + "type": "string", + "order": 4 + }, + "password": { + "title": "Password", + "description": "The password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 5 + }, + "schemas": { + "title": "Schemas", + "description": "The list of schemas to sync from. Defaults to user. Case sensitive.", + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1, + "uniqueItems": true, + "order": 6 + }, + "jdbc_url_params": { + "title": "JDBC URL Params", + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", + "type": "string", + "order": 7 + }, + "encryption": { + "title": "Encryption", + "type": "object", + "description": "The encryption method with is used when communicating with the database.", + "order": 8, + "oneOf": [ { + "title": "Unencrypted", + "description": "Data transfer will not be encrypted.", + "required": [ "encryption_method" ], + "properties": { + "encryption_method": { + "type": "string", + "const": "unencrypted" + } + } + }, { + "title": "Native Network Encryption (NNE)", + "description": "The native network encryption gives you the ability to encrypt database connections, without the configuration overhead of TCP/IP and SSL/TLS and without the need to open and listen on different ports.", + "required": [ "encryption_method" ], + "properties": { + "encryption_method": { + "type": "string", + "const": "client_nne" + }, + "encryption_algorithm": { + "type": "string", + "description": "This parameter defines what encryption algorithm is used.", + "title": "Encryption Algorithm", + "default": "AES256", + "enum": [ "AES256", "RC4_56", "3DES168" ] + } + } + }, { + "title": "TLS Encrypted (verify certificate)", + "description": "Verify and use the certificate provided by the server.", + "required": [ "encryption_method", "ssl_certificate" ], + "properties": { + "encryption_method": { + "type": "string", + "const": "encrypted_verify_certificate" + }, + "ssl_certificate": { + "title": "SSL PEM File", + "description": "Privacy Enhanced Mail (PEM) files are concatenated certificate containers frequently used in certificate installations.", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + } ] + }, + "tunnel_method": { + "type": "object", + "title": "SSH Tunnel Method", + "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", + "oneOf": [ { + "title": "No Tunnel", + "required": [ "tunnel_method" ], + "properties": { + "tunnel_method": { + "description": "No ssh tunnel needed to connect to database", + "type": "string", + "const": "NO_TUNNEL", + "order": 0 + } + } + }, { + "title": "SSH Key Authentication", + "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [ "22" ], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host.", + "type": "string", + "order": 3 + }, + "ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + }, { + "title": "Password Authentication", + "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [ "22" ], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host", + "type": "string", + "order": 3 + }, + "tunnel_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 4 + } + } + } ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": [ "${host}", "${tunnel_method.tunnel_host}" ] + } + }, { + "sourceDefinitionId": "7f0455fb-4518-4ec0-b7a3-d808bf8081cc", + "name": "Orb", + "dockerRepository": "airbyte/source-orb", + "dockerImageTag": "1.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/orb", + "icon": "orb.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.withorb.com/", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Orb Spec", + "type": "object", + "required": [ "api_key", "start_date" ], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "title": "Orb API Key", + "description": "Orb API Key, issued from the Orb admin console.", + "airbyte_secret": true, + "order": 1 + }, + "start_date": { + "type": "string", + "title": "Start Date", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "description": "UTC date and time in the format 2022-03-01T00:00:00Z. Any data with created_at before this data will not be synced. For Subscription Usage, this becomes the `timeframe_start` API parameter.", + "examples": [ "2022-03-01T00:00:00Z" ], + "order": 2 + }, + "lookback_window_days": { + "type": "integer", + "title": "Lookback Window (in days)", + "default": 0, + "minimum": 0, + "description": "When set to N, the connector will always refresh resources created within the past N days. By default, updated objects that are not newly created are not incrementally synced.", + "order": 3 + }, + "string_event_properties_keys": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Event properties keys (string values)", + "description": "Property key names to extract from all events, in order to enrich ledger entries corresponding to an event deduction.", + "order": 4 + }, + "numeric_event_properties_keys": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Event properties keys (numeric values)", + "description": "Property key names to extract from all events, in order to enrich ledger entries corresponding to an event deduction.", + "order": 5 + }, + "subscription_usage_grouping_key": { + "type": "string", + "title": "Subscription usage grouping key (string value)", + "description": "Property key name to group subscription usage by." + }, + "plan_id": { + "type": "string", + "title": "Orb Plan ID for Subscription Usage (string value)", + "description": "Orb Plan ID to filter subscriptions that should have usage fetched." + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "95bcc041-1d1a-4c2e-8802-0ca5b1bfa36a", + "name": "Orbit", + "dockerRepository": "airbyte/source-orbit", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/orbit", + "icon": "orbit.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/orbit", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Orbit Source Spec", + "type": "object", + "required": [ "api_token", "workspace" ], + "additionalProperties": false, + "properties": { + "api_token": { + "type": "string", + "airbyte_secret": true, + "title": "API Token", + "description": "Authorizes you to work with Orbit workspaces associated with the token.", + "order": 0 + }, + "workspace": { + "type": "string", + "title": "Workspace", + "description": "The unique name of the workspace that your API token is associated with.", + "order": 1 + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "Date in the format 2022-06-26. Only load members whose last activities are after this date.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "order": 2 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "2bf6c581-bec5-4e32-891d-de33036bd631", + "name": "Oura", + "dockerRepository": "airbyte/source-oura", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/oura", + "icon": "oura.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Oura Spec", + "type": "object", + "required": [ "api_key" ], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "description": "API Key", + "airbyte_secret": true, + "order": 0 + }, + "start_datetime": { + "type": "string", + "description": "Start datetime to sync from. Default is current UTC datetime minus 1\nday.\n", + "pattern": "^(-?(?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(Z|[+-](?:2[0-3]|[01][0-9]):[0-5][0-9])?$", + "order": 1 + }, + "end_datetime": { + "type": "string", + "description": "End datetime to sync until. Default is current UTC datetime.", + "pattern": "^(-?(?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(Z|[+-](?:2[0-3]|[01][0-9]):[0-5][0-9])?$", + "order": 2 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "3490c201-5d95-4783-b600-eaf07a4c7787", + "name": "Outreach", + "dockerRepository": "airbyte/source-outreach", + "dockerImageTag": "0.2.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/outreach", + "icon": "outreach.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/outreach", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Source Outreach Spec", + "type": "object", + "required": [ "client_id", "client_secret", "refresh_token", "redirect_uri", "start_date" ], + "additionalProperties": true, + "properties": { + "client_id": { + "type": "string", + "title": "Client ID", + "description": "The Client ID of your Outreach developer application." + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "The Client Secret of your Outreach developer application.", + "airbyte_secret": true + }, + "refresh_token": { + "type": "string", + "title": "Refresh Token", + "description": "The token for obtaining the new access token.", + "airbyte_secret": true + }, + "redirect_uri": { + "type": "string", + "title": "Redirect URI", + "description": "A Redirect URI is the location where the authorization server sends the user once the app has been successfully authorized and granted an authorization code or access token." + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "The date from which you'd like to replicate data for Outreach API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", + "examples": [ "2020-11-16T00:00:00Z" ], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "ad15c7ba-72a7-440b-af15-b9a963dc1a8a", + "name": "Pardot", + "dockerRepository": "airbyte/source-pardot", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/pardot", + "icon": "salesforcepardot.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/pardot", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Pardot Spec", + "type": "object", + "required": [ "pardot_business_unit_id", "client_id", "client_secret", "refresh_token" ], + "additionalProperties": false, + "properties": { + "pardot_business_unit_id": { + "description": "Pardot Business ID, can be found at Setup > Pardot > Pardot Account Setup", + "type": "string" + }, + "client_id": { + "description": "The Consumer Key that can be found when viewing your app in Salesforce", + "type": "string", + "airbyte_secret": true + }, + "client_secret": { + "description": "The Consumer Secret that can be found when viewing your app in Salesforce", + "type": "string", + "airbyte_secret": true + }, + "refresh_token": { + "description": "Salesforce Refresh Token used for Airbyte to access your Salesforce account. If you don't know what this is, follow this guide to retrieve it.", + "type": "string", + "airbyte_secret": true + }, + "start_date": { + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated. Leave blank to skip this filter", + "type": "string", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "default": null, + "examples": [ "2021-07-25T00:00:00Z" ] + }, + "is_sandbox": { + "description": "Whether or not the the app is in a Salesforce sandbox. If you do not know what this, assume it is false.", + "type": "boolean", + "default": false + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "2817b3f0-04e4-4c7a-9f32-7a5e8a83db95", + "name": "PagerDuty", + "dockerRepository": "farosai/airbyte-pagerduty-source", + "dockerImageTag": "0.1.23", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/pagerduty", + "icon": "pagerduty.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.faros.ai", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "PagerDuty Spec", + "type": "object", + "required": [ "token" ], + "additionalProperties": false, + "properties": { + "token": { + "type": "string", + "title": "PagerDuty API key", + "airbyte_secret": true + }, + "pageSize": { + "type": "number", + "minimum": 1, + "maximum": 25, + "default": 25, + "title": "Page Size", + "description": "page size to use when querying PagerDuty API" + }, + "cutoffDays": { + "type": "number", + "minimum": 1, + "default": 90, + "title": "Cutoff Days", + "description": "fetch pipelines updated in the last number of days" + }, + "incidentLogEntriesOverview": { + "type": "boolean", + "title": "Incident Log Entries Overview", + "description": "If true, will return a subset of log entries that show only the most important changes to the incident.", + "default": true + }, + "defaultSeverity": { + "type": "string", + "title": "Severity category", + "description": "A default severity category if not present", + "examples": [ "Sev1", "Sev2", "Sev3", "Sev4", "Sev5", "Custom" ], + "pattern": "^(Sev[0-5])?(Custom)?$" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "d30fb809-6456-484d-8e2c-ee12e0f6888d", + "name": "PartnerStack", + "dockerRepository": "airbyte/source-partnerstack", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/partnerstack", + "icon": "partnerstack.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/partnerstack", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Partnerstack Spec", + "type": "object", + "required": [ "public_key", "private_key" ], + "additionalProperties": true, + "properties": { + "public_key": { + "type": "string", + "title": "Partnerstack Public key", + "description": "The Live Public Key for a Partnerstack account.", + "airbyte_secret": true + }, + "private_key": { + "type": "string", + "title": "Partnerstack Private key", + "description": "The Live Private Key for a Partnerstack account.", + "airbyte_secret": true + }, + "start_date": { + "type": "string", + "title": "Start date", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", + "examples": [ "2017-01-25T00:00:00Z" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "d913b0f2-cc51-4e55-a44c-8ba1697b9239", + "name": "Paypal Transaction", + "dockerRepository": "airbyte/source-paypal-transaction", + "dockerImageTag": "0.1.12", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/paypal-transaction", + "icon": "paypal.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/paypal-transactions", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Paypal Transaction Search", + "type": "object", + "required": [ "start_date", "is_sandbox" ], + "additionalProperties": true, + "properties": { + "client_id": { + "type": "string", + "title": "Client ID", + "description": "The Client ID of your Paypal developer application.", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "title": "Client secret", + "description": "The Client Secret of your Paypal developer application.", + "airbyte_secret": true + }, + "refresh_token": { + "type": "string", + "title": "Refresh token", + "description": "The key to refresh the expired access token.", + "airbyte_secret": true + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "Start Date for data extraction in ISO format. Date must be in range from 3 years till 12 hrs before present time.", + "examples": [ "2021-06-11T23:59:59-00:00" ], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}[+-][0-9]{2}:[0-9]{2}$" + }, + "is_sandbox": { + "title": "Sandbox", + "description": "Determines whether to use the sandbox or production environment.", + "type": "boolean", + "default": false + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "api-m.paypal.com", "api-m.sandbox.paypal.com" ] + } + }, { + "sourceDefinitionId": "193bdcb8-1dd9-48d1-aade-91cadfd74f9b", + "name": "Paystack", + "dockerRepository": "airbyte/source-paystack", + "dockerImageTag": "0.1.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/paystack", + "icon": "paystack.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/paystack", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Paystack Source Spec", + "type": "object", + "required": [ "secret_key", "start_date" ], + "additionalProperties": true, + "properties": { + "secret_key": { + "type": "string", + "title": "Secret Key", + "pattern": "^(s|r)k_(live|test)_[a-zA-Z0-9]+$", + "description": "The Paystack API key (usually starts with 'sk_live_'; find yours here).", + "airbyte_secret": true + }, + "start_date": { + "type": "string", + "title": "Start Date", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", + "examples": [ "2017-01-25T00:00:00Z" ], + "format": "date-time" + }, + "lookback_window_days": { + "type": "integer", + "title": "Lookback Window (in days)", + "default": 0, + "minimum": 0, + "description": "When set, the connector will always reload data from the past N days, where N is the value set here. This is useful if your data is updated after creation." + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": [ "api.paystack.co" ] + } + }, { + "sourceDefinitionId": "b1ccb590-e84f-46c0-83a0-2048ccfffdae", + "name": "Pendo", + "dockerRepository": "airbyte/source-pendo", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/pendo", + "icon": "pendo.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/pendo", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "required": [ "api_key" ], + "properties": { + "api_key": { + "type": "string", + "title": "API Key", + "airbyte_secret": true + } + }, + "additionalProperties": true + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "3052c77e-8b91-47e2-97a0-a29a22794b4b", + "name": "PersistIq", + "dockerRepository": "airbyte/source-persistiq", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/persistiq", + "icon": "persistiq.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/persistiq", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Persistiq Spec", + "type": "object", + "required": [ "api_key" ], + "additionalProperties": false, + "properties": { + "api_key": { + "type": "string", + "description": "PersistIq API Key. See the docs for more information on where to find that key.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "69d9eb65-8026-47dc-baf1-e4bf67901fd6", + "name": "Pexels API", + "dockerRepository": "airbyte/source-pexels-api", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/pexels-api", + "icon": "pexels.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/pexels-api", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Pexel API Spec", + "type": "object", + "required": [ "api_key", "query" ], + "additionalProperties": true, + "properties": { + "api_key": { + "title": "API Key from the pexels website", + "type": "string", + "description": "API key is required to access pexels api, For getting your's goto https://www.pexels.com/api/documentation and create account for free.", + "airbyte_secret": true + }, + "query": { + "title": "Specific query for the search", + "type": "string", + "description": "Optional, the search query, Example Ocean, Tigers, Pears, etc.", + "examples": [ "people", "oceans" ] + }, + "orientation": { + "title": "Specific orientation for the search", + "type": "string", + "description": "Optional, Desired photo orientation. The current supported orientations are landscape, portrait or square", + "examples": [ "square", "landscape" ] + }, + "size": { + "title": "Specific size for the search", + "type": "string", + "description": "Optional, Minimum photo size. The current supported sizes are large(24MP), medium(12MP) or small(4MP).", + "examples": [ "large", "small" ] + }, + "color": { + "title": "Specific color for the search", + "type": "string", + "description": "Optional, Desired photo color. Supported colors red, orange, yellow, green, turquoise, blue, violet, pink, brown, black, gray, white or any hexidecimal color code.", + "examples": [ "red", "orange" ] + }, + "locale": { + "title": "Specific locale for the search", + "type": "string", + "description": "Optional, The locale of the search you are performing. The current supported locales are 'en-US' 'pt-BR' 'es-ES' 'ca-ES' 'de-DE' 'it-IT' 'fr-FR' 'sv-SE' 'id-ID' 'pl-PL' 'ja-JP' 'zh-TW' 'zh-CN' 'ko-KR' 'th-TH' 'nl-NL' 'hu-HU' 'vi-VN' 'cs-CZ' 'da-DK' 'fi-FI' 'uk-UA' 'el-GR' 'ro-RO' 'nb-NO' 'sk-SK' 'tr-TR' 'ru-RU'.", + "examples": [ "en-US", "pt-BR" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "5cb7e5fe-38c2-11ec-8d3d-0242ac130003", + "name": "Pinterest", + "dockerRepository": "airbyte/source-pinterest", + "dockerImageTag": "0.2.4", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/pinterest", + "icon": "pinterest.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/pinterest", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Pinterest Spec", + "type": "object", + "required": [ "start_date" ], + "additionalProperties": true, + "properties": { + "start_date": { + "type": "string", + "title": "Start Date", + "description": "A date in the format YYYY-MM-DD. If you have not set a date, it would be defaulted to latest allowed date by api (914 days from today).", + "examples": [ "2022-07-28" ] + }, + "status": { + "title": "Status", + "description": "Entity statuses based off of campaigns, ad_groups, and ads. If you do not have a status set, it will be ignored completely.", + "type": [ "array", "null" ], + "items": { + "type": "string", + "enum": [ "ACTIVE", "PAUSED", "ARCHIVED" ] + }, + "uniqueItems": true + }, + "credentials": { + "title": "Authorization Method", + "type": "object", + "oneOf": [ { + "type": "object", + "title": "OAuth2.0", + "required": [ "auth_method", "refresh_token" ], + "properties": { + "auth_method": { + "type": "string", + "const": "oauth2.0", + "order": 0 + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "The Client ID of your OAuth application", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "The Client Secret of your OAuth application.", + "airbyte_secret": true + }, + "refresh_token": { + "type": "string", + "title": "Refresh Token", + "description": "Refresh Token to obtain new Access Token, when it's expired.", + "airbyte_secret": true + } + } + }, { + "type": "object", + "title": "Access Token", + "required": [ "auth_method", "access_token" ], + "properties": { + "auth_method": { + "type": "string", + "const": "access_token", + "order": 0 + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "The Access Token to make authenticated requests.", + "airbyte_secret": true + } + } + } ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": [ "credentials", "auth_method" ], + "predicate_value": "oauth2.0", + "oauth_config_specification": { + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "refresh_token": { + "type": "string", + "path_in_connector_config": [ "credentials", "refresh_token" ] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_id" ] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_secret" ] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "api.pinterest.com" ] + } + }, { + "sourceDefinitionId": "d8286229-c680-4063-8c59-23b9b391c700", + "name": "Pipedrive", + "dockerRepository": "airbyte/source-pipedrive", + "dockerImageTag": "0.1.17", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/pipedrive", + "icon": "pipedrive.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/pipedrive", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Pipedrive Spec", + "type": "object", + "required": [ "replication_start_date" ], + "additionalProperties": true, + "properties": { + "authorization": { + "type": "object", + "title": "API Key Authentication", + "required": [ "auth_type", "api_token" ], + "properties": { + "auth_type": { + "type": "string", + "const": "Token", + "order": 0 + }, + "api_token": { + "title": "API Token", + "type": "string", + "description": "The Pipedrive API Token.", + "airbyte_secret": true + } + } + }, + "replication_start_date": { + "title": "Start Date", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated. When specified and not None, then stream will behave as incremental", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": [ "2017-01-25T00:00:00Z" ], + "type": "string", + "format": "date-time" + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": [ "api.pipedrive.com" ] + } + }, { + "sourceDefinitionId": "d60f5393-f99e-4310-8d05-b1876820f40e", + "name": "Pivotal Tracker", + "dockerRepository": "airbyte/source-pivotal-tracker", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/pivotal-tracker", + "icon": "pivotal-tracker.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Pivotal Tracker Spec", + "type": "object", + "required": [ "api_token" ], + "additionalProperties": false, + "properties": { + "api_token": { + "type": "string", + "description": "Pivotal Tracker API token", + "examples": [ "5c054d0de3440452190fdc5d5a04d871" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "ed799e2b-2158-4c66-8da4-b40fe63bc72a", + "name": "Plaid", + "dockerRepository": "airbyte/source-plaid", + "dockerImageTag": "0.3.2", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/plaid", + "icon": "plaid.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://plaid.com/docs/api/", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "required": [ "access_token", "api_key", "client_id", "plaid_env" ], + "additionalProperties": true, + "properties": { + "access_token": { + "type": "string", + "title": "Access Token", + "description": "The end-user's Link access token." + }, + "api_key": { + "title": "API Key", + "type": "string", + "description": "The Plaid API key to use to hit the API.", + "airbyte_secret": true + }, + "client_id": { + "title": "Client ID", + "type": "string", + "description": "The Plaid client id" + }, + "plaid_env": { + "title": "Plaid Environment", + "type": "string", + "enum": [ "sandbox", "development", "production" ], + "description": "The Plaid environment" + }, + "start_date": { + "title": "Start Date", + "type": "string", + "description": "The date from which you'd like to replicate data for Plaid in the format YYYY-MM-DD. All data generated after this date will be replicated.", + "examples": [ "2021-03-01" ], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "603ba446-3d75-41d7-92f3-aba901f8b897", + "name": "Plausible", + "dockerRepository": "airbyte/source-plausible", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/plausible", + "icon": "plausible.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/plausible", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Plausible Spec", + "type": "object", + "required": [ "api_key", "site_id" ], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "title": "Plausible API key", + "description": "Plausible API Key. See the docs for information on how to generate this key.", + "airbyte_secret": true + }, + "site_id": { + "type": "string", + "title": "Target website domain", + "description": "The domain of the site you want to retrieve data for. Enter the name of your site as configured on Plausible, i.e., excluding \"https://\" and \"www\". Can be retrieved from the 'domain' field in your Plausible site settings.", + "pattern": "^[A-Za-z0-9-.]+\\.[A-Z-a-z0-9-.]+", + "examples": [ "airbyte.com", "docs.airbyte.com" ] + }, + "start_date": { + "type": "string", + "title": "Data start date", + "description": "Start date for data to retrieve, in ISO-8601 format.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": [ "YYYY-MM-DD" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "b0dd65f1-081f-4731-9c51-38e9e6aa0ebf", + "name": "Pocket", + "dockerRepository": "airbyte/source-pocket", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/pocket", + "icon": "pocket.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/pocket", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Pocket Spec", + "type": "object", + "required": [ "consumer_key", "access_token" ], + "additionalProperties": true, + "properties": { + "consumer_key": { + "type": "string", + "title": "Consumer Key", + "description": "Your application's Consumer Key.", + "airbyte_secret": true, + "order": 0 + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "The user's Pocket access token.", + "airbyte_secret": true, + "order": 1 + }, + "state": { + "type": "string", + "title": "State", + "description": "Select the state of the items to retrieve.", + "order": 2, + "enum": [ "unread", "archive", "all" ] + }, + "favorite": { + "type": "boolean", + "title": "Is Favorite?", + "description": "Retrieve only favorited items.", + "default": false, + "order": 3 + }, + "tag": { + "type": "string", + "title": "Tag Name", + "description": "Return only items tagged with this tag name. Use _untagged_ for retrieving only untagged items.", + "order": 4 + }, + "content_type": { + "type": "string", + "title": "Content Type", + "description": "Select the content type of the items to retrieve.", + "order": 5, + "enum": [ "article", "video", "image" ] + }, + "sort": { + "type": "string", + "title": "Sort By", + "description": "Sort retrieved items by the given criteria.", + "order": 6, + "enum": [ "newest", "oldest", "title", "site" ] + }, + "detail_type": { + "type": "string", + "title": "Detail Type", + "description": "Select the granularity of the information about each item.", + "order": 7, + "enum": [ "simple", "complete" ] + }, + "search": { + "type": "string", + "title": "Search Query", + "description": "Only return items whose title or url contain the `search` string.", + "order": 8 + }, + "domain": { + "type": "string", + "title": "Domain", + "description": "Only return items from a particular `domain`.", + "order": 9 + }, + "since": { + "type": "string", + "title": "Since", + "description": "Only return items modified since the given timestamp.", + "pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}", + "examples": [ "2022-10-20 14:14:14" ], + "order": 10 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "6371b14b-bc68-4236-bfbd-468e8df8e968", + "name": "PokeAPI", + "dockerRepository": "airbyte/source-pokeapi", + "dockerImageTag": "0.1.5", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/pokeapi", + "icon": "pokeapi.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/pokeapi", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Pokeapi Spec", + "type": "object", + "required": [ "pokemon_name" ], + "additionalProperties": false, + "properties": { + "pokemon_name": { + "type": "string", + "title": "Pokemon Name", + "description": "Pokemon requested from the API.", + "pattern": "^[a-z0-9_\\-]+$", + "examples": [ "ditto", "luxray", "snorlax" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "5807d72f-0abc-49f9-8fa5-ae820007032b", + "name": "Polygon Stock API", + "dockerRepository": "airbyte/source-polygon-stock-api", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/polygon-stock-api", + "icon": "polygon.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/airtable", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Weather API Spec", + "type": "object", + "required": [ "apiKey", "stocksTicker", "multiplier", "timespan", "start_date", "end_date" ], + "additionalProperties": true, + "properties": { + "apiKey": { + "title": "API Key", + "type": "string", + "description": "Your API ACCESS Key", + "airbyte_secret": true + }, + "stocksTicker": { + "title": "Stock Ticker", + "type": "string", + "description": "The exchange symbol that this item is traded under.", + "examples": [ "IBM", "MSFT" ] + }, + "multiplier": { + "title": "Multiplier", + "type": "integer", + "description": "The size of the timespan multiplier.", + "examples": [ 1, 2 ] + }, + "timespan": { + "title": "Timespan", + "type": "string", + "description": "The size of the time window.", + "examples": [ "day" ] + }, + "start_date": { + "title": "Start Date", + "type": "string", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "description": "The beginning date for the aggregate window.", + "examples": [ "2020-10-14" ], + "format": "date" + }, + "end_date": { + "title": "End Date", + "type": "string", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "description": "The target date for the aggregate window.", + "examples": [ "2020-10-14" ], + "format": "date" + }, + "adjusted": { + "title": "Adjusted", + "type": "string", + "description": "Determines whether or not the results are adjusted for splits. By default, results are adjusted and set to true. Set this to false to get results that are NOT adjusted for splits.", + "examples": [ "true", "false" ] + }, + "sort": { + "title": "Sort", + "type": "string", + "description": "Sort the results by timestamp. asc will return results in ascending order (oldest at the top), desc will return results in descending order (newest at the top).", + "examples": [ "asc", "desc" ] + }, + "limit": { + "title": "Limit", + "type": "integer", + "description": "The target date for the aggregate window.", + "examples": [ 100, 120 ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": [ "api.polygon.io" ] + } + }, { + "sourceDefinitionId": "af6d50ee-dddf-4126-a8ee-7faee990774f", + "name": "PostHog", + "dockerRepository": "airbyte/source-posthog", + "dockerImageTag": "0.1.9", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/posthog", + "icon": "posthog.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/posthog", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "PostHog Spec", + "type": "object", + "required": [ "api_key", "start_date" ], + "properties": { + "start_date": { + "title": "Start Date", + "type": "string", + "description": "The date from which you'd like to replicate the data. Any data before this date will not be replicated.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": [ "2021-01-01T00:00:00Z" ], + "format": "date-time" + }, + "api_key": { + "type": "string", + "airbyte_secret": true, + "title": "API Key", + "description": "API Key. See the docs for information on how to generate this key." + }, + "base_url": { + "type": "string", + "default": "https://app.posthog.com", + "title": "Base URL", + "description": "Base PostHog url. Defaults to PostHog Cloud (https://app.posthog.com).", + "examples": [ "https://posthog.example.com" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": [ "${base_url}", "app.posthog.com" ] + } + }, { + "sourceDefinitionId": "decd338e-5647-4c0b-adf4-da0e75f5a750", + "name": "Postgres", + "dockerRepository": "airbyte/source-postgres", + "dockerImageTag": "2.0.24", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/postgres", + "icon": "postgresql.svg", + "sourceType": "database", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/postgres", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Postgres Source Spec", + "type": "object", + "required": [ "host", "port", "database", "username" ], + "properties": { + "host": { + "title": "Host", + "description": "Hostname of the database.", + "type": "string", + "order": 0, + "group": "db" + }, + "port": { + "title": "Port", + "description": "Port of the database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 5432, + "examples": [ "5432" ], + "order": 1, + "group": "db" + }, + "database": { + "title": "Database Name", + "description": "Name of the database.", + "type": "string", + "order": 2, + "group": "db" + }, + "schemas": { + "title": "Schemas", + "description": "The list of schemas (case sensitive) to sync from. Defaults to public.", + "type": "array", + "items": { + "type": "string" + }, + "minItems": 0, + "uniqueItems": true, + "default": [ "public" ], + "order": 3, + "group": "db" + }, + "username": { + "title": "Username", + "description": "Username to access the database.", + "type": "string", + "order": 4, + "group": "auth" + }, + "password": { + "title": "Password", + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 5, + "group": "auth", + "always_show": true + }, + "jdbc_url_params": { + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (Eg. key1=value1&key2=value2&key3=value3). For more information read about JDBC URL parameters.", + "title": "JDBC URL Parameters (Advanced)", + "type": "string", + "order": 6, + "group": "advanced", + "pattern_descriptor": "key1=value1&key2=value2" + }, + "ssl_mode": { + "title": "SSL Modes", + "description": "SSL connection modes. \n Read more in the docs.", + "type": "object", + "order": 8, + "group": "security", + "oneOf": [ { + "title": "disable", + "additionalProperties": true, + "description": "Disables encryption of communication between Airbyte and source database.", + "required": [ "mode" ], + "properties": { + "mode": { + "type": "string", + "const": "disable", + "order": 0 + } + } + }, { + "title": "allow", + "additionalProperties": true, + "description": "Enables encryption only when required by the source database.", + "required": [ "mode" ], + "properties": { + "mode": { + "type": "string", + "const": "allow", + "order": 0 + } + } + }, { + "title": "prefer", + "additionalProperties": true, + "description": "Allows unencrypted connection only if the source database does not support encryption.", + "required": [ "mode" ], + "properties": { + "mode": { + "type": "string", + "const": "prefer", + "order": 0 + } + } + }, { + "title": "require", + "additionalProperties": true, + "description": "Always require encryption. If the source database server does not support encryption, connection will fail.", + "required": [ "mode" ], + "properties": { + "mode": { + "type": "string", + "const": "require", + "order": 0 + } + } + }, { + "title": "verify-ca", + "additionalProperties": true, + "description": "Always require encryption and verifies that the source database server has a valid SSL certificate.", + "required": [ "mode", "ca_certificate" ], + "properties": { + "mode": { + "type": "string", + "const": "verify-ca", + "order": 0 + }, + "ca_certificate": { + "type": "string", + "title": "CA Certificate", + "description": "CA certificate", + "airbyte_secret": true, + "multiline": true, + "order": 1 + }, + "client_certificate": { + "type": "string", + "title": "Client Certificate", + "description": "Client certificate", + "airbyte_secret": true, + "multiline": true, + "order": 2, + "always_show": true + }, + "client_key": { + "type": "string", + "title": "Client Key", + "description": "Client key", + "airbyte_secret": true, + "multiline": true, + "order": 3, + "always_show": true + }, + "client_key_password": { + "type": "string", + "title": "Client key password", + "description": "Password for keystorage. If you do not add it - the password will be generated automatically.", + "airbyte_secret": true, + "order": 4 + } + } + }, { + "title": "verify-full", + "additionalProperties": true, + "description": "This is the most secure mode. Always require encryption and verifies the identity of the source database server.", + "required": [ "mode", "ca_certificate" ], + "properties": { + "mode": { + "type": "string", + "const": "verify-full", + "order": 0 + }, + "ca_certificate": { + "type": "string", + "title": "CA Certificate", + "description": "CA certificate", + "airbyte_secret": true, + "multiline": true, + "order": 1 + }, + "client_certificate": { + "type": "string", + "title": "Client Certificate", + "description": "Client certificate", + "airbyte_secret": true, + "multiline": true, + "order": 2, + "always_show": true + }, + "client_key": { + "type": "string", + "title": "Client Key", + "description": "Client key", + "airbyte_secret": true, + "multiline": true, + "order": 3, + "always_show": true + }, + "client_key_password": { + "type": "string", + "title": "Client key password", + "description": "Password for keystorage. If you do not add it - the password will be generated automatically.", + "airbyte_secret": true, + "order": 4 + } + } + } ] + }, + "replication_method": { + "type": "object", + "title": "Replication Method", + "description": "Replication method for extracting data from the database.", + "order": 9, + "group": "advanced", + "oneOf": [ { + "title": "Standard", + "description": "Standard replication requires no setup on the DB side but will not be able to represent deletions incrementally.", + "required": [ "method" ], + "properties": { + "method": { + "type": "string", + "const": "Standard", + "order": 0 + } + } + }, { + "title": "Logical Replication (CDC)", + "description": "Logical replication uses the Postgres write-ahead log (WAL) to detect inserts, updates, and deletes. This needs to be configured on the source database itself. Only available on Postgres 10 and above. Read the docs.", + "required": [ "method", "replication_slot", "publication" ], + "additionalProperties": true, + "properties": { + "method": { + "type": "string", + "const": "CDC", + "order": 1 + }, + "plugin": { + "type": "string", + "title": "Plugin", + "description": "A logical decoding plugin installed on the PostgreSQL server.", + "enum": [ "pgoutput" ], + "default": "pgoutput", + "order": 2 + }, + "replication_slot": { + "type": "string", + "title": "Replication Slot", + "description": "A plugin logical replication slot. Read about replication slots.", + "order": 3 + }, + "publication": { + "type": "string", + "title": "Publication", + "description": "A Postgres publication used for consuming changes. Read about publications and replication identities.", + "order": 4 + }, + "initial_waiting_seconds": { + "type": "integer", + "title": "Initial Waiting Time in Seconds (Advanced)", + "description": "The amount of time the connector will wait when it launches to determine if there is new data to sync or not. Defaults to 300 seconds. Valid range: 120 seconds to 1200 seconds. Read about initial waiting time.", + "default": 300, + "order": 5, + "min": 120, + "max": 1200 + }, + "lsn_commit_behaviour": { + "type": "string", + "title": "LSN commit behaviour", + "description": "Determines when Airbtye should flush the LSN of processed WAL logs in the source database. `After loading Data in the destination` is default. If `While reading Data` is selected, in case of a downstream failure (while loading data into the destination), next sync would result in a full sync.", + "enum": [ "While reading Data", "After loading Data in the destination" ], + "default": "After loading Data in the destination", + "order": 6 + } + } + } ] + }, + "tunnel_method": { + "type": "object", + "title": "SSH Tunnel Method", + "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", + "oneOf": [ { + "title": "No Tunnel", + "required": [ "tunnel_method" ], + "properties": { + "tunnel_method": { + "description": "No ssh tunnel needed to connect to database", + "type": "string", + "const": "NO_TUNNEL", + "order": 0 + } + } + }, { + "title": "SSH Key Authentication", + "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [ "22" ], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host.", + "type": "string", + "order": 3 + }, + "ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + }, { + "title": "Password Authentication", + "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [ "22" ], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host", + "type": "string", + "order": 3 + }, + "tunnel_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 4 + } + } + } ], + "group": "security" + } + }, + "groups": [ { + "id": "db" + }, { + "id": "auth" + }, { + "id": "security", + "title": "Security" + }, { + "id": "advanced", + "title": "Advanced" + } ] + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "${host}", "${tunnel_method.tunnel_host}" ] + }, + "maxSecondsBetweenMessages": 7200 + }, { + "sourceDefinitionId": "cde75ca1-1e28-4a0f-85bb-90c546de9f1f", + "name": "Postmark App", + "dockerRepository": "airbyte/source-postmarkapp", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/postmarkapp", + "icon": "postmark.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Postmarkapp Spec", + "type": "object", + "required": [ "X-Postmark-Server-Token", "X-Postmark-Account-Token" ], + "additionalProperties": true, + "properties": { + "X-Postmark-Server-Token": { + "title": "X-Postmark-Server-Token", + "type": "string", + "description": "API Key for server", + "airbyte_secret": true + }, + "X-Postmark-Account-Token": { + "title": "X-Postmark-Account-Token", + "type": "string", + "description": "API Key for account", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "d60a46d4-709f-4092-a6b7-2457f7d455f5", + "name": "PrestaShop", + "dockerRepository": "airbyte/source-prestashop", + "dockerImageTag": "0.3.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/prestashop", + "icon": "prestashop.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/prestashop", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "PrestaShop Spec", + "type": "object", + "required": [ "access_key", "url", "start_date" ], + "properties": { + "access_key": { + "type": "string", + "title": "Access Key", + "description": "Your PrestaShop access key. See the docs for info on how to obtain this.", + "order": 0, + "airbyte_secret": true + }, + "url": { + "type": "string", + "title": "Shop URL", + "description": "Shop URL without trailing slash.", + "order": 1 + }, + "start_date": { + "type": "string", + "title": "Start date", + "description": "The Start date in the format YYYY-MM-DD.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": [ "2022-01-01" ], + "format": "date", + "order": 2 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": [ "${domain}" ] + } + }, { + "sourceDefinitionId": "f636c3c6-4077-45ac-b109-19fc62a283c1", + "name": "Primetric", + "dockerRepository": "airbyte/source-primetric", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/primetric", + "icon": "primetric.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Primetric Spec", + "type": "object", + "required": [ "client_id", "client_secret" ], + "properties": { + "client_id": { + "type": "string", + "title": "Client ID", + "description": "The Client ID of your Primetric developer application. The Client ID is visible here.", + "pattern": "^[a-zA-Z0-9]+$", + "airbyte_secret": true, + "examples": [ "1234aBcD5678EFGh9045Neq79sdDlA15082VMYcj" ], + "order": 0 + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "The Client Secret of your Primetric developer application. You can manage your client's credentials here.", + "pattern": "^[a-zA-Z0-9]+$", + "airbyte_secret": true, + "order": 1 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "a4617b39-3c14-44cd-a2eb-6e720f269235", + "name": "Public APIs", + "dockerRepository": "airbyte/source-public-apis", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/public-apis", + "icon": "publicapi.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/public-apis", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Public Apis Spec", + "type": "object", + "required": [ ], + "properties": { } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "dbe9b7ae-7b46-4e44-a507-02a343cf7230", + "name": "Punk API", + "dockerRepository": "airbyte/source-punk-api", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/punk-api", + "icon": "punkapi.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/punk-api", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Punk Api Spec", + "type": "object", + "required": [ "brewed_before", "brewed_after" ], + "additionalProperties": true, + "properties": { + "id": { + "title": "Beers with specific ID", + "type": "string", + "description": "To extract specific data with Unique ID", + "examples": [ 1, 22 ] + }, + "brewed_before": { + "title": "Brewed before data to get incremental reads", + "type": "string", + "description": "To extract specific data with Unique ID", + "pattern": "^[0-9]{2}-[0-9]{4}$", + "examples": [ "MM-YYYY" ] + }, + "brewed_after": { + "title": "Brewed after data to get incremental reads", + "type": "string", + "description": "To extract specific data with Unique ID", + "pattern": "^[0-9]{2}-[0-9]{4}$", + "examples": [ "MM-YYYY" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "88ecd3a8-5f5b-11ed-9b6a-0242ac120002", + "name": "PyPI", + "dockerRepository": "airbyte/source-pypi", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/pypi", + "icon": "pypi.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/pypi", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Pypi Spec", + "type": "object", + "required": [ "project_name" ], + "additionalProperties": true, + "properties": { + "project_name": { + "type": "string", + "title": "PyPI Package", + "description": "Name of the project/package. Can only be in lowercase with hyphen. This is the name used using pip command for installing the package.", + "examples": [ "sampleproject" ] + }, + "version": { + "title": "Package Version", + "type": "string", + "description": "Version of the project/package. Use it to find a particular release instead of all releases.", + "examples": [ "1.2.0" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "f7c0b910-5f66-11ed-9b6a-0242ac120002", + "name": "Qonto", + "dockerRepository": "airbyte/source-qonto", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/public-qonto", + "icon": "qonto.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Qonto Spec", + "type": "object", + "required": [ "endpoint", "organization_slug", "secret_key", "iban" ], + "properties": { + "endpoint": { + "title": "Endpoint", + "type": "string", + "description": "Please choose the right endpoint to use in this connection", + "enum": [ "Production", "Test Mocked API Server" ] + }, + "organization_slug": { + "title": "Organization slug", + "type": "string", + "description": "Organization slug used in Qonto" + }, + "secret_key": { + "title": "Secret Key", + "type": "string", + "description": "Secret key of the Qonto account", + "airbyte_secret": true + }, + "iban": { + "title": "IBAN", + "type": "string", + "description": "International Bank Account Number linked used with your Qonto Account", + "pattern": "^[A-Z0-9]*$" + }, + "start_date": { + "title": "Start date", + "type": "string", + "description": "Start getting data from that date.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": [ "YYYY-MM-DD" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "b08e4776-d1de-4e80-ab5c-1e51dad934a2", + "name": "Qualaroo", + "dockerRepository": "airbyte/source-qualaroo", + "dockerImageTag": "0.1.2", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/qualaroo", + "icon": "qualaroo.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/qualaroo", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Qualaroo Spec", + "type": "object", + "required": [ "token", "key", "start_date" ], + "additionalProperties": true, + "properties": { + "token": { + "type": "string", + "title": "API token", + "description": "A Qualaroo token. See the docs for instructions on how to generate it.", + "airbyte_secret": true + }, + "key": { + "type": "string", + "title": "API key", + "description": "A Qualaroo token. See the docs for instructions on how to generate it.", + "airbyte_secret": true + }, + "start_date": { + "type": "string", + "title": "Start Date", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}Z$", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", + "examples": [ "2021-03-01T00:00:00.000Z" ] + }, + "survey_ids": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[0-9]{1,8}$" + }, + "title": "Qualaroo survey IDs", + "description": "IDs of the surveys from which you'd like to replicate data. If left empty, data from all surveys to which you have access will be replicated." + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": [ ], + "oauthFlowInitParameters": [ ], + "oauthFlowOutputParameters": [ [ "token" ], [ "key" ] ] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "cf9c4355-b171-4477-8f2d-6c5cc5fc8b7e", + "name": "QuickBooks", + "dockerRepository": "airbyte/source-quickbooks", + "dockerImageTag": "2.0.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/quickbooks", + "icon": "quickbooks.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/quickbooks", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Source QuickBooks Spec", + "type": "object", + "required": [ "credentials", "start_date", "sandbox" ], + "additionalProperties": true, + "properties": { + "credentials": { + "title": "Authorization Method", + "type": "object", + "order": 0, + "oneOf": [ { + "type": "object", + "title": "OAuth2.0", + "required": [ "client_id", "client_secret", "refresh_token", "access_token", "token_expiry_date", "realm_id" ], + "properties": { + "auth_type": { + "type": "string", + "const": "oauth2.0" + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "Identifies which app is making the request. Obtain this value from the Keys tab on the app profile via My Apps on the developer site. There are two versions of this key: development and production." + }, + "client_secret": { + "description": " Obtain this value from the Keys tab on the app profile via My Apps on the developer site. There are two versions of this key: development and production.", + "title": "Client Secret", + "type": "string", + "airbyte_secret": true + }, + "refresh_token": { + "description": "A token used when refreshing the access token.", + "title": "Refresh Token", + "type": "string", + "airbyte_secret": true + }, + "access_token": { + "description": "Access token fot making authenticated requests.", + "title": "Access Token", + "type": "string", + "airbyte_secret": true + }, + "token_expiry_date": { + "type": "string", + "title": "Token Expiry Date", + "description": "The date-time when the access token should be refreshed.", + "format": "date-time" + }, + "realm_id": { + "description": "Labeled Company ID. The Make API Calls panel is populated with the realm id and the current access token.", + "title": "Realm ID", + "type": "string", + "airbyte_secret": true + } + } + } ] + }, + "start_date": { + "order": 1, + "description": "The default value to use if no bookmark exists for an endpoint (rfc3339 date string). E.g, 2021-03-20T00:00:00+00:00. Any data before this date will not be replicated.", + "title": "Start Date", + "type": "string", + "format": "date-time", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": [ "2021-03-20T00:00:00+00:00" ] + }, + "sandbox": { + "order": 2, + "description": "Determines whether to use the sandbox or production environment.", + "title": "Sandbox", + "type": "boolean", + "default": false + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": [ "sandbox-quickbooks.api.intuit.com", "quickbooks.api.intuit.com", "oauth.platform.intuit.com" ] + } + }, { + "sourceDefinitionId": "9b6cc0c0-da81-4103-bbfd-5279e18a849a", + "name": "Railz", + "dockerRepository": "airbyte/source-railz", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/railz", + "icon": "railz.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Railz Spec", + "type": "object", + "required": [ "client_id", "secret_key", "start_date" ], + "properties": { + "client_id": { + "type": "string", + "title": "Client ID", + "description": "Client ID (client_id)", + "order": 0 + }, + "secret_key": { + "type": "string", + "title": "Secret key", + "description": "Secret key (secret_key)", + "order": 1, + "airbyte_secret": true + }, + "start_date": { + "type": "string", + "title": "Start date", + "description": "Start date", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "order": 2 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "45d2e135-2ede-49e1-939f-3e3ec357a65e", + "name": "Recharge", + "dockerRepository": "airbyte/source-recharge", + "dockerImageTag": "0.2.9", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/recharge", + "icon": "recharge.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/recharge", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Recharge Spec", + "type": "object", + "required": [ "start_date", "access_token" ], + "additionalProperties": true, + "properties": { + "start_date": { + "type": "string", + "title": "Start Date", + "description": "The date from which you'd like to replicate data for Recharge API, in the format YYYY-MM-DDT00:00:00Z. Any data before this date will not be replicated.", + "examples": [ "2021-05-14T00:00:00Z" ], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "format": "date-time" + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "The value of the Access Token generated. See the docs for more information.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "api.rechargeapps.com" ] + } + }, { + "sourceDefinitionId": "25d7535d-91e0-466a-aa7f-af81578be277", + "name": "Recreation", + "dockerRepository": "airbyte/source-recreation", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/recreation", + "icon": "recreation.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/recreation", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Recreation Spec", + "type": "object", + "required": [ "apikey" ], + "additionalProperties": true, + "properties": { + "apikey": { + "title": "API Key", + "type": "string", + "description": "API Key", + "airbyte_secret": true + }, + "query_campsites": { + "title": "Query Campsite", + "type": "string" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "3b046ac7-d8d3-4eb3-b122-f96b2a16d8a8", + "name": "Recruitee", + "dockerRepository": "airbyte/source-recruitee", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/recruitee", + "icon": "recruitee.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/recruitee", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Recruitee Spec", + "type": "object", + "required": [ "api_key", "company_id" ], + "additionalProperties": true, + "properties": { + "api_key": { + "title": "API Key", + "type": "string", + "description": "Recruitee API Key. See here.", + "airbyte_secret": true + }, + "company_id": { + "title": "Company ID", + "type": "integer", + "description": "Recruitee Company ID. You can also find this ID on the Recruitee API tokens page." + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "cd42861b-01fc-4658-a8ab-5d11d0510f01", + "name": "Recurly", + "dockerRepository": "airbyte/source-recurly", + "dockerImageTag": "0.4.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/recurly", + "icon": "recurly.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/recurly", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Recurly Source Spec", + "type": "object", + "required": [ "api_key" ], + "additionalProperties": false, + "properties": { + "api_key": { + "type": "string", + "title": "API Key", + "airbyte_secret": true, + "description": "Recurly API Key. See the docs for more information on how to generate this key.", + "order": 1 + }, + "begin_time": { + "type": "string", + "description": "ISO8601 timestamp from which the replication from Recurly API will start from.", + "examples": [ "2021-12-01T00:00:00" ], + "pattern": "^$|^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}$", + "order": 2 + }, + "end_time": { + "type": "string", + "description": "ISO8601 timestamp to which the replication from Recurly API will stop. Records after that date won't be imported.", + "examples": [ "2021-12-01T00:00:00" ], + "pattern": "^$|^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}$", + "order": 3 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "e87ffa8e-a3b5-f69c-9076-6011339de1f6", + "name": "Redshift", + "dockerRepository": "airbyte/source-redshift", + "dockerImageTag": "0.3.16", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/redshift", + "icon": "redshift.svg", + "sourceType": "database", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/redshift", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Redshift Source Spec", + "type": "object", + "required": [ "host", "port", "database", "username", "password" ], + "properties": { + "host": { + "title": "Host", + "description": "Host Endpoint of the Redshift Cluster (must include the cluster-id, region and end with .redshift.amazonaws.com).", + "type": "string", + "order": 1 + }, + "port": { + "title": "Port", + "description": "Port of the database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 5439, + "examples": [ "5439" ], + "order": 2 + }, + "database": { + "title": "Database", + "description": "Name of the database.", + "type": "string", + "examples": [ "master" ], + "order": 3 + }, + "schemas": { + "title": "Schemas", + "description": "The list of schemas to sync from. Specify one or more explicitly or keep empty to process all schemas. Schema names are case sensitive.", + "type": "array", + "items": { + "type": "string" + }, + "minItems": 0, + "uniqueItems": true, + "examples": [ "public" ], + "order": 4 + }, + "username": { + "title": "Username", + "description": "Username to use to access the database.", + "type": "string", + "order": 5 + }, + "password": { + "title": "Password", + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 6 + }, + "jdbc_url_params": { + "title": "JDBC URL Params", + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", + "type": "string", + "order": 7 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "8cc6537e-f8a6-423c-b960-e927af76116e", + "name": "Reply.io", + "dockerRepository": "airbyte/source-reply-io", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/reply-io", + "icon": "reply-io.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/reply-io", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Reply Io Spec", + "type": "object", + "required": [ "api_key" ], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "title": "API Token", + "description": "The API Token for Reply", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "db04ecd1-42e7-4115-9cec-95812905c626", + "name": "Retently", + "dockerRepository": "airbyte/source-retently", + "dockerImageTag": "0.1.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/retently", + "icon": "retently.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Retently Api Spec", + "type": "object", + "additionalProperties": true, + "properties": { + "credentials": { + "title": "Authentication Mechanism", + "description": "Choose how to authenticate to Retently", + "type": "object", + "oneOf": [ { + "type": "object", + "title": "Authenticate via Retently (OAuth)", + "required": [ "client_id", "client_secret", "refresh_token" ], + "additionalProperties": true, + "properties": { + "auth_type": { + "type": "string", + "const": "Client", + "order": 0 + }, + "client_id": { + "title": "Client ID", + "type": "string", + "description": "The Client ID of your Retently developer application." + }, + "client_secret": { + "title": "Client Secret", + "type": "string", + "description": "The Client Secret of your Retently developer application.", + "airbyte_secret": true + }, + "refresh_token": { + "title": "Refresh Token", + "type": "string", + "description": "Retently Refresh Token which can be used to fetch new Bearer Tokens when the current one expires.", + "airbyte_secret": true + } + } + }, { + "type": "object", + "title": "Authenticate with API Token", + "required": [ "api_key" ], + "additionalProperties": true, + "properties": { + "auth_type": { + "type": "string", + "const": "Token", + "order": 0 + }, + "api_key": { + "title": "API Token", + "description": "Retently API Token. See the docs for more information on how to obtain this key.", + "type": "string", + "airbyte_secret": true + } + } + } ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": [ "credentials", "auth_type" ], + "predicate_value": "Client", + "oauth_config_specification": { + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": true, + "properties": { + "refresh_token": { + "type": "string", + "path_in_connector_config": [ "credentials", "refresh_token" ] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": true, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": true, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_id" ] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_secret" ] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "fb141f29-be2a-450b-a4f2-2cd203a00f84", + "name": "RD Station Marketing", + "dockerRepository": "airbyte/source-rd-station-marketing", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/rd-station-marketing", + "icon": "rdstation.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/rd-station-marketing", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "RD Station Marketing Spec", + "type": "object", + "required": [ "start_date" ], + "additionalProperties": true, + "properties": { + "authorization": { + "type": "object", + "title": "Authentication Type", + "description": "Choose one of the possible authorization method", + "oneOf": [ { + "title": "Sign in via RD Station (OAuth)", + "type": "object", + "required": [ "auth_type" ], + "properties": { + "auth_type": { + "type": "string", + "const": "Client", + "order": 0 + }, + "client_id": { + "title": "Client ID", + "type": "string", + "description": "The Client ID of your RD Station developer application.", + "airbyte_secret": true + }, + "client_secret": { + "title": "Client Secret", + "type": "string", + "description": "The Client Secret of your RD Station developer application", + "airbyte_secret": true + }, + "refresh_token": { + "title": "Refresh Token", + "type": "string", + "description": "The token for obtaining the new access token.", + "airbyte_secret": true + } + } + } ] + }, + "start_date": { + "title": "Start Date", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated. When specified and not None, then stream will behave as incremental", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": [ "2017-01-25T00:00:00Z" ], + "type": "string" + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": [ "authorization", "0" ], + "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], + "oauthFlowOutputParameters": [ [ "refresh_token" ] ] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "d78e5de0-aa44-4744-aa4f-74c818ccfe19", + "name": "RKI Covid", + "dockerRepository": "airbyte/source-rki-covid", + "dockerImageTag": "0.1.2", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/rki-covid", + "icon": "rki.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/rki-covid", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "RKI Covid Spec", + "type": "object", + "required": [ "start_date" ], + "additionalProperties": true, + "properties": { + "start_date": { + "type": "string", + "title": "Start Date", + "description": "UTC date in the format 2017-01-25. Any data before this date will not be replicated.", + "order": 1 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "0efee448-6948-49e2-b786-17db50647908", + "name": "RSS", + "dockerRepository": "airbyte/source-rss", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/rss", + "icon": "rss.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/rss", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "RSS Spec", + "type": "object", + "required": [ "url" ], + "properties": { + "url": { + "type": "string", + "description": "RSS Feed URL" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false + }, { + "sourceDefinitionId": "921d9608-3915-450b-8078-0af18801ea1b", + "name": "Rocket.chat", + "dockerRepository": "airbyte/source-rocket-chat", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/rocket-chat", + "icon": "rocket-chat.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/rocket-chat", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Rocket Chat Spec", + "type": "object", + "required": [ "token", "user_id", "endpoint" ], + "additionalProperties": true, + "properties": { + "endpoint": { + "title": "Endpoint", + "type": "string", + "description": "Your rocket.chat instance URL.", + "examples": [ "https://airbyte-connector-poc.rocket.chat", "https://hey.yoursite.com" ] + }, + "token": { + "title": "Token", + "type": "string", + "description": "Your API Token. See here. The token is case sensitive.", + "airbyte_secret": true + }, + "user_id": { + "title": "User ID.", + "type": "string", + "description": "Your User Id." + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "69589781-7828-43c5-9f63-8925b1c1ccc2", + "name": "S3", + "dockerRepository": "airbyte/source-s3", + "dockerImageTag": "2.1.2", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/s3", + "icon": "s3.svg", + "sourceType": "file", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/s3", + "changelogUrl": "https://docs.airbyte.com/integrations/sources/s3", + "connectionSpecification": { + "title": "S3 Source Spec", + "type": "object", + "properties": { + "dataset": { + "title": "Output Stream Name", + "description": "The name of the stream you would like this source to output. Can contain letters, numbers, or underscores.", + "pattern": "^([A-Za-z0-9-_]+)$", + "order": 0, + "type": "string" + }, + "path_pattern": { + "title": "Pattern of files to replicate", + "description": "A regular expression which tells the connector which files to replicate. All files which match this pattern will be replicated. Use | to separate multiple patterns. See this page to understand pattern syntax (GLOBSTAR and SPLIT flags are enabled). Use pattern ** to pick up all files.", + "examples": [ "**", "myFolder/myTableFiles/*.csv|myFolder/myOtherTableFiles/*.csv" ], + "order": 10, + "type": "string" + }, + "format": { + "title": "File Format", + "description": "The format of the files you'd like to replicate", + "default": "csv", + "order": 20, + "type": "object", + "oneOf": [ { + "title": "CSV", + "description": "This connector utilises PyArrow (Apache Arrow) for CSV parsing.", + "type": "object", + "properties": { + "filetype": { + "title": "Filetype", + "const": "csv", + "type": "string" + }, + "delimiter": { + "title": "Delimiter", + "description": "The character delimiting individual cells in the CSV data. This may only be a 1-character string. For tab-delimited data enter '\\t'.", + "default": ",", + "minLength": 1, + "order": 0, + "type": "string" + }, + "infer_datatypes": { + "title": "Infer Datatypes", + "description": "Configures whether a schema for the source should be inferred from the current data or not. If set to false and a custom schema is set, then the manually enforced schema is used. If a schema is not manually set, and this is set to false, then all fields will be read as strings", + "default": true, + "order": 1, + "type": "boolean" + }, + "quote_char": { + "title": "Quote Character", + "description": "The character used for quoting CSV values. To disallow quoting, make this field blank.", + "default": "\"", + "order": 2, + "type": "string" + }, + "escape_char": { + "title": "Escape Character", + "description": "The character used for escaping special characters. To disallow escaping, leave this field blank.", + "order": 3, + "type": "string" + }, + "encoding": { + "title": "Encoding", + "description": "The character encoding of the CSV data. Leave blank to default to UTF8. See list of python encodings for allowable options.", + "default": "utf8", + "order": 4, + "type": "string" + }, + "double_quote": { + "title": "Double Quote", + "description": "Whether two quotes in a quoted CSV value denote a single quote in the data.", + "default": true, + "order": 5, + "type": "boolean" + }, + "newlines_in_values": { + "title": "Allow newlines in values", + "description": "Whether newline characters are allowed in CSV values. Turning this on may affect performance. Leave blank to default to False.", + "default": false, + "order": 6, + "type": "boolean" + }, + "additional_reader_options": { + "title": "Additional Reader Options", + "description": "Optionally add a valid JSON string here to provide additional options to the csv reader. Mappings must correspond to options detailed here. 'column_types' is used internally to handle schema so overriding that would likely cause problems.", + "examples": [ "{\"timestamp_parsers\": [\"%m/%d/%Y %H:%M\", \"%Y/%m/%d %H:%M\"], \"strings_can_be_null\": true, \"null_values\": [\"NA\", \"NULL\"]}" ], + "order": 7, + "type": "string" + }, + "advanced_options": { + "title": "Advanced Options", + "description": "Optionally add a valid JSON string here to provide additional Pyarrow ReadOptions. Specify 'column_names' here if your CSV doesn't have header, or if you want to use custom column names. 'block_size' and 'encoding' are already used above, specify them again here will override the values above.", + "examples": [ "{\"column_names\": [\"column1\", \"column2\"]}" ], + "order": 8, + "type": "string" + }, + "block_size": { + "title": "Block Size", + "description": "The chunk size in bytes to process at a time in memory from each file. If your data is particularly wide and failing during schema detection, increasing this should solve it. Beware of raising this too high as you could hit OOM errors.", + "default": 10000, + "minimum": 1, + "maximum": 2147483647, + "order": 9, + "type": "integer" + } + } + }, { + "title": "Parquet", + "description": "This connector utilises PyArrow (Apache Arrow) for Parquet parsing.", + "type": "object", + "properties": { + "filetype": { + "title": "Filetype", + "const": "parquet", + "type": "string" + }, + "columns": { + "title": "Selected Columns", + "description": "If you only want to sync a subset of the columns from the file(s), add the columns you want here as a comma-delimited list. Leave it empty to sync all columns.", + "order": 0, + "type": "array", + "items": { + "type": "string" + } + }, + "batch_size": { + "title": "Record batch size", + "description": "Maximum number of records per batch read from the input files. Batches may be smaller if there aren’t enough rows in the file. This option can help avoid out-of-memory errors if your data is particularly wide.", + "default": 65536, + "order": 1, + "type": "integer" + }, + "buffer_size": { + "title": "Buffer Size", + "description": "Perform read buffering when deserializing individual column chunks. By default every group column will be loaded fully to memory. This option can help avoid out-of-memory errors if your data is particularly wide.", + "default": 2, + "type": "integer" + } + } + }, { + "title": "Avro", + "description": "This connector utilises fastavro for Avro parsing.", + "type": "object", + "properties": { + "filetype": { + "title": "Filetype", + "const": "avro", + "type": "string" + } + } + }, { + "title": "Jsonl", + "description": "This connector uses PyArrow for JSON Lines (jsonl) file parsing.", + "type": "object", + "properties": { + "filetype": { + "title": "Filetype", + "const": "jsonl", + "type": "string" + }, + "newlines_in_values": { + "title": "Allow newlines in values", + "description": "Whether newline characters are allowed in JSON values. Turning this on may affect performance. Leave blank to default to False.", + "default": false, + "order": 0, + "type": "boolean" + }, + "unexpected_field_behavior": { + "title": "Unexpected field behavior", + "description": "How JSON fields outside of explicit_schema (if given) are treated. Check PyArrow documentation for details", + "default": "infer", + "examples": [ "ignore", "infer", "error" ], + "order": 1, + "enum": [ "ignore", "infer", "error" ] + }, + "block_size": { + "title": "Block Size", + "description": "The chunk size in bytes to process at a time in memory from each file. If your data is particularly wide and failing during schema detection, increasing this should solve it. Beware of raising this too high as you could hit OOM errors.", + "default": 0, + "order": 2, + "type": "integer" + } + } + } ] + }, + "schema": { + "title": "Manually enforced data schema", + "description": "Optionally provide a schema to enforce, as a valid JSON string. Ensure this is a mapping of { \"column\" : \"type\" }, where types are valid JSON Schema datatypes. Leave as {} to auto-infer the schema.", + "default": "{}", + "examples": [ "{\"column_1\": \"number\", \"column_2\": \"string\", \"column_3\": \"array\", \"column_4\": \"object\", \"column_5\": \"boolean\"}" ], + "order": 30, + "type": "string" + }, + "provider": { + "title": "S3: Amazon Web Services", + "type": "object", + "properties": { + "bucket": { + "title": "Bucket", + "description": "Name of the S3 bucket where the file(s) exist.", + "order": 0, + "type": "string" + }, + "aws_access_key_id": { + "title": "AWS Access Key ID", + "description": "In order to access private Buckets stored on AWS S3, this connector requires credentials with the proper permissions. If accessing publicly available data, this field is not necessary.", + "airbyte_secret": true, + "order": 1, + "type": "string" + }, + "aws_secret_access_key": { + "title": "AWS Secret Access Key", + "description": "In order to access private Buckets stored on AWS S3, this connector requires credentials with the proper permissions. If accessing publicly available data, this field is not necessary.", + "airbyte_secret": true, + "order": 2, + "type": "string" + }, + "path_prefix": { + "title": "Path Prefix", + "description": "By providing a path-like prefix (e.g. myFolder/thisTable/) under which all the relevant files sit, we can optimize finding these in S3. This is optional but recommended if your bucket contains many folders/files which you don't need to replicate.", + "default": "", + "order": 3, + "type": "string" + }, + "endpoint": { + "title": "Endpoint", + "description": "Endpoint to an S3 compatible service. Leave empty to use AWS.", + "default": "", + "order": 4, + "type": "string" + }, + "start_date": { + "title": "Start Date", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any file modified before this date will not be replicated.", + "examples": [ "2021-01-01T00:00:00Z" ], + "format": "date-time", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "order": 5, + "type": "string" + } + }, + "required": [ "bucket" ], + "order": 11, + "description": "Use this to load files from S3 or S3-compatible services" + } + }, + "required": [ "dataset", "path_pattern", "provider" ] + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "overwrite", "append", "append_dedup" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "*.s3.amazonaws.com" ] + } + }, { + "sourceDefinitionId": "41991d12-d4b5-439e-afd0-260a31d4c53f", + "name": "SalesLoft", + "dockerRepository": "airbyte/source-salesloft", + "dockerImageTag": "1.0.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/salesloft", + "icon": "salesloft.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/salesloft", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Source Salesloft Spec", + "type": "object", + "required": [ "credentials", "start_date" ], + "additionalProperties": true, + "properties": { + "credentials": { + "order": 0, + "type": "object", + "title": "Credentials", + "oneOf": [ { + "title": "Authenticate via OAuth", + "type": "object", + "required": [ "client_id", "client_secret", "refresh_token", "access_token", "token_expiry_date", "auth_type" ], + "properties": { + "auth_type": { + "type": "string", + "const": "oauth2.0" + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "The Client ID of your Salesloft developer application." + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "The Client Secret of your Salesloft developer application.", + "airbyte_secret": true + }, + "access_token": { + "type": "string", + "description": "Access Token for making authenticated requests.", + "airbyte_secret": true + }, + "token_expiry_date": { + "type": "string", + "description": "The date-time when the access token should be refreshed.", + "format": "date-time" + }, + "refresh_token": { + "type": "string", + "title": "Refresh Token", + "description": "The token for obtaining a new access token.", + "airbyte_secret": true + } + } + }, { + "title": "Authenticate via API Key", + "type": "object", + "required": [ "api_key", "auth_type" ], + "properties": { + "auth_type": { + "type": "string", + "const": "api_key" + }, + "api_key": { + "type": "string", + "airbyte_secret": true, + "title": "API Key", + "description": "API Key for making authenticated requests. More instruction on how to find this value in our docs" + } + } + } ] + }, + "start_date": { + "order": 1, + "type": "string", + "title": "Start Date", + "description": "The date from which you'd like to replicate data for Salesloft API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", + "examples": [ "2020-11-16T00:00:00Z" ], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "format": "date-time" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": [ "api.salesloft.com" ] + } + }, { + "sourceDefinitionId": "b117307c-14b6-41aa-9422-947e34922962", + "name": "Salesforce", + "dockerRepository": "airbyte/source-salesforce", + "dockerImageTag": "2.0.9", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/salesforce", + "icon": "salesforce.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/salesforce", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Salesforce Source Spec", + "type": "object", + "required": [ "client_id", "client_secret", "refresh_token" ], + "additionalProperties": true, + "properties": { + "is_sandbox": { + "title": "Sandbox", + "description": "Toggle if you're using a Salesforce Sandbox", + "type": "boolean", + "default": false, + "order": 1 + }, + "auth_type": { + "type": "string", + "const": "Client" + }, + "client_id": { + "title": "Client ID", + "description": "Enter your Salesforce developer application's Client ID", + "type": "string", + "order": 2 + }, + "client_secret": { + "title": "Client Secret", + "description": "Enter your Salesforce developer application's Client secret", + "type": "string", + "airbyte_secret": true, + "order": 3 + }, + "refresh_token": { + "title": "Refresh Token", + "description": "Enter your application's Salesforce Refresh Token used for Airbyte to access your Salesforce account.", + "type": "string", + "airbyte_secret": true, + "order": 4 + }, + "start_date": { + "title": "Start Date", + "description": "Enter the date in the YYYY-MM-DD format. Airbyte will replicate the data added on and after this date. If this field is blank, Airbyte will replicate the data for last two years.", + "type": "string", + "pattern": "^([0-9]{4}-[0-9]{2}-[0-9]{2}(T[0-9]{2}:[0-9]{2}:[0-9]{2}Z)?)$", + "examples": [ "2021-07-25", "2021-07-25T00:00:00Z" ], + "format": "date-time", + "order": 5 + }, + "streams_criteria": { + "type": "array", + "order": 6, + "items": { + "type": "object", + "required": [ "criteria", "value" ], + "properties": { + "criteria": { + "type": "string", + "title": "Search criteria", + "enum": [ "starts with", "ends with", "contains", "exacts", "starts not with", "ends not with", "not contains", "not exacts" ], + "order": 1, + "default": "contains" + }, + "value": { + "type": "string", + "title": "Search value", + "order": 2 + } + } + }, + "title": "Filter Salesforce Objects", + "description": "Filter streams relevant to you" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": [ "auth_type" ], + "predicate_value": "Client", + "oauth_config_specification": { + "oauth_user_input_from_connector_config_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "is_sandbox": { + "type": "boolean", + "path_in_connector_config": [ "is_sandbox" ] + } + } + }, + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "refresh_token": { + "type": "string", + "path_in_connector_config": [ "refresh_token" ] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": [ "client_id" ] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": [ "client_secret" ] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "*.salesforce.com" ] + } + }, { + "sourceDefinitionId": "ec5f3102-fb31-4916-99ae-864faf8e7e25", + "name": "SAP Fieldglass", + "dockerRepository": "airbyte/source-sap-fieldglass", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/sap-fieldglass", + "icon": "sapfieldglass.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/sap-fieldglass", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Sap Fieldglass Spec", + "type": "object", + "required": [ "api_key" ], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "description": "API Key", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "8d7ef552-2c0f-11ec-8d3d-0242ac130003", + "name": "SearchMetrics", + "dockerRepository": "airbyte/source-search-metrics", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/search-metrics", + "icon": "searchmetrics.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/seacrh-metrics", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Source Search Metrics Spec", + "type": "object", + "required": [ "api_key", "client_secret", "country_code", "start_date" ], + "additionalProperties": true, + "properties": { + "api_key": { + "title": "API Key", + "type": "string", + "description": "", + "airbyte_secret": true + }, + "client_secret": { + "title": "Client Secret", + "type": "string", + "description": "", + "airbyte_secret": true + }, + "country_code": { + "title": "Country Code", + "type": "string", + "default": "", + "description": "The region of the S3 staging bucket to use if utilising a copy strategy.", + "enum": [ "", "AR", "AU", "AT", "BE", "BR", "CA", "CN", "CO", "DK", "FI", "FR", "DE", "HK", "IN", "IE", "IT", "JP", "MX", "NL", "NO", "PL", "RU", "SG", "ZA", "ES", "SE", "CH", "TR", "US", "GB" ], + "order": 2 + }, + "start_date": { + "title": "Start Date", + "type": "string", + "description": "Data generated in SearchMetrics after this date will be replicated. This date must be specified in the format YYYY-MM-DDT00:00:00Z.", + "examples": [ "20200925" ], + "pattern": "^[0-9]{4}[0-9]{2}[0-9]{2}$" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "da9fc6b9-8059-4be0-b204-f56e22e4d52d", + "name": "Secoda", + "dockerRepository": "airbyte/source-secoda", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/secoda", + "icon": "secoda.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/secoda", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Secoda Spec", + "type": "object", + "required": [ "api_key" ], + "additionalProperties": true, + "properties": { + "api_key": { + "title": "Api Key", + "type": "string", + "description": "Your API Access Key. See here. The key is case sensitive.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "fbb5fbe2-16ad-4cf4-af7d-ff9d9c316c87", + "name": "Sendgrid", + "dockerRepository": "airbyte/source-sendgrid", + "dockerImageTag": "0.3.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/sendgrid", + "icon": "sendgrid.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/sendgrid", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Sendgrid Spec", + "type": "object", + "required": [ "apikey" ], + "additionalProperties": true, + "properties": { + "apikey": { + "title": "Sendgrid API key", + "airbyte_secret": true, + "type": "string", + "description": "API Key, use admin to generate this key.", + "order": 0 + }, + "start_time": { + "title": "Start time", + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(.\\d+)?Z$", + "description": "Start time in ISO8601 format. Any data before this time point will not be replicated.", + "examples": [ "2020-01-01T01:01:01Z", "2020-01-01T01:01:01.000001Z" ], + "order": 1 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "api.sendgrid.com" ] + } + }, { + "sourceDefinitionId": "39de93cb-1511-473e-a673-5cbedb9436af", + "name": "Senseforce", + "dockerRepository": "airbyte/source-senseforce", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/senseforce", + "icon": "senseforce.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/senseforce", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Senseforce Source Spec", + "type": "object", + "required": [ "access_token", "backend_url", "dataset_id", "start_date" ], + "additionalProperties": true, + "properties": { + "access_token": { + "type": "string", + "title": "API Access Token", + "description": "Your API access token. See here. The toke is case sensitive.", + "airbyte_secret": true + }, + "backend_url": { + "type": "string", + "title": "Senseforce backend URL", + "examples": [ "https://galaxyapi.senseforce.io" ], + "description": "Your Senseforce API backend URL. This is the URL shown during the Login screen. See here for more details. (Note: Most Senseforce backend APIs have the term 'galaxy' in their ULR)" + }, + "dataset_id": { + "type": "string", + "title": "Dataset ID", + "examples": [ "8f418098-ca28-4df5-9498-0df9fe78eda7" ], + "description": "The ID of the dataset you want to synchronize. The ID can be found in the URL when opening the dataset. See here for more details. (Note: As the Senseforce API only allows to synchronize a specific dataset, each dataset you want to synchronize needs to be implemented as a separate airbyte source)." + }, + "start_date": { + "type": "string", + "title": "The first day (in UTC) when to read data from.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "description": "UTC date and time in the format 2017-01-25. Only data with \"Timestamp\" after this date will be replicated. Important note: This start date must be set to the first day of where your dataset provides data. If your dataset has data from 2020-10-10 10:21:10, set the start_date to 2020-10-10 or later", + "examples": [ "2017-01-25" ], + "format": "date" + }, + "slice_range": { + "type": "integer", + "title": "Data request time increment in days", + "default": 10, + "minimum": 1, + "maximum": 365, + "examples": [ 1, 3, 10, 30, 180, 360 ], + "airbyte_hidden": true, + "description": "The time increment used by the connector when requesting data from the Senseforce API. The bigger the value is, the less requests will be made and faster the sync will be. On the other hand, the more seldom the state is persisted and the more likely one could run into rate limites. Furthermore, consider that large chunks of time might take a long time for the Senseforce query to return data - meaning it could take in effect longer than with more smaller time slices. If there are a lot of data per day, set this setting to 1. If there is only very little data per day, you might change the setting to 10 or more." + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": [ "galaxyapi.senseforce.io", "senseforce.io" ] + } + }, { + "sourceDefinitionId": "2e88fa20-a2f6-43cc-bba6-98a0a3f244fb", + "name": "Sendinblue", + "dockerRepository": "airbyte/source-sendinblue", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/sendinblue", + "icon": "sendinblue.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/sendinblue", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Sendinblue Spec", + "type": "object", + "required": [ "api_key" ], + "additionalProperties": true, + "properties": { + "api_key": { + "title": "API Key", + "type": "string", + "description": "Your API Key. See here.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "9da77001-af33-4bcd-be46-6252bf9342b9", + "name": "Shopify", + "dockerRepository": "airbyte/source-shopify", + "dockerImageTag": "0.3.2", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/shopify", + "icon": "shopify.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/shopify", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Shopify Source CDK Specifications", + "type": "object", + "required": [ "shop", "start_date" ], + "additionalProperties": true, + "properties": { + "shop": { + "type": "string", + "title": "Shopify Store", + "description": "The name of your Shopify store found in the URL. For example, if your URL was https://NAME.myshopify.com, then the name would be 'NAME'.", + "order": 1 + }, + "credentials": { + "title": "Shopify Authorization Method", + "description": "The authorization method to use to retrieve data from Shopify", + "type": "object", + "order": 2, + "oneOf": [ { + "title": "API Password", + "description": "API Password Auth", + "type": "object", + "required": [ "auth_method", "api_password" ], + "properties": { + "auth_method": { + "type": "string", + "const": "api_password", + "order": 0 + }, + "api_password": { + "type": "string", + "title": "API Password", + "description": "The API Password for your private application in the `Shopify` store.", + "airbyte_secret": true, + "order": 1 + } + } + }, { + "type": "object", + "title": "OAuth2.0", + "description": "OAuth2.0", + "required": [ "auth_method" ], + "properties": { + "auth_method": { + "type": "string", + "const": "oauth2.0", + "order": 0 + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "The Client ID of the Shopify developer application.", + "airbyte_secret": true, + "order": 1 + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "The Client Secret of the Shopify developer application.", + "airbyte_secret": true, + "order": 2 + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "The Access Token for making authenticated requests.", + "airbyte_secret": true, + "order": 3 + } + } + } ] + }, + "start_date": { + "type": "string", + "title": "Replication Start Date", + "description": "The date you would like to replicate data from. Format: YYYY-MM-DD. Any data before this date will not be replicated.", + "examples": [ "2021-01-01" ], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "order": 3 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": [ "credentials", "auth_method" ], + "predicate_value": "oauth2.0", + "oauth_config_specification": { + "oauth_user_input_from_connector_config_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "shop": { + "type": "string", + "path_in_connector_config": [ "shop" ] + } + } + }, + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "access_token": { + "type": "string", + "path_in_connector_config": [ "credentials", "access_token" ] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_id" ] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_secret" ] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "2fed2292-5586-480c-af92-9944e39fe12d", + "name": "Short.io", + "dockerRepository": "airbyte/source-shortio", + "dockerImageTag": "0.1.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/shortio", + "icon": "short.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://developers.short.io/reference", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Shortio Spec", + "type": "object", + "required": [ "domain_id", "secret_key", "start_date" ], + "properties": { + "domain_id": { + "type": "string", + "desciprtion": "Short.io Domain ID", + "title": "Domain ID", + "airbyte_secret": false + }, + "secret_key": { + "type": "string", + "title": "Secret Key", + "description": "Short.io Secret Key", + "airbyte_secret": true + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", + "airbyte_secret": false + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "c2281cee-86f9-4a86-bb48-d23286b4c7bd", + "name": "Slack", + "dockerRepository": "airbyte/source-slack", + "dockerImageTag": "0.1.25", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/slack", + "icon": "slack.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/slack", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Slack Spec", + "type": "object", + "required": [ "start_date", "lookback_window", "join_channels" ], + "additionalProperties": true, + "properties": { + "start_date": { + "type": "string", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", + "examples": [ "2017-01-25T00:00:00Z" ], + "title": "Start Date", + "format": "date-time" + }, + "lookback_window": { + "type": "integer", + "title": "Threads Lookback window (Days)", + "description": "How far into the past to look for messages in threads.", + "examples": [ 7, 14 ] + }, + "join_channels": { + "type": "boolean", + "default": true, + "title": "Join all channels", + "description": "Whether to join all channels or to sync data only from channels the bot is already in. If false, you'll need to manually add the bot to all the channels from which you'd like to sync messages. " + }, + "channel_filter": { + "type": "array", + "default": [ ], + "items": { + "type": "string", + "minLength": 0 + }, + "title": "Channel name filter", + "description": "A channel name list (without leading '#' char) which limit the channels from which you'd like to sync. Empty list means no filter.", + "examples": [ "channel_one", "channel_two" ] + }, + "credentials": { + "title": "Authentication mechanism", + "description": "Choose how to authenticate into Slack", + "type": "object", + "oneOf": [ { + "type": "object", + "title": "Sign in via Slack (OAuth)", + "required": [ "option_title", "client_id", "client_secret", "access_token" ], + "properties": { + "option_title": { + "type": "string", + "const": "Default OAuth2.0 authorization" + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "Slack client_id. See our docs if you need help finding this id." + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "Slack client_secret. See our docs if you need help finding this secret.", + "airbyte_secret": true + }, + "access_token": { + "type": "string", + "title": "Access token", + "description": "Slack access_token. See our docs if you need help generating the token.", + "airbyte_secret": true + } + }, + "order": 0 + }, { + "type": "object", + "title": "API Token", + "required": [ "option_title", "api_token" ], + "properties": { + "option_title": { + "type": "string", + "const": "API Token Credentials" + }, + "api_token": { + "type": "string", + "title": "API Token", + "description": "A Slack bot token. See the docs for instructions on how to generate it.", + "airbyte_secret": true + } + }, + "order": 1 + } ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": [ "credentials", "option_title" ], + "predicate_value": "Default OAuth2.0 authorization", + "oauth_config_specification": { + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "access_token": { + "type": "string", + "path_in_connector_config": [ "credentials", "access_token" ] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_id" ] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_secret" ] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "slack.com" ] + } + }, { + "sourceDefinitionId": "781f8b1d-4e20-4842-a2c3-cd9b119d65fa", + "name": "Smaily", + "dockerRepository": "airbyte/source-smaily", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/smaily", + "icon": "smaily.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/smaily", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Smaily Spec", + "type": "object", + "required": [ "api_subdomain", "api_username", "api_password" ], + "additionalProperties": true, + "properties": { + "api_subdomain": { + "type": "string", + "title": "API Subdomain", + "description": "API Subdomain. See https://smaily.com/help/api/general/create-api-user/" + }, + "api_username": { + "type": "string", + "title": "API User Username", + "description": "API user username. See https://smaily.com/help/api/general/create-api-user/" + }, + "api_password": { + "type": "string", + "title": "API User Password", + "description": "API user password. See https://smaily.com/help/api/general/create-api-user/", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "21cc4a17-a011-4485-8a3e-e2341a91ab9f", + "name": "SmartEngage", + "dockerRepository": "airbyte/source-smartengage", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/smartengage", + "icon": "smartengage.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/smartengage", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "SmartEngage Spec", + "type": "object", + "required": [ "api_key" ], + "additionalProperties": true, + "properties": { + "api_key": { + "title": "API Key", + "type": "string", + "description": "API Key", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "374ebc65-6636-4ea0-925c-7d35999a8ffc", + "name": "Smartsheets", + "dockerRepository": "airbyte/source-smartsheets", + "dockerImageTag": "1.0.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/smartsheets", + "icon": "smartsheet.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/smartsheets", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Smartsheets Source Spec", + "type": "object", + "required": [ "credentials", "spreadsheet_id" ], + "additionalProperties": true, + "properties": { + "credentials": { + "title": "Authorization Method", + "type": "object", + "order": 0, + "oneOf": [ { + "type": "object", + "title": "OAuth2.0", + "required": [ "client_id", "client_secret", "refresh_token", "access_token", "token_expiry_date" ], + "properties": { + "auth_type": { + "type": "string", + "const": "oauth2.0" + }, + "client_id": { + "type": "string", + "description": "The API ID of the SmartSheets developer application.", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "description": "The API Secret the SmartSheets developer application.", + "airbyte_secret": true + }, + "access_token": { + "type": "string", + "description": "Access Token for making authenticated requests.", + "airbyte_secret": true + }, + "token_expiry_date": { + "type": "string", + "description": "The date-time when the access token should be refreshed.", + "format": "date-time" + }, + "refresh_token": { + "type": "string", + "description": "The key to refresh the expired access_token.", + "airbyte_secret": true + } + } + }, { + "title": "API Access Token", + "type": "object", + "required": [ "access_token" ], + "properties": { + "auth_type": { + "type": "string", + "const": "access_token" + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "The access token to use for accessing your data from Smartsheets. This access token must be generated by a user with at least read access to the data you'd like to replicate. Generate an access token in the Smartsheets main menu by clicking Account > Apps & Integrations > API Access. See the setup guide for information on how to obtain this token.", + "airbyte_secret": true + } + } + } ] + }, + "spreadsheet_id": { + "title": "Sheet ID", + "description": "The spreadsheet ID. Find it by opening the spreadsheet then navigating to File > Properties", + "type": "string", + "order": 1 + }, + "start_datetime": { + "title": "Start Datetime", + "type": "string", + "examples": [ "2000-01-01T13:00:00", "2000-01-01T13:00:00-07:00" ], + "description": "Only rows modified after this date/time will be replicated. This should be an ISO 8601 string, for instance: `2000-01-01T13:00:00`", + "format": "date-time", + "default": "2020-01-01T00:00:00+00:00", + "order": 2, + "airbyte_hidden": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": [ "credentials", "auth_type" ], + "predicate_value": "oauth2.0", + "oauth_config_specification": { + "complete_oauth_output_specification": { + "type": "object", + "properties": { + "access_token": { + "type": "string", + "path_in_connector_config": [ "credentials", "access_token" ] + }, + "refresh_token": { + "type": "string", + "path_in_connector_config": [ "credentials", "refresh_token" ] + }, + "token_expiry_date": { + "type": "string", + "format": "date-time", + "path_in_connector_config": [ "credentials", "token_expiry_date" ] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_id" ] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_secret" ] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": [ "app.smartsheet.com", "api.smartsheet.com" ] + } + }, { + "sourceDefinitionId": "200330b2-ea62-4d11-ac6d-cfe3e3f8ab2b", + "name": "Snapchat Marketing", + "dockerRepository": "airbyte/source-snapchat-marketing", + "dockerImageTag": "0.1.16", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/snapchat-marketing", + "icon": "snapchat.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/snapchat-marketing", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Snapchat Marketing Spec", + "type": "object", + "required": [ "client_id", "client_secret", "refresh_token" ], + "properties": { + "client_id": { + "title": "Client ID", + "type": "string", + "description": "The Client ID of your Snapchat developer application.", + "airbyte_secret": true, + "order": 0 + }, + "client_secret": { + "title": "Client Secret", + "type": "string", + "description": "The Client Secret of your Snapchat developer application.", + "airbyte_secret": true, + "order": 1 + }, + "refresh_token": { + "title": "Refresh Token", + "type": "string", + "description": "Refresh Token to renew the expired Access Token.", + "airbyte_secret": true, + "order": 2 + }, + "start_date": { + "title": "Start Date", + "type": "string", + "description": "Date in the format 2022-01-01. Any data before this date will not be replicated.", + "examples": [ "2022-01-01" ], + "default": "2022-01-01", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "order": 3, + "format": "date" + }, + "end_date": { + "type": "string", + "title": "End Date", + "description": "Date in the format 2017-01-25. Any data after this date will not be replicated.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": [ "2022-01-30" ], + "order": 4, + "format": "date" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": [ ], + "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], + "oauthFlowOutputParameters": [ [ "refresh_token" ] ] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "accounts.snapchat.com", "adsapi.snapchat.com" ] + } + }, { + "sourceDefinitionId": "e2d65910-8c8b-40a1-ae7d-ee2416b2bfa2", + "name": "Snowflake", + "dockerRepository": "airbyte/source-snowflake", + "dockerImageTag": "0.1.34", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/snowflake", + "icon": "snowflake.svg", + "sourceType": "database", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/snowflake", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Snowflake Source Spec", + "type": "object", + "required": [ "host", "role", "warehouse", "database" ], + "properties": { + "credentials": { + "title": "Authorization Method", + "type": "object", + "oneOf": [ { + "type": "object", + "title": "OAuth2.0", + "order": 0, + "required": [ "client_id", "client_secret", "auth_type" ], + "properties": { + "auth_type": { + "type": "string", + "const": "OAuth", + "order": 0 + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "The Client ID of your Snowflake developer application.", + "airbyte_secret": true, + "order": 1 + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "The Client Secret of your Snowflake developer application.", + "airbyte_secret": true, + "order": 2 + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "Access Token for making authenticated requests.", + "airbyte_secret": true, + "order": 3 + }, + "refresh_token": { + "type": "string", + "title": "Refresh Token", + "description": "Refresh Token for making authenticated requests.", + "airbyte_secret": true, + "order": 4 + } + } + }, { + "title": "Username and Password", + "type": "object", + "required": [ "username", "password", "auth_type" ], + "order": 1, + "properties": { + "auth_type": { + "type": "string", + "const": "username/password", + "order": 0 + }, + "username": { + "description": "The username you created to allow Airbyte to access the database.", + "examples": [ "AIRBYTE_USER" ], + "type": "string", + "title": "Username", + "order": 1 + }, + "password": { + "description": "The password associated with the username.", + "type": "string", + "airbyte_secret": true, + "title": "Password", + "order": 2 + } + } + } ], + "order": 0 + }, + "host": { + "description": "The host domain of the snowflake instance (must include the account, region, cloud environment, and end with snowflakecomputing.com).", + "examples": [ "accountname.us-east-2.aws.snowflakecomputing.com" ], + "type": "string", + "title": "Account Name", + "order": 1 + }, + "role": { + "description": "The role you created for Airbyte to access Snowflake.", + "examples": [ "AIRBYTE_ROLE" ], + "type": "string", + "title": "Role", + "order": 2 + }, + "warehouse": { + "description": "The warehouse you created for Airbyte to access data.", + "examples": [ "AIRBYTE_WAREHOUSE" ], + "type": "string", + "title": "Warehouse", + "order": 3 + }, + "database": { + "description": "The database you created for Airbyte to access data.", + "examples": [ "AIRBYTE_DATABASE" ], + "type": "string", + "title": "Database", + "order": 4 + }, + "schema": { + "description": "The source Snowflake schema tables. Leave empty to access tables from multiple schemas.", + "examples": [ "AIRBYTE_SCHEMA" ], + "type": "string", + "title": "Schema", + "order": 5 + }, + "jdbc_url_params": { + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", + "title": "JDBC URL Params", + "type": "string", + "order": 6 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": [ "credentials", "auth_type" ], + "predicate_value": "OAuth", + "oauth_config_specification": { + "oauth_user_input_from_connector_config_specification": { + "type": "object", + "properties": { + "host": { + "type": "string", + "path_in_connector_config": [ "host" ] + }, + "role": { + "type": "string", + "path_in_connector_config": [ "role" ] + } + } + }, + "complete_oauth_output_specification": { + "type": "object", + "properties": { + "access_token": { + "type": "string", + "path_in_connector_config": [ "credentials", "access_token" ] + }, + "refresh_token": { + "type": "string", + "path_in_connector_config": [ "credentials", "refresh_token" ] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_id" ] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_secret" ] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": [ "${host}" ] + } + }, { + "sourceDefinitionId": "3ab1d7d0-1577-4ab9-bcc4-1ff6a4c2c9f2", + "name": "Sonar Cloud", + "dockerRepository": "airbyte/source-sonar-cloud", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/sonar-cloud", + "icon": "sonarcloud.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/sonar-cloud", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Sonar Cloud Spec", + "type": "object", + "required": [ "user_token", "organization", "component_keys" ], + "additionalProperties": true, + "properties": { + "user_token": { + "title": "User Token", + "type": "string", + "description": "Your User Token. See here. The token is case sensitive.", + "airbyte_secret": true + }, + "organization": { + "title": "Organization", + "type": "string", + "description": "Organization key. See here.", + "examples": [ "airbyte" ] + }, + "component_keys": { + "title": "Component Keys", + "type": "array", + "description": "Comma-separated list of component keys.", + "examples": [ "airbyte-ws-order", "airbyte-ws-checkout" ] + }, + "start_date": { + "title": "Start date", + "type": "string", + "description": "To retrieve issues created after the given date (inclusive).", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": [ "YYYY-MM-DD" ], + "format": "date" + }, + "end_date": { + "title": "End date", + "type": "string", + "description": "To retrieve issues created before the given date (inclusive).", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": [ "YYYY-MM-DD" ], + "format": "date" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": [ "sonarcloud.io" ] + } + }, { + "sourceDefinitionId": "62235e65-af7a-4138-9130-0bda954eb6a8", + "name": "SpaceX API", + "dockerRepository": "airbyte/source-spacex-api", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/spacex-api", + "icon": "spacex.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/spacex-api", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Spacex Api Spec", + "type": "object", + "additionalProperties": true, + "properties": { + "id": { + "title": "Unique ID for specific source target", + "type": "string", + "desciption": "Optional, For a specific ID" + }, + "options": { + "title": "Configuration options for endpoints", + "type": "string", + "desciption": "Optional, Possible values for an endpoint. Example values for launches-latest, upcoming, past" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "77225a51-cd15-4a13-af02-65816bd0ecf4", + "name": "Square", + "dockerRepository": "airbyte/source-square", + "dockerImageTag": "0.2.2", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/square", + "icon": "square.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/square", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Square Spec", + "type": "object", + "required": [ "is_sandbox" ], + "additionalProperties": true, + "properties": { + "credentials": { + "title": "Authentication", + "description": "Choose how to authenticate to Square.", + "type": "object", + "order": 0, + "oneOf": [ { + "title": "Oauth authentication", + "type": "object", + "required": [ "auth_type", "client_id", "client_secret", "refresh_token" ], + "properties": { + "credentials_title": { + "type": "string", + "const": "OAuth Credentials", + "order": 0 + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "The Square-issued ID of your application", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "The Square-issued application secret for your application", + "airbyte_secret": true + }, + "refresh_token": { + "title": "Refresh Token", + "type": "string", + "description": "A refresh token generated using the above client ID and secret", + "airbyte_secret": true + } + } + }, { + "title": "API key", + "type": "object", + "required": [ "auth_type", "api_key" ], + "properties": { + "credentials_title": { + "type": "string", + "const": "API Key", + "order": 0 + }, + "api_key": { + "type": "string", + "title": "API key token", + "description": "The API key for a Square application", + "airbyte_secret": true + } + } + } ] + }, + "is_sandbox": { + "type": "boolean", + "description": "Determines whether to use the sandbox or production environment.", + "title": "Sandbox", + "default": false, + "order": 1 + }, + "start_date": { + "type": "string", + "description": "UTC date in the format YYYY-MM-DD. Any data before this date will not be replicated. If not set, all data will be replicated.", + "title": "Start Date", + "default": "2021-01-01", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "order": "2,", + "format": "date" + }, + "include_deleted_objects": { + "type": "boolean", + "description": "In some streams there is an option to include deleted objects (Items, Categories, Discounts, Taxes)", + "title": "Include Deleted Objects", + "default": false, + "order": 3 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": [ "credentials", "0" ], + "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], + "oauthFlowOutputParameters": [ [ "refresh_token" ] ] + } + }, + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": [ "credentials", "auth_type" ], + "predicate_value": "Oauth", + "oauth_config_specification": { + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "refresh_token": { + "type": "string", + "path_in_connector_config": [ "credentials", "refresh_token" ] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_id" ] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_secret" ] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": [ "connect.squareupsandbox.com", "connect.squareup.com" ] + } + }, { + "sourceDefinitionId": "7a4327c4-315a-11ec-8d3d-0242ac130003", + "name": "Strava", + "dockerRepository": "airbyte/source-strava", + "dockerImageTag": "0.1.4", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/strava", + "icon": "strava.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/strava", + "connectionSpecification": { + "$schema": "https://json-schema.org/draft-07/schema#", + "title": "Strava Spec", + "type": "object", + "required": [ "client_id", "client_secret", "refresh_token", "athlete_id", "start_date" ], + "additionalProperties": true, + "properties": { + "auth_type": { + "type": "string", + "const": "Client", + "enum": [ "Client" ], + "default": "Client" + }, + "client_id": { + "type": "string", + "description": "The Client ID of your Strava developer application.", + "title": "Client ID", + "pattern": "^[0-9_\\-]+$", + "examples": [ "12345" ], + "order": 0 + }, + "client_secret": { + "type": "string", + "description": "The Client Secret of your Strava developer application.", + "title": "Client Secret", + "pattern": "^[0-9a-fA-F]+$", + "examples": [ "fc6243f283e51f6ca989aab298b17da125496f50" ], + "airbyte_secret": true, + "order": 1 + }, + "refresh_token": { + "type": "string", + "description": "The Refresh Token with the activity: read_all permissions.", + "title": "Refresh Token", + "pattern": "^[0-9a-fA-F]+$", + "examples": [ "fc6243f283e51f6ca989aab298b17da125496f50" ], + "airbyte_secret": true, + "order": 2 + }, + "athlete_id": { + "type": "integer", + "description": "The Athlete ID of your Strava developer application.", + "title": "Athlete ID", + "pattern": "^[0-9_\\-]+$", + "examples": [ "17831421" ], + "order": 3 + }, + "start_date": { + "type": "string", + "description": "UTC date and time. Any data before this date will not be replicated.", + "title": "Start Date", + "examples": [ "2021-03-01T00:00:00Z" ], + "format": "date-time", + "order": 4 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": [ "auth_type" ], + "predicate_value": "Client", + "oauth_config_specification": { + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": true, + "properties": { + "refresh_token": { + "type": "string", + "path_in_connector_config": [ "refresh_token" ] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": true, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": [ "client_id" ] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": [ "client_secret" ] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": [ "strava.com" ] + } + }, { + "sourceDefinitionId": "74cbd708-46c3-4512-9c93-abd5c3e9a94d", + "name": "Statuspage", + "dockerRepository": "airbyte/source-statuspage", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/statuspage", + "icon": "statuspage.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/statuspage", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Statuspage Spec", + "type": "object", + "required": [ "api_key" ], + "additionalProperties": true, + "properties": { + "api_key": { + "title": "API Key", + "type": "string", + "description": "Your API Key. See here.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "e094cb9a-26de-4645-8761-65c0c425d1de", + "name": "Stripe", + "dockerRepository": "airbyte/source-stripe", + "dockerImageTag": "3.4.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/stripe", + "icon": "stripe.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/stripe", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Stripe Source Spec", + "type": "object", + "required": [ "client_secret", "account_id", "start_date" ], + "properties": { + "account_id": { + "type": "string", + "title": "Account ID", + "description": "Your Stripe account ID (starts with 'acct_', find yours here).", + "order": 0 + }, + "client_secret": { + "type": "string", + "title": "Secret Key", + "description": "Stripe API key (usually starts with 'sk_live_'; find yours here).", + "airbyte_secret": true, + "order": 1 + }, + "start_date": { + "type": "string", + "title": "Replication start date", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Only data generated after this date will be replicated.", + "examples": [ "2017-01-25T00:00:00Z" ], + "format": "date-time", + "order": 2 + }, + "lookback_window_days": { + "type": "integer", + "title": "Lookback Window in days", + "default": 0, + "minimum": 0, + "description": "When set, the connector will always re-export data from the past N days, where N is the value set here. This is useful if your data is frequently updated after creation. More info here", + "order": 3 + }, + "slice_range": { + "type": "integer", + "title": "Data request time increment in days", + "default": 365, + "minimum": 1, + "examples": [ 1, 3, 10, 30, 180, 360 ], + "description": "The time increment used by the connector when requesting data from the Stripe API. The bigger the value is, the less requests will be made and faster the sync will be. On the other hand, the more seldom the state is persisted.", + "order": 4 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "api.stripe.com" ] + } + }, { + "sourceDefinitionId": "dd4632f4-15e0-4649-9b71-41719fb1fdee", + "name": "SurveyCTO", + "dockerRepository": "airbyte/source-surveycto", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/surveycto", + "icon": "surveycto.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/surveycto", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Surveycto Spec", + "type": "object", + "required": [ "server_name", "username", "password", "form_id" ], + "properties": { + "server_name": { + "type": "string", + "title": "Server Name", + "description": "The name of the SurveryCTO server", + "order": 0 + }, + "username": { + "type": "string", + "title": "Username", + "description": "Username to authenticate into the SurveyCTO server", + "order": 1 + }, + "password": { + "type": "string", + "title": "Password", + "description": "Password to authenticate into the SurveyCTO server", + "airbyte_secret": true, + "order": 2 + }, + "form_id": { + "type": "array", + "title": "Form's Id", + "description": "Unique identifier for one of the forms", + "order": 3 + }, + "start_date": { + "type": "string", + "description": "initial date for survey cto", + "title": "Start Date", + "examples": [ "Jan 09, 2022 00:00:00 AM" ], + "default": "Jan 09, 2022 00:00:00 AM", + "order": 4, + "pattern": "^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dic) [0-9]{2}, [0-9]{4} [0-9]{2}:[0-9]{2}:[0-9]{2} (AM|PM)$" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "badc5925-0485-42be-8caa-b34096cb71b5", + "name": "SurveyMonkey", + "dockerRepository": "airbyte/source-surveymonkey", + "dockerImageTag": "0.1.16", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/surveymonkey", + "icon": "surveymonkey.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/surveymonkey", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "SurveyMonkey Spec", + "type": "object", + "required": [ "start_date" ], + "additionalProperties": true, + "properties": { + "origin": { + "type": "string", + "order": 1, + "enum": [ "USA", "Europe", "Canada" ], + "default": "USA", + "title": "Origin datacenter of the SurveyMonkey account", + "description": "Depending on the originating datacenter of the SurveyMonkey account, the API access URL may be different." + }, + "credentials": { + "title": "SurveyMonkey Authorization Method", + "description": "The authorization method to use to retrieve data from SurveyMonkey", + "type": "object", + "required": [ "auth_method", "access_token" ], + "order": 2, + "properties": { + "auth_method": { + "type": "string", + "const": "oauth2.0", + "order": 0 + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "The Client ID of the SurveyMonkey developer application.", + "airbyte_secret": true, + "order": 1 + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "The Client Secret of the SurveyMonkey developer application.", + "airbyte_secret": true, + "order": 2 + }, + "access_token": { + "title": "Access Token", + "order": 3, + "type": "string", + "airbyte_secret": true, + "description": "Access Token for making authenticated requests. See the docs for information on how to generate this key." + } + } + }, + "start_date": { + "title": "Start Date", + "order": 3, + "type": "string", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z?$", + "examples": [ "2021-01-01T00:00:00Z" ], + "format": "date-time" + }, + "survey_ids": { + "type": "array", + "order": 4, + "items": { + "type": "string", + "pattern": "^[0-9]{8,9}$" + }, + "title": "Survey Monkey survey IDs", + "description": "IDs of the surveys from which you'd like to replicate data. If left empty, data from all boards to which you have access will be replicated." + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": [ "credentials", "auth_method" ], + "predicate_value": "oauth2.0", + "oauth_config_specification": { + "oauth_user_input_from_connector_config_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "origin": { + "type": "string", + "path_in_connector_config": [ "origin" ] + } + } + }, + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "access_token": { + "type": "string", + "path_in_connector_config": [ "credentials", "access_token" ] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_id" ] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_secret" ] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "api.surveymonkey.com" ] + } + }, { + "sourceDefinitionId": "4a4d887b-0f2d-4b33-ab7f-9b01b9072804", + "name": "SurveySparrow", + "dockerRepository": "airbyte/source-survey-sparrow", + "dockerImageTag": "0.2.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/survey-sparrow", + "icon": "surveysparrow.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/surveysparrow", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Survey Sparrow Spec", + "type": "object", + "required": [ "access_token" ], + "additionalProperties": true, + "properties": { + "access_token": { + "type": "string", + "description": "Your access token. See here. The key is case sensitive.", + "airbyte_secret": true, + "order": 0 + }, + "survey_id": { + "type": "array", + "description": "A List of your survey ids for survey-specific stream", + "order": 2 + }, + "region": { + "title": "Base URL", + "type": "object", + "description": "Is your account location is EU based? If yes, the base url to retrieve data will be different.", + "oneOf": [ { + "title": "EU-based account", + "type": "object", + "properties": { + "url_base": { + "type": "string", + "const": "https://eu-api.surveysparrow.com/v3" + } + } + }, { + "title": "Global account", + "type": "object", + "properties": { + "url_base": { + "type": "string", + "const": "https://api.surveysparrow.com/v3" + } + } + } ], + "default": { + "title": "Global account", + "type": "object", + "properties": { + "url_base": { + "type": "string", + "const": "https://api.surveysparrow.com/v3" + } + } + }, + "order": 1 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "f00d2cf4-3c28-499a-ba93-b50b6f26359e", + "name": "TalkDesk Explore", + "dockerRepository": "airbyte/source-talkdesk-explore", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/talkdesk-explore", + "icon": "talkdesk-explore.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Talkdesk Explore API Spec", + "type": "object", + "required": [ "start_date", "auth_url", "api_key" ], + "additionalProperties": false, + "properties": { + "start_date": { + "type": "string", + "title": "START DATE", + "description": "The date from which you'd like to replicate data for Talkdesk Explore API, in the format YYYY-MM-DDT00:00:00. All data generated after this date will be replicated.", + "examples": [ "2020-10-15T00:00:00" ], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}$", + "order": 0 + }, + "timezone": { + "type": "string", + "title": "TIMEZONE", + "description": "Timezone to use when generating reports. Only IANA timezones are supported (https://nodatime.org/TimeZones)", + "examples": [ "Europe/London", "America/Los_Angeles" ], + "default": "UTC", + "order": 1 + }, + "auth_url": { + "title": "AUTH URL", + "type": "string", + "description": "Talkdesk Auth URL. Only 'client_credentials' auth type supported at the moment.", + "examples": [ "https://xxxxxx.talkdeskid.com/oauth/token?grant_type=client_credentials" ], + "order": 2 + }, + "api_key": { + "title": "API KEY", + "type": "string", + "description": "Talkdesk API key.", + "order": 3 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "d1aa448b-7c54-498e-ad95-263cbebcd2db", + "name": "Tempo", + "dockerRepository": "airbyte/source-tempo", + "dockerImageTag": "0.3.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/tempo", + "icon": "tempo.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Tempo Spec", + "type": "object", + "required": [ "api_token" ], + "properties": { + "api_token": { + "type": "string", + "title": "API token", + "description": "Tempo API Token. Go to Tempo>Settings, scroll down to Data Access and select API integration.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": [ "api.tempo.io" ] + } + }, { + "sourceDefinitionId": "aa8ba6fd-4875-d94e-fc8d-4e1e09aa2503", + "name": "Teradata", + "dockerRepository": "airbyte/source-teradata", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/teradata", + "icon": "teradata.svg", + "sourceType": "database", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/teradata", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Teradata Source Spec", + "type": "object", + "required": [ "host", "database", "username" ], + "properties": { + "host": { + "title": "Host", + "description": "Hostname of the database.", + "type": "string", + "order": 0 + }, + "port": { + "title": "Port", + "description": "Port of the database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 3306, + "examples": [ "3306" ], + "order": 1 + }, + "database": { + "title": "Database", + "description": "Name of the database.", + "type": "string", + "order": 2 + }, + "username": { + "title": "Username", + "description": "Username to use to access the database.", + "type": "string", + "order": 3 + }, + "password": { + "title": "Password", + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 4 + }, + "jdbc_url_params": { + "title": "JDBC URL params", + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3)", + "type": "string", + "order": 5 + }, + "replication_method": { + "title": "Replication method", + "description": "Replication method to use for extracting data from the database. STANDARD replication requires no setup on the DB side but will not be able to represent deletions incrementally. CDC uses the Binlog to detect inserts, updates, and deletes. This needs to be configured on the source database itself.", + "type": "string", + "order": 6, + "default": "STANDARD", + "enum": [ "STANDARD", "CDC" ] + }, + "ssl": { + "title": "SSL Connection", + "description": "Encrypt data using SSL. When activating SSL, please select one of the connection modes.", + "type": "boolean", + "default": false, + "order": 7 + }, + "ssl_mode": { + "title": "SSL Modes", + "description": "SSL connection modes. \n disable - Chose this mode to disable encryption of communication between Airbyte and destination database\n allow - Chose this mode to enable encryption only when required by the destination database\n prefer - Chose this mode to allow unencrypted connection only if the destination database does not support encryption\n require - Chose this mode to always require encryption. If the destination database server does not support encryption, connection will fail\n verify-ca - Chose this mode to always require encryption and to verify that the destination database server has a valid SSL certificate\n verify-full - This is the most secure mode. Chose this mode to always require encryption and to verify the identity of the destination database server\n See more information - in the docs.", + "type": "object", + "order": 8, + "oneOf": [ { + "title": "disable", + "additionalProperties": true, + "description": "Disable SSL.", + "required": [ "mode" ], + "properties": { + "mode": { + "type": "string", + "const": "disable", + "order": 0 + } + } + }, { + "title": "allow", + "additionalProperties": true, + "description": "Allow SSL mode.", + "required": [ "mode" ], + "properties": { + "mode": { + "type": "string", + "const": "allow", + "order": 0 + } + } + }, { + "title": "prefer", + "additionalProperties": true, + "description": "Prefer SSL mode.", + "required": [ "mode" ], + "properties": { + "mode": { + "type": "string", + "const": "prefer", + "order": 0 + } + } + }, { + "title": "require", + "additionalProperties": true, + "description": "Require SSL mode.", + "required": [ "mode" ], + "properties": { + "mode": { + "type": "string", + "const": "require", + "order": 0 + } + } + }, { + "title": "verify-ca", + "additionalProperties": true, + "description": "Verify-ca SSL mode.", + "required": [ "mode", "ssl_ca_certificate" ], + "properties": { + "mode": { + "type": "string", + "const": "verify-ca", + "order": 0 + }, + "ssl_ca_certificate": { + "type": "string", + "title": "CA certificate", + "description": "Specifies the file name of a PEM file that contains Certificate Authority (CA) certificates for use with SSLMODE=verify-ca.\n See more information - in the docs.", + "airbyte_secret": true, + "multiline": true, + "order": 1 + } + } + }, { + "title": "verify-full", + "additionalProperties": true, + "description": "Verify-full SSL mode.", + "required": [ "mode", "ssl_ca_certificate" ], + "properties": { + "mode": { + "type": "string", + "const": "verify-full", + "order": 0 + }, + "ssl_ca_certificate": { + "type": "string", + "title": "CA certificate", + "description": "Specifies the file name of a PEM file that contains Certificate Authority (CA) certificates for use with SSLMODE=verify-full.\n See more information - in the docs.", + "airbyte_secret": true, + "multiline": true, + "order": 1 + } + } + } ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": [ "${host}" ] + } + }, { + "sourceDefinitionId": "0dad1a35-ccf8-4d03-b73e-6788c00b13ae", + "name": "TiDB", + "dockerRepository": "airbyte/source-tidb", + "dockerImageTag": "0.2.4", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/tidb", + "icon": "tidb.svg", + "sourceType": "database", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/tidb", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "TiDB Source Spec", + "type": "object", + "required": [ "host", "port", "database", "username" ], + "properties": { + "host": { + "description": "Hostname of the database.", + "title": "Host", + "type": "string", + "order": 0 + }, + "port": { + "description": "Port of the database.", + "title": "Port", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 4000, + "examples": [ "4000" ], + "order": 1 + }, + "database": { + "description": "Name of the database.", + "title": "Database", + "type": "string", + "order": 2 + }, + "username": { + "description": "Username to use to access the database.", + "title": "Username", + "type": "string", + "order": 3 + }, + "password": { + "description": "Password associated with the username.", + "title": "Password", + "type": "string", + "airbyte_secret": true, + "order": 4 + }, + "jdbc_url_params": { + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3)", + "title": "JDBC URL Params", + "type": "string", + "order": 5 + }, + "ssl": { + "title": "SSL Connection", + "description": "Encrypt data using SSL.", + "type": "boolean", + "default": false, + "order": 6 + }, + "tunnel_method": { + "type": "object", + "title": "SSH Tunnel Method", + "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", + "oneOf": [ { + "title": "No Tunnel", + "required": [ "tunnel_method" ], + "properties": { + "tunnel_method": { + "description": "No ssh tunnel needed to connect to database", + "type": "string", + "const": "NO_TUNNEL", + "order": 0 + } + } + }, { + "title": "SSH Key Authentication", + "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [ "22" ], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host.", + "type": "string", + "order": 3 + }, + "ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + }, { + "title": "Password Authentication", + "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [ "22" ], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host", + "type": "string", + "order": 3 + }, + "tunnel_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 4 + } + } + } ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": [ "${host}", "${tunnel_method.tunnel_host}" ] + } + }, { + "sourceDefinitionId": "4bfac00d-ce15-44ff-95b9-9e3c3e8fbd35", + "name": "TikTok Marketing", + "dockerRepository": "airbyte/source-tiktok-marketing", + "dockerImageTag": "3.0.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/tiktok-marketing", + "icon": "tiktok.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/tiktok-marketing", + "changelogUrl": "https://docs.airbyte.com/integrations/sources/tiktok-marketing", + "connectionSpecification": { + "title": "TikTok Marketing Source Spec", + "type": "object", + "properties": { + "credentials": { + "title": "Authentication Method", + "description": "Authentication method", + "default": { }, + "order": 0, + "type": "object", + "oneOf": [ { + "title": "OAuth2.0", + "type": "object", + "properties": { + "auth_type": { + "title": "Auth Type", + "const": "oauth2.0", + "order": 0, + "type": "string" + }, + "app_id": { + "title": "App ID", + "description": "The Developer Application App ID.", + "airbyte_secret": true, + "type": "string" + }, + "secret": { + "title": "Secret", + "description": "The Developer Application Secret.", + "airbyte_secret": true, + "type": "string" + }, + "access_token": { + "title": "Access Token", + "description": "Long-term Authorized Access Token.", + "airbyte_secret": true, + "type": "string" + }, + "advertiser_id": { + "title": "Advertiser ID", + "description": "The Advertiser ID to filter reports and streams. Let this empty to retrieve all.", + "type": "string" + } + }, + "required": [ "app_id", "secret", "access_token" ] + }, { + "title": "Sandbox Access Token", + "type": "object", + "properties": { + "auth_type": { + "title": "Auth Type", + "const": "sandbox_access_token", + "order": 0, + "type": "string" + }, + "advertiser_id": { + "title": "Advertiser ID", + "description": "The Advertiser ID which generated for the developer's Sandbox application.", + "type": "string" + }, + "access_token": { + "title": "Access Token", + "description": "The long-term authorized access token.", + "airbyte_secret": true, + "type": "string" + } + }, + "required": [ "advertiser_id", "access_token" ] + } ] + }, + "start_date": { + "title": "Replication Start Date", + "description": "The Start Date in format: YYYY-MM-DD. Any data before this date will not be replicated. If this parameter is not set, all data will be replicated.", + "default": "2016-09-01", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "order": 1, + "type": "string", + "format": "date" + }, + "end_date": { + "title": "End Date", + "description": "The date until which you'd like to replicate data for all incremental streams, in the format YYYY-MM-DD. All data generated between start_date and this date will be replicated. Not setting this option will result in always syncing the data till the current date.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "order": 2, + "type": "string", + "format": "date" + }, + "attribution_window": { + "title": "Attribution Window", + "description": "The attribution window in days.", + "default": 0, + "order": 3, + "type": "integer" + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "overwrite", "append", "append_dedup" ], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": [ "credentials", "auth_type" ], + "predicate_value": "oauth2.0", + "oauth_config_specification": { + "complete_oauth_output_specification": { + "title": "CompleteOauthOutputSpecification", + "type": "object", + "properties": { + "access_token": { + "title": "Access Token", + "path_in_connector_config": [ "credentials", "access_token" ], + "type": "string" + } + }, + "required": [ "access_token" ] + }, + "complete_oauth_server_input_specification": { + "title": "CompleteOauthServerInputSpecification", + "type": "object", + "properties": { + "app_id": { + "title": "App Id", + "type": "string" + }, + "secret": { + "title": "Secret", + "type": "string" + } + }, + "required": [ "app_id", "secret" ] + }, + "complete_oauth_server_output_specification": { + "title": "CompleteOauthServerOutputSpecification", + "type": "object", + "properties": { + "app_id": { + "title": "App Id", + "path_in_connector_config": [ "credentials", "app_id" ], + "type": "string" + }, + "secret": { + "title": "Secret", + "path_in_connector_config": [ "credentials", "secret" ], + "type": "string" + } + }, + "required": [ "app_id", "secret" ] + } + } + }, + "additionalProperties": true + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "sandbox-ads.tiktok.com", "business-api.tiktok.com" ] + } + }, { + "sourceDefinitionId": "bc617b5f-1b9e-4a2d-bebe-782fd454a771", + "name": "Timely", + "dockerRepository": "airbyte/source-timely", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/timely", + "icon": "timely.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Timely Integration Spec", + "type": "object", + "required": [ "account_id", "start_date", "bearer_token" ], + "additionalProperties": false, + "properties": { + "account_id": { + "title": "account_id", + "type": "string", + "description": "Timely account id" + }, + "start_date": { + "title": "startDate", + "type": "string", + "description": "start date", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "example": "2022-05-06" + }, + "bearer_token": { + "title": "Bearer token", + "type": "string", + "description": "Timely bearer token" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "6240848f-f795-45eb-8f5e-c7542822fc03", + "name": "TMDb", + "dockerRepository": "airbyte/source-tmdb", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/tmdb", + "icon": "tmdb.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/tmdb", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Tmdb Spec", + "type": "object", + "required": [ "api_key", "movie_id", "query", "language" ], + "additionalProperties": true, + "properties": { + "api_key": { + "title": "Unique key for establishing connection", + "type": "string", + "description": "API Key from tmdb account", + "airbyte_secret": true + }, + "movie_id": { + "title": "Movie ID for targeting movies", + "type": "string", + "description": "Target movie ID, Mandate for movie streams (Example is 550)", + "examples": [ 550, 560 ] + }, + "query": { + "title": "Query for search streams", + "type": "string", + "description": "Target movie ID, Mandate for search streams", + "examples": [ "Marvel", "DC" ] + }, + "language": { + "title": "Language for filtering", + "type": "string", + "description": "Language expressed in ISO 639-1 scheme, Mandate for required streams (Example en-US)", + "examples": [ "en-US", "en-UK" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "7d272065-c316-4c04-a433-cd4ee143f83e", + "name": "Todoist", + "dockerRepository": "airbyte/source-todoist", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/todoist", + "icon": "todoist.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/todoist", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Todoist Spec", + "type": "object", + "required": [ "token" ], + "properties": { + "token": { + "type": "string", + "description": "Your API Token. See here. The token is case sensitive.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "7e7c844f-2300-4342-b7d3-6dd7992593cd", + "name": "Toggl", + "dockerRepository": "airbyte/source-toggl", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/toggl", + "icon": "toggl.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/toggl", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Toggl Spec", + "type": "object", + "required": [ "api_token", "organization_id", "workspace_id", "start_date", "end_date" ], + "additionalProperties": true, + "properties": { + "api_token": { + "title": "API token", + "type": "string", + "description": "Your API Token. See here. The token is case sensitive.", + "airbyte_secret": true + }, + "organization_id": { + "title": "Organization ID", + "type": "integer", + "description": "Your organization id. See here." + }, + "workspace_id": { + "title": "Workspace ID", + "type": "integer", + "description": "Your workspace id. See here." + }, + "start_date": { + "title": "Start date", + "type": "string", + "description": "To retrieve time entries created after the given date (inclusive).", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": [ "YYYY-MM-DD" ] + }, + "end_date": { + "title": "End date", + "type": "string", + "description": "To retrieve time entries created before the given date (inclusive).", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": [ "YYYY-MM-DD" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "d42bd69f-6bf0-4d0b-9209-16231af07a92", + "name": "The Guardian API", + "dockerRepository": "airbyte/source-the-guardian-api", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/the-guardian-api", + "icon": "theguardian.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/the-guardian-api", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "The Guardian Api Spec", + "type": "object", + "required": [ "api_key", "start_date" ], + "additionalProperties": true, + "properties": { + "api_key": { + "title": "API Key", + "type": "string", + "description": "Your API Key. See here. The key is case sensitive.", + "airbyte_secret": true + }, + "start_date": { + "title": "Start Date", + "type": "string", + "description": "Use this to set the minimum date (YYYY-MM-DD) of the results. Results older than the start_date will not be shown.", + "pattern": "^([1-9][0-9]{3})\\-(0?[1-9]|1[012])\\-(0?[1-9]|[12][0-9]|3[01])$", + "examples": [ "YYYY-MM-DD" ] + }, + "query": { + "title": "Query", + "type": "string", + "description": "(Optional) The query (q) parameter filters the results to only those that include that search term. The q parameter supports AND, OR and NOT operators.", + "examples": [ "environment AND NOT water", "environment AND political", "amusement park", "political" ] + }, + "tag": { + "title": "Tag", + "type": "string", + "description": "(Optional) A tag is a piece of data that is used by The Guardian to categorise content. Use this parameter to filter results by showing only the ones matching the entered tag. See here for a list of all tags, and here for the tags endpoint documentation.", + "examples": [ "environment/recycling", "environment/plasticbags", "environment/energyefficiency" ] + }, + "section": { + "title": "Section", + "type": "string", + "description": "(Optional) Use this to filter the results by a particular section. See here for a list of all sections, and here for the sections endpoint documentation.", + "examples": [ "media", "technology", "housing-network" ] + }, + "end_date": { + "title": "End Date", + "type": "string", + "description": "(Optional) Use this to set the maximum date (YYYY-MM-DD) of the results. Results newer than the end_date will not be shown. Default is set to the current date (today) for incremental syncs.", + "pattern": "^([1-9][0-9]{3})\\-(0?[1-9]|1[012])\\-(0?[1-9]|[12][0-9]|3[01])$", + "examples": [ "YYYY-MM-DD" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "f9b6c538-ee12-42fe-8d4b-0c10f5955417", + "name": "TPLcentral", + "dockerRepository": "airbyte/source-tplcentral", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/tplcentral", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/tplcentral", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Tplcentral Spec", + "type": "object", + "required": [ "url_base", "client_id", "client_secret" ], + "additionalProperties": false, + "properties": { + "url_base": { + "title": "URL base", + "type": "string", + "format": "uri", + "default": "https://secure-wms.com/", + "pattern": "^https://" + }, + "client_id": { + "title": "Client ID", + "type": "string" + }, + "client_secret": { + "title": "Client secret", + "type": "string", + "airbyte_secret": true + }, + "user_login_id": { + "title": "User login ID", + "description": "User login ID and/or name is required", + "type": "integer" + }, + "user_login": { + "title": "User login name", + "description": "User login ID and/or name is required", + "type": "string" + }, + "tpl_key": { + "title": "3PL GUID", + "type": "string" + }, + "customer_id": { + "title": "Customer ID", + "type": "integer" + }, + "facility_id": { + "title": "Facility ID", + "type": "integer" + }, + "start_date": { + "title": "Start date", + "description": "Date and time together in RFC 3339 format, for example, 2018-11-13T20:20:39+00:00.", + "type": "string", + "format": "date-time" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "8da67652-004c-11ec-9a03-0242ac130003", + "name": "Trello", + "dockerRepository": "airbyte/source-trello", + "dockerImageTag": "0.3.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/trello", + "icon": "trello.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/trello", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Trello Spec", + "type": "object", + "required": [ "key", "token", "start_date" ], + "additionalProperties": true, + "properties": { + "key": { + "type": "string", + "title": "API key", + "description": "Trello API key. See the docs for instructions on how to generate it.", + "airbyte_secret": true, + "order": 0 + }, + "token": { + "type": "string", + "title": "API token", + "description": "Trello API token. See the docs for instructions on how to generate it.", + "airbyte_secret": true, + "order": 1 + }, + "start_date": { + "type": "string", + "title": "Start Date", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", + "examples": [ "2021-03-01T00:00:00Z" ], + "format": "date-time", + "order": 2 + }, + "board_ids": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[0-9a-fA-F]{24}$" + }, + "title": "Trello Board IDs", + "description": "IDs of the boards to replicate data from. If left empty, data from all boards to which you have access will be replicated.", + "order": 3 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": [ ], + "oauth_config_specification": { + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "token": { + "type": "string", + "path_in_connector_config": [ "token" ] + }, + "key": { + "type": "string", + "path_in_connector_config": [ "key" ] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": [ "client_id" ] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": [ "client_secret" ] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": [ "api.trello.com" ] + } + }, { + "sourceDefinitionId": "d7e23ea6-d741-4314-9209-a33c91a2e945", + "name": "TrustPilot", + "dockerRepository": "airbyte/source-trustpilot", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/trustpilot", + "icon": "trustpilot.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Trustpilot Spec", + "type": "object", + "required": [ "credentials", "business_units", "start_date" ], + "properties": { + "credentials": { + "title": "Authorization Method", + "type": "object", + "order": 0, + "oneOf": [ { + "type": "object", + "title": "OAuth 2.0", + "required": [ "client_id", "client_secret", "refresh_token", "access_token", "token_expiry_date" ], + "properties": { + "auth_type": { + "type": "string", + "const": "oauth2.0" + }, + "client_id": { + "type": "string", + "title": "API key", + "description": "The API key of the Trustpilot API application. (represents the OAuth Client ID)", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "title": "Secret", + "description": "The Secret of the Trustpilot API application. (represents the OAuth Client Secret)", + "airbyte_secret": true + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "Access Token for making authenticated requests.", + "airbyte_secret": true + }, + "token_expiry_date": { + "type": "string", + "title": "Token expiry date time", + "description": "The date-time when the access token should be refreshed.", + "format": "date-time" + }, + "refresh_token": { + "type": "string", + "title": "Refresh token", + "description": "The key to refresh the expired access_token.", + "airbyte_secret": true + } + } + }, { + "type": "object", + "title": "API Key", + "description": "The API key authentication method gives you access to only the streams which are part of the Public API. When you want to get streams available via the Consumer API (e.g. the private reviews) you need to use authentication method OAuth 2.0.", + "required": [ "client_id" ], + "properties": { + "auth_type": { + "type": "string", + "const": "apikey" + }, + "client_id": { + "type": "string", + "title": "API key", + "description": "The API key of the Trustpilot API application.", + "airbyte_secret": true + } + } + } ] + }, + "business_units": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Business Unit names", + "description": "The names of business units which shall be synchronized. Some streams e.g. configured_business_units or private_reviews use this configuration.", + "examples": [ "mydomain.com", "www.mydomain.com" ] + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "For streams with sync. method incremental the start date time to be used", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": [ "%Y-%m-%dT%H:%M:%S" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "bd14b08f-9f43-400f-b2b6-7248b5c72561", + "name": "TVMaze Schedule", + "dockerRepository": "airbyte/source-tvmaze-schedule", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/tvmaze-schedule", + "icon": "tvmazeschedule.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/tvmaze-schedule", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "TVMaze Schedule Spec", + "type": "object", + "required": [ "start_date", "domestic_schedule_country_code" ], + "additionalProperties": true, + "properties": { + "start_date": { + "type": "string", + "description": "Start date for TV schedule retrieval. May be in the future.", + "order": 0, + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" + }, + "end_date": { + "type": "string", + "description": "End date for TV schedule retrieval. May be in the future. Optional.\n", + "order": 1, + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" + }, + "domestic_schedule_country_code": { + "type": "string", + "description": "Country code for domestic TV schedule retrieval.", + "examples": [ "US", "GB" ] + }, + "web_schedule_country_code": { + "type": "string", + "description": "ISO 3166-1 country code for web TV schedule retrieval. Leave blank for\nall countries plus global web channels (e.g. Netflix). Alternatively,\nset to 'global' for just global web channels.\n", + "examples": [ "US", "GB", "global" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "b9dc6155-672e-42ea-b10d-9f1f1fb95ab1", + "name": "Twilio", + "dockerRepository": "airbyte/source-twilio", + "dockerImageTag": "0.5.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/twilio", + "icon": "twilio.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/twilio", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Twilio Spec", + "type": "object", + "required": [ "account_sid", "auth_token", "start_date" ], + "additionalProperties": true, + "properties": { + "account_sid": { + "title": "Account ID", + "description": "Twilio account SID", + "airbyte_secret": true, + "type": "string", + "order": 1 + }, + "auth_token": { + "title": "Auth Token", + "description": "Twilio Auth Token.", + "airbyte_secret": true, + "type": "string", + "order": 2 + }, + "start_date": { + "title": "Replication Start Date", + "description": "UTC date and time in the format 2020-10-01T00:00:00Z. Any data before this date will not be replicated.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": [ "2020-10-01T00:00:00Z" ], + "type": "string", + "order": 3, + "format": "date-time" + }, + "lookback_window": { + "title": "Lookback window", + "description": "How far into the past to look for records. (in minutes)", + "examples": [ 60 ], + "default": 0, + "minimum": 0, + "maximum": 576000, + "type": "integer", + "order": 4 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ "append" ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "api.twilio.com", "monitor.twilio.com" ] + } + }, { + "sourceDefinitionId": "2446953b-b794-429b-a9b3-c821ba992a48", + "name": "Twilio Taskrouter", + "dockerRepository": "airbyte/source-twilio-taskrouter", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/twilio-taskrouter", + "icon": "twilio.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/twilio-taskrouter", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Twilio Taskrouter Spec", + "type": "object", + "required": [ "account_sid", "auth_token" ], + "additionalProperties": true, + "properties": { + "account_sid": { + "title": "Account SID", + "type": "string", + "description": "Twilio Account ID", + "airbyte_secret": true + }, + "auth_token": { + "type": "string", + "description": "Twilio Auth Token", + "airbyte_secret": true, + "title": "Auth Token" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "d7fd4f40-5e5a-4b8b-918f-a73077f8c131", + "name": "Twitter", + "dockerRepository": "airbyte/source-twitter", + "dockerImageTag": "0.1.2", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/twitter", + "icon": "twitter.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/twitter", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Twitter Spec", + "type": "object", + "required": [ "api_key", "query" ], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "title": "Access Token", + "description": "App only Bearer Token. See the docs for more information on how to obtain this token.", + "airbyte_secret": true, + "order": 0 + }, + "query": { + "type": "string", + "title": "Search Query", + "description": "Query for matching Tweets. You can learn how to build this query by reading build a query guide .", + "order": 1 + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "The start date for retrieving tweets cannot be more than 7 days in the past.", + "format": "date-time", + "order": 2 + }, + "end_date": { + "type": "string", + "title": "End Date", + "description": "The end date for retrieving tweets must be a minimum of 10 seconds prior to the request time.", + "format": "date-time", + "order": 3 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": [ "api.twitter.com" ] + } + }, { + "sourceDefinitionId": "3c0c3cd1-b3e0-464a-9090-d3ceb5f92346", + "name": "Tyntec SMS", + "dockerRepository": "airbyte/source-tyntec-sms", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/tyntec-sms", + "icon": "tyntec.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/tyntec-sms", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Tyntec Sms Spec", + "type": "object", + "required": [ "api_key", "to", "from" ], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "title": "Tyntec API Key", + "description": "Your Tyntec API Key. See here", + "order": 0, + "airbyte_secret": true + }, + "to": { + "type": "string", + "title": "SMS Message Recipient Phone", + "description": "The phone number of the SMS message recipient (international).", + "order": 1 + }, + "from": { + "type": "string", + "title": "SMS Message Sender Phone", + "description": "The phone number of the SMS message sender (international).", + "order": 2 + }, + "message": { + "type": "string", + "title": "SMS Message Body", + "description": "The content of the SMS message to be sent.", + "order": 3 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "e7eff203-90bf-43e5-a240-19ea3056c474", + "name": "Typeform", + "dockerRepository": "airbyte/source-typeform", + "dockerImageTag": "0.1.12", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/typeform", + "icon": "typeform.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/typeform", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Typeform Spec", + "type": "object", + "required": [ "token", "start_date" ], + "additionalProperties": true, + "properties": { + "token": { + "type": "string", + "description": "The API Token for a Typeform account.", + "title": "API Token", + "airbyte_secret": true, + "order": 0 + }, + "start_date": { + "type": "string", + "description": "UTC date and time in the format: YYYY-MM-DDTHH:mm:ss[Z]. Any data before this date will not be replicated.", + "title": "Start Date", + "examples": [ "2020-01-01T00:00:00Z" ], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "order": 1, + "format": "date-time" + }, + "form_ids": { + "title": "Form IDs to replicate", + "description": "When this parameter is set, the connector will replicate data only from the input forms. Otherwise, all forms in your Typeform account will be replicated. You can find form IDs in your form URLs. For example, in the URL \"https://mysite.typeform.com/to/u6nXL7\" the form_id is u6nXL7. You can find form URLs on Share panel", + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true, + "order": 2 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": [ "api.typeform.com" ] + } + }, { + "sourceDefinitionId": "f77914a1-442b-4195-9355-8810a1f4ed3f", + "name": "Unleash", + "dockerRepository": "airbyte/source-unleash", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/unleash", + "icon": "unleash.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/unleash", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Unleash Source Spec", + "type": "object", + "required": [ "api_token", "api_url" ], + "additionalProperties": true, + "properties": { + "api_token": { + "title": "API Token Client", + "type": "string", + "description": "Your API Token (Server-Side SDK [Client]). See here. The token is case sensitive.", + "airbyte_secret": true, + "examples": [ "project:environment.be44368985f7fb3237c584ef86f3d6bdada42ddbd63a019d26955178", "*:environment.be44368985f7fb3237c584ef86f3d6bdada42ddbd63a019d26955178", "be44368985f7fb3237c584ef86f3d6bdada42ddbd63a019d26955178" ] + }, + "api_url": { + "title": "API URL", + "type": "string", + "description": "Your API URL. No trailing slash. ex: http://unleash.host.com/api" + }, + "project_name": { + "title": "Project Name", + "type": "string", + "description": "Use this if you want to filter the API call for only one given project (can be used in addition to the \"Feature Name Prefix\" field). See here" + }, + "nameprefix": { + "title": "Feature Name Prefix", + "type": "string", + "description": "Use this if you want to filter the API call for only one given project (can be used in addition to the \"Feature Name Prefix\" field). See here" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "c4cfaeda-c757-489a-8aba-859fb08b6970", + "name": "US Census", + "dockerRepository": "airbyte/source-us-census", + "dockerImageTag": "0.1.2", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/us-census", + "icon": "uscensus.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/us-census", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "https://api.census.gov/ Source Spec", + "type": "object", + "required": [ "api_key", "query_path" ], + "additionalProperties": false, + "properties": { + "query_params": { + "type": "string", + "description": "The query parameters portion of the GET request, without the api key", + "pattern": "^\\w+=[\\w,:*]+(&(?!key)\\w+=[\\w,:*]+)*$", + "examples": [ "get=NAME,NAICS2017_LABEL,LFO_LABEL,EMPSZES_LABEL,ESTAB,PAYANN,PAYQTR1,EMP&for=us:*&NAICS2017=72&LFO=001&EMPSZES=001", "get=MOVEDIN,GEOID1,GEOID2,MOVEDOUT,FULL1_NAME,FULL2_NAME,MOVEDNET&for=county:*" ] + }, + "query_path": { + "type": "string", + "description": "The path portion of the GET request", + "pattern": "^data(\\/[\\w\\d]+)+$", + "examples": [ "data/2019/cbp", "data/2018/acs", "data/timeseries/healthins/sahie" ] + }, + "api_key": { + "type": "string", + "description": "Your API Key. Get your key here.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "afa734e4-3571-11ec-991a-1e0031268139", + "name": "YouTube Analytics", + "dockerRepository": "airbyte/source-youtube-analytics", + "dockerImageTag": "0.1.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/youtube-analytics", + "icon": "youtube-analytics.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/youtube-analytics", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "YouTube Analytics Spec", + "type": "object", + "required": [ "credentials" ], + "additionalProperties": true, + "properties": { + "credentials": { + "title": "Authenticate via OAuth 2.0", + "type": "object", + "required": [ "client_id", "client_secret", "refresh_token" ], + "additionalProperties": true, + "properties": { + "client_id": { + "title": "Client ID", + "type": "string", + "description": "The Client ID of your developer application", + "airbyte_secret": true + }, + "client_secret": { + "title": "Client Secret", + "type": "string", + "description": "The client secret of your developer application", + "airbyte_secret": true + }, + "refresh_token": { + "title": "Refresh Token", + "type": "string", + "description": "A refresh token generated using the above client ID and secret", + "airbyte_secret": true + } + } + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": [ "credentials" ], + "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], + "oauthFlowOutputParameters": [ [ "refresh_token" ] ] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": [ "*.googleapis.com" ] + } + }, { + "sourceDefinitionId": "28ce1fbd-1e15-453f-aa9f-da6c4d928e92", + "name": "Vantage", + "dockerRepository": "airbyte/source-vantage", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/vantage", + "icon": "vantage.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/vantage", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Vantage Spec", + "type": "object", + "required": [ "access_token" ], + "additionalProperties": true, + "properties": { + "access_token": { + "title": "API Access Token", + "type": "string", + "description": "Your API Access token. See here.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "7e20ce3e-d820-4327-ad7a-88f3927fd97a", + "name": "VictorOps", + "dockerRepository": "farosai/airbyte-victorops-source", + "dockerImageTag": "0.1.23", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/victorops", + "icon": "victorops.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.faros.ai", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "VictorOps Spec", + "type": "object", + "required": [ "apiId", "apiKey" ], + "additionalProperties": true, + "properties": { + "apiId": { + "type": "string", + "title": "VictorOps API ID", + "airbyte_secret": true + }, + "apiKey": { + "type": "string", + "title": "VictorOps API key", + "airbyte_secret": true + }, + "maxContentLength": { + "type": "number", + "title": "VictorOps Content Length", + "description": "VictorOps API response content length limit, try increasing if 'RequestError' is encountered.", + "default": 500000 + }, + "pageLimit": { + "type": "number", + "title": "VictorOps Page Limit", + "default": 100 + }, + "currentPhase": { + "type": "string", + "title": "VictorOps Current Phase", + "default": "triggered,acknowledged,resolved" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "42495935-95de-4f5c-ae08-8fac00f6b308", + "name": "Visma E-conomic", + "dockerRepository": "airbyte/source-visma-economic", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/visma-economic", + "icon": "visma-e-conomic.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/visma-economic", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Visma E-conomic Spec", + "type": "object", + "required": [ "app_secret_token", "agreement_grant_token" ], + "properties": { + "app_secret_token": { + "title": "App Secret Token", + "type": "string", + "description": "Identification token for app accessing data", + "airbyte_secret": true + }, + "agreement_grant_token": { + "title": "Agreement Grant Token", + "type": "string", + "description": "Identifier for the grant issued by an agreement", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "6c6d8b0c-db35-4cd1-a7de-0ca8b080f5ac", + "name": "Vitally", + "dockerRepository": "airbyte/source-vitally", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/vitally", + "icon": "vitally.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/vitally", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Vitally Spec", + "type": "object", + "required": [ "api_key", "status" ], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "title": "API Token", + "description": "The API Token for a Vitally account.", + "airbyte_secret": true + }, + "status": { + "type": "string", + "title": "Status", + "description": "Status of the Vitally accounts. One of the following values; active, churned, activeOrChurned.", + "enum": [ "active", "churned", "activeOrChurned" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "6fd1e833-dd6e-45ec-a727-ab917c5be892", + "name": "Xero", + "dockerRepository": "airbyte/source-xero", + "dockerImageTag": "0.2.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/xero", + "icon": "xero.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/xero", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Xero Spec", + "type": "object", + "required": [ "authentication", "tenant_id", "start_date" ], + "additionalProperties": true, + "properties": { + "authentication": { + "type": "object", + "title": "Authenticate via Xero (OAuth)", + "required": [ "client_id", "client_secret", "refresh_token", "access_token", "token_expiry_date" ], + "properties": { + "client_id": { + "type": "string", + "title": "Client ID", + "description": "Enter your Xero application's Client ID" + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "Enter your Xero application's Client Secret", + "airbyte_secret": true + }, + "refresh_token": { + "type": "string", + "title": "Refresh Token", + "description": "Enter your Xero application's refresh token", + "airbyte_secret": true + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "Enter your Xero application's access token", + "airbyte_secret": true + }, + "token_expiry_date": { + "type": "string", + "description": "The date-time when the access token should be refreshed" + } + }, + "order": 0 + }, + "tenant_id": { + "title": "Tenant ID", + "type": "string", + "description": "Enter your Xero organization's Tenant ID", + "airbyte_secret": true, + "order": 1 + }, + "start_date": { + "type": "string", + "title": "Start Date", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "description": "UTC date and time in the format YYYY-MM-DDTHH:mm:ssZ. Any data with created_at before this data will not be synced.", + "examples": [ "2022-03-01T00:00:00Z" ], + "format": "date-time", + "order": 2 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": [ ], + "oauth_config_specification": { + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "refresh_token": { + "type": "string", + "path_in_connector_config": [ "authentication", "refresh_token" ] + }, + "access_token": { + "type": "string", + "path_in_connector_config": [ "authentication", "access_token" ] + }, + "token_expiry_date": { + "type": "string", + "path_in_connector_config": [ "authentication", "token_expiry_date" ], + "format": "date-time" + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": [ "authentication", "client_id" ] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": [ "authentication", "client_secret" ] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": [ "api.xero.com" ] + } + }, { + "sourceDefinitionId": "80fddd16-17bd-4c0c-bf4a-80df7863fc9d", + "name": "xkcd", + "dockerRepository": "airbyte/source-xkcd", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/xkcd", + "icon": "xkcd.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/xkcd", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Xkcd Spec", + "type": "object", + "properties": { } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "5db8292c-5f5a-11ed-9b6a-0242ac120002", + "name": "Weatherstack", + "dockerRepository": "airbyte/source-weatherstack", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/weatherstack", + "icon": "weatherstack.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/weatherstack", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Weatherstack Spec", + "type": "object", + "required": [ "access_key", "query", "historical_date" ], + "properties": { + "is_paid_account": { + "order": 0, + "title": "Is Paid Account", + "description": "Toggle if you're using a Paid subscription", + "type": "boolean", + "default": false + }, + "access_key": { + "order": 1, + "type": "string", + "description": "API access key used to retrieve data from the Weatherstack API.(https://weatherstack.com/product)", + "airbyte_secret": true + }, + "query": { + "order": 2, + "type": "string", + "description": "A location to query such as city, IP, latitudeLongitude, or zipcode. Multiple locations with semicolon seperated if using a professional plan or higher. For more info- (https://weatherstack.com/documentation#query_parameter)", + "examples": [ "New York", "London", "98101" ] + }, + "historical_date": { + "order": 3, + "type": "string", + "description": "This is required for enabling the Historical date API with format- (YYYY-MM-DD). * Note, only supported by paid accounts", + "examples": [ "2015-01-21" ], + "default\"": "2000-01-01", + "pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2}" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "ef580275-d9a9-48bb-af5e-db0f5855be04", + "name": "Webflow", + "dockerRepository": "airbyte/source-webflow", + "dockerImageTag": "0.1.2", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/webflow", + "icon": "webflow.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/webflow", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Webflow Spec", + "type": "object", + "required": [ "api_key", "site_id" ], + "additionalProperties": false, + "properties": { + "site_id": { + "title": "Site id", + "type": "string", + "description": "The id of the Webflow site you are requesting data from. See https://developers.webflow.com/#sites", + "example": "a relatively long hex sequence", + "order": 0 + }, + "api_key": { + "title": "API token", + "type": "string", + "description": "The API token for authenticating to Webflow. See https://university.webflow.com/lesson/intro-to-the-webflow-api", + "example": "a very long hex sequence", + "order": 1, + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "e65f84c0-7598-458a-bfac-f770c381ff5d", + "name": "Whisky Hunter", + "dockerRepository": "airbyte/source-whisky-hunter", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/whisky-hunter", + "icon": "whiskyhunter.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/whisky-hunter", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Whisky Hunter Spec", + "type": "object", + "additionalProperties": true, + "properties": { } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "2a2552ca-9f78-4c1c-9eb7-4d0dc66d72df", + "name": "WooCommerce", + "dockerRepository": "airbyte/source-woocommerce", + "dockerImageTag": "0.2.2", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/woocommerce", + "icon": "woocommerce.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/woocommerce", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Woocommerce Spec", + "type": "object", + "required": [ "api_key", "api_secret", "shop", "start_date" ], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "title": "Customer Key", + "description": "Customer Key for API in WooCommerce shop", + "airbyte_secret": true, + "order": 0 + }, + "api_secret": { + "type": "string", + "title": "Customer Secret", + "description": "Customer Secret for API in WooCommerce shop", + "airbyte_secret": true, + "order": 1 + }, + "shop": { + "type": "string", + "title": "Shop Name", + "description": "The name of the store. For https://EXAMPLE.com, the shop name is 'EXAMPLE.com'.", + "order": 2 + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "The date you would like to replicate data from. Format: YYYY-MM-DD", + "examples": [ "2021-01-01" ], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "format": "date", + "order": 3 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": [ "${domain}" ] + } + }, { + "sourceDefinitionId": "ef3c99c6-9e90-43c8-9517-926cfd978517", + "name": "Workable", + "dockerRepository": "airbyte/source-workable", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/workable", + "icon": "workable.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/workable", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Workable API Spec", + "type": "object", + "required": [ "api_key", "account_subdomain", "start_date" ], + "additionalProperties": true, + "properties": { + "api_key": { + "title": "API Key", + "type": "string", + "description": "Your Workable API Key. See here.", + "airbyte_secret": true + }, + "account_subdomain": { + "title": "Account Subdomain", + "type": "string", + "description": "Your Workable account subdomain, e.g. https://your_account_subdomain.workable.com." + }, + "start_date": { + "title": "Start Date", + "type": "string", + "description": "Get data that was created since this date (format: YYYYMMDDTHHMMSSZ).", + "pattern": "^[0-9]{8}T[0-9]{6}Z$", + "examples": [ "20150708T115616Z", "20221115T225616Z" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "9c13f986-a13b-4988-b808-4705badf71c2", + "name": "Wrike", + "dockerRepository": "airbyte/source-wrike", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/wrike", + "icon": "wrike.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Wrike Spec", + "type": "object", + "required": [ "access_token", "wrike_instance" ], + "properties": { + "access_token": { + "type": "string", + "title": "Permanent Access Token", + "description": "Permanent access token. You can find documentation on how to acquire a permanent access token here", + "airbyte_secret": true, + "order": 0 + }, + "wrike_instance": { + "type": "string", + "title": "Wrike Instance (hostname)", + "description": "Wrike's instance such as `app-us2.wrike.com`", + "default": "app-us2.wrike.com", + "order": 1 + }, + "start_date": { + "type": "string", + "title": "Start date for comments", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Only comments after this date will be replicated.", + "examples": [ "2017-01-25T00:00:00Z" ], + "order": 2 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "b8c917bc-7d1b-4828-995f-6726820266d0", + "name": "Zapier Supported Storage", + "dockerRepository": "airbyte/source-zapier-supported-storage", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-supported-storage", + "icon": "zapiersupportedstorage.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zapier-supported-storage", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Zapier Supported Storage Spec", + "type": "object", + "required": [ "secret" ], + "additionalProperties": true, + "properties": { + "secret": { + "title": "Secret Key", + "type": "string", + "description": "Secret key supplied by zapier", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "40d24d0f-b8f9-4fe0-9e6c-b06c0f3f45e4", + "name": "Zendesk Chat", + "dockerRepository": "airbyte/source-zendesk-chat", + "dockerImageTag": "0.1.14", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-chat", + "icon": "zendesk-chat.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-chat", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Zendesk Chat Spec", + "type": "object", + "required": [ "start_date" ], + "additionalProperties": true, + "properties": { + "start_date": { + "type": "string", + "title": "Start Date", + "description": "The date from which you'd like to replicate data for Zendesk Chat API, in the format YYYY-MM-DDT00:00:00Z.", + "examples": [ "2021-02-01T00:00:00Z" ], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "format": "date-time" + }, + "subdomain": { + "type": "string", + "title": "Subdomain", + "description": "Required if you access Zendesk Chat from a Zendesk Support subdomain.", + "default": "" + }, + "credentials": { + "title": "Authorization Method", + "type": "object", + "oneOf": [ { + "type": "object", + "title": "OAuth2.0", + "required": [ "credentials" ], + "properties": { + "credentials": { + "type": "string", + "const": "oauth2.0", + "order": 0 + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "The Client ID of your OAuth application", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "The Client Secret of your OAuth application.", + "airbyte_secret": true + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "Access Token for making authenticated requests.", + "airbyte_secret": true + }, + "refresh_token": { + "type": "string", + "title": "Refresh Token", + "description": "Refresh Token to obtain new Access Token, when it's expired.", + "airbyte_secret": true + } + } + }, { + "type": "object", + "title": "Access Token", + "required": [ "credentials", "access_token" ], + "properties": { + "credentials": { + "type": "string", + "const": "access_token", + "order": 0 + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "The Access Token to make authenticated requests.", + "airbyte_secret": true + } + } + } ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": [ "credentials", "credentials" ], + "predicate_value": "oauth2.0", + "oauth_config_specification": { + "oauth_user_input_from_connector_config_specification": { + "type": "object", + "properties": { + "subdomain": { + "type": "string", + "path_in_connector_config": [ "subdomain" ] + } + } + }, + "complete_oauth_output_specification": { + "type": "object", + "properties": { + "access_token": { + "type": "string", + "path_in_connector_config": [ "credentials", "access_token" ] + }, + "refresh_token": { + "type": "string", + "path_in_connector_config": [ "credentials", "refresh_token" ] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_id" ] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_secret" ] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "zopim.com" ] + } + }, { + "sourceDefinitionId": "982eaa4c-bba1-4cce-a971-06a41f700b8c", + "name": "Zendesk Sell", + "dockerRepository": "airbyte/source-zendesk-sell", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-sell", + "icon": "zendesk.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-sell", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Source Zendesk Sell Spec", + "type": "object", + "required": [ "api_token" ], + "properties": { + "api_token": { + "title": "API token", + "type": "string", + "description": "The API token for authenticating to Zendesk Sell", + "examples": [ "f23yhd630otl94y85a8bf384958473pto95847fd006da49382716or937ruw059" ], + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "325e0640-e7b3-4e24-b823-3361008f603f", + "name": "Zendesk Sunshine", + "dockerRepository": "airbyte/source-zendesk-sunshine", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-sunshine", + "icon": "zendesk-sunshine.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk_sunshine", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Zendesk Sunshine Spec", + "type": "object", + "required": [ "start_date", "subdomain" ], + "additionalProperties": true, + "properties": { + "subdomain": { + "title": "Subdomain", + "type": "string", + "description": "The subdomain for your Zendesk Account." + }, + "start_date": { + "title": "Start Date", + "type": "string", + "description": "The date from which you'd like to replicate data for Zendesk Sunshine API, in the format YYYY-MM-DDT00:00:00Z.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": [ "2021-01-01T00:00:00Z" ] + }, + "credentials": { + "title": "Authorization Method", + "type": "object", + "oneOf": [ { + "type": "object", + "title": "OAuth2.0", + "required": [ "auth_method", "client_id", "client_secret", "access_token" ], + "properties": { + "auth_method": { + "type": "string", + "const": "oauth2.0", + "enum": [ "oauth2.0" ], + "default": "oauth2.0", + "order": 0 + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "The Client ID of your OAuth application.", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "The Client Secret of your OAuth application.", + "airbyte_secret": true + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "Long-term access Token for making authenticated requests.", + "airbyte_secret": true + } + } + }, { + "type": "object", + "title": "API Token", + "required": [ "auth_method", "api_token", "email" ], + "properties": { + "auth_method": { + "type": "string", + "const": "api_token", + "enum": [ "api_token" ], + "default": "api_token", + "order": 1 + }, + "api_token": { + "type": "string", + "title": "API Token", + "description": "API Token. See the docs for information on how to generate this key.", + "airbyte_secret": true + }, + "email": { + "type": "string", + "title": "Email", + "description": "The user email for your Zendesk account" + } + } + } ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": [ "credentials", "auth_method" ], + "predicate_value": "oauth2.0", + "oauth_config_specification": { + "oauth_user_input_from_connector_config_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "subdomain": { + "type": "string", + "path_in_connector_config": [ "subdomain" ] + } + } + }, + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "access_token": { + "type": "string", + "path_in_connector_config": [ "credentials", "access_token" ] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_id" ] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_secret" ] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "79c1aa37-dae3-42ae-b333-d1c105477715", + "name": "Zendesk Support", + "dockerRepository": "airbyte/source-zendesk-support", + "dockerImageTag": "0.2.27", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-support", + "icon": "zendesk-support.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-support", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Source Zendesk Support Spec", + "type": "object", + "required": [ "start_date", "subdomain" ], + "additionalProperties": true, + "properties": { + "start_date": { + "type": "string", + "title": "Start Date", + "description": "The date from which you'd like to replicate data for Zendesk Support API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", + "examples": [ "2020-10-15T00:00:00Z" ], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "format": "date-time" + }, + "subdomain": { + "type": "string", + "title": "Subdomain", + "description": "This is your Zendesk subdomain that can be found in your account URL. For example, in https://{MY_SUBDOMAIN}.zendesk.com/, where MY_SUBDOMAIN is the value of your subdomain." + }, + "credentials": { + "title": "Authentication", + "type": "object", + "description": "Zendesk service provides two authentication methods. Choose between: `OAuth2.0` or `API token`.", + "oneOf": [ { + "title": "OAuth2.0", + "type": "object", + "required": [ "access_token" ], + "additionalProperties": true, + "properties": { + "credentials": { + "type": "string", + "const": "oauth2.0", + "order": 0 + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "The value of the API token generated. See the docs for more information.", + "airbyte_secret": true + } + } + }, { + "title": "API Token", + "type": "object", + "required": [ "email", "api_token" ], + "additionalProperties": true, + "properties": { + "credentials": { + "type": "string", + "const": "api_token", + "order": 0 + }, + "email": { + "title": "Email", + "type": "string", + "description": "The user email for your Zendesk account." + }, + "api_token": { + "title": "API Token", + "type": "string", + "description": "The value of the API token generated. See the docs for more information.", + "airbyte_secret": true + } + } + } ] + }, + "ignore_pagination": { + "type": "boolean", + "default": false, + "description": "Makes each stream read a single page of data.", + "title": "Should the connector read the second and further pages of data.", + "airbyte_hidden": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": [ "credentials", "credentials" ], + "predicate_value": "oauth2.0", + "oauth_config_specification": { + "oauth_user_input_from_connector_config_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "subdomain": { + "type": "string", + "path_in_connector_config": [ "subdomain" ] + } + } + }, + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "access_token": { + "type": "string", + "path_in_connector_config": [ "credentials", "access_token" ] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_id" ] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_secret" ] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "${subdomain}.zendesk.com", "zendesk.com" ] + }, + "maxSecondsBetweenMessages": 10800 + }, { + "sourceDefinitionId": "c8630570-086d-4a40-99ae-ea5b18673071", + "name": "Zendesk Talk", + "dockerRepository": "airbyte/source-zendesk-talk", + "dockerImageTag": "0.1.7", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-talk", + "icon": "zendesk-talk.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-talk", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Source Zendesk Talk Spec", + "type": "object", + "required": [ "start_date", "subdomain" ], + "properties": { + "subdomain": { + "type": "string", + "title": "Subdomain", + "order": 0, + "description": "This is your Zendesk subdomain that can be found in your account URL. For example, in https://{MY_SUBDOMAIN}.zendesk.com/, where MY_SUBDOMAIN is the value of your subdomain." + }, + "credentials": { + "title": "Authentication", + "type": "object", + "order": 1, + "description": "Zendesk service provides two authentication methods. Choose between: `OAuth2.0` or `API token`.", + "oneOf": [ { + "title": "API Token", + "type": "object", + "required": [ "email", "api_token" ], + "additionalProperties": true, + "properties": { + "auth_type": { + "type": "string", + "const": "api_token" + }, + "email": { + "title": "Email", + "type": "string", + "description": "The user email for your Zendesk account." + }, + "api_token": { + "title": "API Token", + "type": "string", + "description": "The value of the API token generated. See the docs for more information.", + "airbyte_secret": true + } + } + }, { + "title": "OAuth2.0", + "type": "object", + "required": [ "access_token" ], + "additionalProperties": true, + "properties": { + "auth_type": { + "type": "string", + "const": "oauth2.0", + "order": 0 + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "The value of the API token generated. See the docs for more information.", + "airbyte_secret": true + } + } + } ] + }, + "start_date": { + "type": "string", + "title": "Start Date", + "order": 2, + "description": "The date from which you'd like to replicate data for Zendesk Talk API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", + "examples": [ "2020-10-15T00:00:00Z" ], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "format": "date-time" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": [ "credentials", "auth_type" ], + "predicate_value": "oauth2.0", + "oauth_config_specification": { + "oauth_user_input_from_connector_config_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "subdomain": { + "type": "string", + "path_in_connector_config": [ "subdomain" ] + } + } + }, + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "access_token": { + "type": "string", + "path_in_connector_config": [ "credentials", "access_token" ] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_id" ] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": [ "credentials", "client_secret" ] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "${subdomain}.zendesk.com", "zendesk.com" ] + } + }, { + "sourceDefinitionId": "8baba53d-2fe3-4e33-bc85-210d0eb62884", + "name": "Zenefits", + "dockerRepository": "airbyte/source-zenefits", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zenefits", + "icon": "zenefits.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Zenefits Integration Spec", + "type": "object", + "required": [ "token" ], + "additionalProperties": false, + "properties": { + "token": { + "title": "token", + "type": "string", + "description": "Use Sync with Zenefits button on the link given on the readme file, and get the token to access the api" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "f1e4c7f6-db5c-4035-981f-d35ab4998794", + "name": "Zenloop", + "dockerRepository": "airbyte/source-zenloop", + "dockerImageTag": "0.1.6", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zenloop", + "icon": "zenloop.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zenloop", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Zenloop Spec", + "type": "object", + "required": [ "api_token" ], + "properties": { + "api_token": { + "type": "string", + "description": "Zenloop API Token. You can get the API token in settings page here ", + "airbyte_secret": true + }, + "date_from": { + "type": "string", + "description": "Zenloop date_from. Format: 2021-10-24T03:30:30Z or 2021-10-24. Leave empty if only data from current data should be synced", + "examples": [ "2021-10-24T03:30:30Z" ] + }, + "survey_id": { + "type": "string", + "description": "Zenloop Survey ID. Can be found here. Leave empty to pull answers from all surveys", + "airbyte_secret": true + }, + "survey_group_id": { + "type": "string", + "description": "Zenloop Survey Group ID. Can be found by pulling All Survey Groups via SurveyGroups stream. Leave empty to pull answers from all survey groups", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": [ "api.zenloop.com" ] + } + }, { + "sourceDefinitionId": "cdaf146a-9b75-49fd-9dd2-9d64a0bb4781", + "name": "Sentry", + "dockerRepository": "airbyte/source-sentry", + "dockerImageTag": "0.2.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/sentry", + "icon": "sentry.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/sentry", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Sentry Spec", + "type": "object", + "required": [ "auth_token", "organization", "project" ], + "additionalProperties": true, + "properties": { + "auth_token": { + "type": "string", + "title": "Authentication Tokens", + "description": "Log into Sentry and then create authentication tokens.For self-hosted, you can find or create authentication tokens by visiting \"{instance_url_prefix}/settings/account/api/auth-tokens/\"", + "airbyte_secret": true + }, + "hostname": { + "type": "string", + "title": "Host Name", + "description": "Host name of Sentry API server.For self-hosted, specify your host name here. Otherwise, leave it empty.", + "default": "sentry.io" + }, + "organization": { + "type": "string", + "title": "Organization", + "description": "The slug of the organization the groups belong to." + }, + "project": { + "type": "string", + "title": "Project", + "description": "The name (slug) of the Project you want to sync." + }, + "discover_fields": { + "type": "array", + "item": "string", + "title": "Discover Event Fields", + "description": "Fields to retrieve when fetching discover events" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ "*" ] + }, + "maxSecondsBetweenMessages": 64800 + }, { + "sourceDefinitionId": "3dc3037c-5ce8-4661-adc2-f7a9e3c5ece5", + "name": "Zuora", + "dockerRepository": "airbyte/source-zuora", + "dockerImageTag": "0.1.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zuora", + "icon": "zuora.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zuora", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Zuora Connector Configuration", + "type": "object", + "required": [ "start_date", "tenant_endpoint", "data_query", "client_id", "client_secret" ], + "properties": { + "start_date": { + "type": "string", + "title": "Start Date", + "description": "Start Date in format: YYYY-MM-DD", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" + }, + "window_in_days": { + "type": "string", + "title": "Query Window (in days)", + "description": "The amount of days for each data-chunk begining from start_date. Bigger the value - faster the fetch. (0.1 - as for couple of hours, 1 - as for a Day; 364 - as for a Year).", + "examples": [ "0.5", "1", "30", "60", "90", "120", "200", "364" ], + "pattern": "^(0|[1-9]\\d*)(\\.\\d+)?$", + "default": "90" + }, + "tenant_endpoint": { + "title": "Tenant Endpoint Location", + "type": "string", + "description": "Please choose the right endpoint where your Tenant is located. More info by this Link", + "enum": [ "US Production", "US Cloud Production", "US API Sandbox", "US Cloud API Sandbox", "US Central Sandbox", "US Performance Test", "EU Production", "EU API Sandbox", "EU Central Sandbox" ] + }, + "data_query": { + "title": "Data Query Type", + "type": "string", + "description": "Choose between `Live`, or `Unlimited` - the optimized, replicated database at 12 hours freshness for high volume extraction Link", + "enum": [ "Live", "Unlimited" ], + "default": "Live" + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "Your OAuth user Client ID", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "Your OAuth user Client Secret", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "cd06e646-31bf-4dc8-af48-cbc6530fcad3", + "name": "Kustomer", + "dockerRepository": "airbyte/source-kustomer-singer", + "dockerImageTag": "0.1.2", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/kustomer", + "icon": "kustomer.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/kustomer", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Source Kustomer Singer Spec", + "type": "object", + "required": [ "api_token", "start_date" ], + "additionalProperties": true, + "properties": { + "api_token": { + "title": "API Token", + "type": "string", + "description": "Kustomer API Token. See the docs on how to obtain this", + "airbyte_secret": true + }, + "start_date": { + "title": "Start Date", + "type": "string", + "description": "The date from which you'd like to replicate the data", + "examples": [ "2019-01-01T00:00:00Z" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "4942d392-c7b5-4271-91f9-3b4f4e51eb3e", + "name": "ZohoCRM", + "dockerRepository": "airbyte/source-zoho-crm", + "dockerImageTag": "0.1.2", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zoho-crm", + "icon": "zohocrm.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zoho-crm", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Zoho Crm Configuration", + "type": "object", + "required": [ "client_id", "client_secret", "refresh_token", "environment", "dc_region", "edition" ], + "additionalProperties": true, + "properties": { + "client_id": { + "type": "string", + "title": "Client ID", + "description": "OAuth2.0 Client ID", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "OAuth2.0 Client Secret", + "airbyte_secret": true + }, + "refresh_token": { + "type": "string", + "title": "Refresh Token", + "description": "OAuth2.0 Refresh Token", + "airbyte_secret": true + }, + "dc_region": { + "title": "Data Center Location", + "type": "string", + "description": "Please choose the region of your Data Center location. More info by this Link", + "enum": [ "US", "AU", "EU", "IN", "CN", "JP" ] + }, + "environment": { + "title": "Environment", + "type": "string", + "description": "Please choose the environment", + "enum": [ "Production", "Developer", "Sandbox" ] + }, + "start_datetime": { + "title": "Start Date", + "type": [ "string", "null" ], + "examples": [ "2000-01-01", "2000-01-01 13:00", "2000-01-01 13:00:00", "2000-01-01T13:00+00:00", "2000-01-01T13:00:00-07:00" ], + "description": "ISO 8601, for instance: `YYYY-MM-DD`, `YYYY-MM-DD HH:MM:SS+HH:MM`", + "format": "date-time" + }, + "edition": { + "title": "Zoho CRM Edition", + "type": "string", + "description": "Choose your Edition of Zoho CRM to determine API Concurrency Limits", + "enum": [ "Free", "Standard", "Professional", "Enterprise", "Ultimate" ], + "default": "Free" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "a827c52e-791c-4135-a245-e233c5255199", + "name": "SFTP", + "dockerRepository": "airbyte/source-sftp", + "dockerImageTag": "0.1.2", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/sftp", + "icon": "sftp.svg", + "sourceType": "file", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/source/sftp", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "SFTP Source Spec", + "type": "object", + "required": [ "user", "host", "port" ], + "additionalProperties": true, + "properties": { + "user": { + "title": "User Name", + "description": "The server user", + "type": "string", + "order": 0 + }, + "host": { + "title": "Host Address", + "description": "The server host address", + "type": "string", + "examples": [ "www.host.com", "192.0.2.1" ], + "order": 1 + }, + "port": { + "title": "Port", + "description": "The server port", + "type": "integer", + "default": 22, + "examples": [ "22" ], + "order": 2 + }, + "credentials": { + "type": "object", + "title": "Authentication", + "description": "The server authentication method", + "order": 3, + "oneOf": [ { + "title": "Password Authentication", + "required": [ "auth_method", "auth_user_password" ], + "properties": { + "auth_method": { + "description": "Connect through password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "auth_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 1 + } + } + }, { + "title": "SSH Key Authentication", + "required": [ "auth_method", "auth_ssh_key" ], + "properties": { + "auth_method": { + "description": "Connect through ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "auth_ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 1 + } + } + } ] + }, + "file_types": { + "title": "File types", + "description": "Coma separated file types. Currently only 'csv' and 'json' types are supported.", + "type": "string", + "default": "csv,json", + "order": 4, + "examples": [ "csv,json", "csv" ] + }, + "folder_path": { + "title": "Folder Path", + "description": "The directory to search files for sync", + "type": "string", + "default": "", + "examples": [ "/logs/2022" ], + "order": 5 + }, + "file_pattern": { + "title": "File Pattern", + "description": "The regular expression to specify files for sync in a chosen Folder Path", + "type": "string", + "default": "", + "examples": [ "log-([0-9]{4})([0-9]{2})([0-9]{2}) - This will filter files which `log-yearmmdd`" ], + "order": 6 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "31e3242f-dee7-4cdc-a4b8-8e06c5458517", + "name": "SFTP Bulk", + "dockerRepository": "airbyte/source-sftp-bulk", + "dockerImageTag": "0.1.2", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/sftp-bulk", + "icon": "sftp.svg", + "sourceType": "file", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/source/ftp", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "FTP Source Spec", + "type": "object", + "required": [ "username", "host", "port", "stream_name", "start_date", "folder_path" ], + "additionalProperties": true, + "properties": { + "username": { + "title": "User Name", + "description": "The server user", + "type": "string", + "order": 0 + }, + "password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 1 + }, + "private_key": { + "title": "Private key", + "description": "The private key", + "type": "string", + "multiline": true, + "order": 2 + }, + "host": { + "title": "Host Address", + "description": "The server host address", + "type": "string", + "examples": [ "www.host.com", "192.0.2.1" ], + "order": 3 + }, + "port": { + "title": "Port", + "description": "The server port", + "type": "integer", + "default": 22, + "examples": [ "22" ], + "order": 4 + }, + "stream_name": { + "title": "Stream name", + "description": "The name of the stream or table you want to create", + "type": "string", + "examples": [ "ftp_contacts" ], + "order": 5 + }, + "file_type": { + "title": "File type", + "description": "The file type you want to sync. Currently only 'csv' and 'json' files are supported.", + "type": "string", + "default": "csv", + "enum": [ "csv", "json" ], + "order": 6, + "examples": [ "csv", "json" ] + }, + "separator": { + "title": "CSV Separator (Optional)", + "description": "The separator used in the CSV files. Define None if you want to use the Sniffer functionality", + "type": "string", + "default": ",", + "examples": [ "," ], + "order": 7 + }, + "folder_path": { + "title": "Folder Path (Optional)", + "description": "The directory to search files for sync", + "type": "string", + "default": "", + "examples": [ "/logs/2022" ], + "order": 8 + }, + "file_pattern": { + "title": "File Pattern (Optional)", + "description": "The regular expression to specify files for sync in a chosen Folder Path", + "type": "string", + "default": "", + "examples": [ "log-([0-9]{4})([0-9]{2})([0-9]{2}) - This will filter files which `log-yearmmdd`" ], + "order": 9 + }, + "file_most_recent": { + "title": "Most recent file (Optional)", + "description": "Sync only the most recent file for the configured folder path and file pattern", + "type": "boolean", + "default": false, + "order": 10 + }, + "start_date": { + "type": "string", + "title": "Start Date", + "format": "date-time", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": [ "2017-01-25T00:00:00Z" ], + "description": "The date from which you'd like to replicate data for all incremental streams, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", + "order": 11 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "6f2ac653-8623-43c4-8950-19218c7caf3d", + "name": "Firebolt", + "dockerRepository": "airbyte/source-firebolt", + "dockerImageTag": "0.2.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/firebolt", + "icon": "firebolt.svg", + "sourceType": "database", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/firebolt", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Firebolt Spec", + "type": "object", + "required": [ "username", "password", "database" ], + "additionalProperties": true, + "properties": { + "username": { + "type": "string", + "title": "Username", + "description": "Firebolt email address you use to login.", + "examples": [ "username@email.com" ] + }, + "password": { + "type": "string", + "title": "Password", + "description": "Firebolt password.", + "airbyte_secret": true + }, + "account": { + "type": "string", + "title": "Account", + "description": "Firebolt account to login." + }, + "host": { + "type": "string", + "title": "Host", + "description": "The host name of your Firebolt database.", + "examples": [ "api.app.firebolt.io" ] + }, + "database": { + "type": "string", + "title": "Database", + "description": "The database to connect to." + }, + "engine": { + "type": "string", + "title": "Engine", + "description": "Engine name or url to connect to." + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "7cf88806-25f5-4e1a-b422-b2fa9e1b0090", + "name": "Elasticsearch", + "dockerRepository": "airbyte/source-elasticsearch", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/elasticsearch", + "icon": "elasticsearch.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/source/elasticsearch", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Elasticsearch Connection Configuration", + "type": "object", + "required": [ "endpoint" ], + "additionalProperties": true, + "properties": { + "endpoint": { + "title": "Server Endpoint", + "type": "string", + "description": "The full url of the Elasticsearch server" + }, + "authenticationMethod": { + "title": "Authentication Method", + "type": "object", + "description": "The type of authentication to be used", + "oneOf": [ { + "title": "None", + "additionalProperties": true, + "description": "No authentication will be used", + "required": [ "method" ], + "properties": { + "method": { + "type": "string", + "const": "none" + } + } + }, { + "title": "Api Key/Secret", + "additionalProperties": true, + "description": "Use a api key and secret combination to authenticate", + "required": [ "method", "apiKeyId", "apiKeySecret" ], + "properties": { + "method": { + "type": "string", + "const": "secret" + }, + "apiKeyId": { + "title": "API Key ID", + "description": "The Key ID to used when accessing an enterprise Elasticsearch instance.", + "type": "string" + }, + "apiKeySecret": { + "title": "API Key Secret", + "description": "The secret associated with the API Key ID.", + "type": "string", + "airbyte_secret": true + } + } + }, { + "title": "Username/Password", + "additionalProperties": true, + "description": "Basic auth header with a username and password", + "required": [ "method", "username", "password" ], + "properties": { + "method": { + "type": "string", + "const": "basic" + }, + "username": { + "title": "Username", + "description": "Basic auth username to access a secure Elasticsearch server", + "type": "string" + }, + "password": { + "title": "Password", + "description": "Basic auth password to access a secure Elasticsearch server", + "type": "string", + "airbyte_secret": true + } + } + } ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "03a53b13-794a-4d6b-8544-3b36ed8f3ce4", + "name": "Waiteraid", + "dockerRepository": "airbyte/source-waiteraid", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/waiteraid", + "icon": "waiteraid.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Waiteraid Spec", + "type": "object", + "required": [ "start_date", "auth_hash", "restid" ], + "additionalProperties": true, + "properties": { + "start_date": { + "title": "Start Date", + "type": "string", + "description": "Start getting data from that date.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": [ "YYYY-MM-DD" ] + }, + "auth_hash": { + "title": "Authentication Hash", + "type": "string", + "description": "Your WaiterAid API key, obtained from API request with Username and Password", + "airbyte_secret": true + }, + "restid": { + "title": "Restaurant ID", + "type": "string", + "description": "Your WaiterAid restaurant id from API request to getRestaurants", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "87c58f70-6f7a-4f70-aba5-bab1a458f5ba", + "name": "Wikipedia Pageviews", + "dockerRepository": "airbyte/source-wikipedia-pageviews", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/wikipedia-pageviews", + "icon": "wikipediapageviews.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Wikipedia Pageviews Spec", + "type": "object", + "required": [ "project", "access", "agent", "article", "start", "end", "country" ], + "additionalProperties": true, + "properties": { + "project": { + "type": "string", + "title": "Project", + "description": "If you want to filter by project, use the domain of any Wikimedia project.", + "examples": [ "en.wikipedia.org", "www.mediawiki.org", "commons.wikimedia.org" ] + }, + "access": { + "type": "string", + "title": "Access", + "description": "If you want to filter by access method, use one of desktop, mobile-app or mobile-web. If you are interested in pageviews regardless of access method, use all-access.", + "examples": [ "all-access", "desktop", "mobile-app", "mobile-web" ] + }, + "agent": { + "type": "string", + "title": "Agent", + "description": "If you want to filter by agent type, use one of user, automated or spider. If you are interested in pageviews regardless of agent type, use all-agents.", + "examples": [ "all-agents", "user", "spider", "automated" ] + }, + "article": { + "type": "string", + "title": "Article", + "description": "The title of any article in the specified project. Any spaces should be replaced with underscores. It also should be URI-encoded, so that non-URI-safe characters like %, / or ? are accepted.", + "examples": [ "Are_You_the_One%3F" ] + }, + "start": { + "type": "string", + "title": "Start", + "description": "The date of the first day to include, in YYYYMMDD or YYYYMMDDHH format." + }, + "end": { + "type": "string", + "title": "End", + "description": "The date of the last day to include, in YYYYMMDD or YYYYMMDDHH format." + }, + "country": { + "type": "string", + "title": "Country", + "description": "The ISO 3166-1 alpha-2 code of a country for which to retrieve top articles.", + "examples": [ "FR", "IN" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "05b0bce2-4ec4-4534-bb1a-5d0127bd91b7", + "name": "WorkRamp", + "dockerRepository": "airbyte/source-workramp", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/workramp", + "icon": "workramp.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/workramp", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Workramp Spec", + "type": "object", + "required": [ "api_key", "academy_id" ], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "title": "API Token", + "description": "The API Token for Workramp", + "airbyte_secret": true + }, + "academy_id": { + "type": "string", + "title": "Academy ID", + "description": "The id of the Academy" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "7865dce4-2211-4f6a-88e5-9d0fe161afe7", + "name": "Yandex Metrica", + "dockerRepository": "airbyte/source-yandex-metrica", + "dockerImageTag": "1.0.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/yandex-metrica", + "icon": "yandexmetrica.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/yandex-metrica", + "connectionSpecification": { + "$schema": "https://json-schema.org/draft-07/schema#", + "title": "Yandex Metrica Spec", + "type": "object", + "required": [ "auth_token", "counter_id", "start_date" ], + "additionalProperties": true, + "properties": { + "auth_token": { + "type": "string", + "title": "Authentication Token", + "description": "Your Yandex Metrica API access token", + "airbyte_secret": true, + "order": 0 + }, + "counter_id": { + "type": "string", + "title": "Counter ID", + "description": "Counter ID", + "pattern": "^[0-9]+$", + "order": 1 + }, + "start_date": { + "title": "Start Date", + "type": "string", + "description": "Starting point for your data replication, in format of \"YYYY-MM-DD\".", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "format": "date", + "examples": [ "2022-01-01" ], + "order": 2 + }, + "end_date": { + "title": "End Date", + "type": "string", + "description": "Starting point for your data replication, in format of \"YYYY-MM-DD\". If not provided will sync till most recent date.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "format": "date", + "examples": [ "2022-01-01" ], + "order": 3 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": [ "api-metrica.yandex.net" ] + } + }, { + "sourceDefinitionId": "", + "name": "Yotpo", + "dockerRepository": "airbyte/source-yotpo", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/yotpo", + "icon": "yotpo.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/yotpo", + "connectionSpecification": { + "$schema": "https://json-schema.org/draft-07/schema#", + "title": "Yotpo Spec", + "type": "object", + "required": [ "access_token", "app_key", "start_date", "email" ], + "additionalProperties": true, + "properties": { + "access_token": { + "title": "Access Token", + "type": "string", + "description": "Access token recieved as a result of API call to https://api.yotpo.com/oauth/token (Ref- https://apidocs.yotpo.com/reference/yotpo-authentication)", + "airbyte_secret": true + }, + "app_key": { + "title": "App Key", + "type": "string", + "description": "App key found at settings (Ref- https://settings.yotpo.com/#/general_settings)" + }, + "start_date": { + "title": "Date-From Filter", + "type": "string", + "description": "Date time filter for incremental filter, Specify which date to extract from.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}Z$", + "examples": [ + "2022-03-01T00:00:00.000Z" + ], + "format": "date-time" + }, + "email": { + "title": "Registered email address", + "type": "string", + "description": "Email address registered with yotpo.", + "default": "example@gmail.com" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": [ "api.yotpo.com" ] + } + }, { + "sourceDefinitionId": "9c74c2d7-531a-4ebf-b6d8-6181f805ecdc", + "name": "Younium", + "dockerRepository": "airbyte/source-younium", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/younium", + "icon": "younium.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/younium", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Younium Spec", + "type": "object", + "required": [ "username", "password", "legal_entity" ], + "properties": { + "username": { + "title": "Username", + "type": "string", + "description": "Username for Younium account" + }, + "password": { + "title": "Password", + "type": "string", + "description": "Account password for younium account API key", + "airbyte_secret": true + }, + "legal_entity": { + "title": "Legal Entity", + "type": "string", + "description": "Legal Entity that data should be pulled from" + }, + "playground": { + "title": "Playground environment", + "type": "boolean", + "description": "Property defining if connector is used against playground or production environment", + "default": false + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "cbfd9856-1322-44fb-bcf1-0b39b7a8e92e", + "name": "Zoom", + "dockerRepository": "airbyte/source-zoom", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.io/integrations/sources/zoom", + "icon": "zoom.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zoom", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Zoom Spec", + "type": "object", + "required": [ "jwt_token" ], + "additionalProperties": true, + "properties": { + "jwt_token": { + "type": "string", + "description": "JWT Token", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "68b9c98e-0747-4c84-b05b-d30b47686725", + "name": "Braze", + "dockerRepository": "airbyte/source-braze", + "dockerImageTag": "0.1.3", + "documentationUrl": "https://docs.airbyte.io/integrations/sources/braze", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/braze", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Braze Spec", + "type": "object", + "additionalProperties": true, + "required": [ "url", "api_key", "start_date" ], + "properties": { + "url": { + "type": "string", + "title": "URL", + "description": "Braze REST API endpoint" + }, + "api_key": { + "type": "string", + "title": "Rest API Key", + "airbyte_secret": true, + "description": "Braze REST API key" + }, + "start_date": { + "type": "string", + "format": "date", + "title": "Start date", + "description": "Rows after this date will be synced" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + } ] +} From 823ac77bd2f0e59c273ea7b0a665922eae2caf5c Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Wed, 26 Apr 2023 06:03:00 +0530 Subject: [PATCH 023/187] fix conflicts --- .../src/main/resources/seed/oss_catalog.json | 166 ++++++++++-------- 1 file changed, 89 insertions(+), 77 deletions(-) diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json index 46ddbb304c26..41ccf21ca1e9 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json @@ -694,7 +694,7 @@ "destinationDefinitionId": "22f6c74f-5699-40ff-833c-4a879ea40133", "name": "BigQuery", "dockerRepository": "airbyte/destination-bigquery", - "dockerImageTag": "1.3.0", + "dockerImageTag": "1.3.1", "documentationUrl": "https://docs.airbyte.com/integrations/destinations/bigquery", "icon": "bigquery.svg", "spec": { @@ -872,7 +872,7 @@ "destinationDefinitionId": "079d5540-f236-4294-ba7c-ade8fd918496", "name": "BigQuery (denormalized typed struct)", "dockerRepository": "airbyte/destination-bigquery-denormalized", - "dockerImageTag": "1.3.0", + "dockerImageTag": "1.3.1", "documentationUrl": "https://docs.airbyte.com/integrations/destinations/bigquery", "icon": "bigquery.svg", "spec": { @@ -10029,7 +10029,7 @@ "sourceDefinitionId": "47f25999-dd5e-4636-8c39-e7cea2453331", "name": "Bing Ads", "dockerRepository": "airbyte/source-bing-ads", - "dockerImageTag": "0.1.19", + "dockerImageTag": "0.1.20", "documentationUrl": "https://docs.airbyte.com/integrations/sources/bing-ads", "icon": "bingads.svg", "sourceType": "api", @@ -10090,6 +10090,15 @@ "default": "2020-01-01", "description": "The start date from which to begin replicating report data. Any data generated before this date will not be replicated in reports. This is a UTC date in YYYY-MM-DD format.", "order": 5 + }, + "lookback_window": { + "title": "Lookback window", + "description": "Also known as attribution or conversion window. How far into the past to look for records (in days). If your conversion window has an hours/minutes granularity, round it up to the number of days exceeding. Used only for performance report streams in incremental mode.", + "type": "integer", + "default": 0, + "minimum": 0, + "maximum": 90, + "order": 6 } } }, @@ -12862,7 +12871,7 @@ "sourceDefinitionId": "778daa7c-feaf-4db6-96f3-70fd645acc77", "name": "File (CSV, JSON, Excel, Feather, Parquet)", "dockerRepository": "airbyte/source-file", - "dockerImageTag": "0.2.38", + "dockerImageTag": "0.3.0", "documentationUrl": "https://docs.airbyte.com/integrations/sources/file", "icon": "file.svg", "sourceType": "file", @@ -13557,7 +13566,7 @@ "sourceDefinitionId": "ef69ef6e-aa7f-4af1-a01d-ef775033524e", "name": "GitHub", "dockerRepository": "airbyte/source-github", - "dockerImageTag": "0.4.7", + "dockerImageTag": "0.4.8", "documentationUrl": "https://docs.airbyte.com/integrations/sources/github", "icon": "github.svg", "sourceType": "api", @@ -14410,7 +14419,7 @@ "sourceDefinitionId": "3cc2eafd-84aa-4dca-93af-322d9dfeec1a", "name": "Google Analytics 4 (GA4)", "dockerRepository": "airbyte/source-google-analytics-data-api", - "dockerImageTag": "0.1.3", + "dockerImageTag": "0.2.0", "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-analytics-data-api", "icon": "google-analytics.svg", "sourceType": "api", @@ -14496,7 +14505,7 @@ "date_ranges_start_date": { "type": "string", "title": "Start Date", - "description": "The start date from which to replicate report data in the format YYYY-MM-DD. Data generated before this date will not be included in the report.", + "description": "The start date from which to replicate report data in the format YYYY-MM-DD. Data generated before this date will not be included in the report. Not applied to custom Cohort reports.", "format": "date", "order": 2 }, @@ -14509,7 +14518,7 @@ "window_in_days": { "type": "integer", "title": "Data request time increment in days", - "description": "The time increment used by the connector when requesting data from the Google Analytics API. More information is available in the the docs. The bigger this value is, the faster the sync will be, but the more likely that sampling will be applied to your data, potentially causing inaccuracies in the returned results. We recommend setting this to 1 unless you have a hard requirement to make the sync faster at the expense of accuracy. The minimum allowed value for this field is 1, and the maximum is 364.", + "description": "The time increment used by the connector when requesting data from the Google Analytics API. More information is available in the the docs. The bigger this value is, the faster the sync will be, but the more likely that sampling will be applied to your data, potentially causing inaccuracies in the returned results. We recommend setting this to 1 unless you have a hard requirement to make the sync faster at the expense of accuracy. The minimum allowed value for this field is 1, and the maximum is 364. Not applied to custom Cohort reports.", "examples": [ 30, 60, 90, 120, 200, 364 ], "minimum": 1, "maximum": 364, @@ -15428,7 +15437,7 @@ "sourceDefinitionId": "36c891d9-4bd9-43ac-bad2-10e12756272c", "name": "HubSpot", "dockerRepository": "airbyte/source-hubspot", - "dockerImageTag": "0.6.0", + "dockerImageTag": "0.6.1", "documentationUrl": "https://docs.airbyte.com/integrations/sources/hubspot", "icon": "hubspot.svg", "sourceType": "api", @@ -16557,6 +16566,7 @@ "dockerRepository": "airbyte/source-lemlist", "dockerImageTag": "0.1.1", "documentationUrl": "https://docs.airbyte.com/integrations/sources/lemlist", + "icon": "lemlist.svg", "sourceType": "api", "spec": { "documentationUrl": "https://docs.airbyte.io/integrations/sources/lemlist", @@ -17071,7 +17081,7 @@ "sourceDefinitionId": "b03a9f3e-22a5-11eb-adc1-0242ac120002", "name": "Mailchimp", "dockerRepository": "airbyte/source-mailchimp", - "dockerImageTag": "0.3.5", + "dockerImageTag": "0.4.0", "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailchimp", "icon": "mailchimp.svg", "sourceType": "api", @@ -20605,7 +20615,7 @@ "sourceDefinitionId": "5cb7e5fe-38c2-11ec-8d3d-0242ac130003", "name": "Pinterest", "dockerRepository": "airbyte/source-pinterest", - "dockerImageTag": "0.2.4", + "dockerImageTag": "0.2.5", "documentationUrl": "https://docs.airbyte.com/integrations/sources/pinterest", "icon": "pinterest.svg", "sourceType": "api", @@ -20621,7 +20631,7 @@ "start_date": { "type": "string", "title": "Start Date", - "description": "A date in the format YYYY-MM-DD. If you have not set a date, it would be defaulted to latest allowed date by api (914 days from today).", + "description": "A date in the format YYYY-MM-DD. If you have not set a date, it would be defaulted to latest allowed date by api (89 days from today).", "examples": [ "2022-07-28" ] }, "status": { @@ -21210,7 +21220,7 @@ "sourceDefinitionId": "decd338e-5647-4c0b-adf4-da0e75f5a750", "name": "Postgres", "dockerRepository": "airbyte/source-postgres", - "dockerImageTag": "2.0.24", + "dockerImageTag": "2.0.25", "documentationUrl": "https://docs.airbyte.com/integrations/sources/postgres", "icon": "postgresql.svg", "sourceType": "database", @@ -23087,7 +23097,7 @@ "sourceDefinitionId": "b117307c-14b6-41aa-9422-947e34922962", "name": "Salesforce", "dockerRepository": "airbyte/source-salesforce", - "dockerImageTag": "2.0.9", + "dockerImageTag": "2.0.11", "documentationUrl": "https://docs.airbyte.com/integrations/sources/salesforce", "icon": "salesforce.svg", "sourceType": "api", @@ -23498,7 +23508,7 @@ "sourceDefinitionId": "9da77001-af33-4bcd-be46-6252bf9342b9", "name": "Shopify", "dockerRepository": "airbyte/source-shopify", - "dockerImageTag": "0.3.2", + "dockerImageTag": "0.3.3", "documentationUrl": "https://docs.airbyte.com/integrations/sources/shopify", "icon": "shopify.svg", "sourceType": "api", @@ -23582,6 +23592,7 @@ "description": "The date you would like to replicate data from. Format: YYYY-MM-DD. Any data before this date will not be replicated.", "examples": [ "2021-01-01" ], "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "format": "date", "order": 3 } } @@ -24766,7 +24777,7 @@ "sourceDefinitionId": "e094cb9a-26de-4645-8761-65c0c425d1de", "name": "Stripe", "dockerRepository": "airbyte/source-stripe", - "dockerImageTag": "3.4.0", + "dockerImageTag": "3.4.1", "documentationUrl": "https://docs.airbyte.com/integrations/sources/stripe", "icon": "stripe.svg", "sourceType": "api", @@ -24834,7 +24845,7 @@ "sourceDefinitionId": "dd4632f4-15e0-4649-9b71-41719fb1fdee", "name": "SurveyCTO", "dockerRepository": "airbyte/source-surveycto", - "dockerImageTag": "0.1.0", + "dockerImageTag": "0.1.1", "documentationUrl": "https://docs.airbyte.com/integrations/sources/surveycto", "icon": "surveycto.svg", "sourceType": "api", @@ -24868,7 +24879,7 @@ "form_id": { "type": "array", "title": "Form's Id", - "description": "Unique identifier for one of the forms", + "description": "Unique identifier for one of your forms", "order": 3 }, "start_date": { @@ -24878,7 +24889,7 @@ "examples": [ "Jan 09, 2022 00:00:00 AM" ], "default": "Jan 09, 2022 00:00:00 AM", "order": 4, - "pattern": "^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dic) [0-9]{2}, [0-9]{4} [0-9]{2}:[0-9]{2}:[0-9]{2} (AM|PM)$" + "pattern": "^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{2}, [0-9]{4} [0-9]{2}:[0-9]{2}:[0-9]{2} (AM|PM)$" } } }, @@ -28904,63 +28915,6 @@ "allowedHosts": { "hosts": [ "api-metrica.yandex.net" ] } - }, { - "sourceDefinitionId": "", - "name": "Yotpo", - "dockerRepository": "airbyte/source-yotpo", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/yotpo", - "icon": "yotpo.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/yotpo", - "connectionSpecification": { - "$schema": "https://json-schema.org/draft-07/schema#", - "title": "Yotpo Spec", - "type": "object", - "required": [ "access_token", "app_key", "start_date", "email" ], - "additionalProperties": true, - "properties": { - "access_token": { - "title": "Access Token", - "type": "string", - "description": "Access token recieved as a result of API call to https://api.yotpo.com/oauth/token (Ref- https://apidocs.yotpo.com/reference/yotpo-authentication)", - "airbyte_secret": true - }, - "app_key": { - "title": "App Key", - "type": "string", - "description": "App key found at settings (Ref- https://settings.yotpo.com/#/general_settings)" - }, - "start_date": { - "title": "Date-From Filter", - "type": "string", - "description": "Date time filter for incremental filter, Specify which date to extract from.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}Z$", - "examples": [ - "2022-03-01T00:00:00.000Z" - ], - "format": "date-time" - }, - "email": { - "title": "Registered email address", - "type": "string", - "description": "Email address registered with yotpo.", - "default": "example@gmail.com" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "allowedHosts": { - "hosts": [ "api.yotpo.com" ] - } }, { "sourceDefinitionId": "9c74c2d7-531a-4ebf-b6d8-6181f805ecdc", "name": "Younium", @@ -29047,6 +29001,7 @@ "dockerRepository": "airbyte/source-braze", "dockerImageTag": "0.1.3", "documentationUrl": "https://docs.airbyte.io/integrations/sources/braze", + "icon": "braze.svg", "sourceType": "api", "spec": { "documentationUrl": "https://docs.airbyte.com/integrations/sources/braze", @@ -29084,5 +29039,62 @@ "public": true, "custom": false, "releaseStage": "alpha" + }, { + "sourceDefinitionId": "", + "name": "Yotpo", + "dockerRepository": "airbyte/source-yotpo", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/yotpo", + "icon": "yotpo.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/yotpo", + "connectionSpecification": { + "$schema": "https://json-schema.org/draft-07/schema#", + "title": "Yotpo Spec", + "type": "object", + "required": [ "access_token", "app_key", "start_date", "email" ], + "additionalProperties": true, + "properties": { + "access_token": { + "title": "Access Token", + "type": "string", + "description": "Access token recieved as a result of API call to https://api.yotpo.com/oauth/token (Ref- https://apidocs.yotpo.com/reference/yotpo-authentication)", + "airbyte_secret": true + }, + "app_key": { + "title": "App Key", + "type": "string", + "description": "App key found at settings (Ref- https://settings.yotpo.com/#/general_settings)" + }, + "start_date": { + "title": "Date-From Filter", + "type": "string", + "description": "Date time filter for incremental filter, Specify which date to extract from.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}Z$", + "examples": [ + "2022-03-01T00:00:00.000Z" + ], + "format": "date-time" + }, + "email": { + "title": "Registered email address", + "type": "string", + "description": "Email address registered with yotpo.", + "default": "example@gmail.com" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": [ "api.yotpo.com" ] + } } ] -} +} \ No newline at end of file From 67aa645da6a92f1020e1f3a2db07b57197742d86 Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Wed, 26 Apr 2023 06:18:15 +0530 Subject: [PATCH 024/187] fix conflict oss --- .../src/main/resources/seed/oss_catalog.json | 59 +------------------ 1 file changed, 1 insertion(+), 58 deletions(-) diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json index 41ccf21ca1e9..4ef6b903565b 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json @@ -29039,62 +29039,5 @@ "public": true, "custom": false, "releaseStage": "alpha" - }, { - "sourceDefinitionId": "", - "name": "Yotpo", - "dockerRepository": "airbyte/source-yotpo", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/yotpo", - "icon": "yotpo.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/yotpo", - "connectionSpecification": { - "$schema": "https://json-schema.org/draft-07/schema#", - "title": "Yotpo Spec", - "type": "object", - "required": [ "access_token", "app_key", "start_date", "email" ], - "additionalProperties": true, - "properties": { - "access_token": { - "title": "Access Token", - "type": "string", - "description": "Access token recieved as a result of API call to https://api.yotpo.com/oauth/token (Ref- https://apidocs.yotpo.com/reference/yotpo-authentication)", - "airbyte_secret": true - }, - "app_key": { - "title": "App Key", - "type": "string", - "description": "App key found at settings (Ref- https://settings.yotpo.com/#/general_settings)" - }, - "start_date": { - "title": "Date-From Filter", - "type": "string", - "description": "Date time filter for incremental filter, Specify which date to extract from.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}Z$", - "examples": [ - "2022-03-01T00:00:00.000Z" - ], - "format": "date-time" - }, - "email": { - "title": "Registered email address", - "type": "string", - "description": "Email address registered with yotpo.", - "default": "example@gmail.com" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "allowedHosts": { - "hosts": [ "api.yotpo.com" ] - } } ] -} \ No newline at end of file +} \ No newline at end of file From 057992519e0b6ca165538c4ea4c76909108cbb1c Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Wed, 26 Apr 2023 06:33:14 +0530 Subject: [PATCH 025/187] fix conflict oss --- .../src/main/resources/seed/oss_catalog.json | 61222 ++++++++-------- 1 file changed, 32179 insertions(+), 29043 deletions(-) diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json index 4ef6b903565b..b99b292c99f6 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json @@ -1,29043 +1,32179 @@ -{ - "destinations": [ { - "destinationDefinitionId": "b4c5d105-31fd-4817-96b6-cb923bfc04cb", - "name": "Azure Blob Storage", - "dockerRepository": "airbyte/destination-azure-blob-storage", - "dockerImageTag": "0.2.0", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/azureblobstorage", - "icon": "azureblobstorage.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/azureblobstorage", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "AzureBlobStorage Destination Spec", - "type": "object", - "required": [ "azure_blob_storage_account_name", "azure_blob_storage_account_key", "format" ], - "additionalProperties": false, - "properties": { - "azure_blob_storage_endpoint_domain_name": { - "title": "Endpoint Domain Name", - "type": "string", - "default": "blob.core.windows.net", - "description": "This is Azure Blob Storage endpoint domain name. Leave default value (or leave it empty if run container from command line) to use Microsoft native from example.", - "examples": [ "blob.core.windows.net" ] - }, - "azure_blob_storage_container_name": { - "title": "Azure blob storage container (Bucket) Name", - "type": "string", - "description": "The name of the Azure blob storage container. If not exists - will be created automatically. May be empty, then will be created automatically airbytecontainer+timestamp", - "examples": [ "airbytetescontainername" ] - }, - "azure_blob_storage_account_name": { - "title": "Azure Blob Storage account name", - "type": "string", - "description": "The account's name of the Azure Blob Storage.", - "examples": [ "airbyte5storage" ] - }, - "azure_blob_storage_account_key": { - "title": "Azure Blob Storage account key", - "description": "The Azure blob storage account key.", - "airbyte_secret": true, - "type": "string", - "examples": [ "Z8ZkZpteggFx394vm+PJHnGTvdRncaYS+JhLKdj789YNmD+iyGTnG+PV+POiuYNhBg/ACS+LKjd%4FG3FHGN12Nd==" ] - }, - "azure_blob_storage_output_buffer_size": { - "title": "Azure Blob Storage output buffer size (Megabytes)", - "type": "integer", - "description": "The amount of megabytes to buffer for the output stream to Azure. This will impact memory footprint on workers, but may need adjustment for performance and appropriate block size in Azure.", - "minimum": 1, - "maximum": 2047, - "default": 5, - "examples": [ 5 ] - }, - "azure_blob_storage_spill_size": { - "title": "Azure Blob Storage file spill size", - "type": "integer", - "description": "The amount of megabytes after which the connector should spill the records in a new blob object. Make sure to configure size greater than individual records. Enter 0 if not applicable", - "default": 500, - "examples": [ 500 ] - }, - "format": { - "title": "Output Format", - "type": "object", - "description": "Output data format", - "oneOf": [ { - "title": "CSV: Comma-Separated Values", - "required": [ "format_type", "flattening" ], - "properties": { - "format_type": { - "type": "string", - "const": "CSV" - }, - "flattening": { - "type": "string", - "title": "Normalization (Flattening)", - "description": "Whether the input json data should be normalized (flattened) in the output CSV. Please refer to docs for details.", - "default": "No flattening", - "enum": [ "No flattening", "Root level flattening" ] - } - } - }, { - "title": "JSON Lines: newline-delimited JSON", - "required": [ "format_type" ], - "properties": { - "format_type": { - "type": "string", - "const": "JSONL" - } - } - } ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "resourceRequirements": { - "jobSpecific": [ { - "jobType": "sync", - "resourceRequirements": { - "memory_request": "1Gi", - "memory_limit": "1Gi" - } - } ] - } - }, { - "destinationDefinitionId": "0eeee7fb-518f-4045-bacc-9619e31c43ea", - "name": "Amazon SQS", - "dockerRepository": "airbyte/destination-amazon-sqs", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/amazon-sqs", - "icon": "awssqs.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/amazon-sqs", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Destination Amazon Sqs", - "type": "object", - "required": [ "queue_url", "region" ], - "additionalProperties": false, - "properties": { - "queue_url": { - "title": "Queue URL", - "description": "URL of the SQS Queue", - "type": "string", - "examples": [ "https://sqs.eu-west-1.amazonaws.com/1234567890/my-example-queue" ], - "order": 0 - }, - "region": { - "title": "AWS Region", - "description": "AWS Region of the SQS Queue", - "type": "string", - "enum": [ "us-east-1", "us-east-2", "us-west-1", "us-west-2", "af-south-1", "ap-east-1", "ap-south-1", "ap-northeast-1", "ap-northeast-2", "ap-northeast-3", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "cn-north-1", "cn-northwest-1", "eu-central-1", "eu-north-1", "eu-south-1", "eu-west-1", "eu-west-2", "eu-west-3", "sa-east-1", "me-south-1", "us-gov-east-1", "us-gov-west-1" ], - "order": 1 - }, - "message_delay": { - "title": "Message Delay", - "description": "Modify the Message Delay of the individual message from the Queue's default (seconds).", - "type": "integer", - "examples": [ "15" ], - "order": 2 - }, - "access_key": { - "title": "AWS IAM Access Key ID", - "description": "The Access Key ID of the AWS IAM Role to use for sending messages", - "type": "string", - "examples": [ "xxxxxHRNxxx3TBxxxxxx" ], - "order": 3, - "airbyte_secret": true - }, - "secret_key": { - "title": "AWS IAM Secret Key", - "description": "The Secret Key of the AWS IAM Role to use for sending messages", - "type": "string", - "examples": [ "hu+qE5exxxxT6o/ZrKsxxxxxxBhxxXLexxxxxVKz" ], - "order": 4, - "airbyte_secret": true - }, - "message_body_key": { - "title": "Message Body Key", - "description": "Use this property to extract the contents of the named key in the input record to use as the SQS message body. If not set, the entire content of the input record data is used as the message body.", - "type": "string", - "examples": [ "myDataPath" ], - "order": 5 - }, - "message_group_id": { - "title": "Message Group Id", - "description": "The tag that specifies that a message belongs to a specific message group. This parameter applies only to, and is REQUIRED by, FIFO queues.", - "type": "string", - "examples": [ "my-fifo-group" ], - "order": 6 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "05c161bf-ca73-4d48-b524-d392be417002", - "name": "Apache Doris", - "dockerRepository": "airbyte/destination-doris", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/doris", - "icon": "apachedoris.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/destinations/doris", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Doris Destination Spec", - "type": "object", - "required": [ "host", "httpport", "queryport", "username", "database" ], - "properties": { - "host": { - "title": "Host", - "description": "Hostname of the database", - "type": "string", - "order": 0 - }, - "httpport": { - "title": "HttpPort", - "description": "Http Port of the database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 8030, - "examples": [ "8030" ], - "order": 1 - }, - "queryport": { - "title": "QueryPort", - "description": "Query(SQL) Port of the database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 9030, - "examples": [ "9030" ], - "order": 2 - }, - "database": { - "title": "DataBase Name", - "description": "Name of the database.", - "type": "string", - "order": 3 - }, - "username": { - "title": "UserName", - "description": "Username to use to access the database.", - "type": "string", - "order": 4 - }, - "password": { - "title": "Password", - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 5 - } - } - }, - "supportsIncremental": false, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "append", "overwrite" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "df65a8f3-9908-451b-aa9b-445462803560", - "name": "Apache Iceberg", - "dockerRepository": "airbyte/destination-iceberg", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/iceberg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/iceberg", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Iceberg Destination Spec", - "type": "object", - "required": [ "catalog_config", "storage_config", "format_config" ], - "properties": { - "catalog_config": { - "title": "Iceberg catalog config", - "type": "object", - "description": "Catalog config of Iceberg.", - "oneOf": [ { - "title": "HiveCatalog: Use Apache Hive MetaStore", - "required": [ "catalog_type", "hive_thrift_uri" ], - "properties": { - "catalog_type": { - "title": "Catalog Type", - "type": "string", - "default": "Hive", - "enum": [ "Hive" ], - "order": 0 - }, - "hive_thrift_uri": { - "title": "Hive Metastore thrift uri", - "type": "string", - "description": "Hive MetaStore thrift server uri of iceberg catalog.", - "examples": [ "host:port" ], - "order": 1 - }, - "database": { - "title": "Default database", - "description": "The default database tables are written to if the source does not specify a namespace. The usual value for this field is \"default\".", - "type": "string", - "default": "default", - "examples": [ "default" ], - "order": 2 - } - } - }, { - "title": "HadoopCatalog: Use hierarchical file systems as same as storage config", - "description": "A Hadoop catalog doesn’t need to connect to a Hive MetaStore, but can only be used with HDFS or similar file systems that support atomic rename.", - "required": [ "catalog_type" ], - "properties": { - "catalog_type": { - "title": "Catalog Type", - "type": "string", - "default": "Hadoop", - "enum": [ "Hadoop" ], - "order": 0 - }, - "database": { - "title": "Default database", - "description": "The default database tables are written to if the source does not specify a namespace. The usual value for this field is \"default\".", - "type": "string", - "default": "default", - "examples": [ "default" ], - "order": 1 - } - } - }, { - "title": "JdbcCatalog: Use relational database", - "description": "Using a table in a relational database to manage Iceberg tables through JDBC. Read more here. Supporting: PostgreSQL", - "required": [ "catalog_type" ], - "properties": { - "catalog_type": { - "title": "Catalog Type", - "type": "string", - "default": "Jdbc", - "enum": [ "Jdbc" ], - "order": 0 - }, - "database": { - "title": "Default schema", - "description": "The default schema tables are written to if the source does not specify a namespace. The usual value for this field is \"public\".", - "type": "string", - "default": "public", - "examples": [ "public" ], - "order": 1 - }, - "jdbc_url": { - "title": "Jdbc url", - "type": "string", - "examples": [ "jdbc:postgresql://{host}:{port}/{database}" ], - "order": 2 - }, - "username": { - "title": "User", - "description": "Username to use to access the database.", - "type": "string", - "order": 3 - }, - "password": { - "title": "Password", - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 4 - }, - "ssl": { - "title": "SSL Connection", - "description": "Encrypt data using SSL. When activating SSL, please select one of the connection modes.", - "type": "boolean", - "default": false, - "order": 5 - }, - "catalog_schema": { - "title": "schema for Iceberg catalog", - "description": "Iceberg catalog metadata tables are written to catalog schema. The usual value for this field is \"public\".", - "type": "string", - "default": "public", - "examples": [ "public" ], - "order": 6 - } - } - } ], - "order": 0 - }, - "storage_config": { - "title": "Storage config", - "type": "object", - "description": "Storage config of Iceberg.", - "oneOf": [ { - "title": "S3", - "type": "object", - "description": "S3 object storage", - "required": [ "storage_type", "access_key_id", "secret_access_key", "s3_warehouse_uri" ], - "properties": { - "storage_type": { - "title": "Storage Type", - "type": "string", - "default": "S3", - "enum": [ "S3" ], - "order": 0 - }, - "access_key_id": { - "type": "string", - "description": "The access key ID to access the S3 bucket. Airbyte requires Read and Write permissions to the given bucket. Read more here.", - "title": "S3 Key ID", - "airbyte_secret": true, - "examples": [ "A012345678910EXAMPLE" ], - "order": 0 - }, - "secret_access_key": { - "type": "string", - "description": "The corresponding secret to the access key ID. Read more here", - "title": "S3 Access Key", - "airbyte_secret": true, - "examples": [ "a012345678910ABCDEFGH/AbCdEfGhEXAMPLEKEY" ], - "order": 1 - }, - "s3_warehouse_uri": { - "title": "S3 Warehouse Uri for Iceberg", - "type": "string", - "description": "The Warehouse Uri for Iceberg", - "examples": [ "s3a://my-bucket/path/to/warehouse", "s3://my-bucket/path/to/warehouse" ], - "order": 2 - }, - "s3_bucket_region": { - "title": "S3 Bucket Region", - "type": "string", - "default": "", - "description": "The region of the S3 bucket. See here for all region codes.", - "enum": [ "", "us-east-1", "us-east-2", "us-west-1", "us-west-2", "af-south-1", "ap-east-1", "ap-south-1", "ap-northeast-1", "ap-northeast-2", "ap-northeast-3", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "cn-north-1", "cn-northwest-1", "eu-central-1", "eu-north-1", "eu-south-1", "eu-west-1", "eu-west-2", "eu-west-3", "sa-east-1", "me-south-1", "us-gov-east-1", "us-gov-west-1" ], - "order": 3 - }, - "s3_endpoint": { - "title": "Endpoint", - "type": "string", - "default": "", - "description": "Your S3 endpoint url. Read more here", - "examples": [ "http://localhost:9000", "localhost:9000" ], - "order": 4 - }, - "s3_path_style_access": { - "type": "boolean", - "description": "Use path style access", - "examples": [ true, false ], - "default": true, - "order": 5 - } - } - } ], - "order": 1 - }, - "format_config": { - "title": "File format", - "type": "object", - "required": [ "format" ], - "description": "File format of Iceberg storage.", - "properties": { - "format": { - "title": "File storage format", - "type": "string", - "default": "Parquet", - "description": "", - "enum": [ "Parquet", "Avro" ], - "order": 0 - }, - "flush_batch_size": { - "title": "Data file flushing batch size", - "description": "Iceberg data file flush batch size. Incoming rows write to cache firstly; When cache size reaches this 'batch size', flush into real Iceberg data file.", - "type": "integer", - "default": 10000, - "order": 1 - }, - "auto_compact": { - "title": "Auto compact data files", - "description": "Auto compact data files when stream close", - "type": "boolean", - "default": false, - "order": 2 - }, - "compact_target_file_size_in_mb": { - "title": "Target size of compacted data file", - "description": "Specify the target size of Iceberg data file when performing a compaction action. ", - "type": "integer", - "default": 100, - "order": 3 - } - }, - "order": 2 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "99878c90-0fbd-46d3-9d98-ffde879d17fc", - "name": "AWS Datalake", - "dockerRepository": "airbyte/destination-aws-datalake", - "dockerImageTag": "0.1.3", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/aws-datalake", - "icon": "awsdatalake.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/aws-datalake", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "AWS Datalake Destination Spec", - "type": "object", - "required": [ "credentials", "region", "bucket_name", "lakeformation_database_name" ], - "additionalProperties": false, - "properties": { - "aws_account_id": { - "type": "string", - "title": "AWS Account Id", - "description": "target aws account id", - "examples": [ "111111111111" ], - "order": 1 - }, - "credentials": { - "title": "Authentication mode", - "description": "Choose How to Authenticate to AWS.", - "type": "object", - "oneOf": [ { - "type": "object", - "title": "IAM Role", - "required": [ "role_arn", "credentials_title" ], - "properties": { - "credentials_title": { - "type": "string", - "title": "Credentials Title", - "description": "Name of the credentials", - "const": "IAM Role", - "enum": [ "IAM Role" ], - "default": "IAM Role", - "order": 0 - }, - "role_arn": { - "title": "Target Role Arn", - "type": "string", - "description": "Will assume this role to write data to s3", - "airbyte_secret": false - } - } - }, { - "type": "object", - "title": "IAM User", - "required": [ "credentials_title", "aws_access_key_id", "aws_secret_access_key" ], - "properties": { - "credentials_title": { - "type": "string", - "title": "Credentials Title", - "description": "Name of the credentials", - "const": "IAM User", - "enum": [ "IAM User" ], - "default": "IAM User", - "order": 0 - }, - "aws_access_key_id": { - "title": "Access Key Id", - "type": "string", - "description": "AWS User Access Key Id", - "airbyte_secret": true - }, - "aws_secret_access_key": { - "title": "Secret Access Key", - "type": "string", - "description": "Secret Access Key", - "airbyte_secret": true - } - } - } ], - "order": 2 - }, - "region": { - "title": "S3 Bucket Region", - "type": "string", - "default": "", - "description": "The region of the S3 bucket. See here for all region codes.", - "enum": [ "", "us-east-1", "us-east-2", "us-west-1", "us-west-2", "af-south-1", "ap-east-1", "ap-south-1", "ap-northeast-1", "ap-northeast-2", "ap-northeast-3", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "cn-north-1", "cn-northwest-1", "eu-central-1", "eu-north-1", "eu-south-1", "eu-west-1", "eu-west-2", "eu-west-3", "sa-east-1", "me-south-1", "us-gov-east-1", "us-gov-west-1" ], - "order": 3 - }, - "bucket_name": { - "title": "S3 Bucket Name", - "type": "string", - "description": "The name of the S3 bucket. Read more here.", - "order": 4 - }, - "bucket_prefix": { - "title": "Target S3 Bucket Prefix", - "type": "string", - "description": "S3 prefix", - "order": 5 - }, - "lakeformation_database_name": { - "title": "Lake Formation Database Name", - "type": "string", - "description": "The default database this destination will use to create tables in per stream. Can be changed per connection by customizing the namespace.", - "order": 6 - }, - "lakeformation_database_default_tag_key": { - "title": "Lake Formation Database Tag Key", - "description": "Add a default tag key to databases created by this destination", - "examples": [ "pii_level" ], - "type": "string", - "order": 7 - }, - "lakeformation_database_default_tag_values": { - "title": "Lake Formation Database Tag Values", - "description": "Add default values for the `Tag Key` to databases created by this destination. Comma separate for multiple values.", - "examples": [ "private,public" ], - "type": "string", - "order": 8 - }, - "lakeformation_governed_tables": { - "title": "Lake Formation Governed Tables", - "description": "Whether to create tables as LF governed tables.", - "type": "boolean", - "default": false, - "order": 9 - }, - "format": { - "title": "Output Format *", - "type": "object", - "description": "Format of the data output.", - "oneOf": [ { - "title": "JSON Lines: Newline-delimited JSON", - "required": [ "format_type" ], - "properties": { - "format_type": { - "title": "Format Type *", - "type": "string", - "enum": [ "JSONL" ], - "default": "JSONL" - }, - "compression_codec": { - "title": "Compression Codec (Optional)", - "description": "The compression algorithm used to compress data.", - "type": "string", - "enum": [ "UNCOMPRESSED", "GZIP" ], - "default": "UNCOMPRESSED" - } - } - }, { - "title": "Parquet: Columnar Storage", - "required": [ "format_type" ], - "properties": { - "format_type": { - "title": "Format Type *", - "type": "string", - "enum": [ "Parquet" ], - "default": "Parquet" - }, - "compression_codec": { - "title": "Compression Codec (Optional)", - "description": "The compression algorithm used to compress data.", - "type": "string", - "enum": [ "UNCOMPRESSED", "SNAPPY", "GZIP", "ZSTD" ], - "default": "SNAPPY" - } - } - } ], - "order": 10 - }, - "partitioning": { - "title": "Choose how to partition data", - "description": "Partition data by cursor fields when a cursor field is a date", - "type": "string", - "enum": [ "NO PARTITIONING", "DATE", "YEAR", "MONTH", "DAY", "YEAR/MONTH", "YEAR/MONTH/DAY" ], - "default": "NO PARTITIONING", - "order": 11 - }, - "glue_catalog_float_as_decimal": { - "title": "Glue Catalog: Float as Decimal", - "description": "Cast float/double as decimal(38,18). This can help achieve higher accuracy and represent numbers correctly as received from the source.", - "type": "boolean", - "default": false, - "order": 12 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "22f6c74f-5699-40ff-833c-4a879ea40133", - "name": "BigQuery", - "dockerRepository": "airbyte/destination-bigquery", - "dockerImageTag": "1.3.1", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/bigquery", - "icon": "bigquery.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/bigquery", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "BigQuery Destination Spec", - "type": "object", - "required": [ "project_id", "dataset_location", "dataset_id" ], - "additionalProperties": true, - "properties": { - "project_id": { - "type": "string", - "description": "The GCP project ID for the project containing the target BigQuery dataset. Read more here.", - "title": "Project ID", - "order": 0 - }, - "dataset_location": { - "type": "string", - "description": "The location of the dataset. Warning: Changes made after creation will not be applied. Read more here.", - "title": "Dataset Location", - "order": 1, - "enum": [ "US", "EU", "asia-east1", "asia-east2", "asia-northeast1", "asia-northeast2", "asia-northeast3", "asia-south1", "asia-south2", "asia-southeast1", "asia-southeast2", "australia-southeast1", "australia-southeast2", "europe-central1", "europe-central2", "europe-north1", "europe-southwest1", "europe-west1", "europe-west2", "europe-west3", "europe-west4", "europe-west6", "europe-west7", "europe-west8", "europe-west9", "me-west1", "northamerica-northeast1", "northamerica-northeast2", "southamerica-east1", "southamerica-west1", "us-central1", "us-east1", "us-east2", "us-east3", "us-east4", "us-east5", "us-west1", "us-west2", "us-west3", "us-west4" ] - }, - "dataset_id": { - "type": "string", - "description": "The default BigQuery Dataset ID that tables are replicated to if the source does not specify a namespace. Read more here.", - "title": "Default Dataset ID", - "order": 2 - }, - "loading_method": { - "type": "object", - "title": "Loading Method", - "description": "Loading method used to send select the way data will be uploaded to BigQuery.
    Standard Inserts - Direct uploading using SQL INSERT statements. This method is extremely inefficient and provided only for quick testing. In almost all cases, you should use staging.
    GCS Staging - Writes large batches of records to a file, uploads the file to GCS, then uses COPY INTO table to upload the file. Recommended for most workloads for better speed and scalability. Read more about GCS Staging here.", - "order": 3, - "oneOf": [ { - "title": "Standard Inserts", - "required": [ "method" ], - "properties": { - "method": { - "type": "string", - "const": "Standard" - } - } - }, { - "title": "GCS Staging", - "required": [ "method", "gcs_bucket_name", "gcs_bucket_path", "credential" ], - "properties": { - "method": { - "type": "string", - "const": "GCS Staging", - "order": 0 - }, - "credential": { - "title": "Credential", - "description": "An HMAC key is a type of credential and can be associated with a service account or a user account in Cloud Storage. Read more here.", - "type": "object", - "order": 1, - "oneOf": [ { - "title": "HMAC key", - "required": [ "credential_type", "hmac_key_access_id", "hmac_key_secret" ], - "properties": { - "credential_type": { - "type": "string", - "const": "HMAC_KEY", - "order": 0 - }, - "hmac_key_access_id": { - "type": "string", - "description": "HMAC key access ID. When linked to a service account, this ID is 61 characters long; when linked to a user account, it is 24 characters long.", - "title": "HMAC Key Access ID", - "airbyte_secret": true, - "examples": [ "1234567890abcdefghij1234" ], - "order": 1 - }, - "hmac_key_secret": { - "type": "string", - "description": "The corresponding secret for the access ID. It is a 40-character base-64 encoded string.", - "title": "HMAC Key Secret", - "airbyte_secret": true, - "examples": [ "1234567890abcdefghij1234567890ABCDEFGHIJ" ], - "order": 2 - } - } - } ] - }, - "gcs_bucket_name": { - "title": "GCS Bucket Name", - "type": "string", - "description": "The name of the GCS bucket. Read more here.", - "examples": [ "airbyte_sync" ], - "order": 2 - }, - "gcs_bucket_path": { - "title": "GCS Bucket Path", - "description": "Directory under the GCS bucket where data will be written.", - "type": "string", - "examples": [ "data_sync/test" ], - "order": 3 - }, - "keep_files_in_gcs-bucket": { - "type": "string", - "description": "This upload method is supposed to temporary store records in GCS bucket. By this select you can chose if these records should be removed from GCS when migration has finished. The default \"Delete all tmp files from GCS\" value is used if not set explicitly.", - "title": "GCS Tmp Files Afterward Processing", - "default": "Delete all tmp files from GCS", - "enum": [ "Delete all tmp files from GCS", "Keep all tmp files in GCS" ], - "order": 4 - }, - "file_buffer_count": { - "title": "File Buffer Count", - "type": "integer", - "minimum": 10, - "maximum": 50, - "default": 10, - "description": "Number of file buffers allocated for writing data. Increasing this number is beneficial for connections using Change Data Capture (CDC) and up to the number of streams within a connection. Increasing the number of file buffers past the maximum number of streams has deteriorating effects", - "examples": [ "10" ], - "order": 5 - } - } - } ] - }, - "credentials_json": { - "type": "string", - "description": "The contents of the JSON service account key. Check out the docs if you need help generating this key. Default credentials will be used if this field is left empty.", - "title": "Service Account Key JSON (Required for cloud, optional for open-source)", - "airbyte_secret": true, - "order": 4, - "always_show": true - }, - "transformation_priority": { - "type": "string", - "description": "Interactive run type means that the query is executed as soon as possible, and these queries count towards concurrent rate limit and daily limit. Read more about interactive run type here. Batch queries are queued and started as soon as idle resources are available in the BigQuery shared resource pool, which usually occurs within a few minutes. Batch queries don’t count towards your concurrent rate limit. Read more about batch queries here. The default \"interactive\" value is used if not set explicitly.", - "title": "Transformation Query Run Type", - "default": "interactive", - "enum": [ "interactive", "batch" ], - "order": 5 - }, - "big_query_client_buffer_size_mb": { - "title": "Google BigQuery Client Chunk Size", - "description": "Google BigQuery client's chunk (buffer) size (MIN=1, MAX = 15) for each table. The size that will be written by a single RPC. Written data will be buffered and only flushed upon reaching this size or closing the channel. The default 15MB value is used if not set explicitly. Read more here.", - "type": "integer", - "minimum": 1, - "maximum": 15, - "default": 15, - "examples": [ "15" ], - "order": 6 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": true, - "supportsDBT": true, - "supported_destination_sync_modes": [ "overwrite", "append", "append_dedup" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "resourceRequirements": { - "jobSpecific": [ { - "jobType": "sync", - "resourceRequirements": { - "memory_request": "1Gi", - "memory_limit": "1Gi" - } - } ] - }, - "normalizationConfig": { - "normalizationRepository": "airbyte/normalization", - "normalizationTag": "0.4.0", - "normalizationIntegrationType": "bigquery" - }, - "supportsDbt": true - }, { - "destinationDefinitionId": "079d5540-f236-4294-ba7c-ade8fd918496", - "name": "BigQuery (denormalized typed struct)", - "dockerRepository": "airbyte/destination-bigquery-denormalized", - "dockerImageTag": "1.3.1", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/bigquery", - "icon": "bigquery.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/bigquery", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "BigQuery Denormalized Typed Struct Destination Spec", - "type": "object", - "required": [ "project_id", "dataset_id" ], - "additionalProperties": true, - "properties": { - "project_id": { - "type": "string", - "description": "The GCP project ID for the project containing the target BigQuery dataset. Read more here.", - "title": "Project ID", - "order": 0 - }, - "dataset_id": { - "type": "string", - "description": "The default BigQuery Dataset ID that tables are replicated to if the source does not specify a namespace. Read more here.", - "title": "Default Dataset ID", - "order": 1 - }, - "loading_method": { - "type": "object", - "title": "Loading Method", - "description": "Loading method used to send select the way data will be uploaded to BigQuery.
    Standard Inserts - Direct uploading using SQL INSERT statements. This method is extremely inefficient and provided only for quick testing. In almost all cases, you should use staging.
    GCS Staging - Writes large batches of records to a file, uploads the file to GCS, then uses COPY INTO table to upload the file. Recommended for most workloads for better speed and scalability. Read more about GCS Staging here.", - "order": 2, - "oneOf": [ { - "title": "Standard Inserts", - "required": [ "method" ], - "properties": { - "method": { - "type": "string", - "const": "Standard" - } - } - }, { - "title": "GCS Staging", - "type": "object", - "required": [ "method", "gcs_bucket_name", "gcs_bucket_path", "credential" ], - "properties": { - "method": { - "type": "string", - "const": "GCS Staging", - "order": 0 - }, - "credential": { - "title": "Credential", - "description": "An HMAC key is a type of credential and can be associated with a service account or a user account in Cloud Storage. Read more here.", - "type": "object", - "order": 1, - "oneOf": [ { - "title": "HMAC key", - "order": 0, - "required": [ "credential_type", "hmac_key_access_id", "hmac_key_secret" ], - "properties": { - "credential_type": { - "type": "string", - "const": "HMAC_KEY", - "order": 0 - }, - "hmac_key_access_id": { - "type": "string", - "description": "HMAC key access ID. When linked to a service account, this ID is 61 characters long; when linked to a user account, it is 24 characters long.", - "title": "HMAC Key Access ID", - "airbyte_secret": true, - "examples": [ "1234567890abcdefghij1234" ], - "order": 1 - }, - "hmac_key_secret": { - "type": "string", - "description": "The corresponding secret for the access ID. It is a 40-character base-64 encoded string.", - "title": "HMAC Key Secret", - "airbyte_secret": true, - "examples": [ "1234567890abcdefghij1234567890ABCDEFGHIJ" ], - "order": 2 - } - } - } ] - }, - "gcs_bucket_name": { - "title": "GCS Bucket Name", - "type": "string", - "description": "The name of the GCS bucket. Read more here.", - "examples": [ "airbyte_sync" ], - "order": 2 - }, - "gcs_bucket_path": { - "title": "GCS Bucket Path", - "description": "Directory under the GCS bucket where data will be written. Read more here.", - "type": "string", - "examples": [ "data_sync/test" ], - "order": 3 - }, - "keep_files_in_gcs-bucket": { - "type": "string", - "description": "This upload method is supposed to temporary store records in GCS bucket. By this select you can chose if these records should be removed from GCS when migration has finished. The default \"Delete all tmp files from GCS\" value is used if not set explicitly.", - "title": "GCS Tmp Files Afterward Processing", - "default": "Delete all tmp files from GCS", - "enum": [ "Delete all tmp files from GCS", "Keep all tmp files in GCS" ], - "order": 4 - }, - "file_buffer_count": { - "title": "File Buffer Count", - "type": "integer", - "minimum": 10, - "maximum": 50, - "default": 10, - "description": "Number of file buffers allocated for writing data. Increasing this number is beneficial for connections using Change Data Capture (CDC) and up to the number of streams within a connection. Increasing the number of file buffers past the maximum number of streams has deteriorating effects", - "examples": [ "10" ], - "order": 5 - } - } - } ] - }, - "credentials_json": { - "type": "string", - "description": "The contents of the JSON service account key. Check out the docs if you need help generating this key. Default credentials will be used if this field is left empty.", - "title": "Service Account Key JSON (Required for cloud, optional for open-source)", - "airbyte_secret": true, - "order": 3, - "always_show": true - }, - "dataset_location": { - "type": "string", - "description": "The location of the dataset. Warning: Changes made after creation will not be applied. The default \"US\" value is used if not set explicitly. Read more here.", - "title": "Dataset Location", - "default": "US", - "order": 4, - "enum": [ "US", "EU", "asia-east1", "asia-east2", "asia-northeast1", "asia-northeast2", "asia-northeast3", "asia-south1", "asia-south2", "asia-southeast1", "asia-southeast2", "australia-southeast1", "australia-southeast2", "europe-central1", "europe-central2", "europe-north1", "europe-southwest1", "europe-west1", "europe-west2", "europe-west3", "europe-west4", "europe-west6", "europe-west7", "europe-west8", "europe-west9", "me-west1", "northamerica-northeast1", "northamerica-northeast2", "southamerica-east1", "southamerica-west1", "us-central1", "us-east1", "us-east2", "us-east3", "us-east4", "us-east5", "us-west1", "us-west2", "us-west3", "us-west4" ] - }, - "big_query_client_buffer_size_mb": { - "title": "Google BigQuery Client Chunk Size", - "description": "Google BigQuery client's chunk (buffer) size (MIN=1, MAX = 15) for each table. The size that will be written by a single RPC. Written data will be buffered and only flushed upon reaching this size or closing the channel. The default 15MB value is used if not set explicitly. Read more here.", - "type": "integer", - "minimum": 1, - "maximum": 15, - "default": 15, - "examples": [ "15" ], - "order": 5 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "resourceRequirements": { - "jobSpecific": [ { - "jobType": "sync", - "resourceRequirements": { - "memory_request": "1Gi", - "memory_limit": "1Gi" - } - } ] - } - }, { - "destinationDefinitionId": "707456df-6f4f-4ced-b5c6-03f73bcad1c5", - "name": "Cassandra", - "dockerRepository": "airbyte/destination-cassandra", - "dockerImageTag": "0.1.4", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/cassandra", - "icon": "cassandra.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/cassandra", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Cassandra Destination Spec", - "type": "object", - "required": [ "keyspace", "username", "password", "address", "port" ], - "additionalProperties": true, - "properties": { - "keyspace": { - "title": "Keyspace", - "description": "Default Cassandra keyspace to create data in.", - "type": "string", - "order": 0 - }, - "username": { - "title": "Username", - "description": "Username to use to access Cassandra.", - "type": "string", - "order": 1 - }, - "password": { - "title": "Password", - "description": "Password associated with Cassandra.", - "type": "string", - "airbyte_secret": true, - "order": 2 - }, - "address": { - "title": "Address", - "description": "Address to connect to.", - "type": "string", - "examples": [ "localhost,127.0.0.1" ], - "order": 3 - }, - "port": { - "title": "Port", - "description": "Port of Cassandra.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 9042, - "order": 4 - }, - "datacenter": { - "title": "Datacenter", - "description": "Datacenter of the cassandra cluster.", - "type": "string", - "default": "datacenter1", - "order": 5 - }, - "replication": { - "title": "Replication factor", - "type": "integer", - "description": "Indicates to how many nodes the data should be replicated to.", - "default": 1, - "order": 6 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "e088acb6-9780-4568-880c-54c2dd7f431b", - "name": "Cumul.io", - "dockerRepository": "airbyte/destination-cumulio", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/cumulio", - "icon": "cumulio.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/cumulio", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Destination Cumulio", - "type": "object", - "required": [ "api_host", "api_key", "api_token" ], - "additionalProperties": true, - "properties": { - "api_host": { - "title": "Cumul.io API Host URL", - "description": "URL of the Cumul.io API (e.g. 'https://api.cumul.io', 'https://api.us.cumul.io', or VPC-specific API url). Defaults to 'https://api.cumul.io'.", - "default": "https://api.cumul.io", - "type": "string", - "order": 0 - }, - "api_key": { - "title": "Cumul.io API Key", - "description": "An API key generated in Cumul.io's platform (can be generated here: https://app.cumul.io/start/profile/integration).", - "type": "string", - "airbyte_secret": true, - "order": 1 - }, - "api_token": { - "title": "Cumul.io API Token", - "description": "The corresponding API token generated in Cumul.io's platform (can be generated here: https://app.cumul.io/start/profile/integration).", - "type": "string", - "airbyte_secret": true, - "order": 2 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "81740ce8-d764-4ea7-94df-16bb41de36ae", - "name": "Chargify (Keen)", - "dockerRepository": "airbyte/destination-keen", - "dockerImageTag": "0.2.4", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/keen", - "icon": "chargify.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/keen", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Keen Spec", - "type": "object", - "required": [ "project_id", "api_key" ], - "additionalProperties": false, - "properties": { - "project_id": { - "description": "To get Keen Project ID, navigate to the Access tab from the left-hand, side panel and check the Project Details section.", - "title": "Project ID", - "type": "string", - "examples": [ "58b4acc22ba938934e888322e" ] - }, - "api_key": { - "title": "API Key", - "description": "To get Keen Master API Key, navigate to the Access tab from the left-hand, side panel and check the Project Details section.", - "type": "string", - "examples": [ "ABCDEFGHIJKLMNOPRSTUWXYZ" ], - "airbyte_secret": true - }, - "infer_timestamp": { - "title": "Infer Timestamp", - "description": "Allow connector to guess keen.timestamp value based on the streamed data.", - "type": "boolean", - "default": true - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "ce0d828e-1dc4-496c-b122-2da42e637e48", - "name": "Clickhouse", - "dockerRepository": "airbyte/destination-clickhouse", - "dockerImageTag": "0.2.3", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/clickhouse", - "icon": "clickhouse.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/clickhouse", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "ClickHouse Destination Spec", - "type": "object", - "required": [ "host", "port", "database", "username" ], - "additionalProperties": true, - "properties": { - "host": { - "title": "Host", - "description": "Hostname of the database.", - "type": "string", - "order": 0 - }, - "port": { - "title": "Port", - "description": "HTTP port of the database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 8123, - "examples": [ "8123" ], - "order": 1 - }, - "database": { - "title": "DB Name", - "description": "Name of the database.", - "type": "string", - "order": 2 - }, - "username": { - "title": "User", - "description": "Username to use to access the database.", - "type": "string", - "order": 3 - }, - "password": { - "title": "Password", - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 4 - }, - "jdbc_url_params": { - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", - "title": "JDBC URL Params", - "type": "string", - "order": 5 - }, - "ssl": { - "title": "SSL Connection", - "description": "Encrypt data using SSL.", - "type": "boolean", - "default": false, - "order": 6 - }, - "tunnel_method": { - "type": "object", - "title": "SSH Tunnel Method", - "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", - "oneOf": [ { - "title": "No Tunnel", - "required": [ "tunnel_method" ], - "properties": { - "tunnel_method": { - "description": "No ssh tunnel needed to connect to database", - "type": "string", - "const": "NO_TUNNEL", - "order": 0 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host.", - "type": "string", - "order": 3 - }, - "ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - }, { - "title": "Password Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host", - "type": "string", - "order": 3 - }, - "tunnel_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 4 - } - } - } ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": true, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append", "append_dedup" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "normalizationConfig": { - "normalizationRepository": "airbyte/normalization-clickhouse", - "normalizationTag": "0.4.0", - "normalizationIntegrationType": "clickhouse" - }, - "supportsDbt": false - }, { - "destinationDefinitionId": "0fb07be9-7c3b-4336-850d-5efc006152ee", - "name": "Cloudflare R2", - "dockerRepository": "airbyte/destination-r2", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/r2", - "icon": "cloudflare-r2.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/r2", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "R2 Destination Spec", - "type": "object", - "required": [ "account_id", "access_key_id", "secret_access_key", "s3_bucket_name", "s3_bucket_path", "format" ], - "properties": { - "account_id": { - "type": "string", - "description": "Cloudflare account ID", - "title": "Cloudflare account ID", - "examples": [ "12345678aa1a1a11111aaa1234567abc" ], - "order": 0 - }, - "access_key_id": { - "type": "string", - "description": "The access key ID to access the R2 bucket. Airbyte requires Read and Write permissions to the given bucket. Read more here.", - "title": "R2 Key ID", - "airbyte_secret": true, - "examples": [ "A012345678910EXAMPLE" ], - "order": 1 - }, - "secret_access_key": { - "type": "string", - "description": "The corresponding secret to the access key ID. Read more here", - "title": "R2 Access Key", - "airbyte_secret": true, - "examples": [ "a012345678910ABCDEFGHAbCdEfGhEXAMPLEKEY" ], - "order": 2 - }, - "s3_bucket_name": { - "title": "R2 Bucket Name", - "type": "string", - "description": "The name of the R2 bucket. Read more here.", - "examples": [ "r2_sync" ], - "order": 3 - }, - "s3_bucket_path": { - "title": "R2 Bucket Path", - "description": "Directory under the R2 bucket where data will be written.", - "type": "string", - "examples": [ "data_sync/test" ], - "order": 4 - }, - "format": { - "title": "Output Format", - "type": "object", - "description": "Format of the data output. See here for more details", - "oneOf": [ { - "title": "Avro: Apache Avro", - "required": [ "format_type", "compression_codec" ], - "properties": { - "format_type": { - "title": "Format Type", - "type": "string", - "enum": [ "Avro" ], - "default": "Avro", - "order": 0 - }, - "compression_codec": { - "title": "Compression Codec", - "description": "The compression algorithm used to compress data. Default to no compression.", - "type": "object", - "oneOf": [ { - "title": "No Compression", - "required": [ "codec" ], - "properties": { - "codec": { - "type": "string", - "enum": [ "no compression" ], - "default": "no compression" - } - } - }, { - "title": "Deflate", - "required": [ "codec", "compression_level" ], - "properties": { - "codec": { - "type": "string", - "enum": [ "Deflate" ], - "default": "Deflate" - }, - "compression_level": { - "title": "Deflate Level", - "description": "0: no compression & fastest, 9: best compression & slowest.", - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 9 - } - } - }, { - "title": "bzip2", - "required": [ "codec" ], - "properties": { - "codec": { - "type": "string", - "enum": [ "bzip2" ], - "default": "bzip2" - } - } - }, { - "title": "xz", - "required": [ "codec", "compression_level" ], - "properties": { - "codec": { - "type": "string", - "enum": [ "xz" ], - "default": "xz" - }, - "compression_level": { - "title": "Compression Level", - "description": "See here for details.", - "type": "integer", - "default": 6, - "minimum": 0, - "maximum": 9 - } - } - }, { - "title": "zstandard", - "required": [ "codec", "compression_level" ], - "properties": { - "codec": { - "type": "string", - "enum": [ "zstandard" ], - "default": "zstandard" - }, - "compression_level": { - "title": "Compression Level", - "description": "Negative levels are 'fast' modes akin to lz4 or snappy, levels above 9 are generally for archival purposes, and levels above 18 use a lot of memory.", - "type": "integer", - "default": 3, - "minimum": -5, - "maximum": 22 - }, - "include_checksum": { - "title": "Include Checksum", - "description": "If true, include a checksum with each data block.", - "type": "boolean", - "default": false - } - } - }, { - "title": "snappy", - "required": [ "codec" ], - "properties": { - "codec": { - "type": "string", - "enum": [ "snappy" ], - "default": "snappy" - } - } - } ], - "order": 1 - } - } - }, { - "title": "CSV: Comma-Separated Values", - "required": [ "format_type", "flattening" ], - "properties": { - "format_type": { - "title": "Format Type", - "type": "string", - "enum": [ "CSV" ], - "default": "CSV" - }, - "flattening": { - "type": "string", - "title": "Normalization (Flattening)", - "description": "Whether the input json data should be normalized (flattened) in the output CSV. Please refer to docs for details.", - "default": "No flattening", - "enum": [ "No flattening", "Root level flattening" ] - }, - "compression": { - "title": "Compression", - "type": "object", - "description": "Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \".csv.gz\").", - "oneOf": [ { - "title": "No Compression", - "requires": [ "compression_type" ], - "properties": { - "compression_type": { - "type": "string", - "enum": [ "No Compression" ], - "default": "No Compression" - } - } - }, { - "title": "GZIP", - "requires": [ "compression_type" ], - "properties": { - "compression_type": { - "type": "string", - "enum": [ "GZIP" ], - "default": "GZIP" - } - } - } ] - } - } - }, { - "title": "JSON Lines: Newline-delimited JSON", - "required": [ "format_type" ], - "properties": { - "format_type": { - "title": "Format Type", - "type": "string", - "enum": [ "JSONL" ], - "default": "JSONL" - }, - "compression": { - "title": "Compression", - "type": "object", - "description": "Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \".jsonl.gz\").", - "oneOf": [ { - "title": "No Compression", - "requires": "compression_type", - "properties": { - "compression_type": { - "type": "string", - "enum": [ "No Compression" ], - "default": "No Compression" - } - } - }, { - "title": "GZIP", - "requires": "compression_type", - "properties": { - "compression_type": { - "type": "string", - "enum": [ "GZIP" ], - "default": "GZIP" - } - } - } ] - } - } - } ], - "order": 5 - }, - "s3_path_format": { - "title": "R2 Path Format", - "description": "Format string on how data will be organized inside the R2 bucket directory. Read more here", - "type": "string", - "examples": [ "${NAMESPACE}/${STREAM_NAME}/${YEAR}_${MONTH}_${DAY}_${EPOCH}_" ], - "order": 6 - }, - "file_name_pattern": { - "type": "string", - "description": "The pattern allows you to set the file-name format for the R2 staging file(s)", - "title": "R2 Filename pattern", - "examples": [ "{date}", "{date:yyyy_MM}", "{timestamp}", "{part_number}", "{sync_id}" ], - "order": 7 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "3eb4d99c-11fa-4561-a259-fc88e0c2f8f4", - "name": "Convex", - "dockerRepository": "airbyte/destination-convex", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.io/integrations/destinations/convex", - "icon": "convex.svg", - "spec": { - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Convex", - "type": "object", - "required": [ "deployment_url", "access_key" ], - "properties": { - "deployment_url": { - "type": "string", - "title": "Deployment Url", - "examples": [ "https://murky-swan-635.convex.cloud", "https://cluttered-owl-337.convex.cloud" ] - }, - "access_key": { - "type": "string", - "title": "Access Key", - "description": "API access key used to retrieve data from Convex.", - "airbyte_secret": true - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append", "append_dedup" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "4528e960-6f7b-4412-8555-7e0097e1da17", - "name": "Starburst Galaxy", - "dockerRepository": "airbyte/destination-starburst-galaxy", - "dockerImageTag": "0.0.1", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/starburst-galaxy", - "icon": "starburst-galaxy.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/starburst-galaxy", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Starburst Galaxy Destination Spec", - "type": "object", - "required": [ "accept_terms", "server_hostname", "username", "password", "catalog", "staging_object_store" ], - "properties": { - "accept_terms": { - "title": "Agree to the Starburst Galaxy terms & conditions", - "type": "boolean", - "description": "You must agree to the Starburst Galaxy terms & conditions to use this connector.", - "default": false, - "order": 1 - }, - "server_hostname": { - "title": "Hostname", - "type": "string", - "description": "Starburst Galaxy cluster hostname.", - "examples": [ "abc-12345678-wxyz.trino.galaxy-demo.io" ], - "order": 2 - }, - "port": { - "title": "Port", - "type": "string", - "description": "Starburst Galaxy cluster port.", - "default": "443", - "examples": [ "443" ], - "order": 3 - }, - "username": { - "title": "User", - "type": "string", - "description": "Starburst Galaxy user.", - "examples": [ "user@example.com" ], - "order": 4 - }, - "password": { - "title": "Password", - "type": "string", - "description": "Starburst Galaxy password for the specified user.", - "examples": [ "password" ], - "airbyte_secret": true, - "order": 5 - }, - "catalog": { - "title": "Amazon S3 catalog", - "type": "string", - "description": "Name of the Starburst Galaxy Amazon S3 catalog.", - "examples": [ "sample_s3_catalog" ], - "order": 6 - }, - "catalog_schema": { - "title": "Amazon S3 catalog schema", - "type": "string", - "description": "The default Starburst Galaxy Amazon S3 catalog schema where tables are written to if the source does not specify a namespace. Defaults to \"public\".", - "default": "public", - "examples": [ "public" ], - "order": 7 - }, - "staging_object_store": { - "title": "Staging object store", - "type": "object", - "description": "Temporary storage on which temporary Iceberg table is created.", - "oneOf": [ { - "title": "Amazon S3", - "required": [ "object_store_type", "s3_bucket_name", "s3_bucket_path", "s3_bucket_region", "s3_access_key_id", "s3_secret_access_key" ], - "properties": { - "object_store_type": { - "type": "string", - "enum": [ "S3" ], - "default": "S3", - "order": 1 - }, - "s3_bucket_name": { - "title": "S3 bucket name", - "type": "string", - "description": "Name of the S3 bucket", - "examples": [ "airbyte_staging" ], - "order": 1 - }, - "s3_bucket_path": { - "title": "S3 bucket path", - "type": "string", - "description": "Directory in the S3 bucket where staging data is stored.", - "examples": [ "temp_airbyte__sync/test" ], - "order": 2 - }, - "s3_bucket_region": { - "title": "S3 bucket region", - "type": "string", - "default": "us-east-1", - "description": "The region of the S3 bucket.", - "enum": [ "ap-northeast-1", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "eu-central-1", "eu-west-1", "eu-west-2", "eu-west-3", "us-east-1", "us-east-2", "us-west-1", "us-west-2" ], - "order": 3 - }, - "s3_access_key_id": { - "title": "Access key", - "type": "string", - "description": "Access key with access to the bucket. Airbyte requires read and write permissions to a given bucket.", - "examples": [ "A012345678910EXAMPLE" ], - "airbyte_secret": true, - "order": 4 - }, - "s3_secret_access_key": { - "title": "Secret key", - "type": "string", - "description": "Secret key used with the specified access key.", - "examples": [ "a012345678910ABCDEFGH/AbCdEfGhEXAMPLEKEY" ], - "airbyte_secret": true, - "order": 5 - } - } - } ], - "order": 8 - }, - "purge_staging_table": { - "title": "Purge staging Iceberg table", - "type": "boolean", - "description": "Defaults to 'true'. Switch to 'false' for debugging purposes.", - "default": true, - "order": 9 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "072d5540-f236-4294-ba7c-ade8fd918496", - "name": "Databricks Lakehouse", - "dockerRepository": "airbyte/destination-databricks", - "dockerImageTag": "1.0.2", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/databricks", - "icon": "databricks.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/databricks", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Databricks Lakehouse Destination Spec", - "type": "object", - "required": [ "accept_terms", "databricks_server_hostname", "databricks_http_path", "databricks_personal_access_token", "data_source" ], - "properties": { - "accept_terms": { - "title": "Agree to the Databricks JDBC Driver Terms & Conditions", - "type": "boolean", - "description": "You must agree to the Databricks JDBC Driver Terms & Conditions to use this connector.", - "default": false, - "order": 1 - }, - "databricks_server_hostname": { - "title": "Server Hostname", - "type": "string", - "description": "Databricks Cluster Server Hostname.", - "examples": [ "abc-12345678-wxyz.cloud.databricks.com" ], - "order": 2 - }, - "databricks_http_path": { - "title": "HTTP Path", - "type": "string", - "description": "Databricks Cluster HTTP Path.", - "examples": [ "sql/protocolvx/o/1234567489/0000-1111111-abcd90" ], - "order": 3 - }, - "databricks_port": { - "title": "Port", - "type": "string", - "description": "Databricks Cluster Port.", - "default": "443", - "examples": [ "443" ], - "order": 4 - }, - "databricks_personal_access_token": { - "title": "Access Token", - "type": "string", - "description": "Databricks Personal Access Token for making authenticated requests.", - "examples": [ "dapi0123456789abcdefghij0123456789AB" ], - "airbyte_secret": true, - "order": 5 - }, - "database": { - "title": "Databricks catalog", - "description": "The name of the catalog. If not specified otherwise, the \"hive_metastore\" will be used.", - "type": "string", - "order": 6 - }, - "schema": { - "title": "Default Schema", - "description": "The default schema tables are written. If not specified otherwise, the \"default\" will be used.", - "type": "string", - "examples": [ "default" ], - "default": "default", - "order": 7 - }, - "data_source": { - "title": "Data Source", - "type": "object", - "description": "Storage on which the delta lake is built.", - "default": "MANAGED_TABLES_STORAGE", - "order": 8, - "oneOf": [ { - "title": "[Recommended] Managed tables", - "required": [ "data_source_type" ], - "properties": { - "data_source_type": { - "type": "string", - "const": "MANAGED_TABLES_STORAGE", - "order": 0 - } - } - }, { - "title": "Amazon S3", - "required": [ "data_source_type", "s3_bucket_name", "s3_bucket_path", "s3_bucket_region", "s3_access_key_id", "s3_secret_access_key" ], - "properties": { - "data_source_type": { - "type": "string", - "const": "S3_STORAGE", - "order": 1 - }, - "s3_bucket_name": { - "title": "S3 Bucket Name", - "type": "string", - "description": "The name of the S3 bucket to use for intermittent staging of the data.", - "examples": [ "airbyte.staging" ], - "order": 2 - }, - "s3_bucket_path": { - "title": "S3 Bucket Path", - "type": "string", - "description": "The directory under the S3 bucket where data will be written.", - "examples": [ "data_sync/test" ], - "order": 3 - }, - "s3_bucket_region": { - "title": "S3 Bucket Region", - "type": "string", - "default": "", - "description": "The region of the S3 staging bucket to use if utilising a copy strategy.", - "enum": [ "", "us-east-1", "us-east-2", "us-west-1", "us-west-2", "af-south-1", "ap-east-1", "ap-south-1", "ap-northeast-1", "ap-northeast-2", "ap-northeast-3", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "cn-north-1", "cn-northwest-1", "eu-central-1", "eu-north-1", "eu-south-1", "eu-west-1", "eu-west-2", "eu-west-3", "sa-east-1", "me-south-1", "us-gov-east-1", "us-gov-west-1" ], - "order": 4 - }, - "s3_access_key_id": { - "type": "string", - "description": "The Access Key Id granting allow one to access the above S3 staging bucket. Airbyte requires Read and Write permissions to the given bucket.", - "title": "S3 Access Key ID", - "examples": [ "A012345678910EXAMPLE" ], - "airbyte_secret": true, - "order": 5 - }, - "s3_secret_access_key": { - "title": "S3 Secret Access Key", - "type": "string", - "description": "The corresponding secret to the above access key id.", - "examples": [ "a012345678910ABCDEFGH/AbCdEfGhEXAMPLEKEY" ], - "airbyte_secret": true, - "order": 6 - }, - "file_name_pattern": { - "type": "string", - "description": "The pattern allows you to set the file-name format for the S3 staging file(s)", - "title": "S3 Filename pattern", - "examples": [ "{date}", "{date:yyyy_MM}", "{timestamp}", "{part_number}", "{sync_id}" ], - "order": 7 - } - } - }, { - "title": "Azure Blob Storage", - "required": [ "data_source_type", "azure_blob_storage_account_name", "azure_blob_storage_container_name", "azure_blob_storage_sas_token" ], - "properties": { - "data_source_type": { - "type": "string", - "const": "AZURE_BLOB_STORAGE", - "order": 0 - }, - "azure_blob_storage_endpoint_domain_name": { - "title": "Endpoint Domain Name", - "type": "string", - "default": "blob.core.windows.net", - "description": "This is Azure Blob Storage endpoint domain name. Leave default value (or leave it empty if run container from command line) to use Microsoft native from example.", - "examples": [ "blob.core.windows.net" ], - "order": 1 - }, - "azure_blob_storage_account_name": { - "title": "Azure Blob Storage Account Name", - "type": "string", - "description": "The account's name of the Azure Blob Storage.", - "examples": [ "airbyte5storage" ], - "order": 2 - }, - "azure_blob_storage_container_name": { - "title": "Azure Blob Storage Container Name", - "type": "string", - "description": "The name of the Azure blob storage container.", - "examples": [ "airbytetestcontainername" ], - "order": 3 - }, - "azure_blob_storage_sas_token": { - "title": "SAS Token", - "type": "string", - "airbyte_secret": true, - "description": "Shared access signature (SAS) token to grant limited access to objects in your storage account.", - "examples": [ "?sv=2016-05-31&ss=b&srt=sco&sp=rwdl&se=2018-06-27T10:05:50Z&st=2017-06-27T02:05:50Z&spr=https,http&sig=bgqQwoXwxzuD2GJfagRg7VOS8hzNr3QLT7rhS8OFRLQ%3D" ], - "order": 4 - } - } - } ] - }, - "purge_staging_data": { - "title": "Purge Staging Files and Tables", - "type": "boolean", - "description": "Default to 'true'. Switch it to 'false' for debugging purpose.", - "default": true, - "order": 9 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "8ccd8909-4e99-4141-b48d-4984b70b2d89", - "name": "DynamoDB", - "dockerRepository": "airbyte/destination-dynamodb", - "dockerImageTag": "0.1.7", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/dynamodb", - "icon": "dynamodb.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/dynamodb", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "DynamoDB Destination Spec", - "type": "object", - "required": [ "dynamodb_table_name_prefix", "dynamodb_region", "access_key_id", "secret_access_key" ], - "additionalProperties": false, - "properties": { - "dynamodb_endpoint": { - "title": "Endpoint", - "type": "string", - "default": "", - "description": "This is your DynamoDB endpoint url.(if you are working with AWS DynamoDB, just leave empty).", - "examples": [ "http://localhost:9000" ] - }, - "dynamodb_table_name_prefix": { - "title": "Table name prefix", - "type": "string", - "description": "The prefix to use when naming DynamoDB tables.", - "examples": [ "airbyte_sync" ] - }, - "dynamodb_region": { - "title": "DynamoDB Region", - "type": "string", - "default": "", - "description": "The region of the DynamoDB.", - "enum": [ "", "us-east-1", "us-east-2", "us-west-1", "us-west-2", "af-south-1", "ap-east-1", "ap-south-1", "ap-northeast-1", "ap-northeast-2", "ap-northeast-3", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "cn-north-1", "cn-northwest-1", "eu-central-1", "eu-north-1", "eu-south-1", "eu-west-1", "eu-west-2", "eu-west-3", "sa-east-1", "me-south-1", "us-gov-east-1", "us-gov-west-1" ] - }, - "access_key_id": { - "type": "string", - "description": "The access key id to access the DynamoDB. Airbyte requires Read and Write permissions to the DynamoDB.", - "title": "DynamoDB Key Id", - "airbyte_secret": true, - "examples": [ "A012345678910EXAMPLE" ] - }, - "secret_access_key": { - "type": "string", - "description": "The corresponding secret to the access key id.", - "title": "DynamoDB Access Key", - "airbyte_secret": true, - "examples": [ "a012345678910ABCDEFGH/AbCdEfGhEXAMPLEKEY" ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "2eb65e87-983a-4fd7-b3e3-9d9dc6eb8537", - "name": "E2E Testing", - "dockerRepository": "airbyte/destination-e2e-test", - "dockerImageTag": "0.2.4", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/e2e-test", - "icon": "airbyte.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/e2e-test", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "E2E Test Destination Spec", - "type": "object", - "oneOf": [ { - "title": "Logging", - "required": [ "type", "logging_config" ], - "properties": { - "type": { - "type": "string", - "const": "LOGGING", - "default": "LOGGING" - }, - "logging_config": { - "title": "Logging Configuration", - "type": "object", - "description": "Configurate how the messages are logged.", - "oneOf": [ { - "title": "First N Entries", - "description": "Log first N entries per stream.", - "type": "object", - "required": [ "logging_type", "max_entry_count" ], - "properties": { - "logging_type": { - "type": "string", - "enum": [ "FirstN" ], - "default": "FirstN" - }, - "max_entry_count": { - "title": "N", - "description": "Number of entries to log. This destination is for testing only. So it won't make sense to log infinitely. The maximum is 1,000 entries.", - "type": "number", - "default": 100, - "examples": [ 100 ], - "minimum": 1, - "maximum": 1000 - } - } - }, { - "title": "Every N-th Entry", - "description": "For each stream, log every N-th entry with a maximum cap.", - "type": "object", - "required": [ "logging_type", "nth_entry_to_log", "max_entry_count" ], - "properties": { - "logging_type": { - "type": "string", - "enum": [ "EveryNth" ], - "default": "EveryNth" - }, - "nth_entry_to_log": { - "title": "N", - "description": "The N-th entry to log for each stream. N starts from 1. For example, when N = 1, every entry is logged; when N = 2, every other entry is logged; when N = 3, one out of three entries is logged.", - "type": "number", - "example": [ 3 ], - "minimum": 1, - "maximum": 1000 - }, - "max_entry_count": { - "title": "Max Log Entries", - "description": "Max number of entries to log. This destination is for testing only. So it won't make sense to log infinitely. The maximum is 1,000 entries.", - "type": "number", - "default": 100, - "examples": [ 100 ], - "minimum": 1, - "maximum": 1000 - } - } - }, { - "title": "Random Sampling", - "description": "For each stream, randomly log a percentage of the entries with a maximum cap.", - "type": "object", - "required": [ "logging_type", "sampling_ratio", "max_entry_count" ], - "properties": { - "logging_type": { - "type": "string", - "enum": [ "RandomSampling" ], - "default": "RandomSampling" - }, - "sampling_ratio": { - "title": "Sampling Ratio", - "description": "A positive floating number smaller than 1.", - "type": "number", - "default": 0.001, - "examples": [ 0.001 ], - "minimum": 0, - "maximum": 1 - }, - "seed": { - "title": "Random Number Generator Seed", - "description": "When the seed is unspecified, the current time millis will be used as the seed.", - "type": "number", - "examples": [ 1900 ] - }, - "max_entry_count": { - "title": "Max Log Entries", - "description": "Max number of entries to log. This destination is for testing only. So it won't make sense to log infinitely. The maximum is 1,000 entries.", - "type": "number", - "default": 100, - "examples": [ 100 ], - "minimum": 1, - "maximum": 1000 - } - } - } ] - } - } - }, { - "title": "Silent", - "required": [ "type" ], - "properties": { - "type": { - "type": "string", - "const": "SILENT", - "default": "SILENT" - } - } - }, { - "title": "Throttled", - "required": [ "type", "millis_per_record" ], - "properties": { - "type": { - "type": "string", - "const": "THROTTLED", - "default": "THROTTLED" - }, - "millis_per_record": { - "description": "Number of milli-second to pause in between records.", - "type": "integer" - } - } - }, { - "title": "Failing", - "required": [ "type", "num_messages" ], - "properties": { - "type": { - "type": "string", - "const": "FAILING", - "default": "FAILING" - }, - "num_messages": { - "description": "Number of messages after which to fail.", - "type": "integer" - } - } - } ] - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false - }, { - "destinationDefinitionId": "68f351a7-2745-4bef-ad7f-996b8e51bb8c", - "name": "ElasticSearch", - "dockerRepository": "airbyte/destination-elasticsearch", - "dockerImageTag": "0.1.6", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/elasticsearch", - "icon": "elasticsearch.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/elasticsearch", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Elasticsearch Connection Configuration", - "type": "object", - "required": [ "endpoint" ], - "additionalProperties": false, - "properties": { - "endpoint": { - "title": "Server Endpoint", - "type": "string", - "description": "The full url of the Elasticsearch server" - }, - "upsert": { - "type": "boolean", - "title": "Upsert Records", - "description": "If a primary key identifier is defined in the source, an upsert will be performed using the primary key value as the elasticsearch doc id. Does not support composite primary keys.", - "default": true - }, - "ca_certificate": { - "type": "string", - "title": "CA certificate", - "description": "CA certificate", - "airbyte_secret": true, - "multiline": true - }, - "authenticationMethod": { - "title": "Authentication Method", - "type": "object", - "description": "The type of authentication to be used", - "oneOf": [ { - "title": "None", - "additionalProperties": false, - "description": "No authentication will be used", - "required": [ "method" ], - "properties": { - "method": { - "type": "string", - "const": "none" - } - } - }, { - "title": "Api Key/Secret", - "additionalProperties": false, - "description": "Use a api key and secret combination to authenticate", - "required": [ "method", "apiKeyId", "apiKeySecret" ], - "properties": { - "method": { - "type": "string", - "const": "secret" - }, - "apiKeyId": { - "title": "API Key ID", - "description": "The Key ID to used when accessing an enterprise Elasticsearch instance.", - "type": "string" - }, - "apiKeySecret": { - "title": "API Key Secret", - "description": "The secret associated with the API Key ID.", - "type": "string", - "airbyte_secret": true - } - } - }, { - "title": "Username/Password", - "additionalProperties": false, - "description": "Basic auth header with a username and password", - "required": [ "method", "username", "password" ], - "properties": { - "method": { - "type": "string", - "const": "basic" - }, - "username": { - "title": "Username", - "description": "Basic auth username to access a secure Elasticsearch server", - "type": "string" - }, - "password": { - "title": "Password", - "description": "Basic auth password to access a secure Elasticsearch server", - "type": "string", - "airbyte_secret": true - } - } - } ] - }, - "tunnel_method": { - "type": "object", - "title": "SSH Tunnel Method", - "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", - "oneOf": [ { - "title": "No Tunnel", - "required": [ "tunnel_method" ], - "properties": { - "tunnel_method": { - "description": "No ssh tunnel needed to connect to database", - "type": "string", - "const": "NO_TUNNEL", - "order": 0 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host.", - "type": "string", - "order": 3 - }, - "ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - }, { - "title": "Password Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host", - "type": "string", - "order": 3 - }, - "tunnel_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 4 - } - } - } ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ], - "supportsNamespaces": true - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "bb6071d9-6f34-4766-bec2-d1d4ed81a653", - "name": "Exasol", - "dockerRepository": "airbyte/destination-exasol", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/exasol", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/exasol", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Exasol Destination Spec", - "type": "object", - "required": [ "host", "port", "username", "schema" ], - "additionalProperties": true, - "properties": { - "host": { - "title": "Host", - "description": "Hostname of the database.", - "type": "string", - "order": 0 - }, - "port": { - "title": "Port", - "description": "Port of the database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 8563, - "examples": [ "8563" ], - "order": 1 - }, - "certificateFingerprint": { - "title": "Certificate Fingerprint", - "description": "Fingerprint of the Exasol server's TLS certificate", - "type": "string", - "examples": [ "ABC123..." ], - "order": 2 - }, - "username": { - "title": "User", - "description": "Username to use to access the database.", - "type": "string", - "order": 3 - }, - "password": { - "title": "Password", - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 4 - }, - "schema": { - "title": "Schema Name", - "description": "Schema Name", - "type": "string", - "order": 5 - }, - "jdbc_url_params": { - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol ';'. (example: key1=value1;key2=value2;key3=value3).", - "title": "JDBC URL Params", - "type": "string", - "order": 6 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "18081484-02a5-4662-8dba-b270b582f321", - "name": "Firebolt", - "dockerRepository": "airbyte/destination-firebolt", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/firebolt", - "icon": "firebolt.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/firebolt", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Firebolt Spec", - "type": "object", - "required": [ "username", "password", "database" ], - "additionalProperties": false, - "properties": { - "username": { - "type": "string", - "title": "Username", - "description": "Firebolt email address you use to login.", - "examples": [ "username@email.com" ], - "order": 0 - }, - "password": { - "type": "string", - "title": "Password", - "description": "Firebolt password.", - "airbyte_secret": true, - "order": 1 - }, - "account": { - "type": "string", - "title": "Account", - "description": "Firebolt account to login." - }, - "host": { - "type": "string", - "title": "Host", - "description": "The host name of your Firebolt database.", - "examples": [ "api.app.firebolt.io" ] - }, - "database": { - "type": "string", - "title": "Database", - "description": "The database to connect to." - }, - "engine": { - "type": "string", - "title": "Engine", - "description": "Engine name or url to connect to." - }, - "loading_method": { - "type": "object", - "title": "Loading Method", - "description": "Loading method used to select the way data will be uploaded to Firebolt", - "oneOf": [ { - "title": "SQL Inserts", - "additionalProperties": false, - "required": [ "method" ], - "properties": { - "method": { - "type": "string", - "const": "SQL" - } - } - }, { - "title": "External Table via S3", - "additionalProperties": false, - "required": [ "method", "s3_bucket", "s3_region", "aws_key_id", "aws_key_secret" ], - "properties": { - "method": { - "type": "string", - "const": "S3" - }, - "s3_bucket": { - "type": "string", - "title": "S3 bucket name", - "description": "The name of the S3 bucket." - }, - "s3_region": { - "type": "string", - "title": "S3 region name", - "description": "Region name of the S3 bucket.", - "examples": [ "us-east-1" ] - }, - "aws_key_id": { - "type": "string", - "title": "AWS Key ID", - "airbyte_secret": true, - "description": "AWS access key granting read and write access to S3." - }, - "aws_key_secret": { - "type": "string", - "title": "AWS Key Secret", - "airbyte_secret": true, - "description": "Corresponding secret part of the AWS Key" - } - } - } ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": true, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "supportsDbt": true - }, { - "destinationDefinitionId": "ca8f6566-e555-4b40-943a-545bf123117a", - "name": "Google Cloud Storage (GCS)", - "dockerRepository": "airbyte/destination-gcs", - "dockerImageTag": "0.2.16", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/gcs", - "icon": "googlecloudstorage.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/gcs", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "GCS Destination Spec", - "type": "object", - "required": [ "gcs_bucket_name", "gcs_bucket_path", "credential", "format" ], - "properties": { - "gcs_bucket_name": { - "title": "GCS Bucket Name", - "order": 1, - "type": "string", - "description": "You can find the bucket name in the App Engine Admin console Application Settings page, under the label Google Cloud Storage Bucket. Read more here.", - "examples": [ "airbyte_sync" ] - }, - "gcs_bucket_path": { - "title": "GCS Bucket Path", - "description": "GCS Bucket Path string Subdirectory under the above bucket to sync the data into.", - "order": 2, - "type": "string", - "examples": [ "data_sync/test" ] - }, - "gcs_bucket_region": { - "title": "GCS Bucket Region", - "type": "string", - "order": 3, - "default": "us", - "description": "Select a Region of the GCS Bucket. Read more here.", - "enum": [ "northamerica-northeast1", "northamerica-northeast2", "us-central1", "us-east1", "us-east4", "us-west1", "us-west2", "us-west3", "us-west4", "southamerica-east1", "southamerica-west1", "europe-central2", "europe-north1", "europe-west1", "europe-west2", "europe-west3", "europe-west4", "europe-west6", "asia-east1", "asia-east2", "asia-northeast1", "asia-northeast2", "asia-northeast3", "asia-south1", "asia-south2", "asia-southeast1", "asia-southeast2", "australia-southeast1", "australia-southeast2", "asia", "eu", "us", "asia1", "eur4", "nam4" ] - }, - "credential": { - "title": "Authentication", - "description": "An HMAC key is a type of credential and can be associated with a service account or a user account in Cloud Storage. Read more here.", - "type": "object", - "order": 0, - "oneOf": [ { - "title": "HMAC Key", - "required": [ "credential_type", "hmac_key_access_id", "hmac_key_secret" ], - "properties": { - "credential_type": { - "type": "string", - "enum": [ "HMAC_KEY" ], - "default": "HMAC_KEY" - }, - "hmac_key_access_id": { - "type": "string", - "description": "When linked to a service account, this ID is 61 characters long; when linked to a user account, it is 24 characters long. Read more here.", - "title": "Access ID", - "airbyte_secret": true, - "order": 0, - "examples": [ "1234567890abcdefghij1234" ] - }, - "hmac_key_secret": { - "type": "string", - "description": "The corresponding secret for the access ID. It is a 40-character base-64 encoded string. Read more here.", - "title": "Secret", - "airbyte_secret": true, - "order": 1, - "examples": [ "1234567890abcdefghij1234567890ABCDEFGHIJ" ] - } - } - } ] - }, - "format": { - "title": "Output Format", - "type": "object", - "description": "Output data format. One of the following formats must be selected - AVRO format, PARQUET format, CSV format, or JSONL format.", - "order": 4, - "oneOf": [ { - "title": "Avro: Apache Avro", - "required": [ "format_type", "compression_codec" ], - "properties": { - "format_type": { - "type": "string", - "enum": [ "Avro" ], - "default": "Avro" - }, - "compression_codec": { - "title": "Compression Codec", - "description": "The compression algorithm used to compress data. Default to no compression.", - "type": "object", - "oneOf": [ { - "title": "No Compression", - "required": [ "codec" ], - "properties": { - "codec": { - "type": "string", - "enum": [ "no compression" ], - "default": "no compression" - } - } - }, { - "title": "Deflate", - "required": [ "codec" ], - "properties": { - "codec": { - "type": "string", - "enum": [ "Deflate" ], - "default": "Deflate" - }, - "compression_level": { - "title": "Deflate level", - "description": "0: no compression & fastest, 9: best compression & slowest.", - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 9 - } - } - }, { - "title": "bzip2", - "required": [ "codec" ], - "properties": { - "codec": { - "type": "string", - "enum": [ "bzip2" ], - "default": "bzip2" - } - } - }, { - "title": "xz", - "required": [ "codec" ], - "properties": { - "codec": { - "type": "string", - "enum": [ "xz" ], - "default": "xz" - }, - "compression_level": { - "title": "Compression Level", - "description": "The presets 0-3 are fast presets with medium compression. The presets 4-6 are fairly slow presets with high compression. The default preset is 6. The presets 7-9 are like the preset 6 but use bigger dictionaries and have higher compressor and decompressor memory requirements. Unless the uncompressed size of the file exceeds 8 MiB, 16 MiB, or 32 MiB, it is waste of memory to use the presets 7, 8, or 9, respectively. Read more here for details.", - "type": "integer", - "default": 6, - "minimum": 0, - "maximum": 9 - } - } - }, { - "title": "zstandard", - "required": [ "codec" ], - "properties": { - "codec": { - "type": "string", - "enum": [ "zstandard" ], - "default": "zstandard" - }, - "compression_level": { - "title": "Compression Level", - "description": "Negative levels are 'fast' modes akin to lz4 or snappy, levels above 9 are generally for archival purposes, and levels above 18 use a lot of memory.", - "type": "integer", - "default": 3, - "minimum": -5, - "maximum": 22 - }, - "include_checksum": { - "title": "Include Checksum", - "description": "If true, include a checksum with each data block.", - "type": "boolean", - "default": false - } - } - }, { - "title": "snappy", - "required": [ "codec" ], - "properties": { - "codec": { - "type": "string", - "enum": [ "snappy" ], - "default": "snappy" - } - } - } ] - } - } - }, { - "title": "CSV: Comma-Separated Values", - "required": [ "format_type" ], - "properties": { - "format_type": { - "type": "string", - "enum": [ "CSV" ], - "default": "CSV" - }, - "flattening": { - "type": "string", - "title": "Normalization", - "description": "Whether the input JSON data should be normalized (flattened) in the output CSV. Please refer to docs for details.", - "default": "No flattening", - "enum": [ "No flattening", "Root level flattening" ] - }, - "compression": { - "title": "Compression", - "type": "object", - "description": "Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \".csv.gz\").", - "oneOf": [ { - "title": "No Compression", - "requires": [ "compression_type" ], - "properties": { - "compression_type": { - "type": "string", - "enum": [ "No Compression" ], - "default": "No Compression" - } - } - }, { - "title": "GZIP", - "requires": [ "compression_type" ], - "properties": { - "compression_type": { - "type": "string", - "enum": [ "GZIP" ], - "default": "GZIP" - } - } - } ] - } - } - }, { - "title": "JSON Lines: newline-delimited JSON", - "required": [ "format_type" ], - "properties": { - "format_type": { - "type": "string", - "enum": [ "JSONL" ], - "default": "JSONL" - }, - "compression": { - "title": "Compression", - "type": "object", - "description": "Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \".jsonl.gz\").", - "oneOf": [ { - "title": "No Compression", - "requires": "compression_type", - "properties": { - "compression_type": { - "type": "string", - "enum": [ "No Compression" ], - "default": "No Compression" - } - } - }, { - "title": "GZIP", - "requires": "compression_type", - "properties": { - "compression_type": { - "type": "string", - "enum": [ "GZIP" ], - "default": "GZIP" - } - } - } ] - } - } - }, { - "title": "Parquet: Columnar Storage", - "required": [ "format_type" ], - "properties": { - "format_type": { - "type": "string", - "enum": [ "Parquet" ], - "default": "Parquet" - }, - "compression_codec": { - "title": "Compression Codec", - "description": "The compression algorithm used to compress data pages.", - "type": "string", - "default": "UNCOMPRESSED", - "enum": [ "UNCOMPRESSED", "SNAPPY", "GZIP", "LZO", "BROTLI", "LZ4", "ZSTD" ] - }, - "block_size_mb": { - "title": "Block Size (Row Group Size) (MB)", - "description": "This is the size of a row group being buffered in memory. It limits the memory usage when writing. Larger values will improve the IO when reading, but consume more memory when writing. Default: 128 MB.", - "type": "integer", - "default": 128, - "examples": [ 128 ] - }, - "max_padding_size_mb": { - "title": "Max Padding Size (MB)", - "description": "Maximum size allowed as padding to align row groups. This is also the minimum size of a row group. Default: 8 MB.", - "type": "integer", - "default": 8, - "examples": [ 8 ] - }, - "page_size_kb": { - "title": "Page Size (KB)", - "description": "The page size is for compression. A block is composed of pages. A page is the smallest unit that must be read fully to access a single record. If this value is too small, the compression will deteriorate. Default: 1024 KB.", - "type": "integer", - "default": 1024, - "examples": [ 1024 ] - }, - "dictionary_page_size_kb": { - "title": "Dictionary Page Size (KB)", - "description": "There is one dictionary page per column per row group when dictionary encoding is used. The dictionary page size works like the page size but for dictionary. Default: 1024 KB.", - "type": "integer", - "default": 1024, - "examples": [ 1024 ] - }, - "dictionary_encoding": { - "title": "Dictionary Encoding", - "description": "Default: true.", - "type": "boolean", - "default": true - } - } - } ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ], - "$schema": "http://json-schema.org/draft-07/schema#" - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "resourceRequirements": { - "jobSpecific": [ { - "jobType": "sync", - "resourceRequirements": { - "memory_request": "1Gi", - "memory_limit": "1Gi" - } - } ] - } - }, { - "destinationDefinitionId": "27dc7500-6d1b-40b1-8b07-e2f2aea3c9f4", - "name": "Google Firestore", - "dockerRepository": "airbyte/destination-firestore", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/firestore", - "icon": "firestore.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/firestore", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Destination Google Firestore", - "type": "object", - "required": [ "project_id" ], - "additionalProperties": false, - "properties": { - "project_id": { - "type": "string", - "description": "The GCP project ID for the project containing the target BigQuery dataset.", - "title": "Project ID" - }, - "credentials_json": { - "type": "string", - "description": "The contents of the JSON service account key. Check out the docs if you need help generating this key. Default credentials will be used if this field is left empty.", - "title": "Credentials JSON", - "airbyte_secret": true - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "append", "overwrite" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "356668e2-7e34-47f3-a3b0-67a8a481b692", - "name": "Google PubSub", - "dockerRepository": "airbyte/destination-pubsub", - "dockerImageTag": "0.2.0", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/pubsub", - "icon": "googlepubsub.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/pubsub", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Google PubSub Destination Spec", - "type": "object", - "required": [ "project_id", "topic_id", "credentials_json", "ordering_enabled", "batching_enabled" ], - "additionalProperties": true, - "properties": { - "project_id": { - "type": "string", - "description": "The GCP project ID for the project containing the target PubSub.", - "title": "Project ID" - }, - "topic_id": { - "type": "string", - "description": "The PubSub topic ID in the given GCP project ID.", - "title": "PubSub Topic ID" - }, - "credentials_json": { - "type": "string", - "description": "The contents of the JSON service account key. Check out the docs if you need help generating this key.", - "title": "Credentials JSON", - "airbyte_secret": true - }, - "ordering_enabled": { - "title": "Message Ordering Enabled", - "description": "If TRUE PubSub publisher will have message ordering enabled. Every message will have an ordering key of stream", - "type": "boolean", - "default": false - }, - "batching_enabled": { - "type": "boolean", - "title": "Message Batching Enabled", - "description": "If TRUE messages will be buffered instead of sending them one by one", - "default": false - }, - "batching_delay_threshold": { - "type": "integer", - "title": "Message Batching: Delay Threshold", - "description": "Number of ms before the buffer is flushed", - "default": 1, - "minimum": 1 - }, - "batching_element_count_threshold": { - "type": "integer", - "title": "Message Batching: Element Count Threshold", - "description": "Number of messages before the buffer is flushed", - "default": 1, - "minimum": 1 - }, - "batching_request_bytes_threshold": { - "type": "integer", - "title": "Message Batching: Request Bytes Threshold", - "description": "Number of bytes before the buffer is flushed", - "default": 1, - "minimum": 1 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "9f760101-60ae-462f-9ee6-b7a9dafd454d", - "name": "Kafka", - "dockerRepository": "airbyte/destination-kafka", - "dockerImageTag": "0.1.10", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/kafka", - "icon": "kafka.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/kafka", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Kafka Destination Spec", - "type": "object", - "required": [ "bootstrap_servers", "topic_pattern", "protocol", "acks", "enable_idempotence", "compression_type", "batch_size", "linger_ms", "max_in_flight_requests_per_connection", "client_dns_lookup", "buffer_memory", "max_request_size", "retries", "socket_connection_setup_timeout_ms", "socket_connection_setup_timeout_max_ms", "max_block_ms", "request_timeout_ms", "delivery_timeout_ms", "send_buffer_bytes", "receive_buffer_bytes" ], - "additionalProperties": true, - "properties": { - "bootstrap_servers": { - "title": "Bootstrap Servers", - "description": "A list of host/port pairs to use for establishing the initial connection to the Kafka cluster. The client will make use of all servers irrespective of which servers are specified here for bootstrapping—this list only impacts the initial hosts used to discover the full set of servers. This list should be in the form host1:port1,host2:port2,.... Since these servers are just used for the initial connection to discover the full cluster membership (which may change dynamically), this list need not contain the full set of servers (you may want more than one, though, in case a server is down).", - "type": "string", - "examples": [ "kafka-broker1:9092,kafka-broker2:9092" ] - }, - "topic_pattern": { - "title": "Topic Pattern", - "description": "Topic pattern in which the records will be sent. You can use patterns like '{namespace}' and/or '{stream}' to send the message to a specific topic based on these values. Notice that the topic name will be transformed to a standard naming convention.", - "type": "string", - "examples": [ "sample.topic", "{namespace}.{stream}.sample" ] - }, - "test_topic": { - "title": "Test Topic", - "description": "Topic to test if Airbyte can produce messages.", - "type": "string", - "examples": [ "test.topic" ] - }, - "sync_producer": { - "title": "Sync Producer", - "description": "Wait synchronously until the record has been sent to Kafka.", - "type": "boolean", - "default": false - }, - "protocol": { - "title": "Protocol", - "type": "object", - "description": "Protocol used to communicate with brokers.", - "oneOf": [ { - "title": "PLAINTEXT", - "required": [ "security_protocol" ], - "properties": { - "security_protocol": { - "type": "string", - "enum": [ "PLAINTEXT" ], - "default": "PLAINTEXT" - } - } - }, { - "title": "SASL PLAINTEXT", - "required": [ "security_protocol", "sasl_mechanism", "sasl_jaas_config" ], - "properties": { - "security_protocol": { - "type": "string", - "enum": [ "SASL_PLAINTEXT" ], - "default": "SASL_PLAINTEXT" - }, - "sasl_mechanism": { - "title": "SASL Mechanism", - "description": "SASL mechanism used for client connections. This may be any mechanism for which a security provider is available.", - "type": "string", - "default": "PLAIN", - "enum": [ "PLAIN" ] - }, - "sasl_jaas_config": { - "title": "SASL JAAS Config", - "description": "JAAS login context parameters for SASL connections in the format used by JAAS configuration files.", - "type": "string", - "default": "", - "airbyte_secret": true - } - } - }, { - "title": "SASL SSL", - "required": [ "security_protocol", "sasl_mechanism", "sasl_jaas_config" ], - "properties": { - "security_protocol": { - "type": "string", - "enum": [ "SASL_SSL" ], - "default": "SASL_SSL" - }, - "sasl_mechanism": { - "title": "SASL Mechanism", - "description": "SASL mechanism used for client connections. This may be any mechanism for which a security provider is available.", - "type": "string", - "default": "GSSAPI", - "enum": [ "GSSAPI", "OAUTHBEARER", "SCRAM-SHA-256", "SCRAM-SHA-512", "PLAIN" ] - }, - "sasl_jaas_config": { - "title": "SASL JAAS Config", - "description": "JAAS login context parameters for SASL connections in the format used by JAAS configuration files.", - "type": "string", - "default": "", - "airbyte_secret": true - } - } - } ] - }, - "client_id": { - "title": "Client ID", - "description": "An ID string to pass to the server when making requests. The purpose of this is to be able to track the source of requests beyond just ip/port by allowing a logical application name to be included in server-side request logging.", - "type": "string", - "examples": [ "airbyte-producer" ] - }, - "acks": { - "title": "ACKs", - "description": "The number of acknowledgments the producer requires the leader to have received before considering a request complete. This controls the durability of records that are sent.", - "type": "string", - "default": "1", - "enum": [ "0", "1", "all" ] - }, - "enable_idempotence": { - "title": "Enable Idempotence", - "description": "When set to 'true', the producer will ensure that exactly one copy of each message is written in the stream. If 'false', producer retries due to broker failures, etc., may write duplicates of the retried message in the stream.", - "type": "boolean", - "default": false - }, - "compression_type": { - "title": "Compression Type", - "description": "The compression type for all data generated by the producer.", - "type": "string", - "default": "none", - "enum": [ "none", "gzip", "snappy", "lz4", "zstd" ] - }, - "batch_size": { - "title": "Batch Size", - "description": "The producer will attempt to batch records together into fewer requests whenever multiple records are being sent to the same partition.", - "type": "integer", - "examples": [ 16384 ] - }, - "linger_ms": { - "title": "Linger ms", - "description": "The producer groups together any records that arrive in between request transmissions into a single batched request.", - "type": "string", - "examples": [ 0 ] - }, - "max_in_flight_requests_per_connection": { - "title": "Max in Flight Requests per Connection", - "description": "The maximum number of unacknowledged requests the client will send on a single connection before blocking. Can be greater than 1, and the maximum value supported with idempotency is 5.", - "type": "integer", - "examples": [ 5 ] - }, - "client_dns_lookup": { - "title": "Client DNS Lookup", - "description": "Controls how the client uses DNS lookups. If set to use_all_dns_ips, connect to each returned IP address in sequence until a successful connection is established. After a disconnection, the next IP is used. Once all IPs have been used once, the client resolves the IP(s) from the hostname again. If set to resolve_canonical_bootstrap_servers_only, resolve each bootstrap address into a list of canonical names. After the bootstrap phase, this behaves the same as use_all_dns_ips. If set to default (deprecated), attempt to connect to the first IP address returned by the lookup, even if the lookup returns multiple IP addresses.", - "type": "string", - "default": "use_all_dns_ips", - "enum": [ "default", "use_all_dns_ips", "resolve_canonical_bootstrap_servers_only", "use_all_dns_ips" ] - }, - "buffer_memory": { - "title": "Buffer Memory", - "description": "The total bytes of memory the producer can use to buffer records waiting to be sent to the server.", - "type": "string", - "examples": 33554432 - }, - "max_request_size": { - "title": "Max Request Size", - "description": "The maximum size of a request in bytes.", - "type": "integer", - "examples": [ 1048576 ] - }, - "retries": { - "title": "Retries", - "description": "Setting a value greater than zero will cause the client to resend any record whose send fails with a potentially transient error.", - "type": "integer", - "examples": [ 2147483647 ] - }, - "socket_connection_setup_timeout_ms": { - "title": "Socket Connection Setup Timeout", - "description": "The amount of time the client will wait for the socket connection to be established.", - "type": "string", - "examples": [ 10000 ] - }, - "socket_connection_setup_timeout_max_ms": { - "title": "Socket Connection Setup Max Timeout", - "description": "The maximum amount of time the client will wait for the socket connection to be established. The connection setup timeout will increase exponentially for each consecutive connection failure up to this maximum.", - "type": "string", - "examples": [ 30000 ] - }, - "max_block_ms": { - "title": "Max Block ms", - "description": "The configuration controls how long the KafkaProducer's send(), partitionsFor(), initTransactions(), sendOffsetsToTransaction(), commitTransaction() and abortTransaction() methods will block.", - "type": "string", - "examples": [ 60000 ] - }, - "request_timeout_ms": { - "title": "Request Timeout", - "description": "The configuration controls the maximum amount of time the client will wait for the response of a request. If the response is not received before the timeout elapses the client will resend the request if necessary or fail the request if retries are exhausted.", - "type": "integer", - "examples": [ 30000 ] - }, - "delivery_timeout_ms": { - "title": "Delivery Timeout", - "description": "An upper bound on the time to report success or failure after a call to 'send()' returns.", - "type": "integer", - "examples": [ 120000 ] - }, - "send_buffer_bytes": { - "title": "Send Buffer bytes", - "description": "The size of the TCP send buffer (SO_SNDBUF) to use when sending data. If the value is -1, the OS default will be used.", - "type": "integer", - "examples": [ 131072 ] - }, - "receive_buffer_bytes": { - "title": "Receive Buffer bytes", - "description": "The size of the TCP receive buffer (SO_RCVBUF) to use when reading data. If the value is -1, the OS default will be used.", - "type": "integer", - "examples": [ 32768 ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "6d1d66d4-26ab-4602-8d32-f85894b04955", - "name": "Kinesis", - "dockerRepository": "airbyte/destination-kinesis", - "dockerImageTag": "0.1.5", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/kinesis", - "icon": "kinesis.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/kinesis", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Kinesis Destination Spec", - "type": "object", - "required": [ "endpoint", "region", "shardCount", "accessKey", "privateKey", "bufferSize" ], - "additionalProperties": true, - "properties": { - "endpoint": { - "title": "Endpoint", - "description": "AWS Kinesis endpoint.", - "type": "string", - "examples": [ "kinesis.us‑west‑1.amazonaws.com" ], - "order": 0 - }, - "region": { - "title": "Region", - "description": "AWS region. Your account determines the Regions that are available to you.", - "type": "string", - "examples": [ "us‑west‑1" ], - "order": 1 - }, - "shardCount": { - "title": "Shard Count", - "description": "Number of shards to which the data should be streamed.", - "type": "integer", - "default": 5, - "order": 2 - }, - "accessKey": { - "title": "Access Key", - "description": "Generate the AWS Access Key for current user.", - "airbyte_secret": true, - "type": "string", - "order": 3 - }, - "privateKey": { - "title": "Private Key", - "description": "The AWS Private Key - a string of numbers and letters that are unique for each account, also known as a \"recovery phrase\".", - "airbyte_secret": true, - "type": "string", - "order": 4 - }, - "bufferSize": { - "title": "Buffer Size", - "description": "Buffer size for storing kinesis records before being batch streamed.", - "type": "integer", - "minimum": 1, - "maximum": 500, - "default": 100, - "order": 5 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "8be1cf83-fde1-477f-a4ad-318d23c9f3c6", - "name": "Local CSV", - "dockerRepository": "airbyte/destination-csv", - "dockerImageTag": "1.0.0", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/local-csv", - "icon": "file-csv.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/local-csv", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "CSV Destination Spec", - "type": "object", - "required": [ "destination_path" ], - "additionalProperties": true, - "properties": { - "destination_path": { - "description": "Path to the directory where csv files will be written. The destination uses the local mount \"/local\" and any data files will be placed inside that local mount. For more information check out our docs", - "type": "string", - "examples": [ "/local" ] - }, - "delimiter_type": { - "type": "object", - "title": "Delimiter", - "description": "The character delimiting individual cells in the CSV data.", - "oneOf": [ { - "title": "Comma", - "required": [ "delimiter" ], - "properties": { - "delimiter": { - "type": "string", - "const": "\\u002c" - } - } - }, { - "title": "Semicolon", - "required": [ "delimiter" ], - "properties": { - "delimiter": { - "type": "string", - "const": "\\u003b" - } - } - }, { - "title": "Pipe", - "required": [ "delimiter" ], - "properties": { - "delimiter": { - "type": "string", - "const": "\\u007c" - } - } - }, { - "title": "Tab", - "required": [ "delimiter" ], - "properties": { - "delimiter": { - "type": "string", - "const": "\\u0009" - } - } - }, { - "title": "Space", - "required": [ "delimiter" ], - "properties": { - "delimiter": { - "type": "string", - "const": "\\u0020" - } - } - } ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "a625d593-bba5-4a1c-a53d-2d246268a816", - "name": "Local JSON", - "dockerRepository": "airbyte/destination-local-json", - "dockerImageTag": "0.2.11", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/local-json", - "icon": "file-json.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/local-json", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Local Json Destination Spec", - "type": "object", - "required": [ "destination_path" ], - "additionalProperties": false, - "properties": { - "destination_path": { - "description": "Path to the directory where json files will be written. The files will be placed inside that local mount. For more information check out our docs", - "title": "Destination Path", - "type": "string", - "examples": [ "/json_data" ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "f3802bc4-5406-4752-9e8d-01e504ca8194", - "name": "MQTT", - "dockerRepository": "airbyte/destination-mqtt", - "dockerImageTag": "0.1.3", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mqtt", - "icon": "mqtt.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mqtt", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "MQTT Destination Spec", - "type": "object", - "required": [ "broker_host", "broker_port", "use_tls", "topic_pattern", "publisher_sync", "connect_timeout", "automatic_reconnect", "clean_session", "message_retained", "message_qos" ], - "additionalProperties": true, - "properties": { - "broker_host": { - "title": "MQTT broker host", - "description": "Host of the broker to connect to.", - "type": "string" - }, - "broker_port": { - "title": "MQTT broker port", - "description": "Port of the broker.", - "type": "integer" - }, - "use_tls": { - "title": "Use TLS", - "description": "Whether to use TLS encryption on the connection.", - "type": "boolean", - "default": false - }, - "username": { - "title": "Username", - "description": "User name to use for the connection.", - "type": "string" - }, - "password": { - "title": "Password", - "description": "Password to use for the connection.", - "type": "string", - "airbyte_secret": true - }, - "topic_pattern": { - "title": "Topic pattern", - "description": "Topic pattern in which the records will be sent. You can use patterns like '{namespace}' and/or '{stream}' to send the message to a specific topic based on these values. Notice that the topic name will be transformed to a standard naming convention.", - "type": "string", - "examples": [ "sample.topic", "{namespace}/{stream}/sample" ] - }, - "topic_test": { - "title": "Test topic", - "description": "Topic to test if Airbyte can produce messages.", - "type": "string", - "examples": [ "test/topic" ] - }, - "client": { - "title": "Client ID", - "description": "A client identifier that is unique on the server being connected to.", - "type": "string", - "examples": [ "airbyte-client1" ] - }, - "publisher_sync": { - "title": "Sync publisher", - "description": "Wait synchronously until the record has been sent to the broker.", - "type": "boolean", - "default": false - }, - "connect_timeout": { - "title": "Connect timeout", - "description": " Maximum time interval (in seconds) the client will wait for the network connection to the MQTT server to be established.", - "type": "integer", - "default": 30 - }, - "automatic_reconnect": { - "title": "Automatic reconnect", - "description": "Whether the client will automatically attempt to reconnect to the server if the connection is lost.", - "type": "boolean", - "default": true - }, - "clean_session": { - "title": "Clean session", - "description": "Whether the client and server should remember state across restarts and reconnects.", - "type": "boolean", - "default": true - }, - "message_retained": { - "title": "Message retained", - "description": "Whether or not the publish message should be retained by the messaging engine.", - "type": "boolean", - "default": false - }, - "message_qos": { - "title": "Message QoS", - "description": "Quality of service used for each message to be delivered.", - "default": "AT_LEAST_ONCE", - "enum": [ "AT_MOST_ONCE", "AT_LEAST_ONCE", "EXACTLY_ONCE" ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "d4353156-9217-4cad-8dd7-c108fd4f74cf", - "name": "MS SQL Server", - "dockerRepository": "airbyte/destination-mssql", - "dockerImageTag": "0.1.23", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mssql", - "icon": "mssql.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mssql", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "MS SQL Server Destination Spec", - "type": "object", - "required": [ "host", "port", "username", "database", "schema" ], - "properties": { - "host": { - "title": "Host", - "description": "The host name of the MSSQL database.", - "type": "string", - "order": 0 - }, - "port": { - "title": "Port", - "description": "The port of the MSSQL database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 1433, - "examples": [ "1433" ], - "order": 1 - }, - "database": { - "title": "DB Name", - "description": "The name of the MSSQL database.", - "type": "string", - "order": 2 - }, - "schema": { - "title": "Default Schema", - "description": "The default schema tables are written to if the source does not specify a namespace. The usual value for this field is \"public\".", - "type": "string", - "examples": [ "public" ], - "default": "public", - "order": 3 - }, - "username": { - "title": "User", - "description": "The username which is used to access the database.", - "type": "string", - "order": 4 - }, - "password": { - "title": "Password", - "description": "The password associated with this username.", - "type": "string", - "airbyte_secret": true, - "order": 5 - }, - "jdbc_url_params": { - "title": "JDBC URL Params", - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", - "type": "string", - "order": 6 - }, - "ssl_method": { - "title": "SSL Method", - "type": "object", - "description": "The encryption method which is used to communicate with the database.", - "order": 7, - "oneOf": [ { - "title": "Unencrypted", - "description": "The data transfer will not be encrypted.", - "required": [ "ssl_method" ], - "type": "object", - "properties": { - "ssl_method": { - "type": "string", - "const": "unencrypted", - "enum": [ "unencrypted" ], - "default": "unencrypted" - } - } - }, { - "title": "Encrypted (trust server certificate)", - "description": "Use the certificate provided by the server without verification. (For testing purposes only!)", - "required": [ "ssl_method" ], - "type": "object", - "properties": { - "ssl_method": { - "type": "string", - "const": "encrypted_trust_server_certificate", - "enum": [ "encrypted_trust_server_certificate" ], - "default": "encrypted_trust_server_certificate" - } - } - }, { - "title": "Encrypted (verify certificate)", - "description": "Verify and use the certificate provided by the server.", - "required": [ "ssl_method", "trustStoreName", "trustStorePassword" ], - "type": "object", - "properties": { - "ssl_method": { - "type": "string", - "const": "encrypted_verify_certificate", - "enum": [ "encrypted_verify_certificate" ], - "default": "encrypted_verify_certificate" - }, - "hostNameInCertificate": { - "title": "Host Name In Certificate", - "type": "string", - "description": "Specifies the host name of the server. The value of this property must match the subject property of the certificate.", - "order": 8 - } - } - } ] - }, - "tunnel_method": { - "type": "object", - "title": "SSH Tunnel Method", - "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", - "oneOf": [ { - "title": "No Tunnel", - "required": [ "tunnel_method" ], - "properties": { - "tunnel_method": { - "description": "No ssh tunnel needed to connect to database", - "type": "string", - "const": "NO_TUNNEL", - "order": 0 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host.", - "type": "string", - "order": 3 - }, - "ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - }, { - "title": "Password Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host", - "type": "string", - "order": 3 - }, - "tunnel_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 4 - } - } - } ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": true, - "supportsDBT": true, - "supported_destination_sync_modes": [ "overwrite", "append", "append_dedup" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "normalizationConfig": { - "normalizationRepository": "airbyte/normalization-mssql", - "normalizationTag": "0.4.0", - "normalizationIntegrationType": "mssql" - }, - "supportsDbt": true - }, { - "destinationDefinitionId": "af7c921e-5892-4ff2-b6c1-4a5ab258fb7e", - "name": "MeiliSearch", - "dockerRepository": "airbyte/destination-meilisearch", - "dockerImageTag": "1.0.0", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/meilisearch", - "icon": "meilisearch.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/meilisearch", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Destination Meilisearch", - "type": "object", - "required": [ "host" ], - "additionalProperties": false, - "properties": { - "host": { - "title": "Host", - "description": "Hostname of the MeiliSearch instance.", - "type": "string", - "order": 0 - }, - "api_key": { - "title": "API Key", - "airbyte_secret": true, - "description": "MeiliSearch API Key. See the docs for more information on how to obtain this key.", - "type": "string", - "order": 1 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "8b746512-8c2e-6ac1-4adc-b59faafd473c", - "name": "MongoDB", - "dockerRepository": "airbyte/destination-mongodb", - "dockerImageTag": "0.1.9", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mongodb", - "icon": "mongodb.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mongodb", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "MongoDB Destination Spec", - "type": "object", - "required": [ "database", "auth_type" ], - "properties": { - "instance_type": { - "description": "MongoDb instance to connect to. For MongoDB Atlas and Replica Set TLS connection is used by default.", - "title": "MongoDb Instance Type", - "type": "object", - "order": 0, - "oneOf": [ { - "title": "Standalone MongoDb Instance", - "required": [ "instance", "host", "port" ], - "properties": { - "instance": { - "type": "string", - "enum": [ "standalone" ], - "default": "standalone" - }, - "host": { - "title": "Host", - "type": "string", - "description": "The Host of a Mongo database to be replicated.", - "order": 0 - }, - "port": { - "title": "Port", - "type": "integer", - "description": "The Port of a Mongo database to be replicated.", - "minimum": 0, - "maximum": 65536, - "default": 27017, - "examples": [ "27017" ], - "order": 1 - }, - "tls": { - "title": "TLS Connection", - "type": "boolean", - "description": "Indicates whether TLS encryption protocol will be used to connect to MongoDB. It is recommended to use TLS connection if possible. For more information see documentation.", - "default": false, - "order": 2 - } - } - }, { - "title": "Replica Set", - "required": [ "instance", "server_addresses" ], - "properties": { - "instance": { - "type": "string", - "enum": [ "replica" ], - "default": "replica" - }, - "server_addresses": { - "title": "Server addresses", - "type": "string", - "description": "The members of a replica set. Please specify `host`:`port` of each member seperated by comma.", - "examples": [ "host1:27017,host2:27017,host3:27017" ], - "order": 0 - }, - "replica_set": { - "title": "Replica Set", - "type": "string", - "description": "A replica set name.", - "order": 1 - } - } - }, { - "title": "MongoDB Atlas", - "required": [ "instance", "cluster_url" ], - "properties": { - "instance": { - "type": "string", - "enum": [ "atlas" ], - "default": "atlas" - }, - "cluster_url": { - "title": "Cluster URL", - "type": "string", - "description": "URL of a cluster to connect to.", - "order": 0 - } - } - } ] - }, - "database": { - "title": "DB Name", - "description": "Name of the database.", - "type": "string", - "order": 2 - }, - "auth_type": { - "title": "Authorization type", - "type": "object", - "description": "Authorization type.", - "oneOf": [ { - "title": "None", - "description": "None.", - "required": [ "authorization" ], - "type": "object", - "properties": { - "authorization": { - "type": "string", - "const": "none" - } - } - }, { - "title": "Login/Password", - "description": "Login/Password.", - "required": [ "authorization", "username", "password" ], - "type": "object", - "properties": { - "authorization": { - "type": "string", - "const": "login/password" - }, - "username": { - "title": "User", - "description": "Username to use to access the database.", - "type": "string", - "order": 1 - }, - "password": { - "title": "Password", - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 2 - } - } - } ] - }, - "tunnel_method": { - "type": "object", - "title": "SSH Tunnel Method", - "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", - "oneOf": [ { - "title": "No Tunnel", - "required": [ "tunnel_method" ], - "properties": { - "tunnel_method": { - "description": "No ssh tunnel needed to connect to database", - "type": "string", - "const": "NO_TUNNEL", - "order": 0 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host.", - "type": "string", - "order": 3 - }, - "ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - }, { - "title": "Password Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host", - "type": "string", - "order": 3 - }, - "tunnel_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 4 - } - } - } ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "ca81ee7c-3163-4246-af40-094cc31e5e42", - "name": "MySQL", - "dockerRepository": "airbyte/destination-mysql", - "dockerImageTag": "0.1.20", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mysql", - "icon": "mysql.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mysql", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "MySQL Destination Spec", - "type": "object", - "required": [ "host", "port", "username", "database" ], - "additionalProperties": true, - "properties": { - "host": { - "title": "Host", - "description": "Hostname of the database.", - "type": "string", - "order": 0 - }, - "port": { - "title": "Port", - "description": "Port of the database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 3306, - "examples": [ "3306" ], - "order": 1 - }, - "database": { - "title": "DB Name", - "description": "Name of the database.", - "type": "string", - "order": 2 - }, - "username": { - "title": "User", - "description": "Username to use to access the database.", - "type": "string", - "order": 3 - }, - "password": { - "title": "Password", - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 4 - }, - "ssl": { - "title": "SSL Connection", - "description": "Encrypt data using SSL.", - "type": "boolean", - "default": true, - "order": 5 - }, - "jdbc_url_params": { - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", - "title": "JDBC URL Params", - "type": "string", - "order": 6 - }, - "tunnel_method": { - "type": "object", - "title": "SSH Tunnel Method", - "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", - "oneOf": [ { - "title": "No Tunnel", - "required": [ "tunnel_method" ], - "properties": { - "tunnel_method": { - "description": "No ssh tunnel needed to connect to database", - "type": "string", - "const": "NO_TUNNEL", - "order": 0 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host.", - "type": "string", - "order": 3 - }, - "ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - }, { - "title": "Password Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host", - "type": "string", - "order": 3 - }, - "tunnel_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 4 - } - } - } ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": true, - "supportsDBT": true, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "normalizationConfig": { - "normalizationRepository": "airbyte/normalization-mysql", - "normalizationTag": "0.4.0", - "normalizationIntegrationType": "mysql" - }, - "supportsDbt": true - }, { - "destinationDefinitionId": "3986776d-2319-4de9-8af8-db14c0996e72", - "name": "Oracle", - "dockerRepository": "airbyte/destination-oracle", - "dockerImageTag": "0.1.19", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/oracle", - "icon": "oracle.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/oracle", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Oracle Destination Spec", - "type": "object", - "required": [ "host", "port", "username", "sid" ], - "additionalProperties": true, - "properties": { - "host": { - "title": "Host", - "description": "The hostname of the database.", - "type": "string", - "order": 0 - }, - "port": { - "title": "Port", - "description": "The port of the database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 1521, - "examples": [ "1521" ], - "order": 1 - }, - "sid": { - "title": "SID", - "description": "The System Identifier uniquely distinguishes the instance from any other instance on the same computer.", - "type": "string", - "order": 2 - }, - "username": { - "title": "User", - "description": "The username to access the database. This user must have CREATE USER privileges in the database.", - "type": "string", - "order": 3 - }, - "password": { - "title": "Password", - "description": "The password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 4 - }, - "jdbc_url_params": { - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", - "title": "JDBC URL Params", - "type": "string", - "order": 5 - }, - "schema": { - "title": "Default Schema", - "description": "The default schema is used as the target schema for all statements issued from the connection that do not explicitly specify a schema name. The usual value for this field is \"airbyte\". In Oracle, schemas and users are the same thing, so the \"user\" parameter is used as the login credentials and this is used for the default Airbyte message schema.", - "type": "string", - "examples": [ "airbyte" ], - "default": "airbyte", - "order": 6 - }, - "encryption": { - "title": "Encryption", - "type": "object", - "description": "The encryption method which is used when communicating with the database.", - "order": 7, - "oneOf": [ { - "title": "Unencrypted", - "description": "Data transfer will not be encrypted.", - "required": [ "encryption_method" ], - "properties": { - "encryption_method": { - "type": "string", - "const": "unencrypted", - "enum": [ "unencrypted" ], - "default": "unencrypted" - } - } - }, { - "title": "Native Network Encryption (NNE)", - "description": "The native network encryption gives you the ability to encrypt database connections, without the configuration overhead of TCP/IP and SSL/TLS and without the need to open and listen on different ports.", - "required": [ "encryption_method" ], - "properties": { - "encryption_method": { - "type": "string", - "const": "client_nne", - "enum": [ "client_nne" ], - "default": "client_nne" - }, - "encryption_algorithm": { - "type": "string", - "description": "This parameter defines the database encryption algorithm.", - "title": "Encryption Algorithm", - "default": "AES256", - "enum": [ "AES256", "RC4_56", "3DES168" ] - } - } - }, { - "title": "TLS Encrypted (verify certificate)", - "description": "Verify and use the certificate provided by the server.", - "required": [ "encryption_method", "ssl_certificate" ], - "properties": { - "encryption_method": { - "type": "string", - "const": "encrypted_verify_certificate", - "enum": [ "encrypted_verify_certificate" ], - "default": "encrypted_verify_certificate" - }, - "ssl_certificate": { - "title": "SSL PEM file", - "description": "Privacy Enhanced Mail (PEM) files are concatenated certificate containers frequently used in certificate installations.", - "type": "string", - "airbyte_secret": true, - "multiline": true - } - } - } ] - }, - "tunnel_method": { - "type": "object", - "title": "SSH Tunnel Method", - "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", - "oneOf": [ { - "title": "No Tunnel", - "required": [ "tunnel_method" ], - "properties": { - "tunnel_method": { - "description": "No ssh tunnel needed to connect to database", - "type": "string", - "const": "NO_TUNNEL", - "order": 0 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host.", - "type": "string", - "order": 3 - }, - "ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - }, { - "title": "Password Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host", - "type": "string", - "order": 3 - }, - "tunnel_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 4 - } - } - } ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "normalizationConfig": { - "normalizationRepository": "airbyte/normalization-oracle", - "normalizationTag": "0.4.0", - "normalizationIntegrationType": "oracle" - }, - "supportsDbt": true - }, { - "destinationDefinitionId": "25c5221d-dce2-4163-ade9-739ef790f503", - "name": "Postgres", - "dockerRepository": "airbyte/destination-postgres", - "dockerImageTag": "0.3.27", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/postgres", - "icon": "postgresql.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/postgres", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Postgres Destination Spec", - "type": "object", - "required": [ "host", "port", "username", "database", "schema" ], - "additionalProperties": true, - "properties": { - "host": { - "title": "Host", - "description": "Hostname of the database.", - "type": "string", - "order": 0 - }, - "port": { - "title": "Port", - "description": "Port of the database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 5432, - "examples": [ "5432" ], - "order": 1 - }, - "database": { - "title": "DB Name", - "description": "Name of the database.", - "type": "string", - "order": 2 - }, - "schema": { - "title": "Default Schema", - "description": "The default schema tables are written to if the source does not specify a namespace. The usual value for this field is \"public\".", - "type": "string", - "examples": [ "public" ], - "default": "public", - "order": 3 - }, - "username": { - "title": "User", - "description": "Username to use to access the database.", - "type": "string", - "order": 4 - }, - "password": { - "title": "Password", - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 5 - }, - "ssl": { - "title": "SSL Connection", - "description": "Encrypt data using SSL. When activating SSL, please select one of the connection modes.", - "type": "boolean", - "default": false, - "order": 6 - }, - "ssl_mode": { - "title": "SSL modes", - "description": "SSL connection modes. \n disable - Chose this mode to disable encryption of communication between Airbyte and destination database\n allow - Chose this mode to enable encryption only when required by the source database\n prefer - Chose this mode to allow unencrypted connection only if the source database does not support encryption\n require - Chose this mode to always require encryption. If the source database server does not support encryption, connection will fail\n verify-ca - Chose this mode to always require encryption and to verify that the source database server has a valid SSL certificate\n verify-full - This is the most secure mode. Chose this mode to always require encryption and to verify the identity of the source database server\n See more information - in the docs.", - "type": "object", - "order": 7, - "oneOf": [ { - "title": "disable", - "additionalProperties": false, - "description": "Disable SSL.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "disable", - "enum": [ "disable" ], - "default": "disable", - "order": 0 - } - } - }, { - "title": "allow", - "additionalProperties": false, - "description": "Allow SSL mode.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "allow", - "enum": [ "allow" ], - "default": "allow", - "order": 0 - } - } - }, { - "title": "prefer", - "additionalProperties": false, - "description": "Prefer SSL mode.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "prefer", - "enum": [ "prefer" ], - "default": "prefer", - "order": 0 - } - } - }, { - "title": "require", - "additionalProperties": false, - "description": "Require SSL mode.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "require", - "enum": [ "require" ], - "default": "require", - "order": 0 - } - } - }, { - "title": "verify-ca", - "additionalProperties": false, - "description": "Verify-ca SSL mode.", - "required": [ "mode", "ca_certificate" ], - "properties": { - "mode": { - "type": "string", - "const": "verify-ca", - "enum": [ "verify-ca" ], - "default": "verify-ca", - "order": 0 - }, - "ca_certificate": { - "type": "string", - "title": "CA certificate", - "description": "CA certificate", - "airbyte_secret": true, - "multiline": true, - "order": 1 - }, - "client_key_password": { - "type": "string", - "title": "Client key password", - "description": "Password for keystorage. This field is optional. If you do not add it - the password will be generated automatically.", - "airbyte_secret": true, - "order": 4 - } - } - }, { - "title": "verify-full", - "additionalProperties": false, - "description": "Verify-full SSL mode.", - "required": [ "mode", "ca_certificate", "client_certificate", "client_key" ], - "properties": { - "mode": { - "type": "string", - "const": "verify-full", - "enum": [ "verify-full" ], - "default": "verify-full", - "order": 0 - }, - "ca_certificate": { - "type": "string", - "title": "CA certificate", - "description": "CA certificate", - "airbyte_secret": true, - "multiline": true, - "order": 1 - }, - "client_certificate": { - "type": "string", - "title": "Client certificate", - "description": "Client certificate", - "airbyte_secret": true, - "multiline": true, - "order": 2 - }, - "client_key": { - "type": "string", - "title": "Client key", - "description": "Client key", - "airbyte_secret": true, - "multiline": true, - "order": 3 - }, - "client_key_password": { - "type": "string", - "title": "Client key password", - "description": "Password for keystorage. This field is optional. If you do not add it - the password will be generated automatically.", - "airbyte_secret": true, - "order": 4 - } - } - } ] - }, - "jdbc_url_params": { - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", - "title": "JDBC URL Params", - "type": "string", - "order": 8 - }, - "tunnel_method": { - "type": "object", - "title": "SSH Tunnel Method", - "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", - "oneOf": [ { - "title": "No Tunnel", - "required": [ "tunnel_method" ], - "properties": { - "tunnel_method": { - "description": "No ssh tunnel needed to connect to database", - "type": "string", - "const": "NO_TUNNEL", - "order": 0 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host.", - "type": "string", - "order": 3 - }, - "ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - }, { - "title": "Password Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host", - "type": "string", - "order": 3 - }, - "tunnel_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 4 - } - } - } ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": true, - "supportsDBT": true, - "supported_destination_sync_modes": [ "overwrite", "append", "append_dedup" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "normalizationConfig": { - "normalizationRepository": "airbyte/normalization", - "normalizationTag": "0.4.0", - "normalizationIntegrationType": "postgres" - }, - "supportsDbt": true - }, { - "destinationDefinitionId": "2340cbba-358e-11ec-8d3d-0242ac130203", - "name": "Pulsar", - "dockerRepository": "airbyte/destination-pulsar", - "dockerImageTag": "0.1.3", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/pulsar", - "icon": "pulsar.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/pulsar", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Pulsar Destination Spec", - "type": "object", - "required": [ "brokers", "use_tls", "topic_type", "topic_tenant", "topic_namespace", "topic_pattern", "compression_type", "send_timeout_ms", "max_pending_messages", "max_pending_messages_across_partitions", "batching_enabled", "batching_max_messages", "batching_max_publish_delay", "block_if_queue_full" ], - "additionalProperties": true, - "properties": { - "brokers": { - "title": "Pulsar brokers", - "description": "A list of host/port pairs to use for establishing the initial connection to the Pulsar cluster.", - "type": "string", - "examples": [ "broker1:6650,broker2:6650" ] - }, - "use_tls": { - "title": "Use TLS", - "description": "Whether to use TLS encryption on the connection.", - "type": "boolean", - "default": false - }, - "topic_type": { - "title": "Topic type", - "description": "It identifies type of topic. Pulsar supports two kind of topics: persistent and non-persistent. In persistent topic, all messages are durably persisted on disk (that means on multiple disks unless the broker is standalone), whereas non-persistent topic does not persist message into storage disk.", - "type": "string", - "default": "persistent", - "enum": [ "persistent", "non-persistent" ] - }, - "topic_tenant": { - "title": "Topic tenant", - "description": "The topic tenant within the instance. Tenants are essential to multi-tenancy in Pulsar, and spread across clusters.", - "type": "string", - "default": "public", - "examples": [ "public" ] - }, - "topic_namespace": { - "title": "Topic namespace", - "description": "The administrative unit of the topic, which acts as a grouping mechanism for related topics. Most topic configuration is performed at the namespace level. Each tenant has one or multiple namespaces.", - "type": "string", - "default": "default", - "examples": [ "default" ] - }, - "topic_pattern": { - "title": "Topic pattern", - "description": "Topic pattern in which the records will be sent. You can use patterns like '{namespace}' and/or '{stream}' to send the message to a specific topic based on these values. Notice that the topic name will be transformed to a standard naming convention.", - "type": "string", - "examples": [ "sample.topic", "{namespace}.{stream}.sample" ] - }, - "topic_test": { - "title": "Test topic", - "description": "Topic to test if Airbyte can produce messages.", - "type": "string", - "examples": [ "test.topic" ] - }, - "producer_name": { - "title": "Producer name", - "description": "Name for the producer. If not filled, the system will generate a globally unique name which can be accessed with.", - "type": "string", - "examples": [ "airbyte-producer" ] - }, - "producer_sync": { - "title": "Sync producer", - "description": "Wait synchronously until the record has been sent to Pulsar.", - "type": "boolean", - "default": false - }, - "compression_type": { - "title": "Compression type", - "description": "Compression type for the producer.", - "type": "string", - "default": "NONE", - "enum": [ "NONE", "LZ4", "ZLIB", "ZSTD", "SNAPPY" ] - }, - "send_timeout_ms": { - "title": "Message send timeout", - "description": "If a message is not acknowledged by a server before the send-timeout expires, an error occurs (in ms).", - "type": "integer", - "default": 30000 - }, - "max_pending_messages": { - "title": "Max pending messages", - "description": "The maximum size of a queue holding pending messages.", - "type": "integer", - "default": 1000 - }, - "max_pending_messages_across_partitions": { - "title": "Max pending messages across partitions", - "description": "The maximum number of pending messages across partitions.", - "type": "integer", - "default": 50000 - }, - "batching_enabled": { - "title": "Enable batching", - "description": "Control whether automatic batching of messages is enabled for the producer.", - "type": "boolean", - "default": true - }, - "batching_max_messages": { - "title": "Batching max messages", - "description": "Maximum number of messages permitted in a batch.", - "type": "integer", - "default": 1000 - }, - "batching_max_publish_delay": { - "title": "Batching max publish delay", - "description": " Time period in milliseconds within which the messages sent will be batched.", - "type": "integer", - "default": 1 - }, - "block_if_queue_full": { - "title": "Block if queue is full", - "description": "If the send operation should block when the outgoing message queue is full.", - "type": "boolean", - "default": false - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "e06ad785-ad6f-4647-b2e8-3027a5c59454", - "name": "RabbitMQ", - "dockerRepository": "airbyte/destination-rabbitmq", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/rabbitmq", - "icon": "pulsar.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/rabbitmq", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Destination Rabbitmq", - "type": "object", - "required": [ "host", "routing_key" ], - "additionalProperties": false, - "properties": { - "ssl": { - "type": "boolean", - "description": "SSL enabled.", - "default": true - }, - "host": { - "type": "string", - "description": "The RabbitMQ host name." - }, - "port": { - "type": "integer", - "description": "The RabbitMQ port." - }, - "virtual_host": { - "type": "string", - "description": "The RabbitMQ virtual host name." - }, - "username": { - "type": "string", - "description": "The username to connect." - }, - "password": { - "type": "string", - "title": "Password", - "description": "The password to connect.", - "airbyte_secret": true - }, - "exchange": { - "type": "string", - "description": "The exchange name." - }, - "routing_key": { - "type": "string", - "description": "The routing key." - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "d4d3fef9-e319-45c2-881a-bd02ce44cc9f", - "name": "Redis", - "dockerRepository": "airbyte/destination-redis", - "dockerImageTag": "0.1.4", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/redis", - "icon": "redis.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/redis", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Redis Destination Spec", - "type": "object", - "required": [ "host", "username", "port", "cache_type" ], - "additionalProperties": false, - "properties": { - "host": { - "title": "Host", - "description": "Redis host to connect to.", - "type": "string", - "examples": [ "localhost,127.0.0.1" ], - "order": 1 - }, - "port": { - "title": "Port", - "description": "Port of Redis.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 6379, - "order": 2 - }, - "username": { - "title": "Username", - "description": "Username associated with Redis.", - "type": "string", - "order": 3 - }, - "password": { - "title": "Password", - "description": "Password associated with Redis.", - "type": "string", - "airbyte_secret": true, - "order": 4 - }, - "ssl": { - "title": "SSL Connection", - "type": "boolean", - "description": "Indicates whether SSL encryption protocol will be used to connect to Redis. It is recommended to use SSL connection if possible.", - "default": false, - "order": 5 - }, - "ssl_mode": { - "title": "SSL Modes", - "description": "SSL connection modes. \n
  • verify-full - This is the most secure mode. Always require encryption and verifies the identity of the source database server", - "type": "object", - "order": 6, - "oneOf": [ { - "title": "disable", - "additionalProperties": false, - "description": "Disable SSL.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "disable", - "enum": [ "disable" ], - "default": "disable", - "order": 0 - } - } - }, { - "title": "verify-full", - "additionalProperties": false, - "description": "Verify-full SSL mode.", - "required": [ "mode", "ca_certificate", "client_certificate", "client_key" ], - "properties": { - "mode": { - "type": "string", - "const": "verify-full", - "enum": [ "verify-full" ], - "default": "verify-full", - "order": 0 - }, - "ca_certificate": { - "type": "string", - "title": "CA Certificate", - "description": "CA certificate", - "airbyte_secret": true, - "multiline": true, - "order": 1 - }, - "client_certificate": { - "type": "string", - "title": "Client Certificate", - "description": "Client certificate", - "airbyte_secret": true, - "multiline": true, - "order": 2 - }, - "client_key": { - "type": "string", - "title": "Client Key", - "description": "Client key", - "airbyte_secret": true, - "multiline": true, - "order": 3 - }, - "client_key_password": { - "type": "string", - "title": "Client key password", - "description": "Password for keystorage. If you do not add it - the password will be generated automatically.", - "airbyte_secret": true, - "order": 4 - } - } - } ] - }, - "cache_type": { - "title": "Cache type", - "type": "string", - "default": "hash", - "description": "Redis cache type to store data in.", - "enum": [ "hash" ], - "order": 7 - }, - "tunnel_method": { - "type": "object", - "title": "SSH Tunnel Method", - "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", - "oneOf": [ { - "title": "No Tunnel", - "required": [ "tunnel_method" ], - "properties": { - "tunnel_method": { - "description": "No ssh tunnel needed to connect to database", - "type": "string", - "const": "NO_TUNNEL", - "order": 0 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host.", - "type": "string", - "order": 3 - }, - "ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - }, { - "title": "Password Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host", - "type": "string", - "order": 3 - }, - "tunnel_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 4 - } - } - } ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "f7a7d195-377f-cf5b-70a5-be6b819019dc", - "name": "Redshift", - "dockerRepository": "airbyte/destination-redshift", - "dockerImageTag": "0.4.5", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/redshift", - "icon": "redshift.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/redshift", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Redshift Destination Spec", - "type": "object", - "required": [ "host", "port", "database", "username", "password", "schema" ], - "additionalProperties": true, - "properties": { - "host": { - "description": "Host Endpoint of the Redshift Cluster (must include the cluster-id, region and end with .redshift.amazonaws.com)", - "type": "string", - "title": "Host", - "order": 1 - }, - "port": { - "description": "Port of the database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 5439, - "examples": [ "5439" ], - "title": "Port", - "order": 2 - }, - "username": { - "description": "Username to use to access the database.", - "type": "string", - "title": "Username", - "order": 3 - }, - "password": { - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "title": "Password", - "order": 4 - }, - "database": { - "description": "Name of the database.", - "type": "string", - "title": "Database", - "order": 5 - }, - "schema": { - "description": "The default schema tables are written to if the source does not specify a namespace. Unless specifically configured, the usual value for this field is \"public\".", - "type": "string", - "examples": [ "public" ], - "default": "public", - "title": "Default Schema", - "order": 6 - }, - "jdbc_url_params": { - "title": "JDBC URL Params", - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", - "type": "string", - "order": 7 - }, - "uploading_method": { - "title": "Uploading Method", - "type": "object", - "description": "The method how the data will be uploaded to the database.", - "order": 8, - "oneOf": [ { - "title": "Standard", - "required": [ "method" ], - "properties": { - "method": { - "type": "string", - "const": "Standard" - } - } - }, { - "title": "S3 Staging", - "required": [ "method", "s3_bucket_name", "s3_bucket_region", "access_key_id", "secret_access_key" ], - "properties": { - "method": { - "type": "string", - "const": "S3 Staging" - }, - "s3_bucket_name": { - "title": "S3 Bucket Name", - "type": "string", - "description": "The name of the staging S3 bucket to use if utilising a COPY strategy. COPY is recommended for production workloads for better speed and scalability. See AWS docs for more details.", - "examples": [ "airbyte.staging" ] - }, - "s3_bucket_path": { - "title": "S3 Bucket Path", - "type": "string", - "description": "The directory under the S3 bucket where data will be written. If not provided, then defaults to the root directory. See path's name recommendations for more details.", - "examples": [ "data_sync/test" ] - }, - "s3_bucket_region": { - "title": "S3 Bucket Region", - "type": "string", - "default": "", - "description": "The region of the S3 staging bucket to use if utilising a COPY strategy. See AWS docs for details.", - "enum": [ "", "us-east-1", "us-east-2", "us-west-1", "us-west-2", "af-south-1", "ap-east-1", "ap-south-1", "ap-northeast-1", "ap-northeast-2", "ap-northeast-3", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "cn-north-1", "cn-northwest-1", "eu-central-1", "eu-north-1", "eu-south-1", "eu-west-1", "eu-west-2", "eu-west-3", "sa-east-1", "me-south-1" ] - }, - "file_name_pattern": { - "type": "string", - "description": "The pattern allows you to set the file-name format for the S3 staging file(s)", - "title": "S3 Filename pattern", - "examples": [ "{date}", "{date:yyyy_MM}", "{timestamp}", "{part_number}", "{sync_id}" ], - "order": 8 - }, - "access_key_id": { - "type": "string", - "description": "This ID grants access to the above S3 staging bucket. Airbyte requires Read and Write permissions to the given bucket. See AWS docs on how to generate an access key ID and secret access key.", - "title": "S3 Key Id", - "airbyte_secret": true - }, - "secret_access_key": { - "type": "string", - "description": "The corresponding secret to the above access key id. See AWS docs on how to generate an access key ID and secret access key.", - "title": "S3 Access Key", - "airbyte_secret": true - }, - "purge_staging_data": { - "title": "Purge Staging Files and Tables", - "type": "boolean", - "description": "Whether to delete the staging files from S3 after completing the sync. See docs for details.", - "default": true - }, - "encryption": { - "title": "Encryption", - "type": "object", - "description": "How to encrypt the staging data", - "default": { - "encryption_type": "none" - }, - "oneOf": [ { - "title": "No encryption", - "description": "Staging data will be stored in plaintext.", - "type": "object", - "required": [ "encryption_type" ], - "properties": { - "encryption_type": { - "type": "string", - "const": "none", - "enum": [ "none" ], - "default": "none" - } - } - }, { - "title": "AES-CBC envelope encryption", - "description": "Staging data will be encrypted using AES-CBC envelope encryption.", - "type": "object", - "required": [ "encryption_type" ], - "properties": { - "encryption_type": { - "type": "string", - "const": "aes_cbc_envelope", - "enum": [ "aes_cbc_envelope" ], - "default": "aes_cbc_envelope" - }, - "key_encrypting_key": { - "type": "string", - "title": "Key", - "description": "The key, base64-encoded. Must be either 128, 192, or 256 bits. Leave blank to have Airbyte generate an ephemeral key for each sync.", - "airbyte_secret": true - } - } - } ] - }, - "file_buffer_count": { - "title": "File Buffer Count", - "type": "integer", - "minimum": 10, - "maximum": 50, - "default": 10, - "description": "Number of file buffers allocated for writing data. Increasing this number is beneficial for connections using Change Data Capture (CDC) and up to the number of streams within a connection. Increasing the number of file buffers past the maximum number of streams has deteriorating effects", - "examples": [ "10" ] - } - } - } ] - }, - "tunnel_method": { - "type": "object", - "title": "SSH Tunnel Method", - "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", - "oneOf": [ { - "title": "No Tunnel", - "required": [ "tunnel_method" ], - "properties": { - "tunnel_method": { - "description": "No ssh tunnel needed to connect to database", - "type": "string", - "const": "NO_TUNNEL", - "order": 0 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host.", - "type": "string", - "order": 3 - }, - "ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - }, { - "title": "Password Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host", - "type": "string", - "order": 3 - }, - "tunnel_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 4 - } - } - } ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": true, - "supportsDBT": true, - "supported_destination_sync_modes": [ "overwrite", "append", "append_dedup" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "resourceRequirements": { - "jobSpecific": [ { - "jobType": "sync", - "resourceRequirements": { - "memory_request": "1Gi", - "memory_limit": "1Gi" - } - } ] - }, - "normalizationConfig": { - "normalizationRepository": "airbyte/normalization-redshift", - "normalizationTag": "0.4.0", - "normalizationIntegrationType": "redshift" - }, - "supportsDbt": true - }, { - "destinationDefinitionId": "825c5ee3-ed9a-4dd1-a2b6-79ed722f7b13", - "name": "Redpanda", - "dockerRepository": "airbyte/destination-redpanda", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/redpanda", - "icon": "redpanda.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/redpanda", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Redpanda destination connector", - "type": "object", - "required": [ "bootstrap_servers", "buffer_memory", "compression_type", "retries", "batch_size" ], - "properties": { - "bootstrap_servers": { - "title": "Bootstrap Servers", - "description": "A list of host/port pairs to use for establishing the initial connection to the Redpanda cluster. The client will make use of all servers irrespective of which servers are specified here for bootstrapping—this list only impacts the initial hosts used to discover the full set of servers. This list should be in the form host1:port1,host2:port2,.... Since these servers are just used for the initial connection to discover the full cluster membership (which may change dynamically), this list need not contain the full set of servers (you may want more than one, though, in case a server is down).", - "type": "string", - "examples": [ "redpanda-broker1:9092,redpanda-broker2:9092" ] - }, - "buffer_memory": { - "title": "Buffer Memory", - "description": "The total bytes of memory the producer can use to buffer records waiting to be sent to the server.", - "type": "string", - "examples": 33554432 - }, - "compression_type": { - "title": "Compression Type", - "description": "The compression type for all data generated by the producer.", - "type": "string", - "default": "none", - "enum": [ "none", "gzip", "snappy", "lz4", "zstd" ] - }, - "batch_size": { - "title": "Batch Size", - "description": "The producer will attempt to batch records together into fewer requests whenever multiple records are being sent to the same partition.", - "type": "integer", - "examples": [ 16384 ] - }, - "retries": { - "title": "Retries", - "description": "Setting a value greater than zero will cause the client to resend any record whose send fails with a potentially transient error.", - "type": "integer", - "examples": [ 2147483647 ] - }, - "topic_num_partitions": { - "title": "Number of topic partitions", - "description": "The number of topic partitions which will be created on topic creation", - "type": "integer", - "examples": [ 10 ] - }, - "topic_replication_factor": { - "title": "Topic replication factor", - "description": "The number of topics to which messages will be replicated", - "type": "integer", - "examples": [ 10 ] - }, - "socket_connection_setup_timeout_ms": { - "title": "Socket Connection Setup Timeout", - "description": "The amount of time the client will wait for the socket connection to be established.", - "type": "integer", - "examples": [ 10000 ] - }, - "socket_connection_setup_timeout_max_ms": { - "title": "Socket Connection Setup Max Timeout", - "description": "The maximum amount of time the client will wait for the socket connection to be established. The connection setup timeout will increase exponentially for each consecutive connection failure up to this maximum.", - "type": "integer", - "examples": [ 30000 ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "2c9d93a7-9a17-4789-9de9-f46f0097eb70", - "name": "Rockset", - "dockerRepository": "airbyte/destination-rockset", - "dockerImageTag": "0.1.4", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/rockset", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/rockset", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Rockset Destination Spec", - "type": "object", - "required": [ "api_key", "workspace" ], - "additionalProperties": false, - "properties": { - "api_key": { - "title": "Api Key", - "description": "Rockset api key", - "type": "string", - "order": 0, - "airbyte_secret": true - }, - "workspace": { - "title": "Workspace", - "description": "The Rockset workspace in which collections will be created + written to.", - "type": "string", - "examples": [ "commons", "my_workspace" ], - "default": "commons", - "airbyte_secret": false, - "order": 1 - }, - "api_server": { - "title": "Api Server", - "description": "Rockset api URL", - "type": "string", - "airbyte_secret": false, - "default": "https://api.rs2.usw2.rockset.com", - "pattern": "^https:\\/\\/.*.rockset.com$", - "order": 2 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "append", "overwrite" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "4816b78f-1489-44c1-9060-4b19d5fa9362", - "name": "S3", - "dockerRepository": "airbyte/destination-s3", - "dockerImageTag": "0.3.23", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/s3", - "icon": "s3.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/s3", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "S3 Destination Spec", - "type": "object", - "required": [ "s3_bucket_name", "s3_bucket_path", "s3_bucket_region", "format" ], - "properties": { - "access_key_id": { - "type": "string", - "description": "The access key ID to access the S3 bucket. Airbyte requires Read and Write permissions to the given bucket. Read more here.", - "title": "S3 Key ID", - "airbyte_secret": true, - "examples": [ "A012345678910EXAMPLE" ], - "order": 0 - }, - "secret_access_key": { - "type": "string", - "description": "The corresponding secret to the access key ID. Read more here", - "title": "S3 Access Key", - "airbyte_secret": true, - "examples": [ "a012345678910ABCDEFGH/AbCdEfGhEXAMPLEKEY" ], - "order": 1 - }, - "s3_bucket_name": { - "title": "S3 Bucket Name", - "type": "string", - "description": "The name of the S3 bucket. Read more here.", - "examples": [ "airbyte_sync" ], - "order": 2 - }, - "s3_bucket_path": { - "title": "S3 Bucket Path", - "description": "Directory under the S3 bucket where data will be written. Read more here", - "type": "string", - "examples": [ "data_sync/test" ], - "order": 3 - }, - "s3_bucket_region": { - "title": "S3 Bucket Region", - "type": "string", - "default": "", - "description": "The region of the S3 bucket. See here for all region codes.", - "enum": [ "", "us-east-1", "us-east-2", "us-west-1", "us-west-2", "af-south-1", "ap-east-1", "ap-south-1", "ap-northeast-1", "ap-northeast-2", "ap-northeast-3", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "cn-north-1", "cn-northwest-1", "eu-central-1", "eu-north-1", "eu-south-1", "eu-west-1", "eu-west-2", "eu-west-3", "sa-east-1", "me-south-1", "us-gov-east-1", "us-gov-west-1" ], - "order": 4 - }, - "format": { - "title": "Output Format", - "type": "object", - "description": "Format of the data output. See here for more details", - "oneOf": [ { - "title": "Avro: Apache Avro", - "required": [ "format_type", "compression_codec" ], - "properties": { - "format_type": { - "title": "Format Type", - "type": "string", - "enum": [ "Avro" ], - "default": "Avro", - "order": 0 - }, - "compression_codec": { - "title": "Compression Codec", - "description": "The compression algorithm used to compress data. Default to no compression.", - "type": "object", - "oneOf": [ { - "title": "No Compression", - "required": [ "codec" ], - "properties": { - "codec": { - "type": "string", - "enum": [ "no compression" ], - "default": "no compression" - } - } - }, { - "title": "Deflate", - "required": [ "codec", "compression_level" ], - "properties": { - "codec": { - "type": "string", - "enum": [ "Deflate" ], - "default": "Deflate" - }, - "compression_level": { - "title": "Deflate Level", - "description": "0: no compression & fastest, 9: best compression & slowest.", - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 9 - } - } - }, { - "title": "bzip2", - "required": [ "codec" ], - "properties": { - "codec": { - "type": "string", - "enum": [ "bzip2" ], - "default": "bzip2" - } - } - }, { - "title": "xz", - "required": [ "codec", "compression_level" ], - "properties": { - "codec": { - "type": "string", - "enum": [ "xz" ], - "default": "xz" - }, - "compression_level": { - "title": "Compression Level", - "description": "See here for details.", - "type": "integer", - "default": 6, - "minimum": 0, - "maximum": 9 - } - } - }, { - "title": "zstandard", - "required": [ "codec", "compression_level" ], - "properties": { - "codec": { - "type": "string", - "enum": [ "zstandard" ], - "default": "zstandard" - }, - "compression_level": { - "title": "Compression Level", - "description": "Negative levels are 'fast' modes akin to lz4 or snappy, levels above 9 are generally for archival purposes, and levels above 18 use a lot of memory.", - "type": "integer", - "default": 3, - "minimum": -5, - "maximum": 22 - }, - "include_checksum": { - "title": "Include Checksum", - "description": "If true, include a checksum with each data block.", - "type": "boolean", - "default": false - } - } - }, { - "title": "snappy", - "required": [ "codec" ], - "properties": { - "codec": { - "type": "string", - "enum": [ "snappy" ], - "default": "snappy" - } - } - } ], - "order": 1 - } - } - }, { - "title": "CSV: Comma-Separated Values", - "required": [ "format_type", "flattening" ], - "properties": { - "format_type": { - "title": "Format Type", - "type": "string", - "enum": [ "CSV" ], - "default": "CSV" - }, - "flattening": { - "type": "string", - "title": "Flattening", - "description": "Whether the input json data should be normalized (flattened) in the output CSV. Please refer to docs for details.", - "default": "No flattening", - "enum": [ "No flattening", "Root level flattening" ] - }, - "compression": { - "title": "Compression", - "type": "object", - "description": "Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \".csv.gz\").", - "oneOf": [ { - "title": "No Compression", - "requires": [ "compression_type" ], - "properties": { - "compression_type": { - "type": "string", - "enum": [ "No Compression" ], - "default": "No Compression" - } - } - }, { - "title": "GZIP", - "requires": [ "compression_type" ], - "properties": { - "compression_type": { - "type": "string", - "enum": [ "GZIP" ], - "default": "GZIP" - } - } - } ] - } - } - }, { - "title": "JSON Lines: Newline-delimited JSON", - "required": [ "format_type" ], - "properties": { - "format_type": { - "title": "Format Type", - "type": "string", - "enum": [ "JSONL" ], - "default": "JSONL" - }, - "flattening": { - "type": "string", - "title": "Flattening", - "description": "Whether the input json data should be normalized (flattened) in the output JSON Lines. Please refer to docs for details.", - "default": "No flattening", - "enum": [ "No flattening", "Root level flattening" ] - }, - "compression": { - "title": "Compression", - "type": "object", - "description": "Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \".jsonl.gz\").", - "oneOf": [ { - "title": "No Compression", - "requires": "compression_type", - "properties": { - "compression_type": { - "type": "string", - "enum": [ "No Compression" ], - "default": "No Compression" - } - } - }, { - "title": "GZIP", - "requires": "compression_type", - "properties": { - "compression_type": { - "type": "string", - "enum": [ "GZIP" ], - "default": "GZIP" - } - } - } ] - } - } - }, { - "title": "Parquet: Columnar Storage", - "required": [ "format_type" ], - "properties": { - "format_type": { - "title": "Format Type", - "type": "string", - "enum": [ "Parquet" ], - "default": "Parquet" - }, - "compression_codec": { - "title": "Compression Codec", - "description": "The compression algorithm used to compress data pages.", - "type": "string", - "enum": [ "UNCOMPRESSED", "SNAPPY", "GZIP", "LZO", "BROTLI", "LZ4", "ZSTD" ], - "default": "UNCOMPRESSED" - }, - "block_size_mb": { - "title": "Block Size (Row Group Size) (MB)", - "description": "This is the size of a row group being buffered in memory. It limits the memory usage when writing. Larger values will improve the IO when reading, but consume more memory when writing. Default: 128 MB.", - "type": "integer", - "default": 128, - "examples": [ 128 ] - }, - "max_padding_size_mb": { - "title": "Max Padding Size (MB)", - "description": "Maximum size allowed as padding to align row groups. This is also the minimum size of a row group. Default: 8 MB.", - "type": "integer", - "default": 8, - "examples": [ 8 ] - }, - "page_size_kb": { - "title": "Page Size (KB)", - "description": "The page size is for compression. A block is composed of pages. A page is the smallest unit that must be read fully to access a single record. If this value is too small, the compression will deteriorate. Default: 1024 KB.", - "type": "integer", - "default": 1024, - "examples": [ 1024 ] - }, - "dictionary_page_size_kb": { - "title": "Dictionary Page Size (KB)", - "description": "There is one dictionary page per column per row group when dictionary encoding is used. The dictionary page size works like the page size but for dictionary. Default: 1024 KB.", - "type": "integer", - "default": 1024, - "examples": [ 1024 ] - }, - "dictionary_encoding": { - "title": "Dictionary Encoding", - "description": "Default: true.", - "type": "boolean", - "default": true - } - } - } ], - "order": 5 - }, - "s3_endpoint": { - "title": "Endpoint", - "type": "string", - "default": "", - "description": "Your S3 endpoint url. Read more here", - "examples": [ "http://localhost:9000" ], - "order": 6 - }, - "s3_path_format": { - "title": "S3 Path Format", - "description": "Format string on how data will be organized inside the S3 bucket directory. Read more here", - "type": "string", - "examples": [ "${NAMESPACE}/${STREAM_NAME}/${YEAR}_${MONTH}_${DAY}_${EPOCH}_" ], - "order": 7 - }, - "file_name_pattern": { - "type": "string", - "description": "The pattern allows you to set the file-name format for the S3 staging file(s)", - "title": "S3 Filename pattern", - "examples": [ "{date}", "{date:yyyy_MM}", "{timestamp}", "{part_number}", "{sync_id}" ], - "order": 8 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "resourceRequirements": { - "jobSpecific": [ { - "jobType": "sync", - "resourceRequirements": { - "memory_request": "1Gi", - "memory_limit": "1Gi" - } - } ] - } - }, { - "destinationDefinitionId": "471e5cab-8ed1-49f3-ba11-79c687784737", - "name": "S3 Glue", - "dockerRepository": "airbyte/destination-s3-glue", - "dockerImageTag": "0.1.6", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/s3-glue", - "icon": "s3-glue.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/s3-glue", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "S3 Destination Spec", - "type": "object", - "required": [ "s3_bucket_name", "s3_bucket_path", "s3_bucket_region", "format", "glue_database", "glue_serialization_library" ], - "properties": { - "access_key_id": { - "type": "string", - "description": "The access key ID to access the S3 bucket. Airbyte requires Read and Write permissions to the given bucket. Read more here.", - "title": "S3 Key ID", - "airbyte_secret": true, - "examples": [ "A012345678910EXAMPLE" ], - "order": 0 - }, - "secret_access_key": { - "type": "string", - "description": "The corresponding secret to the access key ID. Read more here", - "title": "S3 Access Key", - "airbyte_secret": true, - "examples": [ "a012345678910ABCDEFGH/AbCdEfGhEXAMPLEKEY" ], - "order": 1 - }, - "s3_bucket_name": { - "title": "S3 Bucket Name", - "type": "string", - "description": "The name of the S3 bucket. Read more here.", - "examples": [ "airbyte_sync" ], - "order": 2 - }, - "s3_bucket_path": { - "title": "S3 Bucket Path", - "description": "Directory under the S3 bucket where data will be written. Read more here", - "type": "string", - "examples": [ "data_sync/test" ], - "order": 3 - }, - "s3_bucket_region": { - "title": "S3 Bucket Region", - "type": "string", - "default": "", - "description": "The region of the S3 bucket. See here for all region codes.", - "enum": [ "", "us-east-1", "us-east-2", "us-west-1", "us-west-2", "af-south-1", "ap-east-1", "ap-south-1", "ap-northeast-1", "ap-northeast-2", "ap-northeast-3", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "cn-north-1", "cn-northwest-1", "eu-central-1", "eu-north-1", "eu-south-1", "eu-west-1", "eu-west-2", "eu-west-3", "sa-east-1", "me-south-1", "us-gov-east-1", "us-gov-west-1" ], - "order": 4 - }, - "format": { - "title": "Output Format", - "type": "object", - "description": "Format of the data output. See here for more details", - "oneOf": [ { - "title": "JSON Lines: Newline-delimited JSON", - "required": [ "format_type" ], - "properties": { - "format_type": { - "title": "Format Type", - "type": "string", - "enum": [ "JSONL" ], - "default": "JSONL" - }, - "compression": { - "title": "Compression", - "type": "object", - "description": "Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \".jsonl.gz\").", - "oneOf": [ { - "title": "No Compression", - "requires": "compression_type", - "properties": { - "compression_type": { - "type": "string", - "enum": [ "No Compression" ], - "default": "No Compression" - } - } - }, { - "title": "GZIP", - "requires": "compression_type", - "properties": { - "compression_type": { - "type": "string", - "enum": [ "GZIP" ], - "default": "GZIP" - } - } - } ] - }, - "flattening": { - "type": "string", - "title": "Flattening", - "description": "Whether the input json data should be normalized (flattened) in the output JSON Lines. Please refer to docs for details.", - "default": "Root level flattening", - "enum": [ "No flattening", "Root level flattening" ] - } - } - } ], - "order": 5 - }, - "s3_endpoint": { - "title": "Endpoint", - "type": "string", - "default": "", - "description": "Your S3 endpoint url. Read more here", - "examples": [ "http://localhost:9000" ], - "order": 6 - }, - "s3_path_format": { - "title": "S3 Path Format", - "description": "Format string on how data will be organized inside the S3 bucket directory. Read more here", - "type": "string", - "examples": [ "${NAMESPACE}/${STREAM_NAME}/${YEAR}_${MONTH}_${DAY}_${EPOCH}_" ], - "order": 7 - }, - "file_name_pattern": { - "type": "string", - "description": "The pattern allows you to set the file-name format for the S3 staging file(s)", - "title": "S3 Filename pattern", - "examples": [ "{date}", "{date:yyyy_MM}", "{timestamp}", "{part_number}", "{sync_id}" ], - "order": 8 - }, - "glue_database": { - "type": "string", - "description": "Name of the glue database for creating the tables, leave blank if no integration", - "title": "Glue database name", - "examples": [ "airbyte_database" ], - "order": 9 - }, - "glue_serialization_library": { - "title": "Serialization Library", - "description": "The library that your query engine will use for reading and writing data in your lake.", - "type": "string", - "enum": [ "org.openx.data.jsonserde.JsonSerDe", "org.apache.hive.hcatalog.data.JsonSerDe" ], - "default": "org.openx.data.jsonserde.JsonSerDe", - "order": 10 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "50a559a7-6323-4e33-8aa0-51dfd9dfadac", - "name": "SelectDB", - "dockerRepository": "airbyte/destination-selectdb", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/selectdb", - "icon": "select.db", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/selectdb", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "SelectDB Destination Spec", - "type": "object", - "required": [ "load_url", "jdbc_url", "cluster_name", "user_name", "password", "database" ], - "properties": { - "load_url": { - "title": "loadURL", - "description": "load host and port: xxx.privatelink.aliyun.com:47057", - "type": "string", - "order": 0 - }, - "jdbc_url": { - "title": "jdbcURL", - "description": "jdbc host and port: xxx.privatelink.aliyun.com:30523", - "type": "string", - "order": 1 - }, - "cluster_name": { - "title": "ClusterName", - "description": "clusterName of SelectDB", - "type": "string", - "order": 2 - }, - "user_name": { - "title": "UserName", - "description": "Username to use to access the database.", - "type": "string", - "order": 3 - }, - "password": { - "title": "Password", - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 4 - }, - "database": { - "title": "DataBase Name", - "description": "Name of the database.", - "type": "string", - "order": 5 - } - } - }, - "supportsIncremental": false, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "append", "overwrite" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "e9810f61-4bab-46d2-bb22-edfc902e0644", - "name": "SFTP-JSON", - "dockerRepository": "airbyte/destination-sftp-json", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/sftp-json", - "icon": "sftp.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/sftp-json", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Destination SFTP JSON", - "type": "object", - "required": [ "host", "username", "password", "destination_path" ], - "additionalProperties": false, - "properties": { - "host": { - "title": "Host", - "description": "Hostname of the SFTP server.", - "type": "string", - "order": 0 - }, - "port": { - "title": "Port", - "description": "Port of the SFTP server.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ 22 ], - "order": 1 - }, - "username": { - "title": "User", - "description": "Username to use to access the SFTP server.", - "type": "string", - "order": 2 - }, - "password": { - "title": "Password", - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 3 - }, - "destination_path": { - "title": "Destination path", - "type": "string", - "description": "Path to the directory where json files will be written.", - "examples": [ "/json_data" ], - "order": 4 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "424892c4-daac-4491-b35d-c6688ba547ba", - "name": "Snowflake", - "dockerRepository": "airbyte/destination-snowflake", - "dockerImageTag": "0.4.61", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/snowflake", - "icon": "snowflake.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/snowflake", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Snowflake Destination Spec", - "type": "object", - "required": [ "host", "role", "warehouse", "database", "schema", "username" ], - "additionalProperties": true, - "properties": { - "host": { - "description": "Enter your Snowflake account's locator (in the format ...snowflakecomputing.com)", - "examples": [ "accountname.us-east-2.aws.snowflakecomputing.com", "accountname.snowflakecomputing.com" ], - "type": "string", - "title": "Host", - "pattern": "^(http(s)?:\\/\\/)?([^./?#]+\\.)?([^./?#]+\\.)?([^./?#]+\\.)?([^./?#]+\\.snowflakecomputing\\.com)$", - "pattern_descriptor": "{account_name}.snowflakecomputing.com or {accountname}.{aws_location}.aws.snowflakecomputing.com", - "order": 0 - }, - "role": { - "description": "Enter the role that you want to use to access Snowflake", - "examples": [ "AIRBYTE_ROLE" ], - "type": "string", - "title": "Role", - "order": 1 - }, - "warehouse": { - "description": "Enter the name of the warehouse that you want to sync data into", - "examples": [ "AIRBYTE_WAREHOUSE" ], - "type": "string", - "title": "Warehouse", - "order": 2 - }, - "database": { - "description": "Enter the name of the database you want to sync data into", - "examples": [ "AIRBYTE_DATABASE" ], - "type": "string", - "title": "Database", - "order": 3 - }, - "schema": { - "description": "Enter the name of the default schema", - "examples": [ "AIRBYTE_SCHEMA" ], - "type": "string", - "title": "Default Schema", - "order": 4 - }, - "username": { - "description": "Enter the name of the user you want to use to access the database", - "examples": [ "AIRBYTE_USER" ], - "type": "string", - "title": "Username", - "order": 5 - }, - "credentials": { - "title": "Authorization Method", - "description": "", - "type": "object", - "oneOf": [ { - "title": "OAuth2.0", - "type": "object", - "order": 0, - "required": [ "access_token", "refresh_token" ], - "properties": { - "auth_type": { - "type": "string", - "const": "OAuth2.0", - "enum": [ "OAuth2.0" ], - "default": "OAuth2.0", - "order": 0 - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "Enter your application's Client ID", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "Enter your application's Client secret", - "airbyte_secret": true - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "Enter you application's Access Token", - "airbyte_secret": true - }, - "refresh_token": { - "type": "string", - "title": "Refresh Token", - "description": "Enter your application's Refresh Token", - "airbyte_secret": true - } - } - }, { - "title": "Key Pair Authentication", - "type": "object", - "order": 1, - "required": [ "private_key" ], - "properties": { - "auth_type": { - "type": "string", - "const": "Key Pair Authentication", - "enum": [ "Key Pair Authentication" ], - "default": "Key Pair Authentication", - "order": 0 - }, - "private_key": { - "type": "string", - "title": "Private Key", - "description": "RSA Private key to use for Snowflake connection. See the docs for more information on how to obtain this key.", - "multiline": true, - "airbyte_secret": true - }, - "private_key_password": { - "type": "string", - "title": "Passphrase", - "description": "Passphrase for private key", - "airbyte_secret": true - } - } - }, { - "title": "Username and Password", - "type": "object", - "required": [ "password" ], - "order": 2, - "properties": { - "auth_type": { - "type": "string", - "const": "Username and Password", - "enum": [ "Username and Password" ], - "default": "Username and Password", - "order": 0 - }, - "password": { - "description": "Enter the password associated with the username.", - "type": "string", - "airbyte_secret": true, - "title": "Password", - "order": 1 - } - } - } ], - "order": 6 - }, - "jdbc_url_params": { - "description": "Enter the additional properties to pass to the JDBC URL string when connecting to the database (formatted as key=value pairs separated by the symbol &). Example: key1=value1&key2=value2&key3=value3", - "title": "JDBC URL Params", - "type": "string", - "order": 7 - }, - "loading_method": { - "type": "object", - "title": "Data Staging Method", - "description": "Select a data staging method", - "order": 8, - "oneOf": [ { - "title": "Select another option", - "description": "Select another option", - "required": [ "method" ], - "properties": { - "method": { - "title": "", - "description": "", - "type": "string", - "enum": [ "Standard" ], - "default": "Standard" - } - } - }, { - "title": "[Recommended] Internal Staging", - "description": "Recommended for large production workloads for better speed and scalability.", - "required": [ "method" ], - "properties": { - "method": { - "title": "", - "description": "", - "type": "string", - "enum": [ "Internal Staging" ], - "default": "Internal Staging" - } - } - }, { - "title": "AWS S3 Staging", - "description": "Recommended for large production workloads for better speed and scalability.", - "required": [ "method", "s3_bucket_name", "access_key_id", "secret_access_key" ], - "properties": { - "method": { - "title": "", - "description": "", - "type": "string", - "enum": [ "S3 Staging" ], - "default": "S3 Staging", - "order": 0 - }, - "s3_bucket_name": { - "title": "S3 Bucket Name", - "type": "string", - "description": "Enter your S3 bucket name", - "examples": [ "airbyte.staging" ], - "order": 1 - }, - "s3_bucket_region": { - "title": "S3 Bucket Region", - "type": "string", - "default": "", - "description": "Enter the region where your S3 bucket resides", - "enum": [ "", "us-east-1", "us-east-2", "us-west-1", "us-west-2", "af-south-1", "ap-east-1", "ap-south-1", "ap-northeast-1", "ap-northeast-2", "ap-northeast-3", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "cn-north-1", "cn-northwest-1", "eu-central-1", "eu-west-1", "eu-west-2", "eu-west-3", "eu-south-1", "eu-north-1", "sa-east-1", "me-south-1" ], - "order": 2 - }, - "access_key_id": { - "type": "string", - "description": "Enter your AWS access key ID. Airbyte requires Read and Write permissions on your S3 bucket ", - "title": "AWS access key ID", - "airbyte_secret": true, - "order": 3 - }, - "secret_access_key": { - "type": "string", - "description": "Enter your AWS secret access key", - "title": "AWS secret access key", - "airbyte_secret": true, - "order": 4 - }, - "purge_staging_data": { - "title": "Purge Staging Files and Tables", - "type": "boolean", - "description": "Toggle to delete staging files from the S3 bucket after a successful sync", - "default": true, - "order": 5 - }, - "encryption": { - "title": "Encryption", - "type": "object", - "description": "Choose a data encryption method for the staging data", - "default": { - "encryption_type": "none" - }, - "order": 6, - "oneOf": [ { - "title": "No encryption", - "description": "Staging data will be stored in plaintext.", - "type": "object", - "required": [ "encryption_type" ], - "properties": { - "encryption_type": { - "type": "string", - "const": "none", - "enum": [ "none" ], - "default": "none" - } - } - }, { - "title": "AES-CBC envelope encryption", - "description": "Staging data will be encrypted using AES-CBC envelope encryption.", - "type": "object", - "required": [ "encryption_type" ], - "properties": { - "encryption_type": { - "type": "string", - "const": "aes_cbc_envelope", - "enum": [ "aes_cbc_envelope" ], - "default": "aes_cbc_envelope" - }, - "key_encrypting_key": { - "type": "string", - "title": "Key", - "description": "The key, base64-encoded. Must be either 128, 192, or 256 bits. Leave blank to have Airbyte generate an ephemeral key for each sync.", - "airbyte_secret": true - } - } - } ] - }, - "file_name_pattern": { - "type": "string", - "description": "The pattern allows you to set the file-name format for the S3 staging file(s)", - "title": "S3 Filename pattern", - "examples": [ "{date}", "{date:yyyy_MM}", "{timestamp}", "{part_number}", "{sync_id}" ], - "order": 7 - } - } - }, { - "title": "Google Cloud Storage Staging", - "description": "Recommended for large production workloads for better speed and scalability.", - "required": [ "method", "project_id", "bucket_name", "credentials_json" ], - "properties": { - "method": { - "title": "", - "description": "", - "type": "string", - "enum": [ "GCS Staging" ], - "default": "GCS Staging", - "order": 0 - }, - "project_id": { - "title": "Google Cloud project ID", - "type": "string", - "description": "Enter the Google Cloud project ID", - "examples": [ "my-project" ], - "order": 1 - }, - "bucket_name": { - "title": "Cloud Storage bucket name", - "type": "string", - "description": "Enter the Cloud Storage bucket name", - "examples": [ "airbyte-staging" ], - "order": 2 - }, - "credentials_json": { - "title": "Google Application Credentials", - "type": "string", - "description": "Enter your Google Cloud service account key in the JSON format with read/write access to your Cloud Storage staging bucket", - "airbyte_secret": true, - "multiline": true, - "order": 3 - } - } - }, { - "title": "Azure Blob Storage Staging", - "description": "Recommended for large production workloads for better speed and scalability.", - "required": [ "method", "azure_blob_storage_account_name", "azure_blob_storage_container_name", "azure_blob_storage_sas_token" ], - "properties": { - "method": { - "title": "", - "description": "", - "type": "string", - "enum": [ "Azure Blob Staging" ], - "default": "Azure Blob Staging", - "order": 0 - }, - "azure_blob_storage_endpoint_domain_name": { - "title": "Azure Blob Storage Endpoint", - "type": "string", - "default": "blob.core.windows.net", - "description": "Enter the Azure Blob Storage endpoint domain name", - "examples": [ "blob.core.windows.net" ], - "order": 1 - }, - "azure_blob_storage_account_name": { - "title": "Azure Blob Storage account name", - "type": "string", - "description": "Enter your Azure Blob Storage account name", - "examples": [ "airbyte5storage" ], - "order": 2 - }, - "azure_blob_storage_container_name": { - "title": "Azure Blob Storage Container Name", - "type": "string", - "description": "Enter your Azure Blob Storage container name", - "examples": [ "airbytetestcontainername" ], - "order": 3 - }, - "azure_blob_storage_sas_token": { - "title": "SAS Token", - "type": "string", - "airbyte_secret": true, - "description": "Enter the Shared access signature (SAS) token to grant Snowflake limited access to objects in your Azure Blob Storage account", - "examples": [ "?sv=2016-05-31&ss=b&srt=sco&sp=rwdl&se=2018-06-27T10:05:50Z&st=2017-06-27T02:05:50Z&spr=https,http&sig=bgqQwoXwxzuD2GJfagRg7VOS8hzNr3QLT7rhS8OFRLQ%3D" ], - "order": 4 - } - } - } ] - }, - "file_buffer_count": { - "title": "File Buffer Count", - "type": "integer", - "minimum": 10, - "maximum": 50, - "default": 10, - "description": "Number of file buffers allocated for writing data. Increasing this number is beneficial for connections using Change Data Capture (CDC) and up to the number of streams within a connection. Increasing the number of file buffers past the maximum number of streams has deteriorating effects", - "examples": [ "10" ], - "order": 9 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": true, - "supportsDBT": true, - "supported_destination_sync_modes": [ "overwrite", "append", "append_dedup" ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "auth_type" ], - "predicate_value": "OAuth2.0", - "oauth_config_specification": { - "oauth_user_input_from_connector_config_specification": { - "type": "object", - "properties": { - "host": { - "type": "string", - "path_in_connector_config": [ "host" ] - } - } - }, - "complete_oauth_output_specification": { - "type": "object", - "properties": { - "access_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "access_token" ] - }, - "refresh_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "refresh_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "resourceRequirements": { - "jobSpecific": [ { - "jobType": "sync", - "resourceRequirements": { - "memory_request": "1Gi", - "memory_limit": "1Gi" - } - } ] - }, - "normalizationConfig": { - "normalizationRepository": "airbyte/normalization-snowflake", - "normalizationTag": "0.4.0", - "normalizationIntegrationType": "snowflake" - }, - "supportsDbt": true - }, { - "destinationDefinitionId": "294a4790-429b-40ae-9516-49826b9702e1", - "name": "MariaDB ColumnStore", - "dockerRepository": "airbyte/destination-mariadb-columnstore", - "dockerImageTag": "0.1.7", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mariadb-columnstore", - "icon": "mariadb.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mariadb-columnstore", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "MariaDB Columnstore Destination Spec", - "type": "object", - "required": [ "host", "port", "username", "database" ], - "additionalProperties": true, - "properties": { - "host": { - "title": "Host", - "description": "The Hostname of the database.", - "type": "string", - "order": 0 - }, - "port": { - "title": "Port", - "description": "The Port of the database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 3306, - "examples": [ "3306" ], - "order": 1 - }, - "database": { - "title": "Database", - "description": "Name of the database.", - "type": "string", - "order": 2 - }, - "username": { - "title": "Username", - "description": "The Username which is used to access the database.", - "type": "string", - "order": 3 - }, - "password": { - "title": "Password", - "description": "The Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 4 - }, - "jdbc_url_params": { - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", - "title": "JDBC URL Params", - "type": "string", - "order": 5 - }, - "tunnel_method": { - "type": "object", - "title": "SSH Tunnel Method", - "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", - "oneOf": [ { - "title": "No Tunnel", - "required": [ "tunnel_method" ], - "properties": { - "tunnel_method": { - "description": "No ssh tunnel needed to connect to database", - "type": "string", - "const": "NO_TUNNEL", - "order": 0 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host.", - "type": "string", - "order": 3 - }, - "ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - }, { - "title": "Password Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host", - "type": "string", - "order": 3 - }, - "tunnel_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 4 - } - } - } ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "eebd85cf-60b2-4af6-9ba0-edeca01437b0", - "name": "Streamr", - "dockerRepository": "ghcr.io/devmate-cloud/streamr-airbyte-connectors", - "dockerImageTag": "0.0.1", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/streamr", - "icon": "streamr.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/streamr", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Destination Streamr", - "type": "object", - "required": [ "privateKey", "streamId" ], - "additionalProperties": false, - "properties": { - "privateKey": { - "type": "string", - "description": "You private key on Streamr", - "airbyte_secret": true - }, - "streamId": { - "type": "string", - "description": "Your full Stream ID", - "examples": [ "0x0d0102474519cd2fc1b3e3f962a87e39cbcbead2/test-streamr" ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "append", "append_dedup" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "3dc6f384-cd6b-4be3-ad16-a41450899bf0", - "name": "Scylla", - "dockerRepository": "airbyte/destination-scylla", - "dockerImageTag": "0.1.3", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/scylla", - "icon": "scylla.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/scylla", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Scylla Destination Spec", - "type": "object", - "required": [ "keyspace", "username", "password", "address", "port" ], - "additionalProperties": true, - "properties": { - "keyspace": { - "title": "Keyspace", - "description": "Default Scylla keyspace to create data in.", - "type": "string", - "order": 0 - }, - "username": { - "title": "Username", - "description": "Username to use to access Scylla.", - "type": "string", - "order": 1 - }, - "password": { - "title": "Password", - "description": "Password associated with Scylla.", - "type": "string", - "airbyte_secret": true, - "order": 2 - }, - "address": { - "title": "Address", - "description": "Address to connect to.", - "type": "string", - "order": 3 - }, - "port": { - "title": "Port", - "description": "Port of Scylla.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 9042, - "order": 4 - }, - "replication": { - "title": "Replication factor", - "type": "integer", - "description": "Indicates to how many nodes the data should be replicated to.", - "default": 1, - "order": 5 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "a4cbd2d1-8dbe-4818-b8bc-b90ad782d12a", - "name": "Google Sheets", - "dockerRepository": "airbyte/destination-google-sheets", - "dockerImageTag": "0.1.2", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/google-sheets", - "icon": "google-sheets.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/google-sheets", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Destination Google Sheets", - "type": "object", - "required": [ "spreadsheet_id", "credentials" ], - "additionalProperties": false, - "properties": { - "spreadsheet_id": { - "type": "string", - "title": "Spreadsheet Link", - "description": "The link to your spreadsheet. See this guide for more details.", - "examples": [ "https://docs.google.com/spreadsheets/d/1hLd9Qqti3UyLXZB2aFfUWDT7BG/edit" ] - }, - "credentials": { - "type": "object", - "title": "Authentication via Google (OAuth)", - "description": "Google API Credentials for connecting to Google Sheets and Google Drive APIs", - "required": [ "client_id", "client_secret", "refresh_token" ], - "properties": { - "client_id": { - "title": "Client ID", - "type": "string", - "description": "The Client ID of your Google Sheets developer application.", - "airbyte_secret": true - }, - "client_secret": { - "title": "Client Secret", - "type": "string", - "description": "The Client Secret of your Google Sheets developer application.", - "airbyte_secret": true - }, - "refresh_token": { - "title": "Refresh Token", - "type": "string", - "description": "The token for obtaining new access token.", - "airbyte_secret": true - } - } - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append", "append_dedup" ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ "credentials" ], - "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], - "oauthFlowOutputParameters": [ [ "refresh_token" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "b76be0a6-27dc-4560-95f6-2623da0bd7b6", - "name": "Local SQLite", - "dockerRepository": "airbyte/destination-sqlite", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/local-sqlite", - "icon": "sqlite.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/sqlite", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Destination Sqlite", - "type": "object", - "required": [ "destination_path" ], - "additionalProperties": false, - "properties": { - "destination_path": { - "type": "string", - "description": "Path to the sqlite.db file. The file will be placed inside that local mount. For more information check out our docs", - "example": "/local/sqlite.db" - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "06ec60c7-7468-45c0-91ac-174f6e1a788b", - "name": "TiDB", - "dockerRepository": "airbyte/destination-tidb", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/tidb", - "icon": "tidb.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/tidb", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "TiDB Destination Spec", - "type": "object", - "required": [ "host", "port", "username", "database" ], - "additionalProperties": true, - "properties": { - "host": { - "title": "Host", - "description": "Hostname of the database.", - "type": "string", - "order": 0 - }, - "port": { - "title": "Port", - "description": "Port of the database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 4000, - "examples": [ "4000" ], - "order": 1 - }, - "database": { - "title": "Database", - "description": "Name of the database.", - "type": "string", - "order": 2 - }, - "username": { - "title": "User", - "description": "Username to use to access the database.", - "type": "string", - "order": 3 - }, - "password": { - "title": "Password", - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "default": "", - "order": 4 - }, - "ssl": { - "title": "SSL Connection", - "description": "Encrypt data using SSL.", - "type": "boolean", - "default": false, - "order": 5 - }, - "jdbc_url_params": { - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", - "title": "JDBC URL Params", - "type": "string", - "order": 6 - }, - "tunnel_method": { - "type": "object", - "title": "SSH Tunnel Method", - "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", - "oneOf": [ { - "title": "No Tunnel", - "required": [ "tunnel_method" ], - "properties": { - "tunnel_method": { - "description": "No ssh tunnel needed to connect to database", - "type": "string", - "const": "NO_TUNNEL", - "order": 0 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host.", - "type": "string", - "order": 3 - }, - "ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - }, { - "title": "Password Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host", - "type": "string", - "order": 3 - }, - "tunnel_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 4 - } - } - } ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": true, - "supportsDBT": true, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "normalizationConfig": { - "normalizationRepository": "airbyte/normalization-tidb", - "normalizationTag": "0.4.0", - "normalizationIntegrationType": "tidb" - }, - "supportsDbt": true - }, { - "destinationDefinitionId": "36be8dc6-9851-49af-b776-9d4c30e4ab6a", - "name": "Typesense", - "dockerRepository": "airbyte/destination-typesense", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/typesense", - "icon": "typesense.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/typesense", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Destination Typesense", - "type": "object", - "required": [ "api_key", "host" ], - "additionalProperties": false, - "properties": { - "api_key": { - "title": "API Key", - "type": "string", - "description": "Typesense API Key", - "order": 0 - }, - "host": { - "title": "Host", - "type": "string", - "description": "Hostname of the Typesense instance without protocol.", - "order": 1 - }, - "port": { - "title": "Port", - "type": "string", - "description": "Port of the Typesense instance. Ex: 8108, 80, 443. Default is 443", - "order": 2 - }, - "protocol": { - "title": "Protocol", - "type": "string", - "description": "Protocol of the Typesense instance. Ex: http or https. Default is https", - "order": 3 - }, - "batch_size": { - "title": "Batch size", - "type": "string", - "description": "How many documents should be imported together. Default 1000", - "order": 4 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "2300fdcf-a532-419f-9f24-a014336e7966", - "name": "YugabyteDB", - "dockerRepository": "airbyte/destination-yugabytedb", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/yugabytedb", - "icon": "yugabytedb.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/destinations/yugabytedb", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Yugabytedb destination spec", - "type": "object", - "required": [ "host", "port", "username", "database", "schema" ], - "additionalProperties": true, - "properties": { - "host": { - "title": "Host", - "description": "The Hostname of the database.", - "type": "string", - "order": 0 - }, - "port": { - "title": "Port", - "description": "The Port of the database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 3306, - "examples": [ "3306" ], - "order": 1 - }, - "database": { - "title": "Database", - "description": "Name of the database.", - "type": "string", - "order": 2 - }, - "username": { - "title": "Username", - "description": "The Username which is used to access the database.", - "type": "string", - "order": 4 - }, - "schema": { - "title": "Default Schema", - "description": "The default schema tables are written to if the source does not specify a namespace. The usual value for this field is \"public\".", - "type": "string", - "examples": [ "public" ], - "default": "public", - "order": 3 - }, - "password": { - "title": "Password", - "description": "The Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 5 - }, - "jdbc_url_params": { - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", - "title": "JDBC URL Params", - "type": "string", - "order": 6 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "302e4d8e-08d3-4098-acd4-ac67ca365b88", - "name": "Databend", - "dockerRepository": "airbyte/destination-databend", - "dockerImageTag": "0.1.2", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/databend", - "icon": "databend.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/databend", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Destination Databend", - "type": "object", - "required": [ "host", "username", "database" ], - "additionalProperties": true, - "properties": { - "host": { - "title": "Host", - "description": "Hostname of the database.", - "type": "string", - "order": 0 - }, - "port": { - "title": "Port", - "description": "Port of the database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 443, - "examples": [ "443" ], - "order": 2 - }, - "database": { - "title": "DB Name", - "description": "Name of the database.", - "type": "string", - "order": 3 - }, - "table": { - "title": "Default Table", - "description": "The default table was written to.", - "type": "string", - "examples": [ "default" ], - "default": "default", - "order": 4 - }, - "username": { - "title": "User", - "description": "Username to use to access the database.", - "type": "string", - "order": 5 - }, - "password": { - "title": "Password", - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 6 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "58e6f9da-904e-11ed-a1eb-0242ac120002", - "name": "Teradata Vantage", - "dockerRepository": "airbyte/destination-teradata", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.io/integrations/destinations/teradata", - "icon": "teradata.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/destinations/teradata", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Teradata Destination Spec", - "type": "object", - "required": [ "host", "username" ], - "additionalProperties": true, - "properties": { - "host": { - "title": "Host", - "description": "Hostname of the database.", - "type": "string", - "order": 0 - }, - "username": { - "title": "User", - "description": "Username to use to access the database.", - "type": "string", - "order": 1 - }, - "password": { - "title": "Password", - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 2 - }, - "schema": { - "title": "Default Schema", - "description": "The default schema tables are written to if the source does not specify a namespace. The usual value for this field is \"public\".", - "type": "string", - "examples": [ "airbyte_td" ], - "default": "airbyte_td", - "order": 3 - }, - "ssl": { - "title": "SSL Connection", - "description": "Encrypt data using SSL. When activating SSL, please select one of the connection modes.", - "type": "boolean", - "default": false, - "order": 5 - }, - "ssl_mode": { - "title": "SSL modes", - "description": "SSL connection modes. \n disable - Chose this mode to disable encryption of communication between Airbyte and destination database\n allow - Chose this mode to enable encryption only when required by the destination database\n prefer - Chose this mode to allow unencrypted connection only if the destination database does not support encryption\n require - Chose this mode to always require encryption. If the destination database server does not support encryption, connection will fail\n verify-ca - Chose this mode to always require encryption and to verify that the destination database server has a valid SSL certificate\n verify-full - This is the most secure mode. Chose this mode to always require encryption and to verify the identity of the destination database server\n See more information - in the docs.", - "type": "object", - "order": 6, - "oneOf": [ { - "title": "disable", - "additionalProperties": false, - "description": "Disable SSL.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "disable", - "enum": [ "disable" ], - "default": "disable", - "order": 0 - } - } - }, { - "title": "allow", - "additionalProperties": false, - "description": "Allow SSL mode.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "allow", - "enum": [ "allow" ], - "default": "allow", - "order": 0 - } - } - }, { - "title": "prefer", - "additionalProperties": false, - "description": "Prefer SSL mode.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "prefer", - "enum": [ "prefer" ], - "default": "prefer", - "order": 0 - } - } - }, { - "title": "require", - "additionalProperties": false, - "description": "Require SSL mode.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "require", - "enum": [ "require" ], - "default": "require", - "order": 0 - } - } - }, { - "title": "verify-ca", - "additionalProperties": false, - "description": "Verify-ca SSL mode.", - "required": [ "mode", "ssl_ca_certificate" ], - "properties": { - "mode": { - "type": "string", - "const": "verify-ca", - "enum": [ "verify-ca" ], - "default": "verify-ca", - "order": 0 - }, - "ssl_ca_certificate": { - "type": "string", - "title": "CA certificate", - "description": "Specifies the file name of a PEM file that contains Certificate Authority (CA) certificates for use with SSLMODE=verify-ca.\n See more information - in the docs.", - "airbyte_secret": true, - "multiline": true, - "order": 1 - } - } - }, { - "title": "verify-full", - "additionalProperties": false, - "description": "Verify-full SSL mode.", - "required": [ "mode", "ssl_ca_certificate" ], - "properties": { - "mode": { - "type": "string", - "const": "verify-full", - "enum": [ "verify-full" ], - "default": "verify-full", - "order": 0 - }, - "ssl_ca_certificate": { - "type": "string", - "title": "CA certificate", - "description": "Specifies the file name of a PEM file that contains Certificate Authority (CA) certificates for use with SSLMODE=verify-full.\n See more information - in the docs.", - "airbyte_secret": true, - "multiline": true, - "order": 1 - } - } - } ] - }, - "jdbc_url_params": { - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", - "title": "JDBC URL Params", - "type": "string", - "order": 7 - } - } - }, - "supportsIncremental": false, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "7b7d7a0d-954c-45a0-bcfc-39a634b97736", - "name": "Weaviate", - "dockerRepository": "airbyte/destination-weaviate", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/weaviate", - "icon": "weaviate.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/weaviate", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Destination Weaviate", - "type": "object", - "required": [ "url" ], - "additionalProperties": false, - "properties": { - "url": { - "type": "string", - "description": "The URL to the weaviate instance", - "examples": [ "http://localhost:8080", "https://your-instance.semi.network" ] - }, - "username": { - "type": "string", - "description": "Username used with OIDC authentication", - "examples": [ "xyz@weaviate.io" ] - }, - "password": { - "type": "string", - "description": "Password used with OIDC authentication", - "airbyte_secret": true - }, - "batch_size": { - "type": "integer", - "description": "Batch size for writing to Weaviate", - "default": 100 - }, - "vectors": { - "type": "string", - "description": "Comma separated list of strings of `stream_name.vector_column_name` to specify which field holds the vectors.", - "examples": [ "my_table.my_vector_column, another_table.vector", "mytable.vector" ] - }, - "id_schema": { - "type": "string", - "description": "Comma separated list of strings of `stream_name.id_column_name` to specify which field holds the ID of the record.", - "examples": [ "my_table.my_id_column, another_table.id", "users.user_id" ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "append", "overwrite" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "destinationDefinitionId": "94bd199c-2ff0-4aa2-b98e-17f0acb72610", - "name": "DuckDB", - "dockerRepository": "airbyte/destination-duckdb", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.io/integrations/destinations/duckdb", - "icon": "duckdb.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/destinations/duckdb", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "DuckDB Destination Spec", - "type": "object", - "required": [ "destination_path" ], - "additionalProperties": false, - "properties": { - "destination_path": { - "type": "string", - "description": "Path to the destination.duckdb file. The file will be placed inside that local mount. For more information check out our docs", - "example": "/local/destination.duckdb" - }, - "schema": { - "type": "string", - "description": "database schema, default for duckdb is main", - "example": "main" - } - } - }, - "supportsIncremental": true, - "supportsNormalization": true, - "supportsDBT": true, - "supported_destination_sync_modes": [ "overwrite", "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - } ], - "sources": [ { - "sourceDefinitionId": "9f32dab3-77cb-45a1-9d33-347aa5fbe363", - "name": "ActiveCampaign", - "dockerRepository": "airbyte/source-activecampaign", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/activecampaign", - "icon": "activecampaign.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/activecampaign", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Activecampaign Spec", - "type": "object", - "required": [ "api_key", "account_username" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "description": "API Key", - "airbyte_secret": true - }, - "account_username": { - "type": "string", - "description": "Account Username" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "d3b7fa46-111b-419a-998a-d7f046f6d66d", - "name": "Adjust", - "dockerRepository": "airbyte/source-adjust", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/adjust", - "icon": "adjust.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://raw.githubusercontent.com/appchoose/airbyte/feature/source-adjust/docs/integrations/sources/adjust.md", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Adjust reporting API connector.", - "properties": { - "additional_metrics": { - "description": "Metrics names that are not pre-defined, such as cohort metrics or app specific metrics.", - "items": { - "type": "string" - }, - "order": 3, - "title": "Additional metrics for ingestion", - "type": "array" - }, - "api_token": { - "airbyte_secret": true, - "description": "Adjust API key, see https://help.adjust.com/en/article/report-service-api-authentication", - "order": 0, - "title": "API Token", - "type": "string" - }, - "dimensions": { - "description": "Dimensions allow a user to break down metrics into groups using one or several parameters. For example, the number of installs by date, country and network. See https://help.adjust.com/en/article/reports-endpoint#dimensions for more information about the dimensions.", - "items": { - "enum": [ "os_name", "device_type", "app", "app_token", "store_id", "store_type", "app_network", "currency", "currency_code", "network", "campaign", "campaign_network", "campaign_id_network", "adgroup", "adgroup_network", "adgroup_id_network", "source_network", "source_id_network", "creative", "creative_network", "creative_id_network", "country", "country_code", "region", "partner_name", "partner_id" ], - "type": "string" - }, - "minItems": 1, - "order": 4, - "title": "Dimensions", - "type": "array", - "uniqueItems": true - }, - "ingest_start": { - "description": "Data ingest start date.", - "format": "date", - "order": 1, - "title": "Ingest Start Date", - "type": "string" - }, - "metrics": { - "description": "Select at least one metric to query.", - "items": { - "enum": [ "network_cost", "network_cost_diff", "network_clicks", "network_impressions", "network_installs", "network_installs_diff", "network_ecpc", "network_ecpi", "network_ecpm", "arpdau_ad", "arpdau", "arpdau_iap", "ad_impressions", "ad_rpm", "ad_revenue", "cohort_ad_revenue", "cost", "adjust_cost", "all_revenue", "cohort_all_revenue", "daus", "maus", "waus", "base_sessions", "ctr", "click_conversion_rate", "click_cost", "clicks", "paid_clicks", "deattributions", "ecpc", "gdpr_forgets", "gross_profit", "cohort_gross_profit", "impression_conversion_rate", "impression_cost", "impressions", "paid_impressions", "install_cost", "installs", "paid_installs", "installs_per_mile", "limit_ad_tracking_installs", "limit_ad_tracking_install_rate", "limit_ad_tracking_reattribution_rate", "limit_ad_tracking_reattributions", "non_organic_installs", "organic_installs", "roas_ad", "roas", "roas_iap", "reattributions", "return_on_investment", "revenue", "cohort_revenue", "revenue_events", "revenue_to_cost", "sessions", "events", "ecpi_all", "ecpi", "ecpm" ], - "type": "string" - }, - "minItems": 1, - "order": 2, - "title": "Metrics to ingest", - "type": "array", - "uniqueItems": true - }, - "until_today": { - "default": false, - "description": "Syncs data up until today. Useful when running daily incremental syncs, and duplicates are not desired.", - "order": 5, - "title": "Until Today", - "type": "boolean" - } - }, - "required": [ "api_token", "ingest_start", "metrics", "dimensions" ], - "title": "Adjust Spec", - "type": "object" - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "912eb6b7-a893-4a5b-b1c0-36ebbe2de8cd", - "name": "Aircall", - "dockerRepository": "airbyte/source-aircall", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/aircall", - "icon": "aircall.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/aircall", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Aircall Spec", - "type": "object", - "required": [ "api_id", "api_token", "start_date" ], - "additionalProperties": true, - "properties": { - "api_id": { - "title": "API ID", - "type": "string", - "description": "App ID found at settings https://dashboard.aircall.io/integrations/api-keys", - "airbyte_secret": true - }, - "api_token": { - "title": "API Token", - "type": "string", - "description": "App token found at settings (Ref- https://dashboard.aircall.io/integrations/api-keys)", - "airbyte_secret": true - }, - "start_date": { - "title": "Date-From Filter", - "type": "string", - "description": "Date time filter for incremental filter, Specify which date to extract from.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}Z$", - "examples": [ "2022-03-01T00:00:00.000Z" ], - "format": "date-time" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "14c6e7ea-97ed-4f5e-a7b5-25e9a80b8212", - "name": "Airtable", - "dockerRepository": "airbyte/source-airtable", - "dockerImageTag": "3.0.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/airtable", - "icon": "airtable.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/airtable", - "connectionSpecification": { - "$schema": "https://json-schema.org/draft-07/schema#", - "title": "Airtable Source Spec", - "type": "object", - "additionalProperties": true, - "properties": { - "credentials": { - "title": "Authentication", - "type": "object", - "oneOf": [ { - "type": "object", - "title": "OAuth2.0", - "required": [ "client_id", "client_secret", "refresh_token" ], - "properties": { - "auth_method": { - "type": "string", - "const": "oauth2.0" - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "The client ID of the Airtable developer application.", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "title": "Client secret", - "description": "The client secret the Airtable developer application.", - "airbyte_secret": true - }, - "access_token": { - "type": "string", - "description": "Access Token for making authenticated requests.", - "airbyte_secret": true - }, - "token_expiry_date": { - "type": "string", - "description": "The date-time when the access token should be refreshed.", - "format": "date-time" - }, - "refresh_token": { - "type": "string", - "title": "Refresh token", - "description": "The key to refresh the expired access token.", - "airbyte_secret": true - } - } - }, { - "title": "Personal Access Token", - "type": "object", - "required": [ "api_key" ], - "properties": { - "auth_method": { - "type": "string", - "const": "api_key" - }, - "api_key": { - "type": "string", - "description": "The Personal Access Token for the Airtable account. See the Support Guide for more information on how to obtain this token.", - "title": "Personal Access Token", - "airbyte_secret": true, - "examples": [ "key1234567890" ] - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "auth_method" ], - "predicate_value": "oauth2.0", - "oauth_config_specification": { - "complete_oauth_output_specification": { - "type": "object", - "properties": { - "access_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "access_token" ] - }, - "refresh_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "refresh_token" ] - }, - "token_expiry_date": { - "type": "string", - "format": "date-time", - "path_in_connector_config": [ "credentials", "token_expiry_date" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "api.airtable.com", "airtable.com" ] - } - }, { - "sourceDefinitionId": "81ca39dc-4534-4dd2-b848-b0cfd2c11fce", - "name": "Aha", - "dockerRepository": "airbyte/source-aha", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/aha", - "icon": "aha.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/aha", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Aha Spec", - "type": "object", - "required": [ "api_key", "url" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "description": "API Key", - "title": "API Bearer Token" - }, - "url": { - "type": "string", - "description": "URL", - "title": "Aha Url Instance" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "db385323-9333-4fec-bec3-9e0ca9326c90", - "name": "Alpha Vantage", - "dockerRepository": "airbyte/source-alpha-vantage", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/alpha-vantage", - "icon": "alpha-vantage.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/alpha-vantage", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Alpha Vantage Spec", - "type": "object", - "required": [ "api_key", "symbol" ], - "properties": { - "api_key": { - "title": "API Key", - "type": "string", - "description": "API Key", - "airbyte_secret": true, - "order": 0 - }, - "symbol": { - "title": "Symbol", - "type": "string", - "description": "Stock symbol (with exchange code)", - "examples": [ "AAPL", "TSCO.LON" ], - "order": 1 - }, - "interval": { - "title": "Interval", - "type": "string", - "description": "Time-series data point interval. Required for intraday endpoints.\n", - "enum": [ "1min", "5min", "15min", "30min", "60min" ], - "default": "1min", - "order": 2 - }, - "adjusted": { - "title": "Adjusted?", - "type": "boolean", - "description": "Whether to return adjusted data. Only applicable to intraday endpoints.\n", - "default": false, - "order": 3 - }, - "outputsize": { - "title": "Output Size", - "type": "string", - "description": "Whether to return full or compact data (the last 100 data points).\n", - "enum": [ "compact", "full" ], - "default": "compact", - "order": 4 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "1fa90628-2b9e-11ed-a261-0242ac120002", - "name": "AlloyDB for PostgreSQL", - "dockerRepository": "airbyte/source-alloydb", - "dockerImageTag": "2.0.23", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/alloydb", - "icon": "alloydb.svg", - "sourceType": "database", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/postgres", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Postgres Source Spec", - "type": "object", - "required": [ "host", "port", "database", "username" ], - "properties": { - "host": { - "title": "Host", - "description": "Hostname of the database.", - "type": "string", - "order": 0, - "group": "db" - }, - "port": { - "title": "Port", - "description": "Port of the database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 5432, - "examples": [ "5432" ], - "order": 1, - "group": "db" - }, - "database": { - "title": "Database Name", - "description": "Name of the database.", - "type": "string", - "order": 2, - "group": "db" - }, - "schemas": { - "title": "Schemas", - "description": "The list of schemas (case sensitive) to sync from. Defaults to public.", - "type": "array", - "items": { - "type": "string" - }, - "minItems": 0, - "uniqueItems": true, - "default": [ "public" ], - "order": 3, - "group": "db" - }, - "username": { - "title": "Username", - "description": "Username to access the database.", - "type": "string", - "order": 4, - "group": "auth" - }, - "password": { - "title": "Password", - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 5, - "group": "auth", - "always_show": true - }, - "jdbc_url_params": { - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (Eg. key1=value1&key2=value2&key3=value3). For more information read about JDBC URL parameters.", - "title": "JDBC URL Parameters (Advanced)", - "type": "string", - "order": 6, - "group": "advanced", - "pattern_descriptor": "key1=value1&key2=value2" - }, - "ssl_mode": { - "title": "SSL Modes", - "description": "SSL connection modes. \n Read more in the docs.", - "type": "object", - "order": 8, - "group": "security", - "oneOf": [ { - "title": "disable", - "additionalProperties": true, - "description": "Disables encryption of communication between Airbyte and source database.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "disable", - "order": 0 - } - } - }, { - "title": "allow", - "additionalProperties": true, - "description": "Enables encryption only when required by the source database.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "allow", - "order": 0 - } - } - }, { - "title": "prefer", - "additionalProperties": true, - "description": "Allows unencrypted connection only if the source database does not support encryption.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "prefer", - "order": 0 - } - } - }, { - "title": "require", - "additionalProperties": true, - "description": "Always require encryption. If the source database server does not support encryption, connection will fail.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "require", - "order": 0 - } - } - }, { - "title": "verify-ca", - "additionalProperties": true, - "description": "Always require encryption and verifies that the source database server has a valid SSL certificate.", - "required": [ "mode", "ca_certificate" ], - "properties": { - "mode": { - "type": "string", - "const": "verify-ca", - "order": 0 - }, - "ca_certificate": { - "type": "string", - "title": "CA Certificate", - "description": "CA certificate", - "airbyte_secret": true, - "multiline": true, - "order": 1 - }, - "client_certificate": { - "type": "string", - "title": "Client Certificate", - "description": "Client certificate", - "airbyte_secret": true, - "multiline": true, - "order": 2, - "always_show": true - }, - "client_key": { - "type": "string", - "title": "Client Key", - "description": "Client key", - "airbyte_secret": true, - "multiline": true, - "order": 3, - "always_show": true - }, - "client_key_password": { - "type": "string", - "title": "Client key password", - "description": "Password for keystorage. If you do not add it - the password will be generated automatically.", - "airbyte_secret": true, - "order": 4 - } - } - }, { - "title": "verify-full", - "additionalProperties": true, - "description": "This is the most secure mode. Always require encryption and verifies the identity of the source database server.", - "required": [ "mode", "ca_certificate" ], - "properties": { - "mode": { - "type": "string", - "const": "verify-full", - "order": 0 - }, - "ca_certificate": { - "type": "string", - "title": "CA Certificate", - "description": "CA certificate", - "airbyte_secret": true, - "multiline": true, - "order": 1 - }, - "client_certificate": { - "type": "string", - "title": "Client Certificate", - "description": "Client certificate", - "airbyte_secret": true, - "multiline": true, - "order": 2, - "always_show": true - }, - "client_key": { - "type": "string", - "title": "Client Key", - "description": "Client key", - "airbyte_secret": true, - "multiline": true, - "order": 3, - "always_show": true - }, - "client_key_password": { - "type": "string", - "title": "Client key password", - "description": "Password for keystorage. If you do not add it - the password will be generated automatically.", - "airbyte_secret": true, - "order": 4 - } - } - } ] - }, - "replication_method": { - "type": "object", - "title": "Replication Method", - "description": "Replication method for extracting data from the database.", - "order": 9, - "group": "advanced", - "oneOf": [ { - "title": "Standard", - "description": "Standard replication requires no setup on the DB side but will not be able to represent deletions incrementally.", - "required": [ "method" ], - "properties": { - "method": { - "type": "string", - "const": "Standard", - "order": 0 - } - } - }, { - "title": "Logical Replication (CDC)", - "description": "Logical replication uses the Postgres write-ahead log (WAL) to detect inserts, updates, and deletes. This needs to be configured on the source database itself. Only available on Postgres 10 and above. Read the docs.", - "required": [ "method", "replication_slot", "publication" ], - "additionalProperties": true, - "properties": { - "method": { - "type": "string", - "const": "CDC", - "order": 1 - }, - "plugin": { - "type": "string", - "title": "Plugin", - "description": "A logical decoding plugin installed on the PostgreSQL server.", - "enum": [ "pgoutput" ], - "default": "pgoutput", - "order": 2 - }, - "replication_slot": { - "type": "string", - "title": "Replication Slot", - "description": "A plugin logical replication slot. Read about replication slots.", - "order": 3 - }, - "publication": { - "type": "string", - "title": "Publication", - "description": "A Postgres publication used for consuming changes. Read about publications and replication identities.", - "order": 4 - }, - "initial_waiting_seconds": { - "type": "integer", - "title": "Initial Waiting Time in Seconds (Advanced)", - "description": "The amount of time the connector will wait when it launches to determine if there is new data to sync or not. Defaults to 300 seconds. Valid range: 120 seconds to 1200 seconds. Read about initial waiting time.", - "default": 300, - "order": 5, - "min": 120, - "max": 1200 - }, - "lsn_commit_behaviour": { - "type": "string", - "title": "LSN commit behaviour", - "description": "Determines when Airbtye should flush the LSN of processed WAL logs in the source database. `After loading Data in the destination` is default. If `While reading Data` is selected, in case of a downstream failure (while loading data into the destination), next sync would result in a full sync.", - "enum": [ "While reading Data", "After loading Data in the destination" ], - "default": "After loading Data in the destination", - "order": 6 - } - } - } ] - }, - "tunnel_method": { - "type": "object", - "title": "SSH Tunnel Method", - "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", - "oneOf": [ { - "title": "No Tunnel", - "required": [ "tunnel_method" ], - "properties": { - "tunnel_method": { - "description": "No ssh tunnel needed to connect to database", - "type": "string", - "const": "NO_TUNNEL", - "order": 0 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host.", - "type": "string", - "order": 3 - }, - "ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - }, { - "title": "Password Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host", - "type": "string", - "order": 3 - }, - "tunnel_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 4 - } - } - } ], - "group": "security" - } - }, - "groups": [ { - "id": "db" - }, { - "id": "auth" - }, { - "id": "security", - "title": "Security" - }, { - "id": "advanced", - "title": "Advanced" - } ] - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "${host}", "${tunnel_method.tunnel_host}" ] - } - }, { - "sourceDefinitionId": "6ff047c0-f5d5-4ce5-8c81-204a830fa7e1", - "name": "AWS CloudTrail", - "dockerRepository": "airbyte/source-aws-cloudtrail", - "dockerImageTag": "0.1.5", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/aws-cloudtrail", - "icon": "awscloudtrail.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/aws-cloudtrail", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Aws CloudTrail Spec", - "type": "object", - "required": [ "aws_key_id", "aws_secret_key", "aws_region_name", "start_date" ], - "additionalProperties": true, - "properties": { - "aws_key_id": { - "type": "string", - "title": "Key ID", - "description": "AWS CloudTrail Access Key ID. See the docs for more information on how to obtain this key.", - "airbyte_secret": true - }, - "aws_secret_key": { - "type": "string", - "title": "Secret Key", - "description": "AWS CloudTrail Access Key ID. See the docs for more information on how to obtain this key.", - "airbyte_secret": true - }, - "aws_region_name": { - "type": "string", - "title": "Region Name", - "description": "The default AWS Region to use, for example, us-west-1 or us-west-2. When specifying a Region inline during client initialization, this property is named region_name." - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "The date you would like to replicate data. Data in AWS CloudTrail is available for last 90 days only. Format: YYYY-MM-DD.", - "examples": [ "2021-01-01" ], - "default": "1970-01-01", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "format": "date" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "c6b0a29e-1da9-4512-9002-7bfd0cba2246", - "name": "Amazon Ads", - "dockerRepository": "airbyte/source-amazon-ads", - "dockerImageTag": "1.0.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/amazon-ads", - "icon": "amazonads.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/amazon-ads", - "connectionSpecification": { - "title": "Amazon Ads Spec", - "type": "object", - "properties": { - "auth_type": { - "title": "Auth Type", - "const": "oauth2.0", - "order": 0, - "type": "string" - }, - "client_id": { - "title": "Client ID", - "description": "The client ID of your Amazon Ads developer application. See the docs for more information.", - "order": 1, - "type": "string" - }, - "client_secret": { - "title": "Client Secret", - "description": "The client secret of your Amazon Ads developer application. See the docs for more information.", - "airbyte_secret": true, - "order": 2, - "type": "string" - }, - "refresh_token": { - "title": "Refresh Token", - "description": "Amazon Ads refresh token. See the docs for more information on how to obtain this token.", - "airbyte_secret": true, - "order": 3, - "type": "string" - }, - "region": { - "title": "Region", - "description": "Region to pull data from (EU/NA/FE). See docs for more details.", - "enum": [ "NA", "EU", "FE" ], - "type": "string", - "default": "NA", - "order": 4 - }, - "start_date": { - "title": "Start Date", - "description": "The Start date for collecting reports, should not be more than 60 days in the past. In YYYY-MM-DD format", - "examples": [ "2022-10-10", "2022-10-22" ], - "order": 5, - "type": "string" - }, - "profiles": { - "title": "Profile IDs", - "description": "Profile IDs you want to fetch data for. See docs for more details.", - "order": 6, - "type": "array", - "items": { - "type": "integer" - } - }, - "state_filter": { - "title": "State Filter", - "description": "Reflects the state of the Display, Product, and Brand Campaign streams as enabled, paused, or archived. If you do not populate this field, it will be ignored completely.", - "items": { - "type": "string", - "enum": [ "enabled", "paused", "archived" ] - }, - "type": "array", - "uniqueItems": true, - "order": 7 - }, - "look_back_window": { - "title": "Look Back Window", - "description": "The amount of days to go back in time to get the updated data from Amazon Ads", - "examples": [ 3, 10 ], - "type": "integer", - "default": 3, - "order": 8 - }, - "report_record_types": { - "title": "Report Record Types", - "description": "Optional configuration which accepts an array of string of record types. Leave blank for default behaviour to pull all report types. Use this config option only if you want to pull specific report type(s). See docs for more details", - "items": { - "type": "string", - "enum": [ "adGroups", "asins", "asins_keywords", "asins_targets", "campaigns", "keywords", "productAds", "targets" ] - }, - "type": "array", - "uniqueItems": true, - "order": 9 - } - }, - "required": [ "client_id", "client_secret", "refresh_token" ], - "additionalProperties": true - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "auth_type" ], - "predicate_value": "oauth2.0", - "oauth_config_specification": { - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": true, - "properties": { - "refresh_token": { - "type": "string", - "path_in_connector_config": [ "refresh_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": true, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": true, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "api.amazon.com", "advertising-api.amazon.com", "advertising-api-eu.amazon.com", "advertising-api-fe.amazon.com" ] - } - }, { - "sourceDefinitionId": "e55879a8-0ef8-4557-abcf-ab34c53ec460", - "name": "Amazon Seller Partner", - "dockerRepository": "airbyte/source-amazon-seller-partner", - "dockerImageTag": "1.0.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/amazon-seller-partner", - "icon": "amazonsellerpartner.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/amazon-seller-partner", - "changelogUrl": "https://docs.airbyte.com/integrations/sources/amazon-seller-partner", - "connectionSpecification": { - "title": "Amazon Seller Partner Spec", - "type": "object", - "properties": { - "app_id": { - "title": "App Id", - "description": "Your Amazon App ID", - "airbyte_secret": true, - "order": 0, - "type": "string" - }, - "auth_type": { - "title": "Auth Type", - "const": "oauth2.0", - "order": 1, - "type": "string" - }, - "lwa_app_id": { - "title": "LWA Client Id", - "description": "Your Login with Amazon Client ID.", - "order": 2, - "type": "string" - }, - "lwa_client_secret": { - "title": "LWA Client Secret", - "description": "Your Login with Amazon Client Secret.", - "airbyte_secret": true, - "order": 3, - "type": "string" - }, - "refresh_token": { - "title": "Refresh Token", - "description": "The Refresh Token obtained via OAuth flow authorization.", - "airbyte_secret": true, - "order": 4, - "type": "string" - }, - "aws_access_key": { - "title": "AWS Access Key", - "description": "Specifies the AWS access key used as part of the credentials to authenticate the user.", - "airbyte_secret": true, - "order": 5, - "type": "string" - }, - "aws_secret_key": { - "title": "AWS Secret Access Key", - "description": "Specifies the AWS secret key used as part of the credentials to authenticate the user.", - "airbyte_secret": true, - "order": 6, - "type": "string" - }, - "role_arn": { - "title": "Role ARN", - "description": "Specifies the Amazon Resource Name (ARN) of an IAM role that you want to use to perform operations requested using this profile. (Needs permission to 'Assume Role' STS).", - "airbyte_secret": true, - "order": 7, - "type": "string" - }, - "replication_start_date": { - "title": "Start Date", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2017-01-25T00:00:00Z" ], - "order": 8, - "type": "string" - }, - "replication_end_date": { - "title": "End Date", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data after this date will not be replicated.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$|^$", - "examples": [ "2017-01-25T00:00:00Z" ], - "order": 9, - "type": "string" - }, - "period_in_days": { - "title": "Period In Days", - "description": "Will be used for stream slicing for initial full_refresh sync when no updated state is present for reports that support sliced incremental sync.", - "default": 90, - "maximum": 90, - "examples": [ "1", "10", "30", "60", "90" ], - "order": 10, - "type": "integer" - }, - "report_options": { - "title": "Report Options", - "description": "Additional information passed to reports. This varies by report type. Must be a valid json string.", - "examples": [ "{\"GET_BRAND_ANALYTICS_SEARCH_TERMS_REPORT\": {\"reportPeriod\": \"WEEK\"}}", "{\"GET_SOME_REPORT\": {\"custom\": \"true\"}}" ], - "order": 11, - "type": "string" - }, - "max_wait_seconds": { - "title": "Max wait time for reports (in seconds)", - "description": "Sometimes report can take up to 30 minutes to generate. This will set the limit for how long to wait for a successful report.", - "default": 500, - "examples": [ "500", "1980" ], - "order": 12, - "type": "integer" - }, - "aws_environment": { - "title": "AWSEnvironment", - "description": "An enumeration.", - "enum": [ "PRODUCTION", "SANDBOX" ], - "type": "string" - }, - "region": { - "title": "AWSRegion", - "description": "An enumeration.", - "enum": [ "AE", "AU", "BE", "BR", "CA", "DE", "EG", "ES", "FR", "GB", "IN", "IT", "JP", "MX", "NL", "PL", "SA", "SE", "SG", "TR", "UK", "US" ], - "type": "string" - } - }, - "required": [ "app_id", "lwa_app_id", "lwa_client_secret", "refresh_token", "replication_start_date", "aws_environment", "region" ], - "additionalProperties": true, - "definitions": { - "AWSEnvironment": { - "title": "AWSEnvironment", - "description": "An enumeration.", - "enum": [ "PRODUCTION", "SANDBOX" ], - "type": "string" - }, - "AWSRegion": { - "title": "AWSRegion", - "description": "An enumeration.", - "enum": [ "AE", "AU", "BE", "BR", "CA", "DE", "EG", "ES", "FR", "GB", "IN", "IT", "JP", "MX", "NL", "PL", "SA", "SE", "SG", "TR", "UK", "US" ], - "type": "string" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "auth_type" ], - "predicate_value": "oauth2.0", - "oauth_config_specification": { - "oauth_user_input_from_connector_config_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "app_id": { - "type": "string", - "path_in_connector_config": [ "app_id" ] - } - } - }, - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "refresh_token": { - "type": "string", - "path_in_connector_config": [ "refresh_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "lwa_app_id": { - "type": "string" - }, - "lwa_client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "lwa_app_id": { - "type": "string", - "path_in_connector_config": [ "lwa_app_id" ] - }, - "lwa_client_secret": { - "type": "string", - "path_in_connector_config": [ "lwa_client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "983fd355-6bf3-4709-91b5-37afa391eeb6", - "name": "Amazon SQS", - "dockerRepository": "airbyte/source-amazon-sqs", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/amazon-sqs", - "icon": "awssqs.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/amazon-sqs", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Amazon SQS Source Spec", - "type": "object", - "required": [ "queue_url", "region", "delete_messages" ], - "additionalProperties": false, - "properties": { - "queue_url": { - "title": "Queue URL", - "description": "URL of the SQS Queue", - "type": "string", - "examples": [ "https://sqs.eu-west-1.amazonaws.com/1234567890/my-example-queue" ], - "order": 0 - }, - "region": { - "title": "AWS Region", - "description": "AWS Region of the SQS Queue", - "type": "string", - "enum": [ "us-east-1", "us-east-2", "us-west-1", "us-west-2", "af-south-1", "ap-east-1", "ap-south-1", "ap-northeast-1", "ap-northeast-2", "ap-northeast-3", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "cn-north-1", "cn-northwest-1", "eu-central-1", "eu-north-1", "eu-south-1", "eu-west-1", "eu-west-2", "eu-west-3", "sa-east-1", "me-south-1", "us-gov-east-1", "us-gov-west-1" ], - "order": 1 - }, - "delete_messages": { - "title": "Delete Messages After Read", - "description": "If Enabled, messages will be deleted from the SQS Queue after being read. If Disabled, messages are left in the queue and can be read more than once. WARNING: Enabling this option can result in data loss in cases of failure, use with caution, see documentation for more detail. ", - "type": "boolean", - "default": false, - "order": 2 - }, - "max_batch_size": { - "title": "Max Batch Size", - "description": "Max amount of messages to get in one batch (10 max)", - "type": "integer", - "examples": [ "5" ], - "order": 3 - }, - "max_wait_time": { - "title": "Max Wait Time", - "description": "Max amount of time in seconds to wait for messages in a single poll (20 max)", - "type": "integer", - "examples": [ "5" ], - "order": 4 - }, - "attributes_to_return": { - "title": "Message Attributes To Return", - "description": "Comma separated list of Mesage Attribute names to return", - "type": "string", - "examples": [ "attr1,attr2" ], - "order": 5 - }, - "visibility_timeout": { - "title": "Message Visibility Timeout", - "description": "Modify the Visibility Timeout of the individual message from the Queue's default (seconds).", - "type": "integer", - "examples": [ "15" ], - "order": 6 - }, - "access_key": { - "title": "AWS IAM Access Key ID", - "description": "The Access Key ID of the AWS IAM Role to use for pulling messages", - "type": "string", - "examples": [ "xxxxxHRNxxx3TBxxxxxx" ], - "airbyte_secret": true, - "order": 7 - }, - "secret_key": { - "title": "AWS IAM Secret Key", - "description": "The Secret Key of the AWS IAM Role to use for pulling messages", - "type": "string", - "examples": [ "hu+qE5exxxxT6o/ZrKsxxxxxxBhxxXLexxxxxVKz" ], - "airbyte_secret": true, - "order": 8 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "fa9f58c6-2d03-4237-aaa4-07d75e0c1396", - "name": "Amplitude", - "dockerRepository": "airbyte/source-amplitude", - "dockerImageTag": "0.2.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/amplitude", - "icon": "amplitude.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/amplitude", - "connectionSpecification": { - "$schema": "https://json-schema.org/draft-07/schema#", - "title": "Amplitude Spec", - "type": "object", - "required": [ "api_key", "secret_key", "start_date" ], - "additionalProperties": true, - "properties": { - "data_region": { - "type": "string", - "title": "Data region", - "description": "Amplitude data region server", - "enum": [ "Standard Server", "EU Residency Server" ], - "default": "Standard Server" - }, - "api_key": { - "type": "string", - "title": "API Key", - "description": "Amplitude API Key. See the setup guide for more information on how to obtain this key.", - "airbyte_secret": true - }, - "secret_key": { - "type": "string", - "title": "Secret Key", - "description": "Amplitude Secret Key. See the setup guide for more information on how to obtain this key.", - "airbyte_secret": true - }, - "start_date": { - "type": "string", - "title": "Replication Start Date", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "description": "UTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.", - "examples": [ "2021-01-25T00:00:00Z" ] - }, - "request_time_range": { - "type": "integer", - "title": "Request time range", - "description": "According to Considerations too big time range in request can cause a timeout error. In this case, set shorter time interval in hours.", - "default": 24, - "minimum": 1, - "maximum": 8760 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "amplitude.com", "analytics.eu.amplitude.com" ] - } - }, { - "sourceDefinitionId": "47f17145-fe20-4ef5-a548-e29b048adf84", - "name": "Apify Dataset", - "dockerRepository": "airbyte/source-apify-dataset", - "dockerImageTag": "0.1.11", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/apify-dataset", - "icon": "apify.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/apify-dataset", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Apify Dataset Spec", - "type": "object", - "required": [ "datasetId" ], - "additionalProperties": false, - "properties": { - "datasetId": { - "type": "string", - "title": "Dataset ID", - "description": "ID of the dataset you would like to load to Airbyte." - }, - "clean": { - "type": "boolean", - "title": "Clean", - "description": "If set to true, only clean items will be downloaded from the dataset. See description of what clean means in Apify API docs. If not sure, set clean to false." - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "b4375641-e270-41d3-9c20-4f9cecad87a8", - "name": "Appfollow", - "dockerRepository": "airbyte/source-appfollow", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/appfollow", - "icon": "appfollow.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/appfollow", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Appfollow Spec", - "type": "object", - "required": [ "ext_id", "country", "cid", "api_secret" ], - "additionalProperties": true, - "properties": { - "ext_id": { - "type": "string", - "title": "app external id", - "description": "for App Store — this is 9-10 digits identification number; for Google Play — this is bundle name;" - }, - "cid": { - "type": "string", - "title": "client id", - "description": "client id provided by Appfollow" - }, - "api_secret": { - "type": "string", - "title": "api secret", - "description": "api secret provided by Appfollow", - "airbyte_secret": true - }, - "country": { - "type": "string", - "title": "country", - "description": "getting data by Country" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "e59c8416-c2fa-4bd3-9e95-52677ea281c1", - "name": "Apple Search Ads", - "dockerRepository": "airbyte/source-apple-search-ads", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/apple-search-ads", - "icon": "apple.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/apple-search-ads", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Apple Search Ads Spec", - "type": "object", - "required": [ "org_id", "client_id", "client_secret", "start_date" ], - "additionalProperties": true, - "properties": { - "org_id": { - "type": "integer", - "title": "Org Id", - "description": "The identifier of the organization that owns the campaign. Your Org Id is the same as your account in the Apple Search Ads UI." - }, - "client_id": { - "type": "string", - "title": "Client Id", - "description": "A user identifier for the token request. See here", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "A string that authenticates the user’s setup request. See here", - "airbyte_secret": true - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "Start getting data from that date.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "2020-01-01" ] - }, - "end_date": { - "type": "string", - "title": "End Date", - "description": "Data is retrieved until that date (included)", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "2021-01-01" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "16447954-e6a8-4593-b140-43dea13bc457", - "name": "AppsFlyer", - "dockerRepository": "airbyte/source-appsflyer", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/appsflyer", - "icon": "appsflyer.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Appsflyer Spec", - "type": "object", - "required": [ "app_id", "api_token", "start_date" ], - "additionalProperties": false, - "properties": { - "app_id": { - "type": "string", - "description": "App identifier as found in AppsFlyer." - }, - "api_token": { - "type": "string", - "description": "Pull API token for authentication. If you change the account admin, the token changes, and you must update scripts with the new token. Get the API token in the Dashboard.", - "airbyte_secret": true - }, - "start_date": { - "type": "string", - "description": "The default value to use if no bookmark exists for an endpoint. Raw Reports historical lookback is limited to 90 days.", - "examples": [ "2021-11-16", "2021-11-16 15:00:00" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}( [0-9]{2}:[0-9]{2}:[0-9]{2})?$" - }, - "timezone": { - "type": "string", - "description": "Time zone in which date times are stored. The project timezone may be found in the App settings in the AppsFlyer console.", - "default": "UTC", - "examples": [ "US/Pacific", "UTC" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "2af123bf-0aaf-4e0d-9784-cb497f23741a", - "name": "Appstore", - "dockerRepository": "airbyte/source-appstore-singer", - "dockerImageTag": "0.2.6", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/appstore", - "icon": "appstore.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/appstore", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Source Appstore Singer Spec", - "type": "object", - "required": [ "key_id", "private_key", "issuer_id", "vendor", "start_date" ], - "additionalProperties": false, - "properties": { - "key_id": { - "type": "string", - "title": "Key ID", - "description": "Appstore Key ID. See the docs for more information on how to obtain this key." - }, - "private_key": { - "type": "string", - "title": "Private Key", - "description": "Appstore Private Key. See the docs for more information on how to obtain this key.", - "airbyte_secret": true, - "multiline": true - }, - "issuer_id": { - "type": "string", - "title": "Issuer ID", - "description": "Appstore Issuer ID. See the docs for more information on how to obtain this ID." - }, - "vendor": { - "type": "string", - "title": "Vendor ID", - "description": "Appstore Vendor ID. See the docs for more information on how to obtain this ID." - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", - "examples": [ "2020-11-16T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "d0243522-dccf-4978-8ba0-37ed47a0bdbf", - "name": "Asana", - "dockerRepository": "airbyte/source-asana", - "dockerImageTag": "0.1.5", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/asana", - "icon": "asana.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Asana Spec", - "type": "object", - "additionalProperties": true, - "properties": { - "credentials": { - "title": "Authentication mechanism", - "description": "Choose how to authenticate to Github", - "type": "object", - "oneOf": [ { - "type": "object", - "title": "Authenticate with Personal Access Token", - "required": [ "personal_access_token" ], - "properties": { - "option_title": { - "type": "string", - "title": "Credentials title", - "description": "PAT Credentials", - "const": "PAT Credentials" - }, - "personal_access_token": { - "type": "string", - "title": "Personal Access Token", - "description": "Asana Personal Access Token (generate yours here).", - "airbyte_secret": true - } - } - }, { - "type": "object", - "title": "Authenticate via Asana (Oauth)", - "required": [ "client_id", "client_secret", "refresh_token" ], - "properties": { - "option_title": { - "type": "string", - "title": "Credentials title", - "description": "OAuth Credentials", - "const": "OAuth Credentials" - }, - "client_id": { - "type": "string", - "title": "", - "description": "", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "title": "", - "description": "", - "airbyte_secret": true - }, - "refresh_token": { - "type": "string", - "title": "", - "description": "", - "airbyte_secret": true - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ "credentials", "1" ], - "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], - "oauthFlowOutputParameters": [ [ "refresh_token" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta" - }, { - "sourceDefinitionId": "4e8c9fa0-3634-499b-b948-11581b5c3efa", - "name": "Ashby", - "dockerRepository": "airbyte/source-ashby", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/ashby", - "icon": "ashby.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://developers.ashbyhq.com/reference/introduction", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Ashby Spec", - "type": "object", - "required": [ "api_key", "start_date" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "title": "Ashby API key", - "description": "The Ashby API Key, see doc here.", - "airbyte_secret": true - }, - "start_date": { - "type": "string", - "title": "Start date", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", - "examples": [ "2017-01-25T00:00:00Z" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "6c504e48-14aa-4221-9a72-19cf5ff1ae78", - "name": "Auth0", - "dockerRepository": "airbyte/source-auth0", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/auth0", - "icon": "auth0.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://auth0.com/docs/api/management/v2/", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Auth0 Management API Spec", - "type": "object", - "required": [ "base_url", "credentials" ], - "additionalProperties": true, - "properties": { - "base_url": { - "type": "string", - "title": "Base URL", - "examples": [ "https://dev-yourOrg.us.auth0.com/" ], - "description": "The Authentication API is served over HTTPS. All URLs referenced in the documentation have the following base `https://YOUR_DOMAIN`" - }, - "credentials": { - "title": "Authentication Method", - "type": "object", - "oneOf": [ { - "type": "object", - "title": "OAuth2 Confidential Application", - "required": [ "auth_type", "client_id", "client_secret", "audience" ], - "properties": { - "auth_type": { - "type": "string", - "title": "Authentication Method", - "const": "oauth2_confidential_application", - "order": 0 - }, - "client_id": { - "title": "Client ID", - "description": "Your application's Client ID. You can find this value on the application's settings tab after you login the admin portal.", - "type": "string", - "examples": [ "Client_ID" ] - }, - "client_secret": { - "title": "Client Secret", - "description": "Your application's Client Secret. You can find this value on the application's settings tab after you login the admin portal.", - "type": "string", - "examples": [ "Client_Secret" ], - "airbyte_secret": true - }, - "audience": { - "title": "Audience", - "description": "The audience for the token, which is your API. You can find this in the Identifier field on your API's settings tab", - "type": "string", - "examples": [ "https://dev-yourOrg.us.auth0.com/api/v2/" ] - } - } - }, { - "type": "object", - "title": "OAuth2 Access Token", - "required": [ "access_token", "auth_type" ], - "properties": { - "auth_type": { - "type": "string", - "title": "Authentication Method", - "const": "oauth2_access_token", - "order": 0 - }, - "access_token": { - "title": "OAuth2 Access Token", - "description": "Also called API Access Token The access token used to call the Auth0 Management API Token. It's a JWT that contains specific grant permissions knowns as scopes.", - "type": "string", - "airbyte_secret": true - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "798ae795-5189-42b6-b64e-3cb91db93338", - "name": "Azure Table Storage", - "dockerRepository": "airbyte/source-azure-table", - "dockerImageTag": "0.1.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/azure-table", - "icon": "azureblobstorage.svg", - "sourceType": "database", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Azure Data Table Spec", - "type": "object", - "required": [ "storage_account_name", "storage_access_key" ], - "properties": { - "storage_account_name": { - "title": "Account Name", - "type": "string", - "description": "The name of your storage account.", - "order": 0, - "airbyte_secret": false - }, - "storage_access_key": { - "title": "Access Key", - "type": "string", - "description": "Azure Table Storage Access Key. See the docs for more information on how to obtain this key.", - "order": 1, - "airbyte_secret": true - }, - "storage_endpoint_suffix": { - "title": "Endpoint Suffix", - "type": "string", - "description": "Azure Table Storage service account URL suffix. See the docs for more information on how to obtain endpoint suffix", - "order": 2, - "default": "core.windows.net", - "examples": [ "core.windows.net", "core.chinacloudapi.cn" ], - "airbyte_secret": false - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "fdaaba68-4875-4ed9-8fcd-4ae1e0a25093", - "name": "Azure Blob Storage", - "dockerRepository": "airbyte/source-azure-blob-storage", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/azure-blob-storage", - "icon": "azureblobstorage.svg", - "sourceType": "file", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/azureblobstorage", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "AzureBlobStorage Source Spec", - "type": "object", - "required": [ "azure_blob_storage_account_name", "azure_blob_storage_account_key", "azure_blob_storage_container_name", "format" ], - "additionalProperties": true, - "properties": { - "azure_blob_storage_endpoint": { - "title": "Endpoint Domain Name", - "type": "string", - "default": "blob.core.windows.net", - "description": "This is Azure Blob Storage endpoint domain name. Leave default value (or leave it empty if run container from command line) to use Microsoft native from example.", - "examples": [ "blob.core.windows.net" ] - }, - "azure_blob_storage_container_name": { - "title": "Azure blob storage container (Bucket) Name", - "type": "string", - "description": "The name of the Azure blob storage container.", - "examples": [ "airbytetescontainername" ] - }, - "azure_blob_storage_account_name": { - "title": "Azure Blob Storage account name", - "type": "string", - "description": "The account's name of the Azure Blob Storage.", - "examples": [ "airbyte5storage" ] - }, - "azure_blob_storage_account_key": { - "title": "Azure Blob Storage account key", - "description": "The Azure blob storage account key.", - "airbyte_secret": true, - "type": "string", - "examples": [ "Z8ZkZpteggFx394vm+PJHnGTvdRncaYS+JhLKdj789YNmD+iyGTnG+PV+POiuYNhBg/ACS+LKjd%4FG3FHGN12Nd==" ] - }, - "azure_blob_storage_blobs_prefix": { - "title": "Azure Blob Storage blobs prefix", - "description": "The Azure blob storage prefix to be applied", - "type": "string", - "examples": [ "FolderA/FolderB/" ] - }, - "azure_blob_storage_schema_inference_limit": { - "title": "Azure Blob Storage schema inference limit", - "description": "The Azure blob storage blobs to scan for inferring the schema, useful on large amounts of data with consistent structure", - "type": "integer", - "examples": [ "500" ] - }, - "format": { - "title": "Input Format", - "type": "object", - "description": "Input data format", - "oneOf": [ { - "title": "JSON Lines: newline-delimited JSON", - "required": [ "format_type" ], - "properties": { - "format_type": { - "type": "string", - "const": "JSONL" - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "971c3e1e-78a5-411e-ad56-c4052b50876b", - "name": "Babelforce", - "dockerRepository": "airbyte/source-babelforce", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/babelforce", - "icon": "babelforce.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Babelforce Spec", - "type": "object", - "required": [ "region", "access_key_id", "access_token" ], - "additionalProperties": false, - "properties": { - "region": { - "type": "string", - "title": "Region", - "default": "services", - "description": "Babelforce region", - "enum": [ "services", "us-east", "ap-southeast" ], - "order": 1 - }, - "access_key_id": { - "type": "string", - "title": "Access Key ID", - "description": "The Babelforce access key ID", - "airbyte_secret": true, - "order": 2 - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "The Babelforce access token", - "airbyte_secret": true, - "order": 3 - }, - "date_created_from": { - "type": "integer", - "title": "Date Created from", - "description": "Timestamp in Unix the replication from Babelforce API will start from. For example 1651363200 which corresponds to 2022-05-01 00:00:00.", - "examples": [ 1651363200 ], - "order": 4 - }, - "date_created_to": { - "type": "integer", - "title": "Date Created to", - "description": "Timestamp in Unix the replication from Babelforce will be up to. For example 1651363200 which corresponds to 2022-05-01 00:00:00.", - "examples": [ 1651363200 ], - "order": 5 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "90916976-a132-4ce9-8bce-82a03dd58788", - "name": "BambooHR", - "dockerRepository": "airbyte/source-bamboo-hr", - "dockerImageTag": "0.2.2", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/bamboo-hr", - "icon": "bamboohr.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/bamboo-hr", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Bamboo HR Spec", - "type": "object", - "required": [ "subdomain", "api_key" ], - "additionalProperties": true, - "properties": { - "subdomain": { - "type": "string", - "description": "Sub Domain of bamboo hr" - }, - "api_key": { - "type": "string", - "description": "Api key of bamboo hr", - "airbyte_secret": true - }, - "custom_reports_fields": { - "type": "string", - "default": "", - "description": "Comma-separated list of fields to include in custom reports." - }, - "custom_reports_include_default_fields": { - "type": "boolean", - "default": true, - "description": "If true, the custom reports endpoint will include the default fields defined here: https://documentation.bamboohr.com/docs/list-of-field-names." - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "59c5501b-9f95-411e-9269-7143c939adbd", - "name": "BigCommerce", - "dockerRepository": "airbyte/source-bigcommerce", - "dockerImageTag": "0.1.10", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/bigcommerce", - "icon": "bigcommerce.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/bigcommerce", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "BigCommerce Source CDK Specifications", - "type": "object", - "required": [ "start_date", "store_hash", "access_token" ], - "additionalProperties": true, - "properties": { - "start_date": { - "type": "string", - "title": "Start Date", - "description": "The date you would like to replicate data. Format: YYYY-MM-DD.", - "examples": [ "2021-01-01" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" - }, - "store_hash": { - "type": "string", - "title": "Store Hash", - "description": "The hash code of the store. For https://api.bigcommerce.com/stores/HASH_CODE/v3/, The store's hash code is 'HASH_CODE'." - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "Access Token for making authenticated requests.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "bfd1ddf8-ae8a-4620-b1d7-55597d2ba08c", - "name": "BigQuery", - "dockerRepository": "airbyte/source-bigquery", - "dockerImageTag": "0.2.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/bigquery", - "icon": "bigquery.svg", - "sourceType": "database", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/bigquery", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "BigQuery Source Spec", - "type": "object", - "required": [ "project_id", "credentials_json" ], - "properties": { - "project_id": { - "type": "string", - "description": "The GCP project ID for the project containing the target BigQuery dataset.", - "title": "Project ID" - }, - "dataset_id": { - "type": "string", - "description": "The dataset ID to search for tables and views. If you are only loading data from one dataset, setting this option could result in much faster schema discovery.", - "title": "Default Dataset ID" - }, - "credentials_json": { - "type": "string", - "description": "The contents of your Service Account Key JSON file. See the docs for more information on how to obtain this key.", - "title": "Credentials JSON", - "airbyte_secret": true - } - } - }, - "supportsIncremental": true, - "supportsNormalization": true, - "supportsDBT": true, - "supported_destination_sync_modes": [ ], - "supported_sync_modes": [ "overwrite", "append", "append_dedup" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "47f25999-dd5e-4636-8c39-e7cea2453331", - "name": "Bing Ads", - "dockerRepository": "airbyte/source-bing-ads", - "dockerImageTag": "0.1.20", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/bing-ads", - "icon": "bingads.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/bing-ads", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Bing Ads Spec", - "type": "object", - "required": [ "developer_token", "client_id", "refresh_token", "reports_start_date" ], - "additionalProperties": true, - "properties": { - "auth_method": { - "type": "string", - "const": "oauth2.0" - }, - "tenant_id": { - "type": "string", - "title": "Tenant ID", - "description": "The Tenant ID of your Microsoft Advertising developer application. Set this to \"common\" unless you know you need a different value.", - "airbyte_secret": true, - "default": "common", - "order": 0 - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "The Client ID of your Microsoft Advertising developer application.", - "airbyte_secret": true, - "order": 1 - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "The Client Secret of your Microsoft Advertising developer application.", - "default": "", - "airbyte_secret": true, - "order": 2 - }, - "refresh_token": { - "type": "string", - "title": "Refresh Token", - "description": "Refresh Token to renew the expired Access Token.", - "airbyte_secret": true, - "order": 3 - }, - "developer_token": { - "type": "string", - "title": "Developer Token", - "description": "Developer token associated with user. See more info in the docs.", - "airbyte_secret": true, - "order": 4 - }, - "reports_start_date": { - "type": "string", - "title": "Reports replication start date", - "format": "date", - "default": "2020-01-01", - "description": "The start date from which to begin replicating report data. Any data generated before this date will not be replicated in reports. This is a UTC date in YYYY-MM-DD format.", - "order": 5 - }, - "lookback_window": { - "title": "Lookback window", - "description": "Also known as attribution or conversion window. How far into the past to look for records (in days). If your conversion window has an hours/minutes granularity, round it up to the number of days exceeding. Used only for performance report streams in incremental mode.", - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 90, - "order": 6 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "auth_method" ], - "predicate_value": "oauth2.0", - "oauth_config_specification": { - "oauth_user_input_from_connector_config_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "tenant_id": { - "type": "string", - "path_in_connector_config": [ "tenant_id" ] - } - } - }, - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "refresh_token": { - "type": "string", - "path_in_connector_config": [ "refresh_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "bingads.microsoft.com", "login.microsoftonline.com", "login.live.com", "login.windows-ppe.net", "ads.microsoft.com", "api.ads.microsoft.com" ] - } - }, { - "sourceDefinitionId": "63cea06f-1c75-458d-88fe-ad48c7cb27fd", - "name": "Braintree", - "dockerRepository": "airbyte/source-braintree", - "dockerImageTag": "0.1.4", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/braintree", - "icon": "braintree.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/braintree", - "connectionSpecification": { - "title": "Braintree Spec", - "type": "object", - "properties": { - "merchant_id": { - "title": "Merchant ID", - "description": "The unique identifier for your entire gateway account. See the docs for more information on how to obtain this ID.", - "name": "Merchant ID", - "type": "string" - }, - "public_key": { - "title": "Public Key", - "description": "Braintree Public Key. See the docs for more information on how to obtain this key.", - "name": "Public Key", - "type": "string" - }, - "private_key": { - "title": "Private Key", - "description": "Braintree Private Key. See the docs for more information on how to obtain this key.", - "name": "Private Key", - "airbyte_secret": true, - "type": "string" - }, - "start_date": { - "title": "Start Date", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", - "name": "Start Date", - "examples": [ "2020", "2020-12-30", "2020-11-22 20:20:05" ], - "type": "string", - "format": "date-time" - }, - "environment": { - "title": "Environment", - "description": "Environment specifies where the data will come from.", - "name": "Environment", - "examples": [ "sandbox", "production", "qa", "development" ], - "enum": [ "Development", "Sandbox", "Qa", "Production" ], - "type": "string" - } - }, - "required": [ "merchant_id", "public_key", "private_key", "environment" ] - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "7c37685e-8512-4901-addf-9afbef6c0de9", - "name": "Breezometer", - "dockerRepository": "airbyte/source-breezometer", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/breezometer", - "icon": "breezometer.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/breezometer", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Breezometer Spec", - "type": "object", - "required": [ "api_key", "latitude", "longitude" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "tittle": "API Key", - "description": "Your API Access Key. See here.", - "airbyte_secret": true - }, - "latitude": { - "type": "string", - "tittle": "Latitude", - "description": "Latitude of the monitored location.", - "examples": [ "54.675003" ] - }, - "longitude": { - "type": "string", - "tittle": "Longitude", - "description": "Longitude of the monitored location.", - "examples": [ "-113.550282" ] - }, - "days_to_forecast": { - "type": "integer", - "tittle": "Days to Forecast", - "description": "Number of days to forecast. Minimum 1, maximum 3. Valid for Polen and Weather Forecast streams.", - "examples": [ 3 ] - }, - "hours_to_forecast": { - "type": "integer", - "tittle": "Hours to Forecast", - "description": "Number of hours to forecast. Minimum 1, maximum 96. Valid for Air Quality Forecast stream.", - "examples": [ 30 ] - }, - "historic_hours": { - "type": "integer", - "tittle": "Historic Hours", - "description": "Number of hours retireve from Air Quality History stream. Minimum 1, maximum 720.", - "examples": [ 30 ] - }, - "radius": { - "type": "integer", - "tittle": "Radius", - "description": "Desired radius from the location provided. Minimum 5, maximum 100. Valid for Wildfires streams.", - "examples": [ 50 ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "dc98a6ad-2dd1-47b6-9529-2ec35820f9c6", - "name": "CallRail", - "dockerRepository": "airbyte/source-callrail", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/callrail", - "icon": "callrail.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/callrail", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Call Rail Spec", - "type": "object", - "required": [ "api_key", "account_id", "start_date" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "description": "API access key", - "airbyte_secret": true - }, - "account_id": { - "type": "string", - "description": "Account ID", - "airbyte_secret": true - }, - "start_date": { - "type": "string", - "description": "Start getting data from that date.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "%Y-%m-%d" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "bb1a6d31-6879-4819-a2bd-3eed299ea8e2", - "name": "Cart.com", - "dockerRepository": "airbyte/source-cart", - "dockerImageTag": "0.2.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/cart", - "icon": "cart.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/cart", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Cart.com Spec", - "type": "object", - "required": [ "start_date" ], - "additionalProperties": true, - "properties": { - "credentials": { - "title": "Authorization Method", - "description": "", - "type": "object", - "oneOf": [ { - "title": "Central API Router", - "type": "object", - "order": 0, - "required": [ "auth_type", "user_name", "user_secret", "site_id" ], - "properties": { - "auth_type": { - "type": "string", - "const": "CENTRAL_API_ROUTER", - "order": 0 - }, - "user_name": { - "type": "string", - "title": "User Name", - "description": "Enter your application's User Name", - "airbyte_secret": true, - "order": 1 - }, - "user_secret": { - "type": "string", - "title": "User Secret", - "description": "Enter your application's User Secret", - "airbyte_secret": true, - "order": 2 - }, - "site_id": { - "type": "string", - "title": "Site ID", - "description": "You can determine a site provisioning site Id by hitting https://site.com/store/sitemonitor.aspx and reading the response param PSID", - "airbyte_secret": true, - "order": 3 - } - } - }, { - "title": "Single Store Access Token", - "type": "object", - "order": 1, - "required": [ "auth_type", "access_token", "store_name" ], - "properties": { - "auth_type": { - "type": "string", - "const": "SINGLE_STORE_ACCESS_TOKEN", - "order": 0 - }, - "access_token": { - "type": "string", - "title": "Access Token", - "airbyte_secret": true, - "order": 1, - "description": "Access Token for making authenticated requests." - }, - "store_name": { - "type": "string", - "title": "Store Name", - "order": 2, - "description": "The name of Cart.com Online Store. All API URLs start with https://[mystorename.com]/api/v1/, where [mystorename.com] is the domain name of your store." - } - } - } ] - }, - "start_date": { - "title": "Start Date", - "type": "string", - "description": "The date from which you'd like to replicate the data", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2021-01-01T00:00:00Z" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "686473f1-76d9-4994-9cc7-9b13da46147c", - "name": "Chargebee", - "dockerRepository": "airbyte/source-chargebee", - "dockerImageTag": "0.2.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/chargebee", - "icon": "chargebee.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://apidocs.chargebee.com/docs/api", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Chargebee Spec", - "type": "object", - "required": [ "site", "site_api_key", "start_date", "product_catalog" ], - "additionalProperties": true, - "properties": { - "site_api_key": { - "type": "string", - "title": "API Key", - "description": "Chargebee API Key. See the docs for more information on how to obtain this key.", - "airbyte_secret": true, - "order": 0 - }, - "site": { - "type": "string", - "title": "Site", - "description": "The site prefix for your Chargebee instance.", - "examples": [ "airbyte-test" ], - "order": 1 - }, - "start_date": { - "type": "string", - "format": "date-time", - "title": "Start Date", - "description": "UTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2021-01-25T00:00:00Z" ], - "order": 2 - }, - "product_catalog": { - "type": "string", - "title": "Product Catalog", - "description": "Product Catalog version of your Chargebee site. Instructions on how to find your version you may find here under `API Version` section.", - "enum": [ "1.0", "2.0" ], - "order": 3 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "*.chargebee.com" ] - } - }, { - "sourceDefinitionId": "9b2d3607-7222-4709-9fa2-c2abdebbdd88", - "name": "Chargify", - "dockerRepository": "airbyte/source-chargify", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/chargify", - "icon": "chargify.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/chargify", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Chargify Spec", - "type": "object", - "required": [ "api_key", "domain" ], - "additionalProperties": false, - "properties": { - "api_key": { - "type": "string", - "description": "Chargify API Key.", - "airbyte_secret": true - }, - "domain": { - "type": "string", - "description": "Chargify domain. Normally this domain follows the following format companyname.chargify.com" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "b6604cbd-1b12-4c08-8767-e140d0fb0877", - "name": "Chartmogul", - "dockerRepository": "airbyte/source-chartmogul", - "dockerImageTag": "0.2.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/chartmogul", - "icon": "chartmogul.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/chartmogul", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Chartmogul Spec", - "type": "object", - "required": [ "api_key", "start_date", "interval" ], - "properties": { - "api_key": { - "type": "string", - "title": "API key", - "description": "Your Chartmogul API key. See the docs for info on how to obtain this.", - "airbyte_secret": true, - "order": 0 - }, - "start_date": { - "type": "string", - "title": "Start date", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. When feasible, any data before this date will not be replicated.", - "examples": [ "2017-01-25T00:00:00Z" ], - "order": 1, - "format": "date-time" - }, - "interval": { - "type": "string", - "title": "Interval", - "description": "Some APIs such as Metrics require intervals to cluster data.", - "enum": [ "day", "week", "month", "quarter" ], - "default": "month", - "order": 2 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "api.chartmogul.com" ] - } - }, { - "sourceDefinitionId": "bad83517-5e54-4a3d-9b53-63e85fbd4d7c", - "name": "ClickHouse", - "dockerRepository": "airbyte/source-clickhouse", - "dockerImageTag": "0.1.17", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/clickhouse", - "icon": "clickhouse.svg", - "sourceType": "database", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/clickhouse", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "ClickHouse Source Spec", - "type": "object", - "required": [ "host", "port", "database", "username" ], - "properties": { - "host": { - "description": "The host endpoint of the Clickhouse cluster.", - "title": "Host", - "type": "string", - "order": 0 - }, - "port": { - "description": "The port of the database.", - "title": "Port", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 8123, - "examples": [ "8123" ], - "order": 1 - }, - "database": { - "description": "The name of the database.", - "title": "Database", - "type": "string", - "examples": [ "default" ], - "order": 2 - }, - "username": { - "description": "The username which is used to access the database.", - "title": "Username", - "type": "string", - "order": 3 - }, - "password": { - "description": "The password associated with this username.", - "title": "Password", - "type": "string", - "airbyte_secret": true, - "order": 4 - }, - "jdbc_url_params": { - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (Eg. key1=value1&key2=value2&key3=value3). For more information read about JDBC URL parameters.", - "title": "JDBC URL Parameters (Advanced)", - "type": "string", - "order": 5 - }, - "ssl": { - "title": "SSL Connection", - "description": "Encrypt data using SSL.", - "type": "boolean", - "default": true, - "order": 6 - }, - "tunnel_method": { - "type": "object", - "title": "SSH Tunnel Method", - "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", - "oneOf": [ { - "title": "No Tunnel", - "required": [ "tunnel_method" ], - "properties": { - "tunnel_method": { - "description": "No ssh tunnel needed to connect to database", - "type": "string", - "const": "NO_TUNNEL", - "order": 0 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host.", - "type": "string", - "order": 3 - }, - "ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - }, { - "title": "Password Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host", - "type": "string", - "order": 3 - }, - "tunnel_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 4 - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "allowedHosts": { - "hosts": [ "${host}", "${tunnel_method.tunnel_host}" ] - } - }, { - "sourceDefinitionId": "311a7a27-3fb5-4f7e-8265-5e4afe258b66", - "name": "ClickUp", - "dockerRepository": "airbyte/source-clickup-api", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/click-up", - "icon": "clickup.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "ClickUp Api Spec", - "type": "object", - "required": [ "api_token" ], - "additionalProperties": true, - "properties": { - "api_token": { - "type": "string", - "description": "Every ClickUp API call required authentication. This field is your personal API token. See here.", - "airbyte_secret": true - }, - "team_id": { - "type": "string", - "description": "The ID of your team in ClickUp. Retrieve it from the `/team` of the ClickUp API. See here." - }, - "space_id": { - "type": "string", - "description": "The ID of your space in your workspace. Retrieve it from the `/team/{team_id}/space` of the ClickUp API. See here." - }, - "folder_id": { - "type": "string", - "description": "The ID of your folder in your space. Retrieve it from the `/space/{space_id}/folder` of the ClickUp API. See here." - }, - "list_id": { - "type": "string", - "description": "The ID of your list in your folder. Retrieve it from the `/folder/{folder_id}/list` of the ClickUp API. See here." - }, - "include_closed_tasks": { - "title": "Include Closed Tasks", - "type": "boolean", - "default": false, - "description": "Include or exclude closed tasks. By default, they are excluded. See here." - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "dfffecb7-9a13-43e9-acdc-b92af7997ca9", - "name": "Close.com", - "dockerRepository": "airbyte/source-close-com", - "dockerImageTag": "0.2.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/close-com", - "icon": "close.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/close-com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Close.com Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "description": "Close.com API key (usually starts with 'api_'; find yours here).", - "airbyte_secret": true - }, - "start_date": { - "type": "string", - "description": "The start date to sync data. Leave blank for full sync. Format: YYYY-MM-DD.", - "examples": [ "2021-01-01" ], - "default": "2021-01-01", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "format": "date-time" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "api.close.com" ] - } - }, { - "sourceDefinitionId": "9cdd4183-d0ba-40c3-aad3-6f46d4103974", - "name": "CoinGecko Coins", - "dockerRepository": "airbyte/source-coingecko-coins", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/coingecko-coins", - "icon": "coingeckocoins.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "CoinGecko Coins Spec", - "type": "object", - "required": [ "coin_id", "vs_currency", "days", "start_date" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "description": "API Key (for pro users)", - "airbyte_secret": true, - "order": 0 - }, - "coin_id": { - "type": "string", - "description": "CoinGecko coin ID (e.g. bitcoin). Can be retrieved from the\n`/coins/list` endpoint.\n", - "order": 1 - }, - "vs_currency": { - "type": "string", - "description": "The target currency of market data (e.g. usd, eur, jpy, etc.)\n", - "order": 2 - }, - "days": { - "type": "string", - "description": "The number of days of data for market chart.\n", - "enum": [ "1", "7", "14", "30", "90", "180", "365", "max" ], - "default": "30", - "order": 3 - }, - "start_date": { - "type": "string", - "description": "The start date for the historical data stream in dd-mm-yyyy format.\n", - "format": "date", - "pattern": "^[0-9]{2}-[0-9]{2}-[0-9]{4}$", - "order": 4 - }, - "end_date": { - "type": "string", - "description": "The end date for the historical data stream in dd-mm-yyyy format.\n", - "format": "date", - "pattern": "^[0-9]{2}-[0-9]{2}-[0-9]{4}$", - "order": 5 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "9fa5862c-da7c-11eb-8d19-0242ac130003", - "name": "Cockroachdb", - "dockerRepository": "airbyte/source-cockroachdb", - "dockerImageTag": "0.1.22", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/cockroachdb", - "icon": "cockroachdb.svg", - "sourceType": "database", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/cockroachdb", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Cockroach Source Spec", - "type": "object", - "required": [ "host", "port", "database", "username" ], - "properties": { - "host": { - "title": "Host", - "description": "Hostname of the database.", - "type": "string", - "order": 0 - }, - "port": { - "title": "Port", - "description": "Port of the database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 5432, - "examples": [ "5432" ], - "order": 1 - }, - "database": { - "title": "DB Name", - "description": "Name of the database.", - "type": "string", - "order": 2 - }, - "username": { - "title": "User", - "description": "Username to use to access the database.", - "type": "string", - "order": 3 - }, - "password": { - "title": "Password", - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 4 - }, - "jdbc_url_params": { - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (Eg. key1=value1&key2=value2&key3=value3). For more information read about JDBC URL parameters.", - "title": "JDBC URL Parameters (Advanced)", - "type": "string", - "order": 5 - }, - "ssl": { - "title": "Connect using SSL", - "description": "Encrypt client/server communications for increased security.", - "type": "boolean", - "default": false, - "order": 6 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "allowedHosts": { - "hosts": [ "${host}" ] - } - }, { - "sourceDefinitionId": "27f910fd-f832-4b2e-bcfd-6ab342e434d8", - "name": "Coda", - "dockerRepository": "airbyte/source-coda", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/coda", - "icon": "coda.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/coda", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Required attributes for hitting apis", - "type": "object", - "required": [ "auth_token" ], - "additionalProperties": true, - "properties": { - "auth_token": { - "title": "Authentication token", - "type": "string", - "description": "Bearer token", - "airbyte_secret": true, - "order": 0 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "919984ef-53a2-479b-8ffe-9c1ddb9fc3f3", - "name": "Coin API", - "dockerRepository": "airbyte/source-coin-api", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/coin-api", - "icon": "coinapi.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/coin-api", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Coin API Spec", - "type": "object", - "required": [ "api_key", "environment", "symbol_id", "period", "start_date" ], - "properties": { - "api_key": { - "type": "string", - "description": "API Key", - "airbyte_secret": true, - "order": 0 - }, - "environment": { - "type": "string", - "description": "The environment to use. Either sandbox or production.\n", - "enum": [ "sandbox", "production" ], - "default": "sandbox", - "order": 1 - }, - "symbol_id": { - "type": "string", - "description": "The symbol ID to use. See the documentation for a list.\nhttps://docs.coinapi.io/#list-all-symbols-get\n", - "order": 2 - }, - "period": { - "type": "string", - "description": "The period to use. See the documentation for a list. https://docs.coinapi.io/#list-all-periods-get", - "examples": [ "5SEC", "2MTH" ] - }, - "start_date": { - "type": "string", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}$", - "description": "The start date in ISO 8601 format.", - "examples": [ "2019-01-01T00:00:00" ] - }, - "end_date": { - "type": "string", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}$", - "description": "The end date in ISO 8601 format. If not supplied, data will be returned\nfrom the start date to the current time, or when the count of result\nelements reaches its limit.\n", - "examples": [ "2019-01-01T00:00:00" ] - }, - "limit": { - "type": "integer", - "description": "The maximum number of elements to return. If not supplied, the default\nis 100. For numbers larger than 100, each 100 items is counted as one\nrequest for pricing purposes. Maximum value is 100000.\n", - "minimum": 1, - "maximum": 100000, - "default": 100 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "239463f5-64bb-4d88-b4bd-18ce673fd572", - "name": "CoinMarketCap", - "dockerRepository": "airbyte/source-coinmarketcap", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/coinmarketcap", - "icon": "coinmarketcap.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/coinmarketcap", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Coinmarketcap Spec", - "type": "object", - "required": [ "api_key", "data_type" ], - "additionalProperties": true, - "properties": { - "api_key": { - "title": "API Key", - "type": "string", - "description": "Your API Key. See here. The token is case sensitive.", - "airbyte_secret": true - }, - "data_type": { - "title": "Data type", - "type": "string", - "enum": [ "latest", "historical" ], - "description": "/latest: Latest market ticker quotes and averages for cryptocurrencies and exchanges. /historical: Intervals of historic market data like OHLCV data or data for use in charting libraries. See here." - }, - "symbols": { - "title": "Symbol", - "type": "array", - "items": { - "type": "string" - }, - "description": "Cryptocurrency symbols. (only used for quotes stream)", - "minItems": 1, - "examples": [ "AVAX", "BTC" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "008b2e26-11a3-11ec-82a8-0242ac130003", - "name": "Commercetools", - "dockerRepository": "airbyte/source-commercetools", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/commercetools", - "icon": "commercetools.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/commercetools", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Commercetools Source CDK Specifications", - "type": "object", - "required": [ "region", "start_date", "host", "project_key", "client_id", "client_secret" ], - "additionalProperties": false, - "properties": { - "region": { - "type": "string", - "description": "The region of the platform.", - "examples": [ "us-central1", "australia-southeast1" ] - }, - "host": { - "type": "string", - "enum": [ "gcp", "aws" ], - "description": "The cloud provider your shop is hosted. See: https://docs.commercetools.com/api/authorization" - }, - "start_date": { - "type": "string", - "description": "The date you would like to replicate data. Format: YYYY-MM-DD.", - "examples": [ "2021-01-01" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" - }, - "project_key": { - "type": "string", - "description": "The project key" - }, - "client_id": { - "type": "string", - "description": "Id of API Client.", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "description": "The password of secret of API Client.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "4fd7565c-8b99-439b-80d0-2d965e1d958c", - "name": "ConfigCat", - "dockerRepository": "airbyte/source-configcat", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/configcat", - "icon": "configcat.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/configcat", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Configcat Spec", - "type": "object", - "required": [ "username", "password" ], - "additionalProperties": true, - "properties": { - "username": { - "title": "Username", - "type": "string", - "description": "Basic auth user name. See here." - }, - "password": { - "title": "Password", - "type": "string", - "description": "Basic auth password. See here.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "cf40a7f8-71f8-45ce-a7fa-fca053e4028c", - "name": "Confluence", - "dockerRepository": "airbyte/source-confluence", - "dockerImageTag": "0.1.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/confluence", - "icon": "confluence.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Confluence Spec", - "type": "object", - "required": [ "api_token", "domain_name", "email" ], - "additionalProperties": true, - "properties": { - "api_token": { - "title": "API Token", - "type": "string", - "description": "Please follow the Jira confluence for generating an API token: generating an API token.", - "airbyte_secret": true - }, - "domain_name": { - "title": "Domain name", - "type": "string", - "description": "Your Confluence domain name", - "examples": [ "example.atlassian.net" ] - }, - "email": { - "title": "Email", - "type": "string", - "description": "Your Confluence login email", - "examples": [ "abc@example.com" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "${subdomain}.atlassian.net" ] - } - }, { - "sourceDefinitionId": "be9ee02f-6efe-4970-979b-95f797a37188", - "name": "ConvertKit", - "dockerRepository": "airbyte/source-convertkit", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/convertkit", - "icon": "convertkit.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/convertkit", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Convertkit Spec", - "type": "object", - "required": [ "api_secret" ], - "additionalProperties": true, - "properties": { - "api_secret": { - "type": "string", - "description": "API Secret", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "f39208dc-7e1c-48b8-919b-5006360cc27f", - "name": "Commcare", - "dockerRepository": "airbyte/source-commcare", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/commcare", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Commcare Source Spec", - "type": "object", - "required": [ "api_key", "app_id", "start_date" ], - "properties": { - "api_key": { - "type": "string", - "title": "API Key", - "description": "Commcare API Key", - "airbyte_secret": true, - "order": 0 - }, - "project_space": { - "type": "string", - "title": "Project Space", - "description": "Project Space for commcare", - "order": 1 - }, - "app_id": { - "type": "string", - "title": "Application ID", - "description": "The Application ID we are interested in", - "airbyte_secret": true, - "order": 2 - }, - "start_date": { - "type": "string", - "title": "Start date for extracting records", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "default": "2022-10-01T00:00:00Z", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Only records after this date will be replicated.", - "order": 3 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "44f3002f-2df9-4f6d-b21c-02cd3b47d0dc", - "name": "Copper", - "dockerRepository": "airbyte/source-copper", - "dockerImageTag": "0.2.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/copper", - "icon": "copper.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/copper", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Copper Spec", - "type": "object", - "required": [ "api_key", "user_email" ], - "properties": { - "api_key": { - "type": "string", - "title": "API Key", - "description": "Copper API key", - "airbyte_secret": true - }, - "user_email": { - "type": "string", - "title": "User email", - "description": "user email used to login in to Copper" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "c332628c-f55c-4017-8222-378cfafda9b2", - "name": "Convex", - "dockerRepository": "airbyte/source-convex", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/convex", - "icon": "convex.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/convex", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Convex Source Spec", - "type": "object", - "required": [ "deployment_url", "access_key" ], - "properties": { - "deployment_url": { - "type": "string", - "title": "Deployment Url", - "examples": [ "https://murky-swan-635.convex.cloud", "https://cluttered-owl-337.convex.cloud" ] - }, - "access_key": { - "type": "string", - "title": "Access Key", - "description": "API access key used to retrieve data from Convex.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "0541b2cd-2367-4986-b5f1-b79ff55439e4", - "name": "Courier", - "dockerRepository": "airbyte/source-courier", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/courier", - "icon": "courier.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/courier", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Courier Source Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "description": "Courier API Key to retrieve your data.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "e71aae8a-5143-11ed-bdc3-0242ac120002", - "name": "Clockify", - "dockerRepository": "airbyte/source-clockify", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/clockify", - "icon": "clockify.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/clockify", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Clockify Spec", - "type": "object", - "required": [ "workspace_id", "api_key" ], - "additionalProperties": true, - "properties": { - "workspace_id": { - "title": "Workspace Id", - "description": "WorkSpace Id", - "type": "string" - }, - "api_key": { - "title": "API Key", - "description": "You can get your api access_key here This API is Case Sensitive.", - "type": "string", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "c47d6804-8b98-449f-970a-5ddb5cb5d7aa", - "name": "Customer.io", - "dockerRepository": "farosai/airbyte-customer-io-source", - "dockerImageTag": "0.1.23", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/customer-io", - "icon": "customer-io.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.faros.ai", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Customer.io Spec", - "type": "object", - "required": [ "app_api_key" ], - "additionalProperties": false, - "properties": { - "app_api_key": { - "type": "string", - "title": "Customer.io App API Key", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "1cfc30c7-82db-43f4-9fd7-ac1b42312cda", - "name": "Datadog", - "dockerRepository": "airbyte/source-datadog", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/datadog", - "icon": "datadog.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/datadog", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Datadog Source Spec", - "type": "object", - "required": [ "api_key", "application_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "title": "API Key", - "description": "Datadog API key", - "type": "string", - "airbyte_secret": true, - "order": 1 - }, - "application_key": { - "title": "Application Key", - "description": "Datadog application key", - "type": "string", - "airbyte_secret": true, - "order": 2 - }, - "query": { - "title": "Query", - "description": "The search query. This just applies to Incremental syncs. If empty, it'll collect all logs.", - "type": "string", - "order": 3 - }, - "max_records_per_request": { - "type": "integer", - "title": "Max records per requests", - "default": 5000, - "minimum": 1, - "maximum": 5000, - "description": "Maximum number of records to collect per request.", - "order": 4 - }, - "start_date": { - "title": "Start date", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated. This just applies to Incremental syncs.", - "type": "string", - "examples": [ "2022-10-01T00:00:00Z" ], - "order": 5 - }, - "end_date": { - "title": "End date", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Data after this date will not be replicated. An empty value will represent the current datetime for each execution. This just applies to Incremental syncs.", - "examples": [ "2022-10-01T00:00:00Z" ], - "type": "string", - "order": 6 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "8e1ae2d2-4790-44d3-9d83-75b3fc3940ff", - "name": "Datascope", - "dockerRepository": "airbyte/source-datascope", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/datascope", - "icon": "datascope.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/datascope", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Datascope Spec", - "type": "object", - "required": [ "api_key", "start_date" ], - "additionalProperties": true, - "properties": { - "start_date": { - "title": "Start Date", - "type": "string", - "description": "Start date for the data to be replicated", - "examples": [ "dd/mm/YYYY HH:MM" ], - "pattern": "^[0-9]{2}/[0-9]{2}/[0-9]{4} [0-9]{2}:[0-9]{2}$" - }, - "api_key": { - "title": "Authorization", - "type": "string", - "description": "API Key", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "cc88c43f-6f53-4e8a-8c4d-b284baaf9635", - "name": "Delighted", - "dockerRepository": "airbyte/source-delighted", - "dockerImageTag": "0.2.2", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/delighted", - "icon": "delighted.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Delighted Spec", - "type": "object", - "required": [ "since", "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "title": "Delighted API Key", - "type": "string", - "description": "A Delighted API key.", - "airbyte_secret": true, - "order": 0 - }, - "since": { - "title": "Date Since", - "type": "string", - "description": "The date from which you'd like to replicate the data", - "examples": [ "2022-05-30T04:50:23Z", "2022-05-30 04:50:23" ], - "pattern": "^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?Z?$", - "order": 1, - "format": "date-time" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "api.delighted.com" ] - } - }, { - "sourceDefinitionId": "0b5c867e-1b12-4d02-ab74-97b2184ff6d7", - "name": "Dixa", - "dockerRepository": "airbyte/source-dixa", - "dockerImageTag": "0.1.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/dixa", - "icon": "dixa.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/dixa", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Dixa Spec", - "type": "object", - "required": [ "api_token", "start_date" ], - "additionalProperties": false, - "properties": { - "api_token": { - "type": "string", - "description": "Dixa API token", - "airbyte_secret": true - }, - "start_date": { - "type": "string", - "description": "The connector pulls records updated from this date onwards.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "YYYY-MM-DD" ] - }, - "batch_size": { - "type": "integer", - "description": "Number of days to batch into one request. Max 31.", - "pattern": "^[0-9]{1,2}$", - "examples": [ 1, 31 ], - "default": 31 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "72d405a3-56d8-499f-a571-667c03406e43", - "name": "Dockerhub", - "dockerRepository": "airbyte/source-dockerhub", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/dockerhub", - "icon": "dockerhub.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/dockerhub", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Dockerhub Spec", - "type": "object", - "required": [ "docker_username" ], - "additionalProperties": false, - "properties": { - "docker_username": { - "type": "string", - "description": "Username of DockerHub person or organization (for https://hub.docker.com/v2/repositories/USERNAME/ API call)", - "pattern": "^[a-z0-9_\\-]+$", - "examples": [ "airbyte" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "d99e9ace-8621-46c2-9144-76ae4751d64b", - "name": "Dremio", - "dockerRepository": "airbyte/source-dremio", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/dremio", - "icon": "dremio.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/dremio", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Dremio Spec", - "type": "object", - "additionalProperties": true, - "required": [ "api_key", "base_url" ], - "properties": { - "api_key": { - "type": "string", - "description": "API Key that is generated when you authenticate to Dremio API", - "airbyte_secret": true - }, - "base_url": { - "type": "string", - "description": "URL of your Dremio instance", - "default": "https://app.dremio.cloud" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "445831eb-78db-4b1f-8f1f-0d96ad8739e2", - "name": "Drift", - "dockerRepository": "airbyte/source-drift", - "dockerImageTag": "0.2.6", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/drift", - "icon": "drift.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/drift", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Drift Spec", - "type": "object", - "required": [ ], - "additionalProperties": true, - "properties": { - "credentials": { - "title": "Authorization Method", - "type": "object", - "oneOf": [ { - "type": "object", - "title": "OAuth2.0", - "required": [ "client_id", "client_secret", "access_token", "refresh_token" ], - "properties": { - "credentials": { - "type": "string", - "const": "oauth2.0", - "order": 0 - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "The Client ID of your Drift developer application.", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "The Client Secret of your Drift developer application.", - "airbyte_secret": true - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "Access Token for making authenticated requests.", - "airbyte_secret": true - }, - "refresh_token": { - "type": "string", - "title": "Refresh Token", - "description": "Refresh Token to renew the expired Access Token.", - "default": "", - "airbyte_secret": true - } - } - }, { - "title": "Access Token", - "type": "object", - "required": [ "access_token" ], - "properties": { - "credentials": { - "type": "string", - "const": "access_token", - "order": 0 - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "Drift Access Token. See the docs for more information on how to generate this key.", - "airbyte_secret": true - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ "credentials", "0" ], - "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], - "oauthFlowOutputParameters": [ [ "access_token" ], [ "refresh_token" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "allowedHosts": { - "hosts": [ "driftapi.com" ] - } - }, { - "sourceDefinitionId": "1356e1d9-977f-4057-ad4b-65f25329cf61", - "name": "DV 360", - "dockerRepository": "airbyte/source-dv-360", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/dv-360", - "icon": "dv360.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Display & Video 360 Spec", - "type": "object", - "required": [ "credentials", "partner_id", "start_date" ], - "additionalProperties": true, - "properties": { - "credentials": { - "type": "object", - "description": "Oauth2 credentials", - "order": 0, - "required": [ "access_token", "refresh_token", "token_uri", "client_id", "client_secret" ], - "properties": { - "access_token": { - "type": "string", - "description": "Access token", - "airbyte_secret": true - }, - "refresh_token": { - "type": "string", - "description": "Refresh token", - "airbyte_secret": true - }, - "token_uri": { - "type": "string", - "description": "Token URI", - "airbyte_secret": true - }, - "client_id": { - "type": "string", - "description": "Client ID", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "description": "Client secret", - "airbyte_secret": true - } - } - }, - "partner_id": { - "type": "integer", - "description": "Partner ID", - "order": 1 - }, - "start_date": { - "type": "string", - "description": "UTC date and time in the format 2017-01-25. Any data before this date will not be replicated", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "order": 2 - }, - "end_date": { - "type": "string", - "description": "UTC date and time in the format 2017-01-25. Any data after this date will not be replicated.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "order": 3 - }, - "filters": { - "type": "array", - "description": "filters for the dimensions. each filter object had 2 keys: 'type' for the name of the dimension to be used as. and 'value' for the value of the filter", - "default": [ ], - "order": 4 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "50401137-8871-4c5a-abb7-1f5fda35545a", - "name": "DynamoDB", - "dockerRepository": "airbyte/source-dynamodb", - "dockerImageTag": "0.1.2", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/dynamodb", - "icon": "dynamodb.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/dynamodb", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Dynamodb Source Spec", - "type": "object", - "required": [ "access_key_id", "secret_access_key" ], - "additionalProperties": false, - "properties": { - "endpoint": { - "title": "Dynamodb Endpoint", - "type": "string", - "default": "", - "description": "the URL of the Dynamodb database", - "examples": [ "https://{aws_dynamo_db_url}.com" ] - }, - "region": { - "title": "Dynamodb Region", - "type": "string", - "default": "", - "description": "The region of the Dynamodb database", - "enum": [ "", "us-east-1", "us-east-2", "us-west-1", "us-west-2", "af-south-1", "ap-east-1", "ap-south-1", "ap-northeast-1", "ap-northeast-2", "ap-northeast-3", "ap-southeast-1", "ap-southeast-2", "ca-central-1", "cn-north-1", "cn-northwest-1", "eu-central-1", "eu-north-1", "eu-south-1", "eu-west-1", "eu-west-2", "eu-west-3", "sa-east-1", "me-south-1", "us-gov-east-1", "us-gov-west-1" ] - }, - "access_key_id": { - "title": "Dynamodb Key Id", - "type": "string", - "description": "The access key id to access Dynamodb. Airbyte requires read permissions to the database", - "airbyte_secret": true, - "examples": [ "A012345678910EXAMPLE" ] - }, - "secret_access_key": { - "title": "Dynamodb Access Key", - "type": "string", - "description": "The corresponding secret to the access key id.", - "airbyte_secret": true, - "examples": [ "a012345678910ABCDEFGH/AbCdEfGhEXAMPLEKEY" ] - }, - "reserved_attribute_names": { - "title": "Reserved attribute names", - "type": "string", - "description": "Comma separated reserved attribute names present in your tables", - "airbyte_secret": true, - "examples": [ "name, field_name, field-name" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "d53f9084-fa6b-4a5a-976c-5b8392f4ad8a", - "name": "E2E Testing", - "dockerRepository": "airbyte/source-e2e-test", - "dockerImageTag": "2.1.4", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/e2e-test", - "icon": "airbyte.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/e2e-test", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "E2E Test Source Spec", - "additionalProperties": true, - "type": "object", - "oneOf": [ { - "title": "Legacy Infinite Feed", - "description": "This mode is used for Platform acceptance tests. The catalog has one \"data\" stream, which has one string field \"column1\". This mode will emit messages infinitely.", - "required": [ "type", "max_records" ], - "type": "object", - "additionalProperties": true, - "properties": { - "type": { - "type": "string", - "const": "INFINITE_FEED", - "default": "INFINITE_FEED" - }, - "max_records": { - "title": "Max Records", - "description": "Number of records to emit. If not set, defaults to infinity.", - "type": "integer" - }, - "message_interval": { - "title": "Message Interval", - "description": "Interval between messages in ms.", - "type": "integer" - } - } - }, { - "title": "Legacy Exception After N", - "description": "This mode is used for Platform acceptance tests. The catalog has one \"data\" stream, which has one string field \"column1\". This mode will throw an exception after N messages.", - "required": [ "type", "throw_after_n_records" ], - "type": "object", - "additionalProperties": true, - "properties": { - "type": { - "type": "string", - "const": "EXCEPTION_AFTER_N", - "default": "EXCEPTION_AFTER_N" - }, - "throw_after_n_records": { - "title": "Throw After N Records", - "description": "Number of records to emit before throwing an exception. Min 1.", - "type": "integer", - "min": 1 - } - } - }, { - "title": "Continuous Feed", - "type": "object", - "required": [ "type", "max_messages", "mock_catalog" ], - "additionalProperties": true, - "properties": { - "type": { - "type": "string", - "const": "CONTINUOUS_FEED", - "default": "CONTINUOUS_FEED", - "order": 10 - }, - "max_messages": { - "title": "Max Records", - "description": "Number of records to emit per stream. Min 1. Max 100 billion.", - "type": "integer", - "default": 100, - "min": 1, - "max": 100000000000, - "order": 20 - }, - "seed": { - "title": "Random Seed", - "description": "When the seed is unspecified, the current time millis will be used as the seed. Range: [0, 1000000].", - "type": "integer", - "default": 0, - "examples": [ 42 ], - "min": 0, - "max": 1000000, - "order": 30 - }, - "message_interval_ms": { - "title": "Message Interval (ms)", - "description": "Interval between messages in ms. Min 0 ms. Max 60000 ms (1 minute).", - "type": "integer", - "min": 0, - "max": 60000, - "default": 0, - "order": 40 - }, - "mock_catalog": { - "title": "Mock Catalog", - "type": "object", - "order": 50, - "oneOf": [ { - "title": "Single Schema", - "description": "A catalog with one or multiple streams that share the same schema.", - "type": "object", - "required": [ "type", "stream_name", "stream_schema" ], - "properties": { - "type": { - "type": "string", - "const": "SINGLE_STREAM", - "default": "SINGLE_STREAM" - }, - "stream_name": { - "title": "Stream Name", - "description": "Name of the data stream.", - "type": "string", - "default": "data_stream" - }, - "stream_schema": { - "title": "Stream Schema", - "description": "A Json schema for the stream. The schema should be compatible with draft-07. See this doc for examples.", - "type": "string", - "default": "{ \"type\": \"object\", \"properties\": { \"column1\": { \"type\": \"string\" } } }" - }, - "stream_duplication": { - "title": "Duplicate the stream N times", - "description": "Duplicate the stream for easy load testing. Each stream name will have a number suffix. For example, if the stream name is \"ds\", the duplicated streams will be \"ds_0\", \"ds_1\", etc.", - "type": "integer", - "default": 1, - "min": 1, - "max": 10000 - } - } - }, { - "title": "Multi Schema", - "type": "object", - "description": "A catalog with multiple data streams, each with a different schema.", - "required": [ "type", "stream_schemas" ], - "properties": { - "type": { - "type": "string", - "const": "MULTI_STREAM", - "default": "MULTI_STREAM" - }, - "stream_schemas": { - "title": "Streams and Schemas", - "description": "A Json object specifying multiple data streams and their schemas. Each key in this object is one stream name. Each value is the schema for that stream. The schema should be compatible with draft-07. See this doc for examples.", - "type": "string", - "default": "{ \"stream1\": { \"type\": \"object\", \"properties\": { \"field1\": { \"type\": \"string\" } } }, \"stream2\": { \"type\": \"object\", \"properties\": { \"field1\": { \"type\": \"boolean\" } } } }" - } - } - } ] - } - } - }, { - "title": "Benchmark", - "description": "This mode is used for speed benchmarks. Specifically, it should be used for testing the throughput of the platform and destination. It optimizes for emitting records very quickly, so that it should never be the bottleneck.", - "type": "object", - "required": [ "type", "schema", "terminationCondition" ], - "additionalProperties": true, - "properties": { - "type": { - "type": "string", - "const": "BENCHMARK", - "default": "BENCHMARK" - }, - "schema": { - "title": "Schema", - "description": "schema of the data in the benchmark.", - "type": "string", - "enum": [ "FIVE_STRING_COLUMNS" ] - }, - "terminationCondition": { - "title": "Termination Condition", - "description": "when does the benchmark stop?", - "type": "object", - "oneOf": [ { - "title": "max records", - "type": "object", - "required": [ "type", "max" ], - "properties": { - "type": { - "type": "string", - "const": "MAX_RECORDS", - "default": "MAX_RECORDS" - }, - "max": { - "type": "number" - } - } - } ] - } - } - } ] - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "protocol_version": "0.2.1" - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "46b25e70-c980-4590-a811-8deaf50ee09f", - "name": "EmailOctopus", - "dockerRepository": "airbyte/source-emailoctopus", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/emailoctopus", - "icon": "emailoctopus.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/emailoctopus", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "EmailOctopus Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "title": "EmailOctopus API key", - "description": "EmailOctopus API Key. See the docs for information on how to generate this key.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "e2b40e36-aa0e-4bed-b41b-bcea6fa348b1", - "name": "Exchange Rates Api", - "dockerRepository": "airbyte/source-exchange-rates", - "dockerImageTag": "1.2.8", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/exchangeratesapi", - "icon": "exchangeratesapi.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/exchangeratesapi", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "exchangeratesapi.io Source Spec", - "type": "object", - "required": [ "start_date", "access_key" ], - "additionalProperties": true, - "properties": { - "start_date": { - "type": "string", - "description": "Start getting data from that date.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "YYYY-MM-DD" ], - "format": "date" - }, - "access_key": { - "type": "string", - "description": "Your API Key. See here. The key is case sensitive.", - "airbyte_secret": true - }, - "base": { - "type": "string", - "description": "ISO reference currency. See here. Free plan doesn't support Source Currency Switching, default base currency is EUR", - "examples": [ "EUR", "USD" ] - }, - "ignore_weekends": { - "type": "boolean", - "description": "Ignore weekends? (Exchanges don't run on weekends)", - "default": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "allowedHosts": { - "hosts": [ "${subdomain}.apilayer.com", "apilayer.com" ] - } - }, { - "sourceDefinitionId": "6babfc42-c734-4ef6-a817-6eca15f0f9b7", - "name": "Everhour", - "dockerRepository": "airbyte/source-everhour", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/everhour", - "icon": "everhour.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/everhour", - "connectionSpecification": { - "title": "Everhour Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "title": "API Key", - "description": "Everhour API Key. See the docs for information on how to generate this key.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "allowedHosts": { - "hosts": [ "api.everhour.com" ] - } - }, { - "sourceDefinitionId": "e7778cfc-e97c-4458-9ecb-b4f2bba8946c", - "name": "Facebook Marketing", - "dockerRepository": "airbyte/source-facebook-marketing", - "dockerImageTag": "0.3.4", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/facebook-marketing", - "icon": "facebook.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/facebook-marketing", - "changelogUrl": "https://docs.airbyte.com/integrations/sources/facebook-marketing", - "connectionSpecification": { - "title": "Source Facebook Marketing", - "type": "object", - "properties": { - "account_id": { - "title": "Account ID", - "description": "The Facebook Ad account ID to use when pulling data from the Facebook Marketing API. Open your Meta Ads Manager. The Ad account ID number is in the account dropdown menu or in your browser's address bar. See the docs for more information.", - "order": 0, - "examples": [ "111111111111111" ], - "type": "string" - }, - "start_date": { - "title": "Start Date", - "description": "The date from which you'd like to replicate data for all incremental streams, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", - "order": 1, - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2017-01-25T00:00:00Z" ], - "type": "string", - "format": "date-time" - }, - "end_date": { - "title": "End Date", - "description": "The date until which you'd like to replicate data for all incremental streams, in the format YYYY-MM-DDT00:00:00Z. All data generated between the start date and this end date will be replicated. Not setting this option will result in always syncing the latest data.", - "order": 2, - "pattern": "^$|^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2017-01-26T00:00:00Z" ], - "type": "string" - }, - "access_token": { - "title": "Access Token", - "description": "The value of the generated access token. From your App’s Dashboard, click on \"Marketing API\" then \"Tools\". Select permissions ads_management, ads_read, read_insights, business_management. Then click on \"Get token\". See the docs for more information.", - "order": 3, - "airbyte_secret": true, - "type": "string" - }, - "include_deleted": { - "title": "Include Deleted Campaigns, Ads, and AdSets", - "description": "Set to active if you want to include data from deleted Campaigns, Ads, and AdSets.", - "default": false, - "order": 4, - "type": "boolean" - }, - "fetch_thumbnail_images": { - "title": "Fetch Thumbnail Images from Ad Creative", - "description": "Set to active if you want to fetch the thumbnail_url and store the result in thumbnail_data_url for each Ad Creative.", - "default": false, - "order": 5, - "type": "boolean" - }, - "custom_insights": { - "title": "Custom Insights", - "description": "A list which contains ad statistics entries, each entry must have a name and can contains fields, breakdowns or action_breakdowns. Click on \"add\" to fill this field.", - "order": 6, - "type": "array", - "items": { - "title": "InsightConfig", - "description": "Config for custom insights", - "type": "object", - "properties": { - "name": { - "title": "Name", - "description": "The name value of insight", - "type": "string" - }, - "level": { - "title": "Level", - "description": "Chosen level for API", - "default": "ad", - "enum": [ "ad", "adset", "campaign", "account" ], - "type": "string" - }, - "fields": { - "title": "Fields", - "description": "A list of chosen fields for fields parameter", - "default": [ ], - "type": "array", - "items": { - "title": "ValidEnums", - "description": "Generic enumeration.\n\nDerive from this class to define new enumerations.", - "enum": [ "account_currency", "account_id", "account_name", "action_values", "actions", "ad_bid_value", "ad_click_actions", "ad_id", "ad_impression_actions", "ad_name", "adset_bid_value", "adset_end", "adset_id", "adset_name", "adset_start", "age_targeting", "attribution_setting", "auction_bid", "auction_competitiveness", "auction_max_competitor_bid", "buying_type", "campaign_id", "campaign_name", "canvas_avg_view_percent", "canvas_avg_view_time", "catalog_segment_actions", "catalog_segment_value", "catalog_segment_value_mobile_purchase_roas", "catalog_segment_value_omni_purchase_roas", "catalog_segment_value_website_purchase_roas", "clicks", "conversion_rate_ranking", "conversion_values", "conversions", "converted_product_quantity", "converted_product_value", "cost_per_15_sec_video_view", "cost_per_2_sec_continuous_video_view", "cost_per_action_type", "cost_per_ad_click", "cost_per_conversion", "cost_per_dda_countby_convs", "cost_per_estimated_ad_recallers", "cost_per_inline_link_click", "cost_per_inline_post_engagement", "cost_per_one_thousand_ad_impression", "cost_per_outbound_click", "cost_per_thruplay", "cost_per_unique_action_type", "cost_per_unique_click", "cost_per_unique_conversion", "cost_per_unique_inline_link_click", "cost_per_unique_outbound_click", "cpc", "cpm", "cpp", "created_time", "ctr", "date_start", "date_stop", "dda_countby_convs", "dda_results", "engagement_rate_ranking", "estimated_ad_recall_rate", "estimated_ad_recall_rate_lower_bound", "estimated_ad_recall_rate_upper_bound", "estimated_ad_recallers", "estimated_ad_recallers_lower_bound", "estimated_ad_recallers_upper_bound", "frequency", "full_view_impressions", "full_view_reach", "gender_targeting", "impressions", "inline_link_click_ctr", "inline_link_clicks", "inline_post_engagement", "instant_experience_clicks_to_open", "instant_experience_clicks_to_start", "instant_experience_outbound_clicks", "interactive_component_tap", "labels", "location", "mobile_app_purchase_roas", "objective", "optimization_goal", "outbound_clicks", "outbound_clicks_ctr", "place_page_name", "purchase_roas", "qualifying_question_qualify_answer_rate", "quality_ranking", "quality_score_ectr", "quality_score_ecvr", "quality_score_organic", "reach", "social_spend", "spend", "total_postbacks", "total_postbacks_detailed", "unique_actions", "unique_clicks", "unique_conversions", "unique_ctr", "unique_inline_link_click_ctr", "unique_inline_link_clicks", "unique_link_clicks_ctr", "unique_outbound_clicks", "unique_outbound_clicks_ctr", "unique_video_continuous_2_sec_watched_actions", "unique_video_view_15_sec", "updated_time", "video_15_sec_watched_actions", "video_30_sec_watched_actions", "video_avg_time_watched_actions", "video_continuous_2_sec_watched_actions", "video_p100_watched_actions", "video_p25_watched_actions", "video_p50_watched_actions", "video_p75_watched_actions", "video_p95_watched_actions", "video_play_actions", "video_play_curve_actions", "video_play_retention_0_to_15s_actions", "video_play_retention_20_to_60s_actions", "video_play_retention_graph_actions", "video_thruplay_watched_actions", "video_time_watched_actions", "website_ctr", "website_purchase_roas", "wish_bid" ] - } - }, - "breakdowns": { - "title": "Breakdowns", - "description": "A list of chosen breakdowns for breakdowns", - "default": [ ], - "type": "array", - "items": { - "title": "ValidBreakdowns", - "description": "Generic enumeration.\n\nDerive from this class to define new enumerations.", - "enum": [ "ad_format_asset", "age", "app_id", "body_asset", "call_to_action_asset", "country", "description_asset", "device_platform", "dma", "frequency_value", "gender", "hourly_stats_aggregated_by_advertiser_time_zone", "hourly_stats_aggregated_by_audience_time_zone", "image_asset", "impression_device", "is_conversion_id_modeled", "link_url_asset", "mmm", "place_page_id", "platform_position", "product_id", "publisher_platform", "region", "skan_campaign_id", "skan_conversion_id", "title_asset", "video_asset" ] - } - }, - "action_breakdowns": { - "title": "Action Breakdowns", - "description": "A list of chosen action_breakdowns for action_breakdowns", - "default": [ ], - "type": "array", - "items": { - "title": "ValidActionBreakdowns", - "description": "Generic enumeration.\n\nDerive from this class to define new enumerations.", - "enum": [ "action_canvas_component_name", "action_carousel_card_id", "action_carousel_card_name", "action_destination", "action_device", "action_reaction", "action_target_id", "action_type", "action_video_sound", "action_video_type" ] - } - }, - "time_increment": { - "title": "Time Increment", - "description": "Time window in days by which to aggregate statistics. The sync will be chunked into N day intervals, where N is the number of days you specified. For example, if you set this value to 7, then all statistics will be reported as 7-day aggregates by starting from the start_date. If the start and end dates are October 1st and October 30th, then the connector will output 5 records: 01 - 06, 07 - 13, 14 - 20, 21 - 27, and 28 - 30 (3 days only).", - "default": 1, - "exclusiveMaximum": 90, - "exclusiveMinimum": 0, - "type": "integer" - }, - "start_date": { - "title": "Start Date", - "description": "The date from which you'd like to replicate data for this stream, in the format YYYY-MM-DDT00:00:00Z.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2017-01-25T00:00:00Z" ], - "type": "string", - "format": "date-time" - }, - "end_date": { - "title": "End Date", - "description": "The date until which you'd like to replicate data for this stream, in the format YYYY-MM-DDT00:00:00Z. All data generated between the start date and this end date will be replicated. Not setting this option will result in always syncing the latest data.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2017-01-26T00:00:00Z" ], - "type": "string", - "format": "date-time" - }, - "insights_lookback_window": { - "title": "Custom Insights Lookback Window", - "description": "The attribution window", - "default": 28, - "maximum": 28, - "mininum": 1, - "exclusiveMinimum": 0, - "type": "integer" - } - }, - "required": [ "name" ] - } - }, - "page_size": { - "title": "Page Size of Requests", - "description": "Page size used when sending requests to Facebook API to specify number of records per page when response has pagination. Most users do not need to set this field unless they specifically need to tune the connector to address specific issues or use cases.", - "default": 100, - "order": 7, - "exclusiveMinimum": 0, - "type": "integer" - }, - "insights_lookback_window": { - "title": "Insights Lookback Window", - "description": "The attribution window. Facebook freezes insight data 28 days after it was generated, which means that all data from the past 28 days may have changed since we last emitted it, so you can retrieve refreshed insights from the past by setting this parameter. If you set a custom lookback window value in Facebook account, please provide the same value here.", - "default": 28, - "order": 8, - "maximum": 28, - "mininum": 1, - "exclusiveMinimum": 0, - "type": "integer" - }, - "max_batch_size": { - "title": "Maximum size of Batched Requests", - "description": "Maximum batch size used when sending batch requests to Facebook API. Most users do not need to set this field unless they specifically need to tune the connector to address specific issues or use cases.", - "default": 50, - "order": 9, - "exclusiveMinimum": 0, - "type": "integer" - }, - "action_breakdowns_allow_empty": { - "title": "Action Breakdowns Allow Empty", - "description": "Allows action_breakdowns to be an empty list", - "default": true, - "airbyte_hidden": true, - "type": "boolean" - } - }, - "required": [ "account_id", "start_date", "access_token" ] - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "append" ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ ], - "oauthFlowInitParameters": [ ], - "oauthFlowOutputParameters": [ [ "access_token" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "graph.facebook.com" ] - } - }, { - "sourceDefinitionId": "010eb12f-837b-4685-892d-0a39f76a98f5", - "name": "Facebook Pages", - "dockerRepository": "airbyte/source-facebook-pages", - "dockerImageTag": "0.2.4", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/facebook-pages", - "icon": "facebook.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/facebook-pages", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Facebook Pages Spec", - "type": "object", - "required": [ "access_token", "page_id" ], - "additionalProperties": true, - "properties": { - "access_token": { - "type": "string", - "title": "Page Access Token", - "description": "Facebook Page Access Token", - "airbyte_secret": true, - "order": 0 - }, - "page_id": { - "type": "string", - "title": "Page ID", - "description": "Page ID", - "order": 1 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "graph.facebook.com" ] - } - }, { - "sourceDefinitionId": "dfd88b22-b603-4c3d-aad7-3701784586b1", - "name": "Sample Data (Faker)", - "dockerRepository": "airbyte/source-faker", - "dockerImageTag": "2.0.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/faker", - "icon": "faker.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/faker", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Faker Source Spec", - "type": "object", - "required": [ "count" ], - "additionalProperties": true, - "properties": { - "count": { - "title": "Count", - "description": "How many users should be generated in total. This setting does not apply to the purchases or products stream.", - "type": "integer", - "minimum": 1, - "default": 1000, - "order": 0 - }, - "seed": { - "title": "Seed", - "description": "Manually control the faker random seed to return the same values on subsequent runs (leave -1 for random)", - "type": "integer", - "default": -1, - "order": 1 - }, - "records_per_sync": { - "title": "Records Per Sync", - "description": "How many fake records will be returned for each sync, for each stream? By default, it will take 2 syncs to create the requested 1000 records.", - "type": "integer", - "minimum": 1, - "default": 500, - "order": 2 - }, - "records_per_slice": { - "title": "Records Per Stream Slice", - "description": "How many fake records will be in each page (stream slice), before a state message is emitted?", - "type": "integer", - "minimum": 1, - "default": 1000, - "order": 3 - }, - "parallelism": { - "title": "Parallelism", - "description": "How many parallel workers should we use to generate fake data? Choose a value equal to the number of CPUs you will allocate to this source.", - "type": "integer", - "minimum": 1, - "default": 4, - "order": 4 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "resourceRequirements": { - "jobSpecific": [ { - "jobType": "sync", - "resourceRequirements": { - "cpu_request": "1.0", - "cpu_limit": "4.0" - } - } ] - }, - "allowedHosts": { - "hosts": [ ] - }, - "suggestedStreams": { - "streams": [ "users", "products", "purchases" ] - } - }, { - "sourceDefinitionId": "eb3e9c1c-0467-4eb7-a172-5265e04ccd0a", - "name": "Fastbill", - "dockerRepository": "airbyte/source-fastbill", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/fastbill", - "icon": "fastbill.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/fastbill", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Fastbill Spec", - "type": "object", - "required": [ "username", "api_key" ], - "properties": { - "username": { - "title": "Username", - "type": "string", - "description": "Username for Fastbill account" - }, - "api_key": { - "title": "API Key", - "type": "string", - "description": "Fastbill API key", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "3825db3e-c94b-42ac-bd53-b5a9507ace2b", - "name": "Fauna", - "dockerRepository": "airbyte/source-fauna", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/fauna", - "icon": "fauna.svg", - "sourceType": "database", - "spec": { - "documentationUrl": "https://github.com/fauna/airbyte/blob/source-fauna/docs/integrations/sources/fauna.md", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Fauna Spec", - "type": "object", - "required": [ "domain", "port", "scheme", "secret" ], - "additionalProperties": true, - "properties": { - "domain": { - "order": 0, - "type": "string", - "title": "Domain", - "description": "Domain of Fauna to query. Defaults db.fauna.com. See the docs.", - "default": "db.fauna.com" - }, - "port": { - "order": 1, - "type": "integer", - "title": "Port", - "description": "Endpoint port.", - "default": 443 - }, - "scheme": { - "order": 2, - "type": "string", - "title": "Scheme", - "description": "URL scheme.", - "default": "https" - }, - "secret": { - "order": 3, - "type": "string", - "title": "Fauna Secret", - "description": "Fauna secret, used when authenticating with the database.", - "airbyte_secret": true - }, - "collection": { - "order": 5, - "type": "object", - "title": "Collection", - "description": "Settings for the Fauna Collection.", - "required": [ "page_size", "deletions" ], - "properties": { - "page_size": { - "order": 4, - "type": "integer", - "title": "Page Size", - "default": 64, - "description": "The page size used when reading documents from the database. The larger the page size, the faster the connector processes documents. However, if a page is too large, the connector may fail.
    \nChoose your page size based on how large the documents are.
    \nSee the docs." - }, - "deletions": { - "order": 5, - "type": "object", - "title": "Deletion Mode", - "description": "This only applies to incremental syncs.
    \nEnabling deletion mode informs your destination of deleted documents.
    \nDisabled - Leave this feature disabled, and ignore deleted documents.
    \nEnabled - Enables this feature. When a document is deleted, the connector exports a record with a \"deleted at\" column containing the time that the document was deleted.", - "oneOf": [ { - "title": "Disabled", - "type": "object", - "order": 0, - "required": [ "deletion_mode" ], - "properties": { - "deletion_mode": { - "type": "string", - "const": "ignore" - } - } - }, { - "title": "Enabled", - "type": "object", - "order": 1, - "required": [ "deletion_mode", "column" ], - "properties": { - "deletion_mode": { - "type": "string", - "const": "deleted_field" - }, - "column": { - "type": "string", - "title": "Deleted At Column", - "description": "Name of the \"deleted at\" column.", - "default": "deleted_at" - } - } - } ] - } - } - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "778daa7c-feaf-4db6-96f3-70fd645acc77", - "name": "File (CSV, JSON, Excel, Feather, Parquet)", - "dockerRepository": "airbyte/source-file", - "dockerImageTag": "0.3.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/file", - "icon": "file.svg", - "sourceType": "file", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/file", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "File Source Spec", - "type": "object", - "additionalProperties": true, - "required": [ "dataset_name", "format", "url", "provider" ], - "properties": { - "dataset_name": { - "type": "string", - "title": "Dataset Name", - "description": "The Name of the final table to replicate this file into (should include letters, numbers dash and underscores only)." - }, - "format": { - "type": "string", - "enum": [ "csv", "json", "jsonl", "excel", "excel_binary", "feather", "parquet", "yaml" ], - "default": "csv", - "title": "File Format", - "description": "The Format of the file which should be replicated (Warning: some formats may be experimental, please refer to the docs)." - }, - "reader_options": { - "type": "string", - "title": "Reader Options", - "description": "This should be a string in JSON format. It depends on the chosen file format to provide additional options and tune its behavior.", - "examples": [ "{}", "{\"sep\": \" \"}", "{\"sep\": \"\t\", \"header\": 0, \"names\": [\"column1\", \"column2\"] }" ] - }, - "url": { - "type": "string", - "title": "URL", - "description": "The URL path to access the file which should be replicated.", - "examples": [ "https://storage.googleapis.com/covid19-open-data/v2/latest/epidemiology.csv", "gs://my-google-bucket/data.csv", "s3://gdelt-open-data/events/20190914.export.csv" ] - }, - "provider": { - "type": "object", - "title": "Storage Provider", - "description": "The storage Provider or Location of the file(s) which should be replicated.", - "default": "Public Web", - "oneOf": [ { - "title": "HTTPS: Public Web", - "required": [ "storage" ], - "properties": { - "storage": { - "type": "string", - "const": "HTTPS" - }, - "user_agent": { - "type": "boolean", - "title": "User-Agent", - "default": false, - "description": "Add User-Agent to request" - } - } - }, { - "title": "GCS: Google Cloud Storage", - "required": [ "storage" ], - "properties": { - "storage": { - "type": "string", - "title": "Storage", - "const": "GCS" - }, - "service_account_json": { - "type": "string", - "title": "Service Account JSON", - "description": "In order to access private Buckets stored on Google Cloud, this connector would need a service account json credentials with the proper permissions as described here. Please generate the credentials.json file and copy/paste its content to this field (expecting JSON formats). If accessing publicly available data, this field is not necessary." - } - } - }, { - "title": "S3: Amazon Web Services", - "required": [ "storage" ], - "properties": { - "storage": { - "type": "string", - "title": "Storage", - "const": "S3" - }, - "aws_access_key_id": { - "type": "string", - "title": "AWS Access Key ID", - "description": "In order to access private Buckets stored on AWS S3, this connector would need credentials with the proper permissions. If accessing publicly available data, this field is not necessary." - }, - "aws_secret_access_key": { - "type": "string", - "title": "AWS Secret Access Key", - "description": "In order to access private Buckets stored on AWS S3, this connector would need credentials with the proper permissions. If accessing publicly available data, this field is not necessary.", - "airbyte_secret": true - } - } - }, { - "title": "AzBlob: Azure Blob Storage", - "required": [ "storage", "storage_account" ], - "properties": { - "storage": { - "type": "string", - "title": "Storage", - "const": "AzBlob" - }, - "storage_account": { - "type": "string", - "title": "Storage Account", - "description": "The globally unique name of the storage account that the desired blob sits within. See here for more details." - }, - "sas_token": { - "type": "string", - "title": "SAS Token", - "description": "To access Azure Blob Storage, this connector would need credentials with the proper permissions. One option is a SAS (Shared Access Signature) token. If accessing publicly available data, this field is not necessary.", - "airbyte_secret": true - }, - "shared_key": { - "type": "string", - "title": "Shared Key", - "description": "To access Azure Blob Storage, this connector would need credentials with the proper permissions. One option is a storage account shared key (aka account key or access key). If accessing publicly available data, this field is not necessary.", - "airbyte_secret": true - } - } - }, { - "title": "SSH: Secure Shell", - "required": [ "storage", "user", "host" ], - "properties": { - "storage": { - "type": "string", - "title": "Storage", - "const": "SSH" - }, - "user": { - "type": "string", - "title": "User", - "description": "" - }, - "password": { - "type": "string", - "title": "Password", - "description": "", - "airbyte_secret": true - }, - "host": { - "type": "string", - "title": "Host", - "description": "" - }, - "port": { - "type": "string", - "title": "Port", - "default": "22", - "description": "" - } - } - }, { - "title": "SCP: Secure copy protocol", - "required": [ "storage", "user", "host" ], - "properties": { - "storage": { - "type": "string", - "title": "Storage", - "const": "SCP" - }, - "user": { - "type": "string", - "title": "User", - "description": "" - }, - "password": { - "type": "string", - "title": "Password", - "description": "", - "airbyte_secret": true - }, - "host": { - "type": "string", - "title": "Host", - "description": "" - }, - "port": { - "type": "string", - "title": "Port", - "default": "22", - "description": "" - } - } - }, { - "title": "SFTP: Secure File Transfer Protocol", - "required": [ "storage", "user", "host" ], - "properties": { - "storage": { - "type": "string", - "title": "Storage", - "const": "SFTP" - }, - "user": { - "type": "string", - "title": "User", - "description": "" - }, - "password": { - "type": "string", - "title": "Password", - "description": "", - "airbyte_secret": true - }, - "host": { - "type": "string", - "title": "Host", - "description": "" - }, - "port": { - "type": "string", - "title": "Port", - "default": "22", - "description": "" - } - } - }, { - "title": "Local Filesystem (limited)", - "required": [ "storage" ], - "properties": { - "storage": { - "type": "string", - "title": "Storage", - "description": "WARNING: Note that the local storage URL available for reading must start with the local mount \"/local/\" at the moment until we implement more advanced docker mounting options.", - "const": "local" - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "*" ] - } - }, { - "sourceDefinitionId": "acb5f973-a565-441e-992f-4946f3e65662", - "name": "Firebase Realtime Database", - "dockerRepository": "airbyte/source-firebase-realtime-database", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.io/integrations/sources/firebase-realtime-database", - "sourceType": "database", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/firebase-realtime-database", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Firebase Realtime Database Spec", - "type": "object", - "required": [ "database_name", "google_application_credentials" ], - "properties": { - "database_name": { - "title": "Database Name", - "type": "string", - "description": "Database name (This will be part of the url pointing to the database, https://.firebaseio.com/)" - }, - "google_application_credentials": { - "title": "Service Account Key JSON", - "type": "string", - "description": "Cert credentials in JSON format of Service Account with Firebase Realtime Database Viewer role. (see, https://firebase.google.com/docs/projects/iam/roles-predefined-product#realtime-database)", - "airbyte_secret": true - }, - "path": { - "title": "Node Path", - "type": "string", - "description": "Path to a node in the Firebase realtime database" - }, - "buffer_size": { - "title": "Buffer Size", - "type": "number", - "description": "Number of records to fetch at once" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "supported_sync_modes": [ "full_refresh" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "allowedHosts": { - "hosts": [ "*" ] - } - }, { - "sourceDefinitionId": "8a5d48f6-03bb-4038-a942-a8d3f175cca3", - "name": "Freshcaller", - "dockerRepository": "airbyte/source-freshcaller", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/freshcaller", - "icon": "freshcaller.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/freshcaller", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Freshcaller Spec", - "type": "object", - "required": [ "domain", "api_key", "start_date" ], - "additionalProperties": true, - "properties": { - "domain": { - "type": "string", - "title": "Domain for Freshcaller account", - "description": "Used to construct Base URL for the Freshcaller APIs", - "examples": [ "snaptravel" ] - }, - "api_key": { - "type": "string", - "title": "API Key", - "description": "Freshcaller API Key. See the docs for more information on how to obtain this key.", - "airbyte_secret": true - }, - "requests_per_minute": { - "title": "Requests per minute", - "type": "integer", - "description": "The number of requests per minute that this source allowed to use. There is a rate limit of 50 requests per minute per app per account." - }, - "start_date": { - "title": "Start Date", - "description": "UTC date and time. Any data created after this date will be replicated.", - "format": "date-time", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2022-01-01T12:00:00Z" ] - }, - "sync_lag_minutes": { - "title": "Lag in minutes for each sync", - "type": "integer", - "description": "Lag in minutes for each sync, i.e., at time T, data for the time range [prev_sync_time, T-30] will be fetched" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false - }, { - "sourceDefinitionId": "f95337f1-2ad1-4baf-922f-2ca9152de630", - "name": "Flexport", - "dockerRepository": "airbyte/source-flexport", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/flexport", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/flexport", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Flexport Spec", - "additionalProperties": true, - "type": "object", - "required": [ "api_key", "start_date" ], - "properties": { - "api_key": { - "order": 0, - "type": "string", - "title": "API Key", - "airbyte_secret": true - }, - "start_date": { - "order": 1, - "title": "Start Date", - "type": "string", - "format": "date-time" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "ec4b9503-13cb-48ab-a4ab-6ade4be46567", - "name": "Freshdesk", - "dockerRepository": "airbyte/source-freshdesk", - "dockerImageTag": "3.0.2", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/freshdesk", - "icon": "freshdesk.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/freshdesk", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Freshdesk Spec", - "type": "object", - "required": [ "domain", "api_key" ], - "additionalProperties": true, - "properties": { - "domain": { - "type": "string", - "description": "Freshdesk domain", - "title": "Domain", - "examples": [ "myaccount.freshdesk.com" ], - "pattern": "^[a-zA-Z0-9._-]*\\.freshdesk\\.com$" - }, - "api_key": { - "type": "string", - "title": "API Key", - "description": "Freshdesk API Key. See the docs for more information on how to obtain this key.", - "airbyte_secret": true - }, - "requests_per_minute": { - "title": "Requests per minute", - "type": "integer", - "description": "The number of requests per minute that this source allowed to use. There is a rate limit of 50 requests per minute per app per account." - }, - "start_date": { - "title": "Start Date", - "type": "string", - "description": "UTC date and time. Any data created after this date will be replicated. If this parameter is not set, all data will be replicated.", - "format": "date-time", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2020-12-01T00:00:00Z" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "*.freshdesk.com" ] - } - }, { - "sourceDefinitionId": "eca08d79-7b92-4065-b7f3-79c14836ebe7", - "name": "Freshsales", - "dockerRepository": "airbyte/source-freshsales", - "dockerImageTag": "0.1.4", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/freshsales", - "icon": "freshsales.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/freshsales", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Freshsales Spec", - "type": "object", - "required": [ "domain_name", "api_key" ], - "additionalProperties": true, - "properties": { - "domain_name": { - "type": "string", - "title": "Domain Name", - "description": "The Name of your Freshsales domain", - "examples": [ "mydomain.myfreshworks.com" ] - }, - "api_key": { - "type": "string", - "title": "API Key", - "description": "Freshsales API Key. See here. The key is case sensitive.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "*.myfreshworks.com" ] - } - }, { - "sourceDefinitionId": "9bb85338-ea95-4c93-b267-6be89125b267", - "name": "Freshservice", - "dockerRepository": "airbyte/source-freshservice", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/freshservice", - "icon": "freshservice.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/freshservice", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Freshservice Spec", - "type": "object", - "required": [ "domain_name", "api_key", "start_date" ], - "additionalProperties": false, - "properties": { - "domain_name": { - "type": "string", - "title": "Domain Name", - "description": "The name of your Freshservice domain", - "examples": [ "mydomain.freshservice.com" ] - }, - "api_key": { - "title": "API Key", - "type": "string", - "description": "Freshservice API Key. See here. The key is case sensitive.", - "airbyte_secret": true - }, - "start_date": { - "title": "Start Date", - "type": "string", - "description": "UTC date and time in the format 2020-10-01T00:00:00Z. Any data before this date will not be replicated.", - "examples": [ "2020-10-01T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "2a8c41ae-8c23-4be0-a73f-2ab10ca1a820", - "name": "GCS", - "dockerRepository": "airbyte/source-gcs", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/gcs", - "icon": "gcs.svg", - "sourceType": "file", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Gcs Spec", - "type": "object", - "required": [ "gcs_bucket", "gcs_path", "service_account" ], - "properties": { - "gcs_bucket": { - "type": "string", - "title": "GCS bucket", - "description": "GCS bucket name" - }, - "gcs_path": { - "type": "string", - "title": "GCS Path", - "description": "GCS path to data" - }, - "service_account": { - "type": "string", - "title": "Service Account Information.", - "description": "Enter your Google Cloud service account key in JSON format", - "airbyte_secret": true, - "examples": [ "{ \"type\": \"service_account\", \"project_id\": YOUR_PROJECT_ID, \"private_key_id\": YOUR_PRIVATE_KEY, ... }" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false - }, { - "sourceDefinitionId": "5ea4459a-8f1a-452a-830f-a65c38cc438d", - "name": "Genesys", - "dockerRepository": "airbyte/source-genesys", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/genesys", - "icon": "genesys.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/genesys", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Genesys Connector Configuration", - "type": "object", - "required": [ "start_date", "tenant_endpoint", "client_id", "client_secret" ], - "properties": { - "client_id": { - "type": "string", - "title": "Client ID", - "description": "Your OAuth user Client ID", - "airbyte_secret": true, - "order": 0 - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "Your OAuth user Client Secret", - "airbyte_secret": true, - "order": 1 - }, - "tenant_endpoint": { - "title": "Tenant Endpoint Location", - "type": "string", - "description": "Please choose the right endpoint where your Tenant is located. More info by this Link", - "enum": [ "Americas (US East)", "Americas (US East 2)", "Americas (US West)", "Americas (Canada)", "Americas (São Paulo)", "EMEA (Frankfurt)", "EMEA (Dublin)", "EMEA (London)", "Asia Pacific (Mumbai)", "Asia Pacific (Seoul)", "Asia Pacific (Sydney)" ], - "order": 2 - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "Start Date in format: YYYY-MM-DD", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "order": 3 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false - }, { - "sourceDefinitionId": "e1a3866b-d3b2-43b6-b6d7-8c1ee4d7f53f", - "name": "GetLago", - "dockerRepository": "airbyte/source-getlago", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/getlago", - "icon": "getlago.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/getlago", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Getlago Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "title": "API Key", - "type": "string", - "description": "Your API Key. See here.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "6cbea164-3237-433b-9abb-36d384ee4cbf", - "name": "Gridly", - "dockerRepository": "airbyte/source-gridly", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/gridly", - "icon": "gridly.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/gridly", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Gridly Spec", - "type": "object", - "required": [ "api_key", "grid_id" ], - "properties": { - "api_key": { - "type": "string", - "title": "API Key", - "airbyte_secret": true - }, - "grid_id": { - "type": "string", - "title": "Grid ID", - "description": "ID of a grid, or can be ID of a branch" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "ef69ef6e-aa7f-4af1-a01d-ef775033524e", - "name": "GitHub", - "dockerRepository": "airbyte/source-github", - "dockerImageTag": "0.4.8", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/github", - "icon": "github.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/github", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "GitHub Source Spec", - "type": "object", - "required": [ "start_date", "repository" ], - "additionalProperties": true, - "properties": { - "credentials": { - "title": "Authentication", - "description": "Choose how to authenticate to GitHub", - "type": "object", - "order": 0, - "group": "auth", - "oneOf": [ { - "type": "object", - "title": "OAuth", - "required": [ "access_token" ], - "properties": { - "option_title": { - "type": "string", - "const": "OAuth Credentials", - "order": 0 - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "OAuth access token", - "airbyte_secret": true - } - } - }, { - "type": "object", - "title": "Personal Access Token", - "required": [ "personal_access_token" ], - "properties": { - "option_title": { - "type": "string", - "const": "PAT Credentials", - "order": 0 - }, - "personal_access_token": { - "type": "string", - "title": "Personal Access Tokens", - "description": "Log into GitHub and then generate a personal access token. To load balance your API quota consumption across multiple API tokens, input multiple tokens separated with \",\"", - "airbyte_secret": true - } - } - } ] - }, - "start_date": { - "type": "string", - "title": "Start date", - "description": "The date from which you'd like to replicate data from GitHub in the format YYYY-MM-DDT00:00:00Z. For the streams which support this configuration, only data generated on or after the start date will be replicated. This field doesn't apply to all streams, see the docs for more info", - "examples": [ "2021-03-01T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "order": 1, - "format": "date-time" - }, - "repository": { - "type": "string", - "examples": [ "airbytehq/airbyte airbytehq/another-repo", "airbytehq/*", "airbytehq/airbyte" ], - "title": "GitHub Repositories", - "description": "Space-delimited list of GitHub organizations/repositories, e.g. `airbytehq/airbyte` for single repository, `airbytehq/*` for get all repositories from organization and `airbytehq/airbyte airbytehq/another-repo` for multiple repositories.", - "order": 2, - "pattern_descriptor": "org/repo1 org/repo2" - }, - "branch": { - "type": "string", - "title": "Branch", - "examples": [ "airbytehq/airbyte/master airbytehq/airbyte/my-branch" ], - "description": "Space-delimited list of GitHub repository branches to pull commits for, e.g. `airbytehq/airbyte/master`. If no branches are specified for a repository, the default branch will be pulled.", - "order": 3, - "pattern_descriptor": "org/repo/branch1 org/repo/branch2" - }, - "page_size_for_large_streams": { - "type": "integer", - "title": "Page size for large streams", - "minimum": 1, - "maximum": 100, - "default": 10, - "description": "The Github connector contains several streams with a large amount of data. The page size of such streams depends on the size of your repository. We recommended that you specify values between 10 and 30.", - "order": 4 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "option_title" ], - "predicate_value": "OAuth Credentials", - "oauth_config_specification": { - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "access_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "access_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "api.github.com" ] - }, - "suggestedStreams": { - "streams": [ "branches", "comments", "issues", "organizations", "pull_requests", "repositories", "stargazers", "tags", "teams", "users" ] - }, - "maxSecondsBetweenMessages": 5400 - }, { - "sourceDefinitionId": "5e6175e5-68e1-4c17-bff9-56103bbb0d80", - "name": "Gitlab", - "dockerRepository": "airbyte/source-gitlab", - "dockerImageTag": "1.0.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/gitlab", - "icon": "gitlab.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/gitlab", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Source Gitlab Spec", - "type": "object", - "required": [ "api_url", "start_date", "credentials" ], - "additionalProperties": true, - "properties": { - "credentials": { - "title": "Authorization Method", - "type": "object", - "order": 0, - "oneOf": [ { - "type": "object", - "title": "OAuth2.0", - "required": [ "client_id", "client_secret", "refresh_token", "access_token", "token_expiry_date" ], - "properties": { - "auth_type": { - "type": "string", - "const": "oauth2.0" - }, - "client_id": { - "type": "string", - "description": "The API ID of the Gitlab developer application.", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "description": "The API Secret the Gitlab developer application.", - "airbyte_secret": true - }, - "access_token": { - "type": "string", - "description": "Access Token for making authenticated requests.", - "airbyte_secret": true - }, - "token_expiry_date": { - "type": "string", - "description": "The date-time when the access token should be refreshed.", - "format": "date-time" - }, - "refresh_token": { - "type": "string", - "description": "The key to refresh the expired access_token.", - "airbyte_secret": true - } - } - }, { - "title": "Private Token", - "type": "object", - "required": [ "access_token" ], - "properties": { - "auth_type": { - "type": "string", - "const": "access_token" - }, - "access_token": { - "type": "string", - "title": "Private Token", - "description": "Log into your Gitlab account and then generate a personal Access Token.", - "airbyte_secret": true - } - } - } ] - }, - "api_url": { - "type": "string", - "examples": [ "gitlab.com" ], - "title": "API URL", - "default": "gitlab.com", - "description": "Please enter your basic URL from GitLab instance.", - "order": 1 - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "The date from which you'd like to replicate data for GitLab API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", - "examples": [ "2021-03-01T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "order": 2, - "format": "date-time" - }, - "groups": { - "type": "string", - "examples": [ "airbyte.io" ], - "title": "Groups", - "description": "Space-delimited list of groups. e.g. airbyte.io.", - "order": 3 - }, - "projects": { - "type": "string", - "title": "Projects", - "examples": [ "airbyte.io/documentation" ], - "description": "Space-delimited list of projects. e.g. airbyte.io/documentation meltano/tap-gitlab.", - "order": 4 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "auth_type" ], - "predicate_value": "oauth2.0", - "oauth_config_specification": { - "oauth_user_input_from_connector_config_specification": { - "type": "object", - "properties": { - "domain": { - "type": "string", - "path_in_connector_config": [ "api_url" ] - } - } - }, - "complete_oauth_output_specification": { - "type": "object", - "properties": { - "access_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "access_token" ] - }, - "refresh_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "refresh_token" ] - }, - "token_expiry_date": { - "type": "string", - "format": "date-time", - "path_in_connector_config": [ "credentials", "token_expiry_date" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "*" ] - } - }, { - "sourceDefinitionId": "cf8ff320-6272-4faa-89e6-4402dc17e5d5", - "name": "Glassfrog", - "dockerRepository": "airbyte/source-glassfrog", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/glassfrog", - "icon": "glassfrog.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/glassfrog", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Glassfrog Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "description": "API key provided by Glassfrog", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "ce38aec4-5a77-439a-be29-9ca44fd4e811", - "name": "GNews", - "dockerRepository": "airbyte/source-gnews", - "dockerImageTag": "0.1.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/gnews", - "icon": "gnews.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/gnews", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Gnews Spec", - "type": "object", - "required": [ "api_key", "query" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "title": "API Key", - "description": "API Key", - "order": 0, - "airbyte_secret": true - }, - "query": { - "type": "string", - "order": 1, - "title": "Query", - "description": "This parameter allows you to specify your search keywords to find the news articles you are looking for. The keywords will be used to return the most relevant articles. It is possible to use logical operators with keywords. - Phrase Search Operator: This operator allows you to make an exact search. Keywords surrounded by \n quotation marks are used to search for articles with the exact same keyword sequence. \n For example the query: \"Apple iPhone\" will return articles matching at least once this sequence of keywords.\n- Logical AND Operator: This operator allows you to make sure that several keywords are all used in the article\n search. By default the space character acts as an AND operator, it is possible to replace the space character \n by AND to obtain the same result. For example the query: Apple Microsoft is equivalent to Apple AND Microsoft\n- Logical OR Operator: This operator allows you to retrieve articles matching the keyword a or the keyword b.\n It is important to note that this operator has a higher precedence than the AND operator. For example the \n query: Apple OR Microsoft will return all articles matching the keyword Apple as well as all articles matching \n the keyword Microsoft\n- Logical NOT Operator: This operator allows you to remove from the results the articles corresponding to the\n specified keywords. To use it, you need to add NOT in front of each word or phrase surrounded by quotes.\n For example the query: Apple NOT iPhone will return all articles matching the keyword Apple but not the keyword\n iPhone", - "examples": [ "Microsoft Windows 10", "Apple OR Microsoft", "Apple AND NOT iPhone", "(Windows 7) AND (Windows 10)", "Intel AND (i7 OR i9)" ] - }, - "language": { - "type": "string", - "title": "Language", - "decription": "This parameter allows you to specify the language of the news articles returned by the API. You have to set as value the 2 letters code of the language you want to filter.", - "order": 2, - "enum": [ "ar", "zh", "nl", "en", "fr", "de", "el", "he", "hi", "it", "ja", "ml", "mr", "no", "pt", "ro", "ru", "es", "sv", "ta", "te", "uk" ] - }, - "country": { - "type": "string", - "title": "Country", - "description": "This parameter allows you to specify the country where the news articles returned by the API were published, the contents of the articles are not necessarily related to the specified country. You have to set as value the 2 letters code of the country you want to filter.", - "order": 3, - "enum": [ "au", "br", "ca", "cn", "eg", "fr", "de", "gr", "hk", "in", "ie", "il", "it", "jp", "nl", "no", "pk", "pe", "ph", "pt", "ro", "ru", "sg", "es", "se", "ch", "tw", "ua", "gb", "us" ] - }, - "in": { - "type": "array", - "title": "In", - "description": "This parameter allows you to choose in which attributes the keywords are searched. The attributes that can be set are title, description and content. It is possible to combine several attributes.", - "order": 4, - "items": { - "type": "string", - "enum": [ "title", "description", "content" ] - } - }, - "nullable": { - "type": "array", - "title": "Nullable", - "description": "This parameter allows you to specify the attributes that you allow to return null values. The attributes that can be set are title, description and content. It is possible to combine several attributes", - "order": 5, - "items": { - "type": "string", - "enum": [ "title", "description", "content" ] - } - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "This parameter allows you to filter the articles that have a publication date greater than or equal to the specified value. The date must respect the following format: YYYY-MM-DD hh:mm:ss (in UTC)", - "order": 6, - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$", - "examples": [ "2022-08-21 16:27:09" ] - }, - "end_date": { - "type": "string", - "title": "End Date", - "description": "This parameter allows you to filter the articles that have a publication date smaller than or equal to the specified value. The date must respect the following format: YYYY-MM-DD hh:mm:ss (in UTC)", - "order": 6, - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$", - "examples": [ "2022-08-21 16:27:09" ] - }, - "sortby": { - "type": "string", - "title": "Sort By", - "description": "This parameter allows you to choose with which type of sorting the articles should be returned. Two values are possible:\n - publishedAt = sort by publication date, the articles with the most recent publication date are returned first\n - relevance = sort by best match to keywords, the articles with the best match are returned first", - "order": 7, - "enum": [ "publishedAt", "relevance" ] - }, - "top_headlines_query": { - "type": "string", - "order": 8, - "title": "Top Headlines Query", - "description": "This parameter allows you to specify your search keywords to find the news articles you are looking for. The keywords will be used to return the most relevant articles. It is possible to use logical operators with keywords. - Phrase Search Operator: This operator allows you to make an exact search. Keywords surrounded by \n quotation marks are used to search for articles with the exact same keyword sequence. \n For example the query: \"Apple iPhone\" will return articles matching at least once this sequence of keywords.\n- Logical AND Operator: This operator allows you to make sure that several keywords are all used in the article\n search. By default the space character acts as an AND operator, it is possible to replace the space character \n by AND to obtain the same result. For example the query: Apple Microsoft is equivalent to Apple AND Microsoft\n- Logical OR Operator: This operator allows you to retrieve articles matching the keyword a or the keyword b.\n It is important to note that this operator has a higher precedence than the AND operator. For example the \n query: Apple OR Microsoft will return all articles matching the keyword Apple as well as all articles matching \n the keyword Microsoft\n- Logical NOT Operator: This operator allows you to remove from the results the articles corresponding to the\n specified keywords. To use it, you need to add NOT in front of each word or phrase surrounded by quotes.\n For example the query: Apple NOT iPhone will return all articles matching the keyword Apple but not the keyword\n iPhone", - "examples": [ "Microsoft Windows 10", "Apple OR Microsoft", "Apple AND NOT iPhone", "(Windows 7) AND (Windows 10)", "Intel AND (i7 OR i9)" ] - }, - "top_headlines_topic": { - "type": "string", - "title": "Top Headlines Topic", - "description": "This parameter allows you to change the category for the request.", - "order": 9, - "enum": [ "breaking-news", "world", "nation", "business", "technology", "entertainment", "sports", "science", "health" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "ba15ac82-5c6a-4fb2-bf24-925c23a1180c", - "name": "GoCardless", - "dockerRepository": "airbyte/source-gocardless", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/gocardless", - "icon": "gocardless.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/gocardless", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Gocardless Spec", - "type": "object", - "required": [ "access_token", "gocardless_environment", "gocardless_version", "start_date" ], - "properties": { - "access_token": { - "title": "Access Token", - "type": "string", - "pattern": "^(sandbox|live)_.+$", - "description": "Gocardless API TOKEN", - "airbyte_secret": true, - "order": 0 - }, - "gocardless_environment": { - "title": "GoCardless API Environment", - "type": "string", - "enum": [ "sandbox", "live" ], - "default": "sandbox", - "description": "Environment you are trying to connect to.", - "order": 1 - }, - "gocardless_version": { - "title": "GoCardless API Version", - "type": "string", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "description": "GoCardless version. This is a date. You can find the latest here: \nhttps://developer.gocardless.com/api-reference/#api-usage-making-requests\n", - "order": 2 - }, - "start_date": { - "title": "Start Date", - "type": "string", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data\nbefore this date will not be replicated.\n", - "examples": [ "2017-01-25T00:00:00Z" ], - "order": 3 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "32382e40-3b49-4b99-9c5c-4076501914e7", - "name": "Gong", - "dockerRepository": "airbyte/source-gong", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/gong", - "icon": "gong.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/gong", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Gong Spec", - "type": "object", - "required": [ "access_key", "access_key_secret" ], - "additionalProperties": true, - "properties": { - "access_key": { - "type": "string", - "title": "Gong Access Key", - "description": "Gong Access Key", - "airbyte_secret": true - }, - "access_key_secret": { - "type": "string", - "title": "Gong Access Key Secret", - "description": "Gong Access Key Secret", - "airbyte_secret": true - }, - "start_date": { - "type": "string", - "title": "Start date", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "description": "The date from which to list calls, in the ISO-8601 format; if not specified, the calls start with the earliest recorded call. For web-conference calls recorded by Gong, the date denotes its scheduled time, otherwise, it denotes its actual start time.", - "examples": [ "2018-02-18T08:00:00Z" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "253487c0-2246-43ba-a21f-5116b20a2c50", - "name": "Google Ads", - "dockerRepository": "airbyte/source-google-ads", - "dockerImageTag": "0.2.14", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-ads", - "icon": "google-adwords.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-ads", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Google Ads Spec", - "type": "object", - "required": [ "credentials", "start_date", "customer_id" ], - "additionalProperties": true, - "properties": { - "credentials": { - "type": "object", - "description": "", - "title": "Google Credentials", - "order": 0, - "required": [ "developer_token", "client_id", "client_secret", "refresh_token" ], - "properties": { - "developer_token": { - "type": "string", - "title": "Developer Token", - "order": 0, - "description": "Developer token granted by Google to use their APIs. More instruction on how to find this value in our docs", - "airbyte_secret": true - }, - "client_id": { - "type": "string", - "title": "Client ID", - "order": 1, - "description": "The Client ID of your Google Ads developer application. More instruction on how to find this value in our docs" - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "order": 2, - "description": "The Client Secret of your Google Ads developer application. More instruction on how to find this value in our docs", - "airbyte_secret": true - }, - "refresh_token": { - "type": "string", - "title": "Refresh Token", - "order": 3, - "description": "The token for obtaining a new access token. More instruction on how to find this value in our docs", - "airbyte_secret": true - }, - "access_token": { - "type": "string", - "title": "Access Token", - "order": 4, - "description": "Access Token for making authenticated requests. More instruction on how to find this value in our docs", - "airbyte_secret": true - } - } - }, - "customer_id": { - "title": "Customer ID(s)", - "type": "string", - "description": "Comma separated list of (client) customer IDs. Each customer ID must be specified as a 10-digit number without dashes. More instruction on how to find this value in our docs. Metrics streams like AdGroupAdReport cannot be requested for a manager account.", - "pattern": "^[0-9]{10}(,[0-9]{10})*$", - "examples": [ "6783948572,5839201945" ], - "order": 1 - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "UTC date and time in the format 2017-01-25. Any data before this date will not be replicated.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "2017-01-25" ], - "order": 2, - "format": "date" - }, - "end_date": { - "type": "string", - "title": "End Date", - "description": "UTC date and time in the format 2017-01-25. Any data after this date will not be replicated.", - "pattern": "^$|^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "2017-01-30" ], - "order": 6, - "format": "date" - }, - "custom_queries": { - "type": "array", - "title": "Custom GAQL Queries", - "description": "", - "order": 3, - "items": { - "type": "object", - "required": [ "query", "table_name" ], - "properties": { - "query": { - "type": "string", - "title": "Custom Query", - "description": "A custom defined GAQL query for building the report. Should not contain segments.date expression because it is used by incremental streams. See Google's query builder for more information.", - "examples": [ "SELECT segments.ad_destination_type, campaign.advertising_channel_sub_type FROM campaign WHERE campaign.status = 'PAUSED'" ] - }, - "table_name": { - "type": "string", - "title": "Destination Table Name", - "description": "The table name in your destination database for choosen query." - } - } - } - }, - "login_customer_id": { - "type": "string", - "title": "Login Customer ID for Managed Accounts", - "description": "If your access to the customer account is through a manager account, this field is required and must be set to the customer ID of the manager account (10-digit number without dashes). More information about this field you can see here", - "pattern": "^([0-9]{10})?$", - "examples": [ "7349206847" ], - "order": 4 - }, - "conversion_window_days": { - "title": "Conversion Window", - "type": "integer", - "description": "A conversion window is the period of time after an ad interaction (such as an ad click or video view) during which a conversion, such as a purchase, is recorded in Google Ads. For more information, see Google's documentation.", - "minimum": 0, - "maximum": 1095, - "default": 14, - "examples": [ 14 ], - "order": 5 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ "credentials" ], - "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ], [ "developer_token" ] ], - "oauthFlowOutputParameters": [ [ "access_token" ], [ "refresh_token" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "accounts.google.com", "googleads.googleapis.com" ] - } - }, { - "sourceDefinitionId": "eff3616a-f9c3-11eb-9a03-0242ac130003", - "name": "Google Analytics (Universal Analytics)", - "dockerRepository": "airbyte/source-google-analytics-v4", - "dockerImageTag": "0.1.34", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-analytics-v4", - "icon": "google-analytics.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-analytics-universal-analytics", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Google Analytics (Universal Analytics) Spec", - "type": "object", - "required": [ "view_id", "start_date" ], - "additionalProperties": true, - "properties": { - "credentials": { - "order": 0, - "type": "object", - "title": "Credentials", - "description": "Credentials for the service", - "oneOf": [ { - "title": "Authenticate via Google (Oauth)", - "type": "object", - "required": [ "client_id", "client_secret", "refresh_token" ], - "properties": { - "auth_type": { - "type": "string", - "const": "Client", - "order": 0 - }, - "client_id": { - "title": "Client ID", - "type": "string", - "description": "The Client ID of your Google Analytics developer application.", - "airbyte_secret": true, - "order": 1 - }, - "client_secret": { - "title": "Client Secret", - "type": "string", - "description": "The Client Secret of your Google Analytics developer application.", - "airbyte_secret": true, - "order": 2 - }, - "refresh_token": { - "title": "Refresh Token", - "type": "string", - "description": "The token for obtaining a new access token.", - "airbyte_secret": true, - "order": 3 - }, - "access_token": { - "title": "Access Token", - "type": "string", - "description": "Access Token for making authenticated requests.", - "airbyte_secret": true, - "order": 4 - } - } - }, { - "type": "object", - "title": "Service Account Key Authentication", - "required": [ "credentials_json" ], - "properties": { - "auth_type": { - "type": "string", - "const": "Service", - "order": 0 - }, - "credentials_json": { - "title": "Service Account JSON Key", - "type": "string", - "description": "The JSON key of the service account to use for authorization", - "examples": [ "{ \"type\": \"service_account\", \"project_id\": YOUR_PROJECT_ID, \"private_key_id\": YOUR_PRIVATE_KEY, ... }" ], - "airbyte_secret": true - } - } - } ] - }, - "start_date": { - "order": 1, - "type": "string", - "title": "Replication Start Date", - "description": "The date in the format YYYY-MM-DD. Any data before this date will not be replicated.", - "examples": [ "2020-06-01" ] - }, - "view_id": { - "order": 2, - "type": "string", - "title": "View ID", - "description": "The ID for the Google Analytics View you want to fetch data from. This can be found from the Google Analytics Account Explorer." - }, - "custom_reports": { - "order": 3, - "type": "string", - "title": "Custom Reports", - "description": "A JSON array describing the custom reports you want to sync from Google Analytics. See the docs for more information about the exact format you can use to fill out this field." - }, - "window_in_days": { - "type": "integer", - "title": "Data request time increment in days", - "description": "The time increment used by the connector when requesting data from the Google Analytics API. More information is available in the the docs. The bigger this value is, the faster the sync will be, but the more likely that sampling will be applied to your data, potentially causing inaccuracies in the returned results. We recommend setting this to 1 unless you have a hard requirement to make the sync faster at the expense of accuracy. The minimum allowed value for this field is 1, and the maximum is 364. ", - "examples": [ 30, 60, 90, 120, 200, 364 ], - "default": 1, - "order": 4 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ "credentials", "0" ], - "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], - "oauthFlowOutputParameters": [ [ "access_token" ], [ "refresh_token" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "oauth2.googleapis.com", "www.googleapis.com", "analyticsdata.googleapis.com", "analyticsreporting.googleapis.com" ] - } - }, { - "sourceDefinitionId": "3cc2eafd-84aa-4dca-93af-322d9dfeec1a", - "name": "Google Analytics 4 (GA4)", - "dockerRepository": "airbyte/source-google-analytics-data-api", - "dockerImageTag": "0.2.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-analytics-data-api", - "icon": "google-analytics.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-analytics-data-api", - "connectionSpecification": { - "$schema": "https://json-schema.org/draft-07/schema#", - "title": "Google Analytics (Data API) Spec", - "type": "object", - "required": [ "property_id", "date_ranges_start_date" ], - "additionalProperties": true, - "properties": { - "credentials": { - "order": 0, - "type": "object", - "title": "Credentials", - "description": "Credentials for the service", - "oneOf": [ { - "title": "Authenticate via Google (Oauth)", - "type": "object", - "required": [ "client_id", "client_secret", "refresh_token" ], - "properties": { - "auth_type": { - "type": "string", - "const": "Client", - "order": 0 - }, - "client_id": { - "title": "Client ID", - "type": "string", - "description": "The Client ID of your Google Analytics developer application.", - "order": 1 - }, - "client_secret": { - "title": "Client Secret", - "type": "string", - "description": "The Client Secret of your Google Analytics developer application.", - "airbyte_secret": true, - "order": 2 - }, - "refresh_token": { - "title": "Refresh Token", - "type": "string", - "description": "The token for obtaining a new access token.", - "airbyte_secret": true, - "order": 3 - }, - "access_token": { - "title": "Access Token", - "type": "string", - "description": "Access Token for making authenticated requests.", - "airbyte_secret": true, - "order": 4 - } - } - }, { - "type": "object", - "title": "Service Account Key Authentication", - "required": [ "credentials_json" ], - "properties": { - "auth_type": { - "type": "string", - "const": "Service", - "order": 0 - }, - "credentials_json": { - "title": "Service Account JSON Key", - "type": "string", - "description": "The JSON key of the service account to use for authorization", - "examples": [ "{ \"type\": \"service_account\", \"project_id\": YOUR_PROJECT_ID, \"private_key_id\": YOUR_PRIVATE_KEY, ... }" ], - "airbyte_secret": true, - "order": 1 - } - } - } ] - }, - "property_id": { - "type": "string", - "title": "Property ID", - "description": "A Google Analytics GA4 property identifier whose events are tracked. Specified in the URL path and not the body", - "order": 1 - }, - "date_ranges_start_date": { - "type": "string", - "title": "Start Date", - "description": "The start date from which to replicate report data in the format YYYY-MM-DD. Data generated before this date will not be included in the report. Not applied to custom Cohort reports.", - "format": "date", - "order": 2 - }, - "custom_reports": { - "order": 3, - "type": "string", - "title": "Custom Reports", - "description": "A JSON array describing the custom reports you want to sync from Google Analytics. See the docs for more information about the exact format you can use to fill out this field." - }, - "window_in_days": { - "type": "integer", - "title": "Data request time increment in days", - "description": "The time increment used by the connector when requesting data from the Google Analytics API. More information is available in the the docs. The bigger this value is, the faster the sync will be, but the more likely that sampling will be applied to your data, potentially causing inaccuracies in the returned results. We recommend setting this to 1 unless you have a hard requirement to make the sync faster at the expense of accuracy. The minimum allowed value for this field is 1, and the maximum is 364. Not applied to custom Cohort reports.", - "examples": [ 30, 60, 90, 120, 200, 364 ], - "minimum": 1, - "maximum": 364, - "default": 1, - "order": 4 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ "credentials", "0" ], - "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], - "oauthFlowOutputParameters": [ [ "access_token" ], [ "refresh_token" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "oauth2.googleapis.com", "www.googleapis.com", "analyticsdata.googleapis.com" ] - } - }, { - "sourceDefinitionId": "d19ae824-e289-4b14-995a-0632eb46d246", - "name": "Google Directory", - "dockerRepository": "airbyte/source-google-directory", - "dockerImageTag": "0.1.9", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-directory", - "icon": "googledirectory.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-directory", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Google Directory Spec", - "type": "object", - "required": [ ], - "additionalProperties": true, - "properties": { - "credentials": { - "title": "Google Credentials", - "description": "Google APIs use the OAuth 2.0 protocol for authentication and authorization. The Source supports Web server application and Service accounts scenarios.", - "type": "object", - "oneOf": [ { - "title": "Sign in via Google (OAuth)", - "description": "For these scenario user only needs to give permission to read Google Directory data.", - "type": "object", - "required": [ "client_id", "client_secret", "refresh_token" ], - "properties": { - "credentials_title": { - "type": "string", - "title": "Credentials Title", - "description": "Authentication Scenario", - "const": "Web server app", - "enum": [ "Web server app" ], - "default": "Web server app", - "order": 0 - }, - "client_id": { - "title": "Client ID", - "type": "string", - "description": "The Client ID of the developer application.", - "airbyte_secret": true - }, - "client_secret": { - "title": "Client secret", - "type": "string", - "description": "The Client Secret of the developer application.", - "airbyte_secret": true - }, - "refresh_token": { - "title": "Refresh Token", - "type": "string", - "description": "The Token for obtaining a new access token.", - "airbyte_secret": true - } - } - }, { - "title": "Service Account Key", - "description": "For these scenario user should obtain service account's credentials from the Google API Console and provide delegated email.", - "type": "object", - "required": [ "credentials_json", "email" ], - "properties": { - "credentials_title": { - "type": "string", - "title": "Credentials Title", - "description": "Authentication Scenario", - "const": "Service accounts", - "enum": [ "Service accounts" ], - "default": "Service accounts", - "order": 0 - }, - "credentials_json": { - "type": "string", - "title": "Credentials JSON", - "description": "The contents of the JSON service account key. See the docs for more information on how to generate this key.", - "airbyte_secret": true - }, - "email": { - "type": "string", - "title": "Email", - "description": "The email of the user, which has permissions to access the Google Workspace Admin APIs." - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ "credentials", "0" ], - "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], - "oauthFlowOutputParameters": [ [ "refresh_token" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "1e9086ab-ddac-4c1d-aafd-ba43ff575fe4", - "name": "Google PageSpeed Insights", - "dockerRepository": "airbyte/source-google-pagespeed-insights", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-pagespeed-insights", - "icon": "google-pagespeed-insights.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/google-pagespeed-insights", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Google PageSpeed Insights Spec", - "type": "object", - "required": [ "urls", "strategies", "categories" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "title": "API Key", - "description": "Google PageSpeed API Key. See here. The key is optional - however the API is heavily rate limited when using without API Key. Creating and using the API key therefore is recommended. The key is case sensitive.", - "airbyte_secret": true - }, - "urls": { - "type": "array", - "items": { - "type": "string", - "pattern": "^(?:origin:)?(http(s)?:\\/\\/)[\\w.-]+(?:\\.[\\w\\.-]+)+[\\w\\-\\._~:\\/?#[\\]@!\\$&'\\(\\)\\*\\+,;=.]+$" - }, - "title": "URLs to analyse", - "description": "The URLs to retrieve pagespeed information from. The connector will attempt to sync PageSpeed reports for all the defined URLs. Format: https://(www.)url.domain", - "example": "https://example.com" - }, - "strategies": { - "type": "array", - "items": { - "type": "string", - "enum": [ "desktop", "mobile" ] - }, - "title": "Analyses Strategies", - "description": "The analyses strategy to use. Either \"desktop\" or \"mobile\"." - }, - "categories": { - "type": "array", - "items": { - "type": "string", - "enum": [ "accessibility", "best-practices", "performance", "pwa", "seo" ] - }, - "title": "Lighthouse Categories", - "description": "Defines which Lighthouse category to run. One or many of: \"accessibility\", \"best-practices\", \"performance\", \"pwa\", \"seo\"." - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "eb4c9e00-db83-4d63-a386-39cfa91012a8", - "name": "Google Search Console", - "dockerRepository": "airbyte/source-google-search-console", - "dockerImageTag": "0.1.22", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-search-console", - "icon": "googlesearchconsole.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-search-console", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Google Search Console Spec", - "type": "object", - "required": [ "site_urls", "start_date", "authorization" ], - "properties": { - "site_urls": { - "type": "array", - "items": { - "type": "string" - }, - "title": "Website URL Property", - "description": "The URLs of the website property attached to your GSC account. Read more here.", - "examples": [ "https://example1.com/", "sc-domain:example2.com" ], - "order": 0 - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "UTC date in the format 2017-01-25. Any data before this date will not be replicated.", - "examples": [ "2021-01-01" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "order": 1, - "format": "date" - }, - "end_date": { - "type": "string", - "title": "End Date", - "description": "UTC date in the format 2017-01-25. Any data after this date will not be replicated. Must be greater or equal to the start date field.", - "examples": [ "2021-12-12" ], - "pattern": "^$|^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "order": 2, - "format": "date" - }, - "authorization": { - "type": "object", - "title": "Authentication Type", - "description": "", - "order": 3, - "oneOf": [ { - "title": "OAuth", - "type": "object", - "required": [ "auth_type", "client_id", "client_secret", "refresh_token" ], - "properties": { - "auth_type": { - "type": "string", - "const": "Client", - "order": 0 - }, - "client_id": { - "title": "Client ID", - "type": "string", - "description": "The client ID of your Google Search Console developer application. Read more here.", - "airbyte_secret": true - }, - "client_secret": { - "title": "Client Secret", - "type": "string", - "description": "The client secret of your Google Search Console developer application. Read more here.", - "airbyte_secret": true - }, - "access_token": { - "title": "Access Token", - "type": "string", - "description": "Access token for making authenticated requests. Read more here.", - "airbyte_secret": true - }, - "refresh_token": { - "title": "Refresh Token", - "type": "string", - "description": "The token for obtaining a new access token. Read more here.", - "airbyte_secret": true - } - } - }, { - "type": "object", - "title": "Service Account Key Authentication", - "required": [ "auth_type", "service_account_info", "email" ], - "properties": { - "auth_type": { - "type": "string", - "const": "Service", - "order": 0 - }, - "service_account_info": { - "title": "Service Account JSON Key", - "type": "string", - "description": "The JSON key of the service account to use for authorization. Read more here.", - "examples": [ "{ \"type\": \"service_account\", \"project_id\": YOUR_PROJECT_ID, \"private_key_id\": YOUR_PRIVATE_KEY, ... }" ], - "airbyte_secret": true - }, - "email": { - "title": "Admin Email", - "type": "string", - "description": "The email of the user which has permissions to access the Google Workspace Admin APIs." - } - } - } ] - }, - "custom_reports": { - "order": 4, - "type": "string", - "title": "Custom Reports", - "description": "A JSON array describing the custom reports you want to sync from Google Search Console. See the docs for more information about the exact format you can use to fill out this field." - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ "authorization", "0" ], - "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], - "oauthFlowOutputParameters": [ [ "access_token" ], [ "refresh_token" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "*.googleapis.com" ] - } - }, { - "sourceDefinitionId": "71607ba1-c0ac-4799-8049-7f4b90dd50f7", - "name": "Google Sheets", - "dockerRepository": "airbyte/source-google-sheets", - "dockerImageTag": "0.2.37", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-sheets", - "icon": "google-sheets.svg", - "sourceType": "file", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-sheets", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Google Sheets Source Spec", - "type": "object", - "required": [ "spreadsheet_id", "credentials" ], - "additionalProperties": true, - "properties": { - "spreadsheet_id": { - "type": "string", - "title": "Spreadsheet Link", - "description": "Enter the link to the Google spreadsheet you want to sync", - "examples": [ "https://docs.google.com/spreadsheets/d/1hLd9Qqti3UyLXZB2aFfUWDT7BG-arw2xy4HR3D-dwUb/edit" ] - }, - "row_batch_size": { - "type": "integer", - "title": "Row Batch Size", - "description": "Number of rows fetched when making a Google Sheet API call. Defaults to 200.", - "default": 200 - }, - "names_conversion": { - "type": "boolean", - "title": "Columns Name Conversion", - "description": "Columns name conversion using a set of rules, for example, 'My Name' -> 'my-name'.", - "default": false - }, - "credentials": { - "type": "object", - "title": "Authentication", - "description": "Credentials for connecting to the Google Sheets API", - "oneOf": [ { - "title": "Authenticate via Google (OAuth)", - "type": "object", - "required": [ "auth_type", "client_id", "client_secret", "refresh_token" ], - "properties": { - "auth_type": { - "type": "string", - "const": "Client" - }, - "client_id": { - "title": "Client ID", - "type": "string", - "description": "Enter your Google application's Client ID", - "airbyte_secret": true - }, - "client_secret": { - "title": "Client Secret", - "type": "string", - "description": "Enter your Google application's Client Secret", - "airbyte_secret": true - }, - "refresh_token": { - "title": "Refresh Token", - "type": "string", - "description": "Enter your Google application's refresh token", - "airbyte_secret": true - } - } - }, { - "title": "Service Account Key Authentication", - "type": "object", - "required": [ "auth_type", "service_account_info" ], - "properties": { - "auth_type": { - "type": "string", - "const": "Service" - }, - "service_account_info": { - "type": "string", - "title": "Service Account Information.", - "description": "Enter your Google Cloud service account key in JSON format", - "airbyte_secret": true, - "examples": [ "{ \"type\": \"service_account\", \"project_id\": YOUR_PROJECT_ID, \"private_key_id\": YOUR_PRIVATE_KEY, ... }" ] - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ "credentials", "0" ], - "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], - "oauthFlowOutputParameters": [ [ "refresh_token" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "*.googleapis.com" ] - } - }, { - "sourceDefinitionId": "a68fbcde-b465-4ab3-b2a6-b0590a875835", - "name": "Google Webfonts", - "dockerRepository": "airbyte/source-google-webfonts", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-webfonts", - "icon": "googleworkpace.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-webfonts", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Google Webfonts Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "description": "API key is required to access google apis, For getting your's goto google console and generate api key for Webfonts", - "airbyte_secret": true - }, - "sort": { - "type": "string", - "description": "Optional, to find how to sort" - }, - "prettyPrint": { - "type": "string", - "description": "Optional, boolean type" - }, - "alt": { - "type": "string", - "description": "Optional, Available params- json, media, proto" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "ed9dfefa-1bbc-419d-8c5e-4d78f0ef6734", - "name": "Google Workspace Admin Reports", - "dockerRepository": "airbyte/source-google-workspace-admin-reports", - "dockerImageTag": "0.1.8", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-workspace-admin-reports", - "icon": "googleworkpace.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-workspace-admin-reports", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Google Directory Spec", - "type": "object", - "required": [ "credentials_json", "email" ], - "additionalProperties": false, - "properties": { - "credentials_json": { - "type": "string", - "title": "Credentials JSON", - "description": "The contents of the JSON service account key. See the docs for more information on how to generate this key.", - "airbyte_secret": true - }, - "email": { - "type": "string", - "title": "Email", - "description": "The email of the user, who has permissions to access the Google Workspace Admin APIs." - }, - "lookback": { - "type": "integer", - "title": "Lookback Window in Days", - "minimum": 0, - "maximum": 180, - "description": "Sets the range of time shown in the report. The maximum value allowed by the Google API is 180 days." - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "59f1e50a-331f-4f09-b3e8-2e8d4d355f44", - "name": "Greenhouse", - "dockerRepository": "airbyte/source-greenhouse", - "dockerImageTag": "0.3.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/greenhouse", - "icon": "greenhouse.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/greenhouse", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Greenhouse Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "title": "API Key", - "type": "string", - "description": "Greenhouse API Key. See the docs for more information on how to generate this key.", - "airbyte_secret": true, - "order": 0 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "harvest.greenhouse.io" ] - } - }, { - "sourceDefinitionId": "bff9a277-e01d-420d-81ee-80f28a307318", - "name": "Gutendex", - "dockerRepository": "airbyte/source-gutendex", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/gutendex", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/gutendex", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Gutendex Spec", - "type": "object", - "additionalProperties": true, - "properties": { - "author_year_start": { - "type": "string", - "description": "(Optional) Defines the minimum birth year of the authors. Books by authors born prior to the start year will not be returned. Supports both positive (CE) or negative (BCE) integer values", - "pattern": "^[-]?[0-9]{1,4}$", - "examples": [ 2002, 500, -500, 2020 ] - }, - "author_year_end": { - "type": "string", - "description": "(Optional) Defines the maximum birth year of the authors. Books by authors born after the end year will not be returned. Supports both positive (CE) or negative (BCE) integer values", - "pattern": "^[-]?[0-9]{1,4}$", - "examples": [ 2002, 500, -500, 2020 ] - }, - "copyright": { - "type": "string", - "description": "(Optional) Use this to find books with a certain copyright status - true for books with existing copyrights, false for books in the public domain in the USA, or null for books with no available copyright information.", - "pattern": "^(true|false|null)$", - "examples": [ true, false, null ] - }, - "languages": { - "type": "string", - "description": "(Optional) Use this to find books in any of a list of languages. They must be comma-separated, two-character language codes.", - "examples": [ "en", "en,fr,fi" ] - }, - "search": { - "type": "string", - "description": "(Optional) Use this to search author names and book titles with given words. They must be separated by a space (i.e. %20 in URL-encoded format) and are case-insensitive.", - "examples": [ "dickens%20great%20expect", "dickens" ] - }, - "sort": { - "type": "string", - "description": "(Optional) Use this to sort books - ascending for Project Gutenberg ID numbers from lowest to highest, descending for IDs highest to lowest, or popular (the default) for most popular to least popular by number of downloads.", - "pattern": "^(ascending|descending|popular)$", - "examples": [ "ascending", "descending", "popular" ] - }, - "topic": { - "type": "string", - "description": "(Optional) Use this to search for a case-insensitive key-phrase in books' bookshelves or subjects.", - "examples": [ "children", "fantasy" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "6fe89830-d04d-401b-aad6-6552ffa5c4af", - "name": "Harness", - "dockerRepository": "farosai/airbyte-harness-source", - "dockerImageTag": "0.1.23", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/harness", - "icon": "harness.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.faros.ai", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Harness Spec", - "type": "object", - "required": [ "api_key", "account_id" ], - "additionalProperties": false, - "properties": { - "api_key": { - "type": "string", - "title": "Harness API key", - "airbyte_secret": true - }, - "account_id": { - "type": "string", - "title": "Harness account ID" - }, - "api_url": { - "type": "string", - "title": "Harness API URL", - "default": "https://app.harness.io", - "examples": [ "https://my-harness-server.example.com" ] - }, - "cutoff_days": { - "type": "number", - "title": "Harness Cutoff Days", - "default": 90, - "description": "Only fetch deployments updated after cutoff" - }, - "page_size": { - "type": "number", - "title": "Harness Page Size", - "default": 100, - "description": "number of pipelines (builds) to fetch per call" - }, - "deployment_timeout": { - "type": "number", - "title": "Harness Deployment Timeout", - "default": 24, - "description": "Max number of hours to consider for a deployment to be running/queued before giving up on syncing it" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "fe2b4084-3386-4d3b-9ad6-308f61a6f1e6", - "name": "Harvest", - "dockerRepository": "airbyte/source-harvest", - "dockerImageTag": "0.1.17", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/harvest", - "icon": "harvest.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/harvest", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Harvest Spec", - "type": "object", - "required": [ "account_id", "replication_start_date" ], - "additionalProperties": true, - "properties": { - "account_id": { - "title": "Account ID", - "description": "Harvest account ID. Required for all Harvest requests in pair with Personal Access Token", - "airbyte_secret": true, - "type": "string", - "order": 0 - }, - "replication_start_date": { - "title": "Start Date", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2017-01-25T00:00:00Z" ], - "type": "string", - "order": 1, - "format": "date-time" - }, - "replication_end_date": { - "title": "End Date", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data after this date will not be replicated.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2017-01-25T00:00:00Z" ], - "type": "string", - "airbyte_hidden": true, - "order": 2, - "format": "date-time" - }, - "credentials": { - "title": "Authentication mechanism", - "description": "Choose how to authenticate to Harvest.", - "type": "object", - "order": 3, - "oneOf": [ { - "type": "object", - "title": "Authenticate via Harvest (OAuth)", - "required": [ "client_id", "client_secret", "refresh_token" ], - "additionalProperties": true, - "properties": { - "auth_type": { - "type": "string", - "const": "Client", - "order": 0 - }, - "client_id": { - "title": "Client ID", - "type": "string", - "description": "The Client ID of your Harvest developer application." - }, - "client_secret": { - "title": "Client Secret", - "type": "string", - "description": "The Client Secret of your Harvest developer application.", - "airbyte_secret": true - }, - "refresh_token": { - "title": "Refresh Token", - "type": "string", - "description": "Refresh Token to renew the expired Access Token.", - "airbyte_secret": true - } - } - }, { - "type": "object", - "title": "Authenticate with Personal Access Token", - "required": [ "api_token" ], - "additionalProperties": true, - "properties": { - "auth_type": { - "type": "string", - "const": "Token", - "order": 0 - }, - "api_token": { - "title": "Personal Access Token", - "description": "Log into Harvest and then create new personal access token.", - "type": "string", - "airbyte_secret": true - } - } - } ] - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "append" ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ "credentials", "0" ], - "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], - "oauthFlowOutputParameters": [ [ "refresh_token" ] ] - } - }, - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "auth_type" ], - "predicate_value": "Client", - "oauth_config_specification": { - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": true, - "properties": { - "refresh_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "refresh_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": true, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": true, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "api.harvestapp.com" ] - } - }, { - "sourceDefinitionId": "492b56d1-937c-462e-8076-21ad2031e784", - "name": "Hellobaton", - "dockerRepository": "airbyte/source-hellobaton", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/hellobaton", - "icon": "hellobaton.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Hellobaton Spec", - "type": "object", - "required": [ "api_key", "company" ], - "additionalProperties": false, - "properties": { - "api_key": { - "type": "string", - "description": "authentication key required to access the api endpoints", - "airbyte_secret": true - }, - "company": { - "type": "string", - "description": "Company name that generates your base api url", - "examples": [ "google", "facebook", "microsoft" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "8097ceb9-383f-42f6-9f92-d3fd4bcc7689", - "name": "Hubplanner", - "dockerRepository": "airbyte/source-hubplanner", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/hubplanner", - "icon": "hubplanner.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/hubplanner", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Hubplanner Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "description": "Hubplanner API key. See https://github.com/hubplanner/API#authentication for more details.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "36c891d9-4bd9-43ac-bad2-10e12756272c", - "name": "HubSpot", - "dockerRepository": "airbyte/source-hubspot", - "dockerImageTag": "0.6.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/hubspot", - "icon": "hubspot.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/hubspot", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "HubSpot Source Spec", - "type": "object", - "required": [ "start_date", "credentials" ], - "additionalProperties": true, - "properties": { - "start_date": { - "type": "string", - "title": "Start date", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", - "examples": [ "2017-01-25T00:00:00Z" ], - "format": "date-time" - }, - "credentials": { - "title": "Authentication", - "description": "Choose how to authenticate to HubSpot.", - "type": "object", - "oneOf": [ { - "type": "object", - "title": "OAuth", - "required": [ "client_id", "client_secret", "refresh_token", "credentials_title" ], - "properties": { - "credentials_title": { - "type": "string", - "title": "Credentials", - "description": "Name of the credentials", - "const": "OAuth Credentials", - "order": 0 - }, - "client_id": { - "title": "Client ID", - "description": "The Client ID of your HubSpot developer application. See the Hubspot docs if you need help finding this ID.", - "type": "string", - "examples": [ "123456789000" ] - }, - "client_secret": { - "title": "Client Secret", - "description": "The client secret for your HubSpot developer application. See the Hubspot docs if you need help finding this secret.", - "type": "string", - "examples": [ "secret" ], - "airbyte_secret": true - }, - "refresh_token": { - "title": "Refresh Token", - "description": "Refresh token to renew an expired access token. See the Hubspot docs if you need help finding this token.", - "type": "string", - "examples": [ "refresh_token" ], - "airbyte_secret": true - } - } - }, { - "type": "object", - "title": "Private App", - "required": [ "access_token", "credentials_title" ], - "properties": { - "credentials_title": { - "type": "string", - "title": "Credentials", - "description": "Name of the credentials set", - "const": "Private App Credentials", - "order": 0 - }, - "access_token": { - "title": "Access token", - "description": "HubSpot Access token. See the Hubspot docs if you need help finding this token.", - "type": "string", - "airbyte_secret": true - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ "credentials", "0" ], - "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], - "oauthFlowOutputParameters": [ [ "refresh_token" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "api.hubapi.com" ] - } - }, { - "sourceDefinitionId": "f23b7b7c-d705-49a3-9042-09add3b104a5", - "name": "IP2Whois", - "dockerRepository": "airbyte/source-ip2whois", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/ip2whois", - "icon": "ip2whois.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/ip2whois", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Ip2whois Spec", - "type": "object", - "additionalProperties": true, - "properties": { - "api_key": { - "title": "API key", - "type": "string", - "description": "Your API Key. See here.", - "airbyte_secret": true - }, - "domain": { - "title": "Domain", - "type": "string", - "description": "Domain name. See here.", - "examples": [ "www.google.com", "www.facebook.com" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "447e0381-3780-4b46-bb62-00a4e3c8b8e2", - "name": "IBM Db2", - "dockerRepository": "airbyte/source-db2", - "dockerImageTag": "0.1.19", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/db2", - "icon": "db2.svg", - "sourceType": "database", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/db2", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "IBM Db2 Source Spec", - "type": "object", - "required": [ "host", "port", "db", "username", "password", "encryption" ], - "properties": { - "host": { - "description": "Host of the Db2.", - "type": "string", - "order": 0 - }, - "port": { - "description": "Port of the database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 8123, - "examples": [ "8123" ], - "order": 1 - }, - "db": { - "description": "Name of the database.", - "type": "string", - "examples": [ "default" ], - "order": 2 - }, - "username": { - "description": "Username to use to access the database.", - "type": "string", - "order": 3 - }, - "password": { - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 4 - }, - "jdbc_url_params": { - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", - "title": "JDBC URL Params", - "type": "string", - "order": 5 - }, - "encryption": { - "title": "Encryption", - "type": "object", - "description": "Encryption method to use when communicating with the database", - "order": 6, - "oneOf": [ { - "title": "Unencrypted", - "description": "Data transfer will not be encrypted.", - "required": [ "encryption_method" ], - "properties": { - "encryption_method": { - "type": "string", - "const": "unencrypted" - } - } - }, { - "title": "TLS Encrypted (verify certificate)", - "description": "Verify and use the cert provided by the server.", - "required": [ "encryption_method", "ssl_certificate" ], - "properties": { - "encryption_method": { - "type": "string", - "const": "encrypted_verify_certificate" - }, - "ssl_certificate": { - "title": "SSL PEM file", - "description": "Privacy Enhanced Mail (PEM) files are concatenated certificate containers frequently used in certificate installations", - "type": "string", - "airbyte_secret": true, - "multiline": true - }, - "key_store_password": { - "title": "Key Store Password. This field is optional. If you do not fill in this field, the password will be randomly generated.", - "description": "Key Store Password", - "type": "string", - "airbyte_secret": true - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "allowedHosts": { - "hosts": [ "${host}" ] - } - }, { - "sourceDefinitionId": "38f84314-fe6a-4257-97be-a8dcd942d693", - "name": "Insightly", - "dockerRepository": "airbyte/source-insightly", - "dockerImageTag": "0.1.2", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/insightly", - "icon": "insightly.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/insightly", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Insightly Spec", - "type": "object", - "required": [ "token", "start_date" ], - "additionalProperties": true, - "properties": { - "token": { - "type": [ "string", "null" ], - "title": "API Token", - "description": "Your Insightly API token.", - "airbyte_secret": true - }, - "start_date": { - "type": [ "string", "null" ], - "title": "Start Date", - "description": "The date from which you'd like to replicate data for Insightly in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated. Note that it will be used only for incremental streams.", - "examples": [ "2021-03-01T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "6acf6b55-4f1e-4fca-944e-1a3caef8aba8", - "name": "Instagram", - "dockerRepository": "airbyte/source-instagram", - "dockerImageTag": "1.0.5", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/instagram", - "icon": "instagram.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/instagram", - "changelogUrl": "https://docs.airbyte.com/integrations/sources/instagram", - "connectionSpecification": { - "title": "Source Instagram", - "type": "object", - "properties": { - "start_date": { - "title": "Start Date", - "description": "The date from which you'd like to replicate data for User Insights, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2017-01-25T00:00:00Z" ], - "type": "string", - "format": "date-time" - }, - "access_token": { - "title": "Access Token", - "description": "The value of the access token generated with instagram_basic, instagram_manage_insights, pages_show_list, pages_read_engagement, Instagram Public Content Access permissions. See the docs for more information", - "airbyte_secret": true, - "type": "string" - } - }, - "required": [ "start_date", "access_token" ] - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "append" ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ ], - "oauthFlowInitParameters": [ ], - "oauthFlowOutputParameters": [ [ "access_token" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "graph.facebook.com" ] - } - }, { - "sourceDefinitionId": "1901024c-0249-45d0-bcac-31a954652927", - "name": "Instatus", - "dockerRepository": "airbyte/source-instatus", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/instatus", - "icon": "instatus.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/instatus", - "connectionSpecification": { - "title": "Instatus Spec", - "type": "object", - "additionalProperties": true, - "required": [ "api_key" ], - "properties": { - "api_key": { - "type": "string", - "title": "Rest API Key", - "airbyte_secret": true, - "description": "Instatus REST API key" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "d8313939-3782-41b0-be29-b3ca20d8dd3a", - "name": "Intercom", - "dockerRepository": "airbyte/source-intercom", - "dockerImageTag": "0.2.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/intercom", - "icon": "intercom.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/intercom", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Source Intercom Spec", - "type": "object", - "required": [ "start_date", "access_token" ], - "additionalProperties": true, - "properties": { - "start_date": { - "type": "string", - "title": "Start date", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", - "examples": [ "2020-11-16T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "format": "date-time" - }, - "access_token": { - "title": "Access token", - "type": "string", - "description": "Access token for making authenticated requests. See the Intercom docs for more information.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ ], - "oauthFlowInitParameters": [ ], - "oauthFlowOutputParameters": [ [ "access_token" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "api.intercom.io" ] - } - }, { - "sourceDefinitionId": "3d15163b-11d8-412f-b808-795c9b2c3a3a", - "name": "Intruder", - "dockerRepository": "airbyte/source-intruder", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/intruder", - "icon": "intruder.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/intruder", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Intruder Spec", - "type": "object", - "required": [ "access_token" ], - "additionalProperties": true, - "properties": { - "access_token": { - "title": "API Access token", - "type": "string", - "description": "Your API Access token. See here.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "2e875208-0c0b-4ee4-9e92-1cb3156ea799", - "name": "Iterable", - "dockerRepository": "airbyte/source-iterable", - "dockerImageTag": "0.1.27", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/iterable", - "icon": "iterable.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/iterable", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Iterable Spec", - "type": "object", - "required": [ "start_date", "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "title": "API Key", - "description": "Iterable API Key. See the docs for more information on how to obtain this key.", - "airbyte_secret": true, - "order": 0 - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "The date from which you'd like to replicate data for Iterable, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", - "examples": [ "2021-04-01T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "order": 1, - "format": "date-time" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "api.iterable.com" ] - } - }, { - "sourceDefinitionId": "d6f73702-d7a0-4e95-9758-b0fb1af0bfba", - "name": "Jenkins", - "dockerRepository": "farosai/airbyte-jenkins-source", - "dockerImageTag": "0.1.23", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/jenkins", - "icon": "jenkins.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.faros.ai", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Jenkins Spec", - "type": "object", - "required": [ "server_url", "user", "token" ], - "additionalProperties": false, - "properties": { - "server_url": { - "type": "string", - "title": "Jenkins Server URL", - "examples": [ "https://my-jenkins-server.example.com" ] - }, - "user": { - "type": "string", - "description": "Jenkins User" - }, - "token": { - "type": "string", - "title": "Jenkins Token", - "airbyte_secret": true - }, - "depth": { - "type": "number", - "title": "Depth", - "description": "Jenkins JSON API does not support deep scan, it is required to generate a suitable tree for the corresponding depth. Job in some cases have many sub jobs, depth needs to quantify how many sub jobs are showed. If depth is not provided we will try to compute it automatically" - }, - "pageSize": { - "type": "integer", - "minimum": 1, - "default": 10, - "title": "Page Size", - "description": "Quantity of jobs on a single page fetched from Jenkins" - }, - "last100Builds": { - "type": "boolean", - "default": false, - "title": "Last 100 Builds Only", - "description": "Fetch only 100 last builds from Jenkins server" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "68e63de2-bb83-4c7e-93fa-a8a9051e3993", - "name": "Jira", - "dockerRepository": "airbyte/source-jira", - "dockerImageTag": "0.3.7", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/jira", - "icon": "jira.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/jira", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Jira Spec", - "type": "object", - "required": [ "api_token", "domain", "email" ], - "additionalProperties": true, - "properties": { - "api_token": { - "type": "string", - "title": "API Token", - "description": "Jira API Token. See the docs for more information on how to generate this key.", - "airbyte_secret": true, - "order": 0 - }, - "domain": { - "type": "string", - "title": "Domain", - "examples": [ ".atlassian.net", ".jira.com", "jira..com" ], - "description": "The Domain for your Jira account, e.g. airbyteio.atlassian.net, airbyteio.jira.com, jira.your-domain.com", - "order": 1 - }, - "email": { - "type": "string", - "title": "Email", - "description": "The user email for your Jira account.", - "order": 2 - }, - "projects": { - "type": "array", - "title": "Projects", - "items": { - "type": "string" - }, - "examples": [ "PROJ1", "PROJ2" ], - "description": "List of Jira project keys to replicate data for.", - "order": 3 - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "The date from which you want to replicate data from Jira, use the format YYYY-MM-DDT00:00:00Z. Note that this field only applies to certain streams, and only data generated on or after the start date will be replicated. For more information, refer to the documentation.", - "examples": [ "2021-03-01T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "format": "date-time", - "order": 4 - }, - "expand_issue_changelog": { - "type": "boolean", - "title": "Expand Issue Changelog", - "description": "Expand the changelog when replicating issues.", - "default": false, - "order": 5 - }, - "render_fields": { - "type": "boolean", - "title": "Render Issue Fields", - "description": "Render issue fields in HTML format in addition to Jira JSON-like format.", - "default": false, - "order": 6 - }, - "enable_experimental_streams": { - "type": "boolean", - "title": "Enable Experimental Streams", - "description": "Allow the use of experimental streams which rely on undocumented Jira API endpoints. See https://docs.airbyte.com/integrations/sources/jira#experimental-tables for more info.", - "default": false, - "order": 7 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "${domain}" ] - }, - "maxSecondsBetweenMessages": 21600 - }, { - "sourceDefinitionId": "e300ece7-b073-43a3-852e-8aff36a57f13", - "name": "K6 Cloud", - "dockerRepository": "airbyte/source-k6-cloud", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/k6-cloud", - "icon": "k6cloud.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/k6-cloud", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "K6 Cloud Spec", - "type": "object", - "required": [ "api_token" ], - "additionalProperties": true, - "properties": { - "api_token": { - "title": "Api Token", - "type": "string", - "description": "Your API Token. See here. The key is case sensitive.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "d917a47b-8537-4d0d-8c10-36a9928d4265", - "name": "Kafka", - "dockerRepository": "airbyte/source-kafka", - "dockerImageTag": "0.2.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/kafka", - "icon": "kafka.svg", - "sourceType": "database", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/kafka", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Kafka Source Spec", - "type": "object", - "required": [ "bootstrap_servers", "subscription", "protocol" ], - "additionalProperties": true, - "properties": { - "MessageFormat": { - "title": "MessageFormat", - "type": "object", - "description": "The serialization used based on this ", - "oneOf": [ { - "title": "JSON", - "properties": { - "deserialization_type": { - "type": "string", - "const": "JSON" - } - } - }, { - "title": "AVRO", - "properties": { - "deserialization_type": { - "const": "AVRO" - }, - "deserialization_strategy": { - "type": "string", - "enum": [ "TopicNameStrategy", "RecordNameStrategy", "TopicRecordNameStrategy" ], - "default": "TopicNameStrategy" - }, - "schema_registry_url": { - "type": "string", - "examples": [ "http://localhost:8081" ] - }, - "schema_registry_username": { - "type": "string", - "default": "" - }, - "schema_registry_password": { - "type": "string", - "default": "" - } - } - } ] - }, - "bootstrap_servers": { - "title": "Bootstrap Servers", - "description": "A list of host/port pairs to use for establishing the initial connection to the Kafka cluster. The client will make use of all servers irrespective of which servers are specified here for bootstrapping—this list only impacts the initial hosts used to discover the full set of servers. This list should be in the form host1:port1,host2:port2,.... Since these servers are just used for the initial connection to discover the full cluster membership (which may change dynamically), this list need not contain the full set of servers (you may want more than one, though, in case a server is down).", - "type": "string", - "examples": [ "kafka-broker1:9092,kafka-broker2:9092" ] - }, - "subscription": { - "title": "Subscription Method", - "type": "object", - "description": "You can choose to manually assign a list of partitions, or subscribe to all topics matching specified pattern to get dynamically assigned partitions.", - "oneOf": [ { - "title": "Manually assign a list of partitions", - "required": [ "subscription_type", "topic_partitions" ], - "properties": { - "subscription_type": { - "description": "Manually assign a list of partitions to this consumer. This interface does not allow for incremental assignment and will replace the previous assignment (if there is one).\nIf the given list of topic partitions is empty, it is treated the same as unsubscribe().", - "type": "string", - "const": "assign" - }, - "topic_partitions": { - "title": "List of topic:partition Pairs", - "type": "string", - "examples": [ "sample.topic:0, sample.topic:1" ] - } - } - }, { - "title": "Subscribe to all topics matching specified pattern", - "required": [ "subscription_type", "topic_pattern" ], - "properties": { - "subscription_type": { - "description": "The Topic pattern from which the records will be read.", - "type": "string", - "const": "subscribe" - }, - "topic_pattern": { - "title": "Topic Pattern", - "type": "string", - "examples": [ "sample.topic" ] - } - } - } ] - }, - "test_topic": { - "title": "Test Topic", - "description": "The Topic to test in case the Airbyte can consume messages.", - "type": "string", - "examples": [ "test.topic" ] - }, - "group_id": { - "title": "Group ID", - "description": "The Group ID is how you distinguish different consumer groups.", - "type": "string", - "examples": [ "group.id" ] - }, - "max_poll_records": { - "title": "Max Poll Records", - "description": "The maximum number of records returned in a single call to poll(). Note, that max_poll_records does not impact the underlying fetching behavior. The consumer will cache the records from each fetch request and returns them incrementally from each poll.", - "type": "integer", - "default": 500 - }, - "polling_time": { - "title": "Polling Time", - "description": "Amount of time Kafka connector should try to poll for messages.", - "type": "integer", - "default": 100 - }, - "protocol": { - "title": "Protocol", - "type": "object", - "description": "The Protocol used to communicate with brokers.", - "oneOf": [ { - "title": "PLAINTEXT", - "required": [ "security_protocol" ], - "properties": { - "security_protocol": { - "type": "string", - "const": "PLAINTEXT" - } - } - }, { - "title": "SASL PLAINTEXT", - "required": [ "security_protocol", "sasl_mechanism", "sasl_jaas_config" ], - "properties": { - "security_protocol": { - "type": "string", - "const": "SASL_PLAINTEXT" - }, - "sasl_mechanism": { - "title": "SASL Mechanism", - "description": "The SASL mechanism used for client connections. This may be any mechanism for which a security provider is available.", - "type": "string", - "const": "PLAIN" - }, - "sasl_jaas_config": { - "title": "SASL JAAS Config", - "description": "The JAAS login context parameters for SASL connections in the format used by JAAS configuration files.", - "type": "string", - "default": "", - "airbyte_secret": true - } - } - }, { - "title": "SASL SSL", - "required": [ "security_protocol", "sasl_mechanism", "sasl_jaas_config" ], - "properties": { - "security_protocol": { - "type": "string", - "const": "SASL_SSL" - }, - "sasl_mechanism": { - "title": "SASL Mechanism", - "description": "The SASL mechanism used for client connections. This may be any mechanism for which a security provider is available.", - "type": "string", - "default": "GSSAPI", - "enum": [ "GSSAPI", "OAUTHBEARER", "SCRAM-SHA-256", "SCRAM-SHA-512", "PLAIN" ] - }, - "sasl_jaas_config": { - "title": "SASL JAAS Config", - "description": "The JAAS login context parameters for SASL connections in the format used by JAAS configuration files.", - "type": "string", - "default": "", - "airbyte_secret": true - } - } - } ] - }, - "client_id": { - "title": "Client ID", - "description": "An ID string to pass to the server when making requests. The purpose of this is to be able to track the source of requests beyond just ip/port by allowing a logical application name to be included in server-side request logging.", - "type": "string", - "examples": [ "airbyte-consumer" ] - }, - "enable_auto_commit": { - "title": "Enable Auto Commit", - "description": "If true, the consumer's offset will be periodically committed in the background.", - "type": "boolean", - "default": true - }, - "auto_commit_interval_ms": { - "title": "Auto Commit Interval, ms", - "description": "The frequency in milliseconds that the consumer offsets are auto-committed to Kafka if enable.auto.commit is set to true.", - "type": "integer", - "default": 5000 - }, - "client_dns_lookup": { - "title": "Client DNS Lookup", - "description": "Controls how the client uses DNS lookups. If set to use_all_dns_ips, connect to each returned IP address in sequence until a successful connection is established. After a disconnection, the next IP is used. Once all IPs have been used once, the client resolves the IP(s) from the hostname again. If set to resolve_canonical_bootstrap_servers_only, resolve each bootstrap address into a list of canonical names. After the bootstrap phase, this behaves the same as use_all_dns_ips. If set to default (deprecated), attempt to connect to the first IP address returned by the lookup, even if the lookup returns multiple IP addresses.", - "type": "string", - "default": "use_all_dns_ips", - "enum": [ "default", "use_all_dns_ips", "resolve_canonical_bootstrap_servers_only" ] - }, - "retry_backoff_ms": { - "title": "Retry Backoff, ms", - "description": "The amount of time to wait before attempting to retry a failed request to a given topic partition. This avoids repeatedly sending requests in a tight loop under some failure scenarios.", - "type": "integer", - "default": 100 - }, - "request_timeout_ms": { - "title": "Request Timeout, ms", - "description": "The configuration controls the maximum amount of time the client will wait for the response of a request. If the response is not received before the timeout elapses the client will resend the request if necessary or fail the request if retries are exhausted.", - "type": "integer", - "default": 30000 - }, - "receive_buffer_bytes": { - "title": "Receive Buffer, bytes", - "description": "The size of the TCP receive buffer (SO_RCVBUF) to use when reading data. If the value is -1, the OS default will be used.", - "type": "integer", - "default": 32768 - }, - "auto_offset_reset": { - "title": "Auto Offset Reset", - "description": "What to do when there is no initial offset in Kafka or if the current offset does not exist any more on the server - earliest: automatically reset the offset to the earliest offset, latest: automatically reset the offset to the latest offset, none: throw exception to the consumer if no previous offset is found for the consumer's group, anything else: throw exception to the consumer.", - "type": "string", - "default": "latest", - "enum": [ "latest", "earliest", "none" ] - }, - "repeated_calls": { - "title": "Repeated Calls", - "description": "The number of repeated calls to poll() if no messages were received.", - "type": "integer", - "default": 3 - }, - "max_records_process": { - "title": "Maximum Records", - "description": "The Maximum to be processed per execution", - "type": "integer", - "default": 100000 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "supported_source_sync_modes": [ "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "60c24725-00ae-490c-991d-55b78c3197e0", - "name": "Klarna", - "dockerRepository": "airbyte/source-klarna", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/klarna", - "icon": "klarna.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/klarna", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Klarna Spec", - "type": "object", - "required": [ "region", "playground", "username", "password" ], - "additionalProperties": true, - "properties": { - "region": { - "title": "Region", - "type": "string", - "enum": [ "eu", "us", "oc" ], - "description": "Base url region (For playground eu https://docs.klarna.com/klarna-payments/api/payments-api/#tag/API-URLs). Supported 'eu', 'us', 'oc'" - }, - "playground": { - "title": "Playground", - "type": "boolean", - "description": "Propertie defining if connector is used against playground or production environment", - "default": false - }, - "username": { - "title": "Username", - "type": "string", - "description": "Consists of your Merchant ID (eid) - a unique number that identifies your e-store, combined with a random string (https://developers.klarna.com/api/#authentication)" - }, - "password": { - "title": "Password", - "type": "string", - "description": "A string which is associated with your Merchant ID and is used to authorize use of Klarna's APIs (https://developers.klarna.com/api/#authentication)", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "95e8cffd-b8c4-4039-968e-d32fb4a69bde", - "name": "Klaviyo", - "dockerRepository": "airbyte/source-klaviyo", - "dockerImageTag": "0.3.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/klaviyo", - "icon": "klaviyo.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/klaviyo", - "changelogUrl": "https://docs.airbyte.com/integrations/sources/klaviyo", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Klaviyo Spec", - "type": "object", - "properties": { - "api_key": { - "title": "Api Key", - "description": "Klaviyo API Key. See our docs if you need help finding this key.", - "airbyte_secret": true, - "type": "string" - }, - "start_date": { - "title": "Start Date", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2017-01-25T00:00:00Z" ], - "type": "string", - "format": "date-time" - } - }, - "required": [ "api_key", "start_date" ] - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "a.klaviyo.com", "klaviyo.com" ] - } - }, { - "sourceDefinitionId": "547dc08e-ab51-421d-953b-8f3745201a8c", - "name": "Kyriba", - "dockerRepository": "airbyte/source-kyriba", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/kyriba", - "icon": "kyriba.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Kyriba Spec", - "type": "object", - "required": [ "domain", "username", "password", "start_date" ], - "additionalProperties": false, - "properties": { - "domain": { - "type": "string", - "description": "Kyriba domain", - "title": "Domain", - "examples": [ "demo.kyriba.com" ], - "pattern": "^[a-zA-Z0-9._-]*\\.[a-zA-Z0-9._-]*\\.[a-z]*" - }, - "username": { - "type": "string", - "description": "Username to be used in basic auth", - "title": "Username" - }, - "password": { - "type": "string", - "description": "Password to be used in basic auth", - "title": "Password", - "airbyte_secret": true - }, - "start_date": { - "type": "string", - "description": "The date the sync should start from.", - "title": "Start Date", - "examples": [ "2021-01-10" ], - "pattern": "^\\d{4}\\-(0[1-9]|1[012])\\-(0[1-9]|[12][0-9]|3[01])$" - }, - "end_date": { - "type": "string", - "description": "The date the sync should end. If let empty the sync will run to the current date.", - "title": "End Date", - "examples": [ "2022-03-01" ], - "pattern": "^(?:(\\d{4}\\-(0[1-9]|1[012])\\-(0[1-9]|[12][0-9]|3[01]))|)$" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "f96bb511-5e3c-48fc-b408-547953cd81a4", - "name": "LaunchDarkly", - "dockerRepository": "airbyte/source-launchdarkly", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/launchdarkly", - "icon": "launchdarkly.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/launchdarkly", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Launchdarkly Spec", - "type": "object", - "required": [ "access_token" ], - "additionalProperties": true, - "properties": { - "access_token": { - "title": "Access token", - "type": "string", - "description": "Your Access token. See here.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "789f8e7a-2d28-11ec-8d3d-0242ac130003", - "name": "Lemlist", - "dockerRepository": "airbyte/source-lemlist", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/lemlist", - "icon": "lemlist.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/lemlist", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Lemlist Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": false, - "properties": { - "api_key": { - "type": "string", - "title": "API key", - "description": "Lemlist API key.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "3981c999-bd7d-4afc-849b-e53dea90c948", - "name": "Lever Hiring", - "dockerRepository": "airbyte/source-lever-hiring", - "dockerImageTag": "0.1.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/lever-hiring", - "icon": "leverhiring.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/lever-hiring", - "changelogUrl": "https://docs.airbyte.com/integrations/sources/lever-hiring#changelog", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Lever Hiring Source Spec", - "type": "object", - "required": [ "start_date" ], - "additionalProperties": true, - "properties": { - "credentials": { - "order": 3, - "title": "Authentication Mechanism", - "description": "Choose how to authenticate to Lever Hiring.", - "type": "object", - "oneOf": [ { - "type": "object", - "title": "Authenticate via Lever (OAuth)", - "required": [ "refresh_token" ], - "properties": { - "auth_type": { - "type": "string", - "const": "Client", - "order": 0 - }, - "client_id": { - "title": "Client ID", - "type": "string", - "description": "The Client ID of your Lever Hiring developer application." - }, - "client_secret": { - "title": "Client Secret", - "type": "string", - "description": "The Client Secret of your Lever Hiring developer application.", - "airbyte_secret": true - }, - "refresh_token": { - "type": "string", - "title": "Refresh Token", - "description": "The token for obtaining new access token.", - "airbyte_secret": true - } - } - }, { - "type": "object", - "title": "Authenticate via Lever (Api Key)", - "required": [ "api_key" ], - "properties": { - "auth_type": { - "type": "string", - "const": "Api Key", - "order": 0 - }, - "api_key": { - "title": "Api key", - "type": "string", - "description": "The Api Key of your Lever Hiring account.", - "airbyte_secret": true, - "order": 1 - } - } - } ] - }, - "start_date": { - "order": 0, - "type": "string", - "title": "Start Date", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated. Note that it will be used only in the following incremental streams: comments, commits, and issues.", - "examples": [ "2021-03-01T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$" - }, - "environment": { - "order": 1, - "type": "string", - "title": "Environment", - "description": "The environment in which you'd like to replicate data for Lever. This is used to determine which Lever API endpoint to use.", - "default": "Sandbox", - "enum": [ "Production", "Sandbox" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ "credentials", "0" ], - "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], - "oauthFlowOutputParameters": [ [ "refresh_token" ] ] - } - }, - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "auth_type" ], - "predicate_value": "Client", - "oauth_config_specification": { - "oauth_user_input_from_connector_config_specification": { - "type": "object", - "properties": { - "environment": { - "type": "string", - "path_in_connector_config": [ "environment" ] - } - } - }, - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "refresh_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "refresh_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "137ece28-5434-455c-8f34-69dc3782f451", - "name": "LinkedIn Ads", - "dockerRepository": "airbyte/source-linkedin-ads", - "dockerImageTag": "0.1.15", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/linkedin-ads", - "icon": "linkedin.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/linkedin-ads", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Linkedin Ads Spec", - "type": "object", - "required": [ "start_date" ], - "additionalProperties": true, - "properties": { - "credentials": { - "title": "Authentication", - "type": "object", - "oneOf": [ { - "type": "object", - "title": "OAuth2.0", - "required": [ "client_id", "client_secret", "refresh_token" ], - "properties": { - "auth_method": { - "type": "string", - "const": "oAuth2.0" - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "The client ID of the LinkedIn Ads developer application.", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "title": "Client secret", - "description": "The client secret the LinkedIn Ads developer application.", - "airbyte_secret": true - }, - "refresh_token": { - "type": "string", - "title": "Refresh token", - "description": "The key to refresh the expired access token.", - "airbyte_secret": true - } - } - }, { - "title": "Access token", - "type": "object", - "required": [ "access_token" ], - "properties": { - "auth_method": { - "type": "string", - "const": "access_token" - }, - "access_token": { - "type": "string", - "title": "Access token", - "description": "The token value generated using the authentication code. See the docs to obtain yours.", - "airbyte_secret": true - } - } - } ] - }, - "start_date": { - "type": "string", - "title": "Start date", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "description": "UTC date in the format 2020-09-17. Any data before this date will not be replicated.", - "examples": [ "2021-05-17" ], - "format": "date" - }, - "account_ids": { - "title": "Account IDs", - "type": "array", - "description": "Specify the account IDs separated by a space, to pull the data from. Leave empty, if you want to pull the data from all associated accounts. See the LinkedIn Ads docs for more info.", - "items": { - "type": "integer" - }, - "default": [ ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ "credentials", "0" ], - "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], - "oauthFlowOutputParameters": [ [ "refresh_token" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "api.linkedin.com" ] - }, - "maxSecondsBetweenMessages": 21600 - }, { - "sourceDefinitionId": "af54297c-e8f8-4d63-a00d-a94695acc9d3", - "name": "LinkedIn Pages", - "dockerRepository": "airbyte/source-linkedin-pages", - "dockerImageTag": "1.0.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/linkedin-pages", - "icon": "linkedin.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/linkedin-pages/", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Linkedin Pages Spec", - "type": "object", - "required": [ "org_id" ], - "additionalProperties": true, - "properties": { - "org_id": { - "title": "Organization ID", - "type": "string", - "airbyte_secret": true, - "description": "Specify the Organization ID", - "examples": [ "123456789" ] - }, - "credentials": { - "title": "Authentication", - "type": "object", - "oneOf": [ { - "type": "object", - "title": "OAuth2.0", - "required": [ "client_id", "client_secret", "refresh_token" ], - "properties": { - "auth_method": { - "type": "string", - "const": "oAuth2.0" - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "The client ID of the LinkedIn developer application.", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "title": "Client secret", - "description": "The client secret of the LinkedIn developer application.", - "airbyte_secret": true - }, - "refresh_token": { - "type": "string", - "title": "Refresh token", - "description": "The token value generated using the LinkedIn Developers OAuth Token Tools. See the docs to obtain yours.", - "airbyte_secret": true - } - } - }, { - "title": "Access token", - "type": "object", - "required": [ "access_token" ], - "properties": { - "auth_method": { - "type": "string", - "const": "access_token" - }, - "access_token": { - "type": "string", - "title": "Access token", - "description": "The token value generated using the LinkedIn Developers OAuth Token Tools. See the docs to obtain yours.", - "airbyte_secret": true - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "7b86879e-26c5-4ef6-a5ce-2be5c7b46d1e", - "name": "Linnworks", - "dockerRepository": "airbyte/source-linnworks", - "dockerImageTag": "0.1.5", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/linnworks", - "icon": "linnworks.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/linnworks", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Linnworks Spec", - "type": "object", - "required": [ "application_id", "application_secret", "token", "start_date" ], - "additionalProperties": false, - "properties": { - "application_id": { - "title": "Application ID.", - "description": "Linnworks Application ID", - "type": "string" - }, - "application_secret": { - "title": "Application Secret", - "description": "Linnworks Application Secret", - "type": "string", - "airbyte_secret": true - }, - "token": { - "title": "API Token", - "type": "string" - }, - "start_date": { - "title": "Start Date", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", - "type": "string", - "format": "date-time" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "45e0b135-615c-40ac-b38e-e65b0944197f", - "name": "Lokalise", - "dockerRepository": "airbyte/source-lokalise", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/lokalise", - "icon": "lokalise.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/lokalise", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Lokalise Spec", - "type": "object", - "required": [ "api_key", "project_id" ], - "additionalProperties": true, - "properties": { - "api_key": { - "title": "API Key", - "type": "string", - "description": "Lokalise API Key with read-access. Available at Profile settings > API tokens. See here.", - "airbyte_secret": true - }, - "project_id": { - "title": "Project Id", - "type": "string", - "description": "Lokalise project ID. Available at Project Settings > General." - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "00405b19-9768-4e0c-b1ae-9fc2ee2b2a8c", - "name": "Looker", - "dockerRepository": "airbyte/source-looker", - "dockerImageTag": "0.2.8", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/looker", - "icon": "looker.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/looker", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Looker Spec", - "type": "object", - "required": [ "domain", "client_id", "client_secret" ], - "additionalProperties": true, - "properties": { - "domain": { - "type": "string", - "title": "Domain", - "examples": [ "domainname.looker.com", "looker.clientname.com", "123.123.124.123:8000" ], - "description": "Domain for your Looker account, e.g. airbyte.cloud.looker.com,looker.[clientname].com,IP address" - }, - "client_id": { - "title": "Client ID", - "type": "string", - "description": "The Client ID is first part of an API3 key that is specific to each Looker user. See the docs for more information on how to generate this key." - }, - "client_secret": { - "title": "Client Secret", - "type": "string", - "description": "The Client Secret is second part of an API3 key.", - "airbyte_secret": true - }, - "run_look_ids": { - "title": "Look IDs to Run", - "type": "array", - "items": { - "type": "string", - "pattern": "^[0-9]*$" - }, - "description": "The IDs of any Looks to run" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "b03a9f3e-22a5-11eb-adc1-0242ac120002", - "name": "Mailchimp", - "dockerRepository": "airbyte/source-mailchimp", - "dockerImageTag": "0.4.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailchimp", - "icon": "mailchimp.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailchimp", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Mailchimp Spec", - "type": "object", - "required": [ ], - "additionalProperties": true, - "properties": { - "credentials": { - "type": "object", - "title": "Authentication", - "oneOf": [ { - "title": "OAuth2.0", - "type": "object", - "required": [ "auth_type", "access_token" ], - "properties": { - "auth_type": { - "type": "string", - "const": "oauth2.0", - "order": 0 - }, - "client_id": { - "title": "Client ID", - "type": "string", - "description": "The Client ID of your OAuth application.", - "airbyte_secret": true - }, - "client_secret": { - "title": "Client Secret", - "type": "string", - "description": "The Client Secret of your OAuth application.", - "airbyte_secret": true - }, - "access_token": { - "title": "Access Token", - "type": "string", - "description": "An access token generated using the above client ID and secret.", - "airbyte_secret": true - } - } - }, { - "type": "object", - "title": "API Key", - "required": [ "auth_type", "apikey" ], - "properties": { - "auth_type": { - "type": "string", - "const": "apikey", - "order": 1 - }, - "apikey": { - "type": "string", - "title": "API Key", - "description": "Mailchimp API Key. See the docs for information on how to generate this key.", - "airbyte_secret": true - } - } - } ] - }, - "campaign_id": { - "type": "string", - "title": "ID of a campaign to sync email activities", - "airbyte_hidden": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "auth_type" ], - "predicate_value": "oauth2.0", - "oauth_config_specification": { - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "access_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "access_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "*.api.mailchimp.com" ] - } - }, { - "sourceDefinitionId": "56582331-5de2-476b-b913-5798de77bbdf", - "name": "Mailjet Mail", - "dockerRepository": "airbyte/source-mailjet-mail", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailjet-mail", - "icon": "mailjetmail.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailjet-mail", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Mailjet Mail Spec", - "type": "object", - "required": [ "api_key", "api_key_secret" ], - "additionalProperties": true, - "properties": { - "api_key": { - "title": "API Key", - "type": "string", - "description": "Your API Key. See here." - }, - "api_key_secret": { - "title": "API Secret Key", - "type": "string", - "description": "Your API Secret Key. See here.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "6ec2acea-7fd1-4378-b403-41a666e0c028", - "name": "Mailjet SMS", - "dockerRepository": "airbyte/source-mailjet-sms", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailjet-sms", - "icon": "mailjetsms.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailjet-sms", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Mailjet Sms Spec", - "type": "object", - "required": [ "token" ], - "additionalProperties": true, - "properties": { - "token": { - "title": "Access Token", - "type": "string", - "description": "Your access token. See here.", - "airbyte_secret": true - }, - "start_date": { - "title": "Start date", - "type": "integer", - "description": "Retrieve SMS messages created after the specified timestamp. Required format - Unix timestamp.", - "pattern": "^[0-9]*$", - "examples": [ 1666261656 ] - }, - "end_date": { - "title": "End date", - "type": "integer", - "description": "Retrieve SMS messages created before the specified timestamp. Required format - Unix timestamp.", - "pattern": "^[0-9]*$", - "examples": [ 1666281656 ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "dc3b9003-2432-4e93-a7f4-4620b0f14674", - "name": "MailerLite", - "dockerRepository": "airbyte/source-mailerlite", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailerlite", - "icon": "mailerlite.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailerlite", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Mailerlite Spec", - "type": "object", - "required": [ "api_token" ], - "additionalProperties": true, - "properties": { - "api_token": { - "type": "string", - "description": "Your API Token. See here.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "2707d529-3c04-46eb-9c7e-40d4038df6f7", - "name": "MailerSend", - "dockerRepository": "airbyte/source-mailersend", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailersend", - "icon": "mailersend.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailersend", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Mailersend Spec", - "type": "object", - "required": [ "api_token", "domain_id" ], - "additionalProperties": true, - "properties": { - "api_token": { - "type": "string", - "description": "Your API Token. See here.", - "airbyte_secret": true - }, - "domain_id": { - "type": "string", - "description": "The domain entity in mailersend", - "examples": [ "airbyte.com", "linkana.com" ] - }, - "start_date": { - "type": "number", - "description": "Timestamp is assumed to be UTC.", - "examples": [ 123131321 ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "5b9cb09e-1003-4f9c-983d-5779d1b2cd51", - "name": "Mailgun", - "dockerRepository": "airbyte/source-mailgun", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailgun", - "icon": "mailgun.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailgun", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Source Mailgun Spec", - "type": "object", - "required": [ "private_key" ], - "additionalProperties": true, - "properties": { - "private_key": { - "type": "string", - "airbyte_secret": true, - "description": "Primary account API key to access your Mailgun data.", - "title": "Private API Key" - }, - "domain_region": { - "type": "string", - "description": "Domain region code. 'EU' or 'US' are possible values. The default is 'US'.", - "title": "Domain Region Code" - }, - "start_date": { - "title": "Replication Start Date", - "description": "UTC date and time in the format 2020-10-01 00:00:00. Any data before this date will not be replicated. If omitted, defaults to 3 days ago.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$", - "examples": [ "2020-10-01 00:00:00" ], - "type": "string", - "format": "date-time" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "9e0556f4-69df-4522-a3fb-03264d36b348", - "name": "Marketo", - "dockerRepository": "airbyte/source-marketo", - "dockerImageTag": "1.0.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/marketo", - "icon": "marketo.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/marketo", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Source Marketo Spec", - "type": "object", - "required": [ "domain_url", "client_id", "client_secret", "start_date" ], - "additionalProperties": true, - "properties": { - "domain_url": { - "title": "Domain URL", - "type": "string", - "order": 3, - "description": "Your Marketo Base URL. See the docs for info on how to obtain this.", - "examples": [ "https://000-AAA-000.mktorest.com" ], - "airbyte_secret": true - }, - "client_id": { - "title": "Client ID", - "type": "string", - "description": "The Client ID of your Marketo developer application. See the docs for info on how to obtain this.", - "order": 0, - "airbyte_secret": true - }, - "client_secret": { - "title": "Client Secret", - "type": "string", - "description": "The Client Secret of your Marketo developer application. See the docs for info on how to obtain this.", - "order": 1, - "airbyte_secret": true - }, - "start_date": { - "title": "Start Date", - "type": "string", - "order": 2, - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", - "examples": [ "2020-09-25T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "format": "date-time" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "*.mktorest.com" ] - } - }, { - "sourceDefinitionId": "c7cb421b-942e-4468-99ee-e369bcabaec5", - "name": "Metabase", - "dockerRepository": "airbyte/source-metabase", - "dockerImageTag": "0.3.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/metabase", - "icon": "metabase.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/metabase", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Metabase Source Spec", - "type": "object", - "required": [ "instance_api_url" ], - "additionalProperties": true, - "properties": { - "instance_api_url": { - "type": "string", - "title": "Metabase Instance API URL", - "description": "URL to your metabase instance API", - "examples": [ "https://localhost:3000/api/" ], - "pattern": "^https://", - "order": 0 - }, - "username": { - "type": "string", - "order": 1 - }, - "password": { - "type": "string", - "airbyte_secret": true, - "order": 2 - }, - "session_token": { - "type": "string", - "description": "To generate your session token, you need to run the following command: ``` curl -X POST \\\n -H \"Content-Type: application/json\" \\\n -d '{\"username\": \"person@metabase.com\", \"password\": \"fakepassword\"}' \\\n http://localhost:3000/api/session\n``` Then copy the value of the `id` field returned by a successful call to that API.\nNote that by default, sessions are good for 14 days and needs to be regenerated.", - "airbyte_secret": true, - "order": 3 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta" - }, { - "sourceDefinitionId": "b5ea17b1-f170-46dc-bc31-cc744ca984c1", - "name": "Microsoft SQL Server (MSSQL)", - "dockerRepository": "airbyte/source-mssql", - "dockerImageTag": "1.0.14", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mssql", - "icon": "mssql.svg", - "sourceType": "database", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mssql", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "MSSQL Source Spec", - "type": "object", - "required": [ "host", "port", "database", "username" ], - "properties": { - "host": { - "description": "The hostname of the database.", - "title": "Host", - "type": "string", - "order": 0 - }, - "port": { - "description": "The port of the database.", - "title": "Port", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "examples": [ "1433" ], - "order": 1 - }, - "database": { - "description": "The name of the database.", - "title": "Database", - "type": "string", - "examples": [ "master" ], - "order": 2 - }, - "schemas": { - "title": "Schemas", - "description": "The list of schemas to sync from. Defaults to user. Case sensitive.", - "type": "array", - "items": { - "type": "string" - }, - "minItems": 0, - "uniqueItems": true, - "default": [ "dbo" ], - "order": 3 - }, - "username": { - "description": "The username which is used to access the database.", - "title": "Username", - "type": "string", - "order": 4 - }, - "password": { - "description": "The password associated with the username.", - "title": "Password", - "type": "string", - "airbyte_secret": true, - "order": 5 - }, - "jdbc_url_params": { - "title": "JDBC URL Params", - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", - "type": "string", - "order": 6 - }, - "ssl_method": { - "title": "SSL Method", - "type": "object", - "description": "The encryption method which is used when communicating with the database.", - "order": 7, - "oneOf": [ { - "title": "Unencrypted", - "description": "Data transfer will not be encrypted.", - "required": [ "ssl_method" ], - "properties": { - "ssl_method": { - "type": "string", - "const": "unencrypted" - } - } - }, { - "title": "Encrypted (trust server certificate)", - "description": "Use the certificate provided by the server without verification. (For testing purposes only!)", - "required": [ "ssl_method" ], - "properties": { - "ssl_method": { - "type": "string", - "const": "encrypted_trust_server_certificate" - } - } - }, { - "title": "Encrypted (verify certificate)", - "description": "Verify and use the certificate provided by the server.", - "required": [ "ssl_method", "trustStoreName", "trustStorePassword" ], - "properties": { - "ssl_method": { - "type": "string", - "const": "encrypted_verify_certificate" - }, - "hostNameInCertificate": { - "title": "Host Name In Certificate", - "type": "string", - "description": "Specifies the host name of the server. The value of this property must match the subject property of the certificate.", - "order": 7 - } - } - } ] - }, - "replication_method": { - "type": "object", - "title": "Replication Method", - "description": "The replication method used for extracting data from the database. STANDARD replication requires no setup on the DB side but will not be able to represent deletions incrementally. CDC uses {TBC} to detect inserts, updates, and deletes. This needs to be configured on the source database itself.", - "default": "STANDARD", - "order": 8, - "oneOf": [ { - "title": "Standard", - "description": "Standard replication requires no setup on the DB side but will not be able to represent deletions incrementally.", - "required": [ "method" ], - "properties": { - "method": { - "type": "string", - "const": "STANDARD", - "order": 0 - } - } - }, { - "title": "Logical Replication (CDC)", - "description": "CDC uses {TBC} to detect inserts, updates, and deletes. This needs to be configured on the source database itself.", - "required": [ "method" ], - "properties": { - "method": { - "type": "string", - "const": "CDC", - "order": 0 - }, - "data_to_sync": { - "title": "Data to Sync", - "type": "string", - "default": "Existing and New", - "enum": [ "Existing and New", "New Changes Only" ], - "description": "What data should be synced under the CDC. \"Existing and New\" will read existing data as a snapshot, and sync new changes through CDC. \"New Changes Only\" will skip the initial snapshot, and only sync new changes through CDC.", - "order": 1 - }, - "snapshot_isolation": { - "title": "Initial Snapshot Isolation Level", - "type": "string", - "default": "Snapshot", - "enum": [ "Snapshot", "Read Committed" ], - "description": "Existing data in the database are synced through an initial snapshot. This parameter controls the isolation level that will be used during the initial snapshotting. If you choose the \"Snapshot\" level, you must enable the snapshot isolation mode on the database.", - "order": 2 - }, - "initial_waiting_seconds": { - "type": "integer", - "title": "Initial Waiting Time in Seconds (Advanced)", - "description": "The amount of time the connector will wait when it launches to determine if there is new data to sync or not. Defaults to 300 seconds. Valid range: 120 seconds to 1200 seconds. Read about initial waiting time.", - "default": 300, - "min": 120, - "max": 1200, - "order": 3 - } - } - } ] - }, - "tunnel_method": { - "type": "object", - "title": "SSH Tunnel Method", - "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", - "oneOf": [ { - "title": "No Tunnel", - "required": [ "tunnel_method" ], - "properties": { - "tunnel_method": { - "description": "No ssh tunnel needed to connect to database", - "type": "string", - "const": "NO_TUNNEL", - "order": 0 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host.", - "type": "string", - "order": 3 - }, - "ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - }, { - "title": "Password Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host", - "type": "string", - "order": 3 - }, - "tunnel_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 4 - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "allowedHosts": { - "hosts": [ "${host}", "${tunnel_method.tunnel_host}" ] - } - }, { - "sourceDefinitionId": "eaf50f04-21dd-4620-913b-2a83f5635227", - "name": "Microsoft teams", - "dockerRepository": "airbyte/source-microsoft-teams", - "dockerImageTag": "0.2.5", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/microsoft-teams", - "icon": "microsoft-teams.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/microsoft-teams", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Microsoft Teams Spec", - "type": "object", - "required": [ "period" ], - "additionalProperties": true, - "properties": { - "period": { - "type": "string", - "title": "Period", - "description": "Specifies the length of time over which the Team Device Report stream is aggregated. The supported values are: D7, D30, D90, and D180.", - "examples": [ "D7" ] - }, - "credentials": { - "title": "Authentication mechanism", - "description": "Choose how to authenticate to Microsoft", - "type": "object", - "oneOf": [ { - "type": "object", - "title": "Authenticate via Microsoft (OAuth 2.0)", - "required": [ "tenant_id", "client_id", "client_secret", "refresh_token" ], - "additionalProperties": false, - "properties": { - "auth_type": { - "type": "string", - "const": "Client", - "enum": [ "Client" ], - "default": "Client", - "order": 0 - }, - "tenant_id": { - "title": "Directory (tenant) ID", - "type": "string", - "description": "A globally unique identifier (GUID) that is different than your organization name or domain. Follow these steps to obtain: open one of the Teams where you belong inside the Teams Application -> Click on the … next to the Team title -> Click on Get link to team -> Copy the link to the team and grab the tenant ID form the URL" - }, - "client_id": { - "title": "Client ID", - "type": "string", - "description": "The Client ID of your Microsoft Teams developer application." - }, - "client_secret": { - "title": "Client Secret", - "type": "string", - "description": "The Client Secret of your Microsoft Teams developer application.", - "airbyte_secret": true - }, - "refresh_token": { - "title": "Refresh Token", - "type": "string", - "description": "A Refresh Token to renew the expired Access Token.", - "airbyte_secret": true - } - } - }, { - "type": "object", - "title": "Authenticate via Microsoft", - "required": [ "tenant_id", "client_id", "client_secret" ], - "additionalProperties": false, - "properties": { - "auth_type": { - "type": "string", - "const": "Token", - "enum": [ "Token" ], - "default": "Token", - "order": 0 - }, - "tenant_id": { - "title": "Directory (tenant) ID", - "type": "string", - "description": "A globally unique identifier (GUID) that is different than your organization name or domain. Follow these steps to obtain: open one of the Teams where you belong inside the Teams Application -> Click on the … next to the Team title -> Click on Get link to team -> Copy the link to the team and grab the tenant ID form the URL" - }, - "client_id": { - "title": "Client ID", - "type": "string", - "description": "The Client ID of your Microsoft Teams developer application." - }, - "client_secret": { - "title": "Client Secret", - "type": "string", - "description": "The Client Secret of your Microsoft Teams developer application.", - "airbyte_secret": true - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "auth_type" ], - "predicate_value": "Client", - "oauth_config_specification": { - "oauth_user_input_from_connector_config_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "tenant_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "tenant_id" ] - } - } - }, - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "refresh_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "refresh_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "9220e3de-3b60-4bb2-a46f-046d59ea235a", - "name": "Microsoft Dataverse", - "dockerRepository": "airbyte/source-microsoft-dataverse", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/microsoft-dataverse", - "icon": "microsoftdataverse.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/microsoft-dataverse", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Microsoft Dataverse Spec", - "type": "object", - "required": [ "url", "tenant_id", "client_id", "client_secret_value" ], - "additionalProperties": true, - "properties": { - "url": { - "type": "string", - "description": "URL to Microsoft Dataverse API", - "title": "URL", - "examples": [ "https://.crm.dynamics.com" ], - "order": 0 - }, - "tenant_id": { - "type": "string", - "description": "Tenant Id of your Microsoft Dataverse Instance", - "title": "Tenant Id", - "airbyte_secret": true, - "order": 1 - }, - "client_id": { - "type": "string", - "description": "App Registration Client Id", - "title": "Client Id", - "airbyte_secret": true, - "order": 2 - }, - "client_secret_value": { - "type": "string", - "description": "App Registration Client Secret", - "title": "Client Secret", - "airbyte_secret": true, - "order": 3 - }, - "odata_maxpagesize": { - "type": "integer", - "description": "Max number of results per page. Default=5000", - "title": "Max page size", - "default": 5000, - "order": 4 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "12928b32-bf0a-4f1e-964f-07e12e37153a", - "name": "Mixpanel", - "dockerRepository": "airbyte/source-mixpanel", - "dockerImageTag": "0.1.31", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mixpanel", - "icon": "mixpanel.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mixpanel", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Source Mixpanel Spec", - "type": "object", - "properties": { - "credentials": { - "title": "Authentication *", - "description": "Choose how to authenticate to Mixpanel", - "type": "object", - "order": 0, - "oneOf": [ { - "type": "object", - "title": "Service Account", - "required": [ "username", "secret" ], - "properties": { - "option_title": { - "type": "string", - "const": "Service Account", - "order": 0 - }, - "username": { - "order": 1, - "title": "Username", - "type": "string", - "description": "Mixpanel Service Account Username. See the docs for more information on how to obtain this." - }, - "secret": { - "order": 2, - "title": "Secret", - "type": "string", - "description": "Mixpanel Service Account Secret. See the docs for more information on how to obtain this.", - "airbyte_secret": true - } - } - }, { - "type": "object", - "title": "Project Secret", - "required": [ "api_secret" ], - "properties": { - "option_title": { - "type": "string", - "const": "Project Secret", - "order": 0 - }, - "api_secret": { - "order": 1, - "title": "Project Secret", - "type": "string", - "description": "Mixpanel project secret. See the docs for more information on how to obtain this.", - "airbyte_secret": true - } - } - } ] - }, - "project_id": { - "order": 1, - "title": "Project ID", - "description": "Your project ID number. See the docs for more information on how to obtain this.", - "type": "integer" - }, - "attribution_window": { - "order": 2, - "title": "Attribution Window", - "type": "integer", - "description": " A period of time for attributing results to ads and the lookback period after those actions occur during which ad results are counted. Default attribution window is 5 days.", - "default": 5 - }, - "project_timezone": { - "order": 3, - "title": "Project Timezone", - "type": "string", - "description": "Time zone in which integer date times are stored. The project timezone may be found in the project settings in the Mixpanel console.", - "default": "US/Pacific", - "examples": [ "US/Pacific", "UTC" ] - }, - "select_properties_by_default": { - "order": 4, - "title": "Select Properties By Default", - "type": "boolean", - "description": "Setting this config parameter to TRUE ensures that new properties on events and engage records are captured. Otherwise new properties will be ignored.", - "default": true - }, - "start_date": { - "order": 5, - "title": "Start Date", - "type": "string", - "description": "The date in the format YYYY-MM-DD. Any data before this date will not be replicated. If this option is not set, the connector will replicate data from up to one year ago by default.", - "examples": [ "2021-11-16" ], - "pattern": "^$|^[0-9]{4}-[0-9]{2}-[0-9]{2}(T[0-9]{2}:[0-9]{2}:[0-9]{2}Z)?$", - "format": "date-time" - }, - "end_date": { - "order": 6, - "title": "End Date", - "type": "string", - "description": "The date in the format YYYY-MM-DD. Any data after this date will not be replicated. Left empty to always sync to most recent date", - "examples": [ "2021-11-16" ], - "pattern": "^$|^[0-9]{4}-[0-9]{2}-[0-9]{2}(T[0-9]{2}:[0-9]{2}:[0-9]{2}Z)?$", - "format": "date-time" - }, - "region": { - "order": 7, - "title": "Region", - "description": "The region of mixpanel domain instance either US or EU.", - "type": "string", - "enum": [ "US", "EU" ], - "default": "US" - }, - "date_window_size": { - "order": 8, - "title": "Date slicing window", - "description": "Defines window size in days, that used to slice through data. You can reduce it, if amount of data in each window is too big for your environment.", - "type": "integer", - "minimum": 1, - "default": 30 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "mixpanel.com", "eu.mixpanel.com" ] - } - }, { - "sourceDefinitionId": "80a54ea2-9959-4040-aac1-eee42423ec9b", - "name": "Monday", - "dockerRepository": "airbyte/source-monday", - "dockerImageTag": "0.2.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/monday", - "icon": "monday.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/monday", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Monday Spec", - "type": "object", - "required": [ ], - "additionalProperties": true, - "properties": { - "credentials": { - "title": "Authorization Method", - "type": "object", - "oneOf": [ { - "type": "object", - "title": "OAuth2.0", - "required": [ "auth_type", "client_id", "client_secret", "access_token" ], - "properties": { - "subdomain": { - "type": "string", - "title": "Subdomain/Slug", - "description": "Slug/subdomain of the account, or the first part of the URL that comes before .monday.com", - "default": "", - "order": 0 - }, - "auth_type": { - "type": "string", - "const": "oauth2.0", - "order": 1 - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "The Client ID of your OAuth application.", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "The Client Secret of your OAuth application.", - "airbyte_secret": true - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "Access Token for making authenticated requests.", - "airbyte_secret": true - } - } - }, { - "type": "object", - "title": "API Token", - "required": [ "auth_type", "api_token" ], - "properties": { - "auth_type": { - "type": "string", - "const": "api_token", - "order": 0 - }, - "api_token": { - "type": "string", - "title": "Personal API Token", - "description": "API Token for making authenticated requests.", - "airbyte_secret": true - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "auth_type" ], - "predicate_value": "oauth2.0", - "oauth_config_specification": { - "oauth_user_input_from_connector_config_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "subdomain": { - "type": "string", - "path_in_connector_config": [ "credentials", "subdomain" ] - } - } - }, - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "access_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "access_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": true, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "api.monday.com" ] - } - }, { - "sourceDefinitionId": "b2e713cd-cc36-4c0a-b5bd-b47cb8a0561e", - "name": "MongoDb", - "dockerRepository": "airbyte/source-mongodb-v2", - "dockerImageTag": "0.1.19", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mongodb-v2", - "icon": "mongodb.svg", - "sourceType": "database", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mongodb-v2", - "changelogUrl": "https://docs.airbyte.com/integrations/sources/mongodb-v2", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "MongoDb Source Spec", - "type": "object", - "required": [ "database" ], - "additionalProperties": true, - "properties": { - "instance_type": { - "type": "object", - "title": "MongoDb Instance Type", - "description": "The MongoDb instance to connect to. For MongoDB Atlas and Replica Set TLS connection is used by default.", - "order": 0, - "oneOf": [ { - "title": "Standalone MongoDb Instance", - "required": [ "instance", "host", "port" ], - "properties": { - "instance": { - "type": "string", - "enum": [ "standalone" ], - "default": "standalone" - }, - "host": { - "title": "Host", - "type": "string", - "description": "The host name of the Mongo database.", - "order": 0 - }, - "port": { - "title": "Port", - "type": "integer", - "description": "The port of the Mongo database.", - "minimum": 0, - "maximum": 65536, - "default": 27017, - "examples": [ "27017" ], - "order": 1 - }, - "tls": { - "title": "TLS Connection", - "type": "boolean", - "description": "Indicates whether TLS encryption protocol will be used to connect to MongoDB. It is recommended to use TLS connection if possible. For more information see documentation.", - "default": false, - "order": 2 - } - } - }, { - "title": "Replica Set", - "required": [ "instance", "server_addresses" ], - "properties": { - "instance": { - "type": "string", - "enum": [ "replica" ], - "default": "replica" - }, - "server_addresses": { - "title": "Server Addresses", - "type": "string", - "description": "The members of a replica set. Please specify `host`:`port` of each member separated by comma.", - "examples": [ "host1:27017,host2:27017,host3:27017" ], - "order": 0 - }, - "replica_set": { - "title": "Replica Set", - "type": "string", - "description": "A replica set in MongoDB is a group of mongod processes that maintain the same data set.", - "order": 1 - } - } - }, { - "title": "MongoDB Atlas", - "additionalProperties": false, - "required": [ "instance", "cluster_url" ], - "properties": { - "instance": { - "type": "string", - "enum": [ "atlas" ], - "default": "atlas" - }, - "cluster_url": { - "title": "Cluster URL", - "type": "string", - "description": "The URL of a cluster to connect to.", - "order": 0 - } - } - } ] - }, - "database": { - "title": "Database Name", - "type": "string", - "description": "The database you want to replicate.", - "order": 1 - }, - "user": { - "title": "User", - "type": "string", - "description": "The username which is used to access the database.", - "order": 2 - }, - "password": { - "title": "Password", - "type": "string", - "description": "The password associated with this username.", - "airbyte_secret": true, - "order": 3 - }, - "auth_source": { - "title": "Authentication Source", - "type": "string", - "description": "The authentication source where the user information is stored.", - "default": "admin", - "examples": [ "admin" ], - "order": 4 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "722ba4bf-06ec-45a4-8dd5-72e4a5cf3903", - "name": "My Hours", - "dockerRepository": "airbyte/source-my-hours", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/my-hours", - "icon": "my-hours.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/my-hours", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "My Hours Spec", - "type": "object", - "required": [ "email", "password", "start_date" ], - "additionalProperties": false, - "properties": { - "email": { - "title": "Email", - "type": "string", - "description": "Your My Hours username", - "example": "john@doe.com" - }, - "password": { - "title": "Password", - "type": "string", - "description": "The password associated to the username", - "airbyte_secret": true - }, - "start_date": { - "title": "Start Date", - "description": "Start date for collecting time logs", - "examples": [ "%Y-%m-%d", "2016-01-01" ], - "type": "string", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" - }, - "logs_batch_size": { - "title": "Time logs batch size", - "description": "Pagination size used for retrieving logs in days", - "examples": [ 30 ], - "type": "integer", - "minimum": 1, - "maximum": 365, - "default": 30 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "435bb9a5-7887-4809-aa58-28c27df0d7ad", - "name": "MySQL", - "dockerRepository": "airbyte/source-mysql", - "dockerImageTag": "2.0.18", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mysql", - "icon": "mysql.svg", - "sourceType": "database", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/mysql", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "MySql Source Spec", - "type": "object", - "required": [ "host", "port", "database", "username", "replication_method" ], - "properties": { - "host": { - "description": "The host name of the database.", - "title": "Host", - "type": "string", - "order": 0 - }, - "port": { - "description": "The port to connect to.", - "title": "Port", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 3306, - "examples": [ "3306" ], - "order": 1 - }, - "database": { - "description": "The database name.", - "title": "Database", - "type": "string", - "order": 2 - }, - "username": { - "description": "The username which is used to access the database.", - "title": "Username", - "type": "string", - "order": 3 - }, - "password": { - "description": "The password associated with the username.", - "title": "Password", - "type": "string", - "airbyte_secret": true, - "order": 4 - }, - "jdbc_url_params": { - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3). For more information read about JDBC URL parameters.", - "title": "JDBC URL Parameters (Advanced)", - "type": "string", - "order": 5 - }, - "ssl": { - "title": "SSL Connection", - "description": "Encrypt data using SSL.", - "type": "boolean", - "default": true, - "order": 6 - }, - "ssl_mode": { - "title": "SSL modes", - "description": "SSL connection modes. Read more in the docs.", - "type": "object", - "order": 7, - "oneOf": [ { - "title": "preferred", - "description": "Automatically attempt SSL connection. If the MySQL server does not support SSL, continue with a regular connection.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "preferred", - "order": 0 - } - } - }, { - "title": "required", - "description": "Always connect with SSL. If the MySQL server doesn’t support SSL, the connection will not be established. Certificate Authority (CA) and Hostname are not verified.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "required", - "order": 0 - } - } - }, { - "title": "Verify CA", - "description": "Always connect with SSL. Verifies CA, but allows connection even if Hostname does not match.", - "required": [ "mode", "ca_certificate" ], - "properties": { - "mode": { - "type": "string", - "const": "verify_ca", - "order": 0 - }, - "ca_certificate": { - "type": "string", - "title": "CA certificate", - "description": "CA certificate", - "airbyte_secret": true, - "multiline": true, - "order": 1 - }, - "client_certificate": { - "type": "string", - "title": "Client certificate", - "description": "Client certificate (this is not a required field, but if you want to use it, you will need to add the Client key as well)", - "airbyte_secret": true, - "multiline": true, - "order": 2, - "always_show": true - }, - "client_key": { - "type": "string", - "title": "Client key", - "description": "Client key (this is not a required field, but if you want to use it, you will need to add the Client certificate as well)", - "airbyte_secret": true, - "multiline": true, - "order": 3, - "always_show": true - }, - "client_key_password": { - "type": "string", - "title": "Client key password", - "description": "Password for keystorage. This field is optional. If you do not add it - the password will be generated automatically.", - "airbyte_secret": true, - "order": 4 - } - } - }, { - "title": "Verify Identity", - "description": "Always connect with SSL. Verify both CA and Hostname.", - "required": [ "mode", "ca_certificate" ], - "properties": { - "mode": { - "type": "string", - "const": "verify_identity", - "order": 0 - }, - "ca_certificate": { - "type": "string", - "title": "CA certificate", - "description": "CA certificate", - "airbyte_secret": true, - "multiline": true, - "order": 1 - }, - "client_certificate": { - "type": "string", - "title": "Client certificate", - "description": "Client certificate (this is not a required field, but if you want to use it, you will need to add the Client key as well)", - "airbyte_secret": true, - "multiline": true, - "order": 2, - "always_show": true - }, - "client_key": { - "type": "string", - "title": "Client key", - "description": "Client key (this is not a required field, but if you want to use it, you will need to add the Client certificate as well)", - "airbyte_secret": true, - "multiline": true, - "order": 3, - "always_show": true - }, - "client_key_password": { - "type": "string", - "title": "Client key password", - "description": "Password for keystorage. This field is optional. If you do not add it - the password will be generated automatically.", - "airbyte_secret": true, - "order": 4 - } - } - } ] - }, - "replication_method": { - "type": "object", - "title": "Replication Method", - "description": "Replication method to use for extracting data from the database.", - "order": 8, - "oneOf": [ { - "title": "Standard", - "description": "Standard replication requires no setup on the DB side but will not be able to represent deletions incrementally.", - "required": [ "method" ], - "properties": { - "method": { - "type": "string", - "const": "STANDARD", - "order": 0 - } - } - }, { - "title": "Logical Replication (CDC)", - "description": "CDC uses the Binlog to detect inserts, updates, and deletes. This needs to be configured on the source database itself.", - "required": [ "method" ], - "properties": { - "method": { - "type": "string", - "const": "CDC", - "order": 0 - }, - "initial_waiting_seconds": { - "type": "integer", - "title": "Initial Waiting Time in Seconds (Advanced)", - "description": "The amount of time the connector will wait when it launches to determine if there is new data to sync or not. Defaults to 300 seconds. Valid range: 120 seconds to 1200 seconds. Read about initial waiting time.", - "default": 300, - "min": 120, - "max": 1200, - "order": 1 - }, - "server_time_zone": { - "type": "string", - "title": "Configured server timezone for the MySQL source (Advanced)", - "description": "Enter the configured MySQL server timezone. This should only be done if the configured timezone in your MySQL instance does not conform to IANNA standard.", - "order": 2 - } - } - } ] - }, - "tunnel_method": { - "type": "object", - "title": "SSH Tunnel Method", - "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", - "oneOf": [ { - "title": "No Tunnel", - "required": [ "tunnel_method" ], - "properties": { - "tunnel_method": { - "description": "No ssh tunnel needed to connect to database", - "type": "string", - "const": "NO_TUNNEL", - "order": 0 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host.", - "type": "string", - "order": 3 - }, - "ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - }, { - "title": "Password Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host", - "type": "string", - "order": 3 - }, - "tunnel_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 4 - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "${host}", "${tunnel_method.tunnel_host}" ] - } - }, { - "sourceDefinitionId": "4a961f66-5e99-4430-8320-a73afe52f7a2", - "name": "n8n", - "dockerRepository": "airbyte/source-n8n", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/n8n", - "icon": "n8n.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/n8n", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "N8n Spec", - "type": "object", - "required": [ "host", "api_key" ], - "additionalProperties": true, - "properties": { - "host": { - "type": "string", - "description": "Hostname of the n8n instance" - }, - "api_key": { - "type": "string", - "description": "Your API KEY. See here" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "1a8667d7-7978-43cd-ba4d-d32cbd478971", - "name": "NASA", - "dockerRepository": "airbyte/source-nasa", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/nasa", - "icon": "nasa.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/nasa-apod", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "NASA spec", - "type": "object", - "required": [ "api_key" ], - "properties": { - "api_key": { - "type": "string", - "description": "API access key used to retrieve data from the NASA APOD API.", - "airbyte_secret": true - }, - "concept_tags": { - "type": "boolean", - "default": false, - "description": "Indicates whether concept tags should be returned with the rest of the response. The concept tags are not necessarily included in the explanation, but rather derived from common search tags that are associated with the description text. (Better than just pure text search.) Defaults to False." - }, - "count": { - "type": "integer", - "minimum": 1, - "maximum": 100, - "description": "A positive integer, no greater than 100. If this is specified then `count` randomly chosen images will be returned in a JSON array. Cannot be used in conjunction with `date` or `start_date` and `end_date`." - }, - "start_date": { - "type": "string", - "description": "Indicates the start of a date range. All images in the range from `start_date` to `end_date` will be returned in a JSON array. Must be after 1995-06-16, the first day an APOD picture was posted. There are no images for tomorrow available through this API.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "2022-10-20" ], - "format": "date" - }, - "end_date": { - "type": "string", - "description": "Indicates that end of a date range. If `start_date` is specified without an `end_date` then `end_date` defaults to the current date.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "2022-10-20" ], - "format": "date" - }, - "thumbs": { - "type": "boolean", - "default": false, - "description": "Indicates whether the API should return a thumbnail image URL for video files. If set to True, the API returns URL of video thumbnail. If an APOD is not a video, this parameter is ignored." - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "allowedHosts": { - "hosts": [ "api.nasa.gov" ] - } - }, { - "sourceDefinitionId": "4f2f093d-ce44-4121-8118-9d13b7bfccd0", - "name": "Netsuite", - "dockerRepository": "airbyte/source-netsuite", - "dockerImageTag": "0.1.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/netsuite", - "icon": "netsuite.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Netsuite Spec", - "type": "object", - "required": [ "realm", "consumer_key", "consumer_secret", "token_key", "token_secret", "start_datetime" ], - "additionalProperties": true, - "properties": { - "realm": { - "type": "string", - "title": "Realm (Account Id)", - "description": "Netsuite realm e.g. 2344535, as for `production` or 2344535_SB1, as for the `sandbox`", - "order": 0, - "airbyte_secret": true - }, - "consumer_key": { - "type": "string", - "title": "Consumer Key", - "description": "Consumer key associated with your integration", - "order": 1, - "airbyte_secret": true - }, - "consumer_secret": { - "type": "string", - "title": "Consumer Secret", - "description": "Consumer secret associated with your integration", - "order": 2, - "airbyte_secret": true - }, - "token_key": { - "type": "string", - "title": "Token Key (Token Id)", - "description": "Access token key", - "order": 3, - "airbyte_secret": true - }, - "token_secret": { - "type": "string", - "title": "Token Secret", - "description": "Access token secret", - "order": 4, - "airbyte_secret": true - }, - "object_types": { - "type": "array", - "title": "Object Types", - "items": { - "type": "string" - }, - "description": "The API names of the Netsuite objects you want to sync. Setting this speeds up the connection setup process by limiting the number of schemas that need to be retrieved from Netsuite.", - "order": 5, - "examples": [ "customer", "salesorder", "etc" ], - "default": [ ] - }, - "start_datetime": { - "type": "string", - "title": "Start Date", - "description": "Starting point for your data replication, in format of \"YYYY-MM-DDTHH:mm:ssZ\"", - "order": 6, - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2017-01-25T00:00:00Z" ] - }, - "window_in_days": { - "type": "integer", - "title": "Window in Days", - "description": "The amount of days used to query the data with date chunks. Set smaller value, if you have lots of data.", - "order": 7, - "default": 30 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "df38991e-f35b-4af2-996d-36817f614587", - "name": "News API", - "dockerRepository": "airbyte/source-news-api", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/news-api", - "icon": "newsapi.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/news-api", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "News Api Spec", - "type": "object", - "required": [ "api_key", "country", "category", "sort_by" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "description": "API Key", - "airbyte_secret": true, - "order": 0 - }, - "search_query": { - "type": "string", - "description": "Search query. See https://newsapi.org/docs/endpoints/everything for \ninformation.\n", - "examples": [ "+bitcoin OR +crypto", "sunak AND (truss OR johnson)" ], - "order": 1 - }, - "search_in": { - "type": "array", - "description": "Where to apply search query. Possible values are: title, description,\ncontent.\n", - "items": { - "type": "string", - "enum": [ "title", "description", "content" ] - }, - "order": 2 - }, - "sources": { - "type": "array", - "description": "Identifiers (maximum 20) for the news sources or blogs you want\nheadlines from. Use the `/sources` endpoint to locate these\nprogrammatically or look at the sources index:\nhttps://newsapi.com/sources. Will override both country and category.\n", - "items": { - "type": "string" - }, - "order": 3 - }, - "domains": { - "type": "array", - "description": "A comma-seperated string of domains (eg bbc.co.uk, techcrunch.com,\nengadget.com) to restrict the search to.\n", - "items": { - "type": "string" - }, - "order": 4 - }, - "exclude_domains": { - "type": "array", - "description": "A comma-seperated string of domains (eg bbc.co.uk, techcrunch.com,\nengadget.com) to remove from the results.\n", - "items": { - "type": "string" - }, - "order": 5 - }, - "start_date": { - "type": "string", - "description": "A date and optional time for the oldest article allowed. This should\nbe in ISO 8601 format (e.g. 2021-01-01 or 2021-01-01T12:00:00).\n", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}(T[0-9]{2}:[0-9]{2}:[0-9]{2})?$", - "order": 6 - }, - "end_date": { - "type": "string", - "description": "A date and optional time for the newest article allowed. This should\nbe in ISO 8601 format (e.g. 2021-01-01 or 2021-01-01T12:00:00).\n", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}(T[0-9]{2}:[0-9]{2}:[0-9]{2})?$", - "order": 7 - }, - "language": { - "type": "string", - "description": "The 2-letter ISO-639-1 code of the language you want to get headlines\nfor. Possible options: ar de en es fr he it nl no pt ru se ud zh.\n", - "enum": [ "ar", "de", "en", "es", "fr", "he", "it", "nl", false, "pt", "ru", "se", "ud", "zh" ], - "order": 8 - }, - "country": { - "type": "string", - "description": "The 2-letter ISO 3166-1 code of the country you want to get headlines\nfor. You can't mix this with the sources parameter.\n", - "enum": [ "ae", "ar", "at", "au", "be", "bg", "br", "ca", "ch", "cn", "co", "cu", "cz", "de", "eg", "fr", "gb", "gr", "hk", "hu", "id", "ie", "il", "in", "it", "jp", "kr", "lt", "lv", "ma", "mx", "my", "ng", "nl", false, "nz", "ph", "pl", "pt", "ro", "rs", "ru", "sa", "se", "sg", "si", "sk", "th", "tr", "tw", "ua", "us", "ve", "za" ], - "default": "us", - "order": 9 - }, - "category": { - "type": "string", - "description": "The category you want to get top headlines for.", - "enum": [ "business", "entertainment", "general", "health", "science", "sports", "technology" ], - "default": "business", - "order": 10 - }, - "sort_by": { - "type": "string", - "description": "The order to sort the articles in. Possible options: relevancy,\npopularity, publishedAt.\n", - "enum": [ "relevancy", "popularity", "publishedAt" ], - "default": "publishedAt", - "order": 11 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "60bd11d8-2632-4daa-a688-b47336d32093", - "name": "Newsdata", - "dockerRepository": "airbyte/source-newsdata", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/newsdata", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/newsdata", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Newsdata Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "description": "API Key", - "airbyte_secret": true, - "order": 0 - }, - "OneOf": { - "query": { - "type": "string", - "description": "Keywords or phrases to search for in the news title and content. Advanced Search options:\n - Search `Social`: query = \"social\"\n - Search `Social Pizza`: query = \"social pizza\"\n - Search `Social` but not with `pizza`: query = \"social -pizza\"\n - Search `Social` but not with `pizza` and `wildfire`: query = \"social -pizza -wildfire\"\n - Search `Social` and `pizza`: query = \"social AND pizza\"\n - Search `Social` and `pizza` and `pasta`: query = \"social AND pizza AND pasta\"\n - Search `Social` or `pizza`: query = \"social OR pizza\"\n - Search `Social` or `pizza` but not `pasta`: query = \"social OR pizza -pasta\"\n - Search `Social` or `pizza` or `pasta`: query = \"social OR pizza OR pasta\"\nNote: You can't use AND and OR in the same query.", - "order": 1 - }, - "query_in_title": { - "type": "string", - "description": "Same as `query`, but restricting the search to only the news title. It cannot be used along with `query`.", - "order": 1 - } - }, - "domain": { - "type": "array", - "description": "Domains (maximum 5) to restrict the search to. Use the sources stream to find top sources id.", - "maxitems": 5, - "items": { - "type": "string" - }, - "order": 2 - }, - "country": { - "type": "array", - "description": "2-letter ISO 3166-1 countries (maximum 5) to restrict the search to.", - "maxitems": 5, - "order": 3, - "items": { - "type": "string", - "enum": [ "ar", "au", "at", "bd", "by", "be", "br", "bg", "ca", "cl", "cn", "co", "cr", "cu", "cz", "dk", "do", "ec", "eg", "ee", "et", "fi", "fr", "de", "gr", "hk", "hu", "in", "id", "iq", "ie", "il", "it", "jp", "kz", "kw", "lv", "lb", "lt", "my", "mx", "ma", "mm", "nl", "nz", "ng", "kp", "no", "pk", "pe", "ph", "pl", "pt", "pr", "ro", "ru", "sa", "rs", "sg", "sk", "si", "za", "kr", "es", "se", "ch", "tw", "tz", "th", "tr", "ua", "ae", "gb", "us", "ve", "vi" ] - } - }, - "category": { - "type": "array", - "description": "Categories (maximum 5) to restrict the search to.", - "maxitems": 5, - "order": 4, - "items": { - "type": "string", - "enum": [ "business", "entertainment", "environment", "food", "health", "politics", "science", "sports", "technology", "top", "world" ] - } - }, - "language": { - "type": "array", - "description": "Languages (maximum 5) to restrict the search to.", - "maxitems": 5, - "order": 5, - "items": { - "type": "string", - "enum": [ "be", "am", "ar", "bn", "bs", "bg", "my", "ckb", "zh", "hr", "cs", "da", "nl", "en", "et", "fi", "fr", "de", "el", "he", "hi", "hu", "in", "it", "jp", "ko", "lv", "lt", "ms", "no", "pl", "pt", "ro", "ru", "sr", "sk", "sl", "es", "sw", "sv", "th", "tr", "uk", "ur", "vi" ] - } - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "6e00b415-b02e-4160-bf02-58176a0ae687", - "name": "Notion", - "dockerRepository": "airbyte/source-notion", - "dockerImageTag": "1.0.4", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/notion", - "icon": "notion.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/notion", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Notion Source Spec", - "type": "object", - "required": [ "start_date" ], - "properties": { - "start_date": { - "title": "Start Date", - "description": "UTC date and time in the format 2017-01-25T00:00:00.000Z. Any data before this date will not be replicated.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}Z$", - "examples": [ "2020-11-16T00:00:00.000Z" ], - "type": "string", - "format": "date-time" - }, - "credentials": { - "title": "Authenticate using", - "description": "Pick an authentication method.", - "type": "object", - "order": 1, - "oneOf": [ { - "type": "object", - "title": "OAuth2.0", - "required": [ "auth_type", "client_id", "client_secret", "access_token" ], - "properties": { - "auth_type": { - "type": "string", - "const": "OAuth2.0" - }, - "client_id": { - "title": "Client ID", - "type": "string", - "description": "The ClientID of your Notion integration.", - "airbyte_secret": true - }, - "client_secret": { - "title": "Client Secret", - "type": "string", - "description": "The ClientSecret of your Notion integration.", - "airbyte_secret": true - }, - "access_token": { - "title": "Access Token", - "type": "string", - "description": "Access Token is a token you received by complete the OauthWebFlow of Notion.", - "airbyte_secret": true - } - } - }, { - "type": "object", - "title": "Access Token", - "required": [ "auth_type", "token" ], - "properties": { - "auth_type": { - "type": "string", - "const": "token" - }, - "token": { - "title": "Access Token", - "description": "Notion API access token, see the docs for more information on how to obtain this token.", - "type": "string", - "airbyte_secret": true - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ "credentials", "0" ], - "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], - "oauthFlowOutputParameters": [ [ "access_token" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "api.notion.com" ] - } - }, { - "sourceDefinitionId": "0fae6a9a-04eb-44d4-96e1-e02d3dbc1d83", - "name": "New York Times", - "dockerRepository": "airbyte/source-nytimes", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/nytimes", - "icon": "nytimes.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/nytimes", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Nytimes Spec", - "type": "object", - "required": [ "api_key", "start_date", "period" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "title": "API Key", - "description": "API Key", - "airbyte_secret": true, - "order": 0 - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "Start date to begin the article retrieval (format YYYY-MM)", - "pattern": "^[0-9]{4}-[0-9]{2}$", - "examples": [ "2022-08", "1851-01" ], - "format": "date", - "order": 1 - }, - "end_date": { - "type": "string", - "title": "End Date", - "description": "End date to stop the article retrieval (format YYYY-MM)", - "pattern": "^[0-9]{4}-[0-9]{2}$", - "examples": [ "2022-08", "1851-01" ], - "format": "date", - "order": 2 - }, - "period": { - "type": "integer", - "title": "Period (used for Most Popular streams)", - "description": "Period of time (in days)", - "order": 3, - "enum": [ 1, 7, 30 ] - }, - "share_type": { - "type": "string", - "title": "Share Type (used for Most Popular Shared stream)", - "description": "Share Type", - "order": 4, - "enum": [ "facebook" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "1d4fdb25-64fc-4569-92da-fcdca79a8372", - "name": "Okta", - "dockerRepository": "airbyte/source-okta", - "dockerImageTag": "0.1.14", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/okta", - "icon": "okta.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/okta", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Okta Spec", - "type": "object", - "required": [ ], - "additionalProperties": true, - "properties": { - "domain": { - "type": "string", - "title": "Okta domain", - "description": "The Okta domain. See the docs for instructions on how to find it.", - "airbyte_secret": false - }, - "start_date": { - "type": "string", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "description": "UTC date and time in the format YYYY-MM-DDTHH:MM:SSZ. Any data before this date will not be replicated.", - "examples": [ "2022-07-22T00:00:00Z" ], - "title": "Start Date" - }, - "credentials": { - "title": "Authorization Method", - "type": "object", - "oneOf": [ { - "type": "object", - "title": "OAuth2.0", - "required": [ "auth_type", "client_id", "client_secret", "refresh_token" ], - "properties": { - "auth_type": { - "type": "string", - "const": "oauth2.0", - "order": 0 - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "The Client ID of your OAuth application.", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "The Client Secret of your OAuth application.", - "airbyte_secret": true - }, - "refresh_token": { - "type": "string", - "title": "Refresh Token", - "description": "Refresh Token to obtain new Access Token, when it's expired.", - "airbyte_secret": true - } - } - }, { - "type": "object", - "title": "API Token", - "required": [ "auth_type", "api_token" ], - "properties": { - "auth_type": { - "type": "string", - "const": "api_token", - "order": 0 - }, - "api_token": { - "type": "string", - "title": "Personal API Token", - "description": "An Okta token. See the docs for instructions on how to generate it.", - "airbyte_secret": true - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "e7f0c5e2-4815-48c4-90cf-f47124209835", - "name": "Omnisend", - "dockerRepository": "airbyte/source-omnisend", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/omnisend", - "icon": "omnisend.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/omnisend", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Omnisend Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "title": "API Key", - "type": "string", - "description": "API Key", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "bb6afd81-87d5-47e3-97c4-e2c2901b1cf8", - "name": "OneSignal", - "dockerRepository": "airbyte/source-onesignal", - "dockerImageTag": "1.0.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/onesignal", - "icon": "onesignal.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/onesignal", - "connectionSpecification": { - "$schema": "https://json-schema.org/draft-07/schema#", - "title": "OneSignal Source Spec", - "type": "object", - "required": [ "user_auth_key", "start_date", "outcome_names", "applications" ], - "additionalProperties": true, - "properties": { - "user_auth_key": { - "type": "string", - "title": "User Auth Key", - "description": "OneSignal User Auth Key, see the docs for more information on how to obtain this key.", - "airbyte_secret": true, - "order": 0 - }, - "applications": { - "type": "array", - "title": "Applications", - "description": "Applications keys, see the docs for more information on how to obtain this data", - "items": { - "type": "object", - "properties": { - "app_name": { - "type": "string", - "title": "OneSignal App Name", - "order": 0 - }, - "app_id": { - "type": "string", - "title": "OneSignal App ID", - "order": 1, - "airbyte_secret": true - }, - "app_api_key": { - "type": "string", - "title": "REST API Key", - "order": 2, - "airbyte_secret": true - } - }, - "required": [ "app_id", "app_api_key" ] - }, - "order": 1 - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "The date from which you'd like to replicate data for OneSignal API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", - "examples": [ "2020-11-16T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "format": "date-time", - "order": 2 - }, - "outcome_names": { - "type": "string", - "title": "Outcome Names", - "description": "Comma-separated list of names and the value (sum/count) for the returned outcome data. See the docs for more details", - "examples": [ "os__session_duration.count,os__click.count,CustomOutcomeName.sum" ], - "order": 3 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "77d5ca6b-d345-4dce-ba1e-1935a75778b8", - "name": "Open Exchange Rates", - "dockerRepository": "airbyte/source-open-exchange-rates", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/open-exchange-rates", - "icon": "airbyte.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/openexchangesrates", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Open Exchange Rates Spec", - "type": "object", - "required": [ "app_id", "start_date" ], - "properties": { - "app_id": { - "type": "string", - "description": "App ID provided by Open Exchange Rates", - "airbyte_secret": true - }, - "start_date": { - "type": "string", - "description": "Start getting data from that date.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "YYYY-MM-DD" ] - }, - "base": { - "type": "string", - "description": "Change base currency (3-letter code, default is USD - only modifiable in paid plans)", - "examples": [ "EUR", "USD" ], - "default": "USD" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "d8540a80-6120-485d-b7d6-272bca477d9b", - "name": "OpenWeather", - "dockerRepository": "airbyte/source-openweather", - "dockerImageTag": "0.1.6", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/openweather", - "icon": "openweather.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Open Weather Spec", - "type": "object", - "required": [ "appid", "lat", "lon" ], - "additionalProperties": true, - "properties": { - "lat": { - "title": "Latitude", - "type": "string", - "pattern": "^[-]?\\d{1,2}(\\.\\d+)?$", - "examples": [ "45.7603", "-21.249107858038816" ], - "description": "Latitude for which you want to get weather condition from. (min -90, max 90)" - }, - "lon": { - "title": "Longitude", - "type": "string", - "pattern": "^[-]?\\d{1,3}(\\.\\d+)?$", - "examples": [ "4.835659", "-70.39482074115321" ], - "description": "Longitude for which you want to get weather condition from. (min -180, max 180)" - }, - "appid": { - "title": "App ID", - "type": "string", - "description": "Your OpenWeather API Key. See here. The key is case sensitive.", - "airbyte_secret": true - }, - "units": { - "title": "Units", - "type": "string", - "description": "Units of measurement. standard, metric and imperial units are available. If you do not use the units parameter, standard units will be applied by default.", - "enum": [ "standard", "metric", "imperial" ], - "examples": [ "standard", "metric", "imperial" ] - }, - "lang": { - "title": "Language", - "type": "string", - "description": "You can use lang parameter to get the output in your language. The contents of the description field will be translated. See here for the list of supported languages.", - "enum": [ "af", "al", "ar", "az", "bg", "ca", "cz", "da", "de", "el", "en", "eu", "fa", "fi", "fr", "gl", "he", "hi", "hr", "hu", "id", "it", "ja", "kr", "la", "lt", "mk", "no", "nl", "pl", "pt", "pt_br", "ro", "ru", "sv", "se", "sk", "sl", "sp", "es", "sr", "th", "tr", "ua", "uk", "vi", "zh_cn", "zh_tw", "zu" ], - "examples": [ "en", "fr", "pt_br", "uk", "zh_cn", "zh_tw" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "06bdb480-2598-40b8-8b0f-fc2e2d2abdda", - "name": "Opsgenie", - "dockerRepository": "airbyte/source-opsgenie", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/opsgenie", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Opsgenie Spec", - "type": "object", - "required": [ "api_token", "endpoint" ], - "additionalProperties": true, - "properties": { - "api_token": { - "type": "string", - "description": "API token used to access the Opsgenie platform", - "airbyte_secret": true - }, - "endpoint": { - "type": "string", - "description": "Service endpoint to use for API calls.", - "examples": [ "api.opsgenie.com", "api.eu.opsgenie.com" ], - "default": "api.opsgenie.com" - }, - "start_date": { - "type": "string", - "description": "The date from which you'd like to replicate data from Opsgenie in the format of YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated. Note that it will be used only in the following incremental streams: issues.", - "examples": [ "2022-07-01T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "b39a7370-74c3-45a6-ac3a-380d48520a83", - "name": "Oracle DB", - "dockerRepository": "airbyte/source-oracle", - "dockerImageTag": "0.3.24", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/oracle", - "icon": "oracle.svg", - "sourceType": "database", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/oracle", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Oracle Source Spec", - "type": "object", - "required": [ "host", "port", "username" ], - "properties": { - "host": { - "title": "Host", - "description": "Hostname of the database.", - "type": "string", - "order": 1 - }, - "port": { - "title": "Port", - "description": "Port of the database.\nOracle Corporations recommends the following port numbers:\n1521 - Default listening port for client connections to the listener. \n2484 - Recommended and officially registered listening port for client connections to the listener using TCP/IP with SSL", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 1521, - "order": 2 - }, - "connection_data": { - "title": "Connect by", - "type": "object", - "description": "Connect data that will be used for DB connection", - "order": 3, - "oneOf": [ { - "title": "Service name", - "description": "Use service name", - "required": [ "service_name" ], - "properties": { - "connection_type": { - "type": "string", - "const": "service_name", - "order": 0 - }, - "service_name": { - "title": "Service name", - "type": "string", - "order": 1 - } - } - }, { - "title": "System ID (SID)", - "description": "Use SID (Oracle System Identifier)", - "required": [ "sid" ], - "properties": { - "connection_type": { - "type": "string", - "const": "sid", - "order": 0 - }, - "sid": { - "title": "System ID (SID)", - "type": "string", - "order": 1 - } - } - } ] - }, - "username": { - "title": "User", - "description": "The username which is used to access the database.", - "type": "string", - "order": 4 - }, - "password": { - "title": "Password", - "description": "The password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 5 - }, - "schemas": { - "title": "Schemas", - "description": "The list of schemas to sync from. Defaults to user. Case sensitive.", - "type": "array", - "items": { - "type": "string" - }, - "minItems": 1, - "uniqueItems": true, - "order": 6 - }, - "jdbc_url_params": { - "title": "JDBC URL Params", - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", - "type": "string", - "order": 7 - }, - "encryption": { - "title": "Encryption", - "type": "object", - "description": "The encryption method with is used when communicating with the database.", - "order": 8, - "oneOf": [ { - "title": "Unencrypted", - "description": "Data transfer will not be encrypted.", - "required": [ "encryption_method" ], - "properties": { - "encryption_method": { - "type": "string", - "const": "unencrypted" - } - } - }, { - "title": "Native Network Encryption (NNE)", - "description": "The native network encryption gives you the ability to encrypt database connections, without the configuration overhead of TCP/IP and SSL/TLS and without the need to open and listen on different ports.", - "required": [ "encryption_method" ], - "properties": { - "encryption_method": { - "type": "string", - "const": "client_nne" - }, - "encryption_algorithm": { - "type": "string", - "description": "This parameter defines what encryption algorithm is used.", - "title": "Encryption Algorithm", - "default": "AES256", - "enum": [ "AES256", "RC4_56", "3DES168" ] - } - } - }, { - "title": "TLS Encrypted (verify certificate)", - "description": "Verify and use the certificate provided by the server.", - "required": [ "encryption_method", "ssl_certificate" ], - "properties": { - "encryption_method": { - "type": "string", - "const": "encrypted_verify_certificate" - }, - "ssl_certificate": { - "title": "SSL PEM File", - "description": "Privacy Enhanced Mail (PEM) files are concatenated certificate containers frequently used in certificate installations.", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - } ] - }, - "tunnel_method": { - "type": "object", - "title": "SSH Tunnel Method", - "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", - "oneOf": [ { - "title": "No Tunnel", - "required": [ "tunnel_method" ], - "properties": { - "tunnel_method": { - "description": "No ssh tunnel needed to connect to database", - "type": "string", - "const": "NO_TUNNEL", - "order": 0 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host.", - "type": "string", - "order": 3 - }, - "ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - }, { - "title": "Password Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host", - "type": "string", - "order": 3 - }, - "tunnel_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 4 - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "allowedHosts": { - "hosts": [ "${host}", "${tunnel_method.tunnel_host}" ] - } - }, { - "sourceDefinitionId": "7f0455fb-4518-4ec0-b7a3-d808bf8081cc", - "name": "Orb", - "dockerRepository": "airbyte/source-orb", - "dockerImageTag": "1.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/orb", - "icon": "orb.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.withorb.com/", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Orb Spec", - "type": "object", - "required": [ "api_key", "start_date" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "title": "Orb API Key", - "description": "Orb API Key, issued from the Orb admin console.", - "airbyte_secret": true, - "order": 1 - }, - "start_date": { - "type": "string", - "title": "Start Date", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "description": "UTC date and time in the format 2022-03-01T00:00:00Z. Any data with created_at before this data will not be synced. For Subscription Usage, this becomes the `timeframe_start` API parameter.", - "examples": [ "2022-03-01T00:00:00Z" ], - "order": 2 - }, - "lookback_window_days": { - "type": "integer", - "title": "Lookback Window (in days)", - "default": 0, - "minimum": 0, - "description": "When set to N, the connector will always refresh resources created within the past N days. By default, updated objects that are not newly created are not incrementally synced.", - "order": 3 - }, - "string_event_properties_keys": { - "type": "array", - "items": { - "type": "string" - }, - "title": "Event properties keys (string values)", - "description": "Property key names to extract from all events, in order to enrich ledger entries corresponding to an event deduction.", - "order": 4 - }, - "numeric_event_properties_keys": { - "type": "array", - "items": { - "type": "string" - }, - "title": "Event properties keys (numeric values)", - "description": "Property key names to extract from all events, in order to enrich ledger entries corresponding to an event deduction.", - "order": 5 - }, - "subscription_usage_grouping_key": { - "type": "string", - "title": "Subscription usage grouping key (string value)", - "description": "Property key name to group subscription usage by." - }, - "plan_id": { - "type": "string", - "title": "Orb Plan ID for Subscription Usage (string value)", - "description": "Orb Plan ID to filter subscriptions that should have usage fetched." - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "95bcc041-1d1a-4c2e-8802-0ca5b1bfa36a", - "name": "Orbit", - "dockerRepository": "airbyte/source-orbit", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/orbit", - "icon": "orbit.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/orbit", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Orbit Source Spec", - "type": "object", - "required": [ "api_token", "workspace" ], - "additionalProperties": false, - "properties": { - "api_token": { - "type": "string", - "airbyte_secret": true, - "title": "API Token", - "description": "Authorizes you to work with Orbit workspaces associated with the token.", - "order": 0 - }, - "workspace": { - "type": "string", - "title": "Workspace", - "description": "The unique name of the workspace that your API token is associated with.", - "order": 1 - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "Date in the format 2022-06-26. Only load members whose last activities are after this date.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "order": 2 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "2bf6c581-bec5-4e32-891d-de33036bd631", - "name": "Oura", - "dockerRepository": "airbyte/source-oura", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/oura", - "icon": "oura.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Oura Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "description": "API Key", - "airbyte_secret": true, - "order": 0 - }, - "start_datetime": { - "type": "string", - "description": "Start datetime to sync from. Default is current UTC datetime minus 1\nday.\n", - "pattern": "^(-?(?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(Z|[+-](?:2[0-3]|[01][0-9]):[0-5][0-9])?$", - "order": 1 - }, - "end_datetime": { - "type": "string", - "description": "End datetime to sync until. Default is current UTC datetime.", - "pattern": "^(-?(?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(Z|[+-](?:2[0-3]|[01][0-9]):[0-5][0-9])?$", - "order": 2 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "3490c201-5d95-4783-b600-eaf07a4c7787", - "name": "Outreach", - "dockerRepository": "airbyte/source-outreach", - "dockerImageTag": "0.2.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/outreach", - "icon": "outreach.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/outreach", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Source Outreach Spec", - "type": "object", - "required": [ "client_id", "client_secret", "refresh_token", "redirect_uri", "start_date" ], - "additionalProperties": true, - "properties": { - "client_id": { - "type": "string", - "title": "Client ID", - "description": "The Client ID of your Outreach developer application." - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "The Client Secret of your Outreach developer application.", - "airbyte_secret": true - }, - "refresh_token": { - "type": "string", - "title": "Refresh Token", - "description": "The token for obtaining the new access token.", - "airbyte_secret": true - }, - "redirect_uri": { - "type": "string", - "title": "Redirect URI", - "description": "A Redirect URI is the location where the authorization server sends the user once the app has been successfully authorized and granted an authorization code or access token." - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "The date from which you'd like to replicate data for Outreach API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", - "examples": [ "2020-11-16T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "ad15c7ba-72a7-440b-af15-b9a963dc1a8a", - "name": "Pardot", - "dockerRepository": "airbyte/source-pardot", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/pardot", - "icon": "salesforcepardot.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/pardot", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Pardot Spec", - "type": "object", - "required": [ "pardot_business_unit_id", "client_id", "client_secret", "refresh_token" ], - "additionalProperties": false, - "properties": { - "pardot_business_unit_id": { - "description": "Pardot Business ID, can be found at Setup > Pardot > Pardot Account Setup", - "type": "string" - }, - "client_id": { - "description": "The Consumer Key that can be found when viewing your app in Salesforce", - "type": "string", - "airbyte_secret": true - }, - "client_secret": { - "description": "The Consumer Secret that can be found when viewing your app in Salesforce", - "type": "string", - "airbyte_secret": true - }, - "refresh_token": { - "description": "Salesforce Refresh Token used for Airbyte to access your Salesforce account. If you don't know what this is, follow this guide to retrieve it.", - "type": "string", - "airbyte_secret": true - }, - "start_date": { - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated. Leave blank to skip this filter", - "type": "string", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "default": null, - "examples": [ "2021-07-25T00:00:00Z" ] - }, - "is_sandbox": { - "description": "Whether or not the the app is in a Salesforce sandbox. If you do not know what this, assume it is false.", - "type": "boolean", - "default": false - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "2817b3f0-04e4-4c7a-9f32-7a5e8a83db95", - "name": "PagerDuty", - "dockerRepository": "farosai/airbyte-pagerduty-source", - "dockerImageTag": "0.1.23", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/pagerduty", - "icon": "pagerduty.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.faros.ai", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "PagerDuty Spec", - "type": "object", - "required": [ "token" ], - "additionalProperties": false, - "properties": { - "token": { - "type": "string", - "title": "PagerDuty API key", - "airbyte_secret": true - }, - "pageSize": { - "type": "number", - "minimum": 1, - "maximum": 25, - "default": 25, - "title": "Page Size", - "description": "page size to use when querying PagerDuty API" - }, - "cutoffDays": { - "type": "number", - "minimum": 1, - "default": 90, - "title": "Cutoff Days", - "description": "fetch pipelines updated in the last number of days" - }, - "incidentLogEntriesOverview": { - "type": "boolean", - "title": "Incident Log Entries Overview", - "description": "If true, will return a subset of log entries that show only the most important changes to the incident.", - "default": true - }, - "defaultSeverity": { - "type": "string", - "title": "Severity category", - "description": "A default severity category if not present", - "examples": [ "Sev1", "Sev2", "Sev3", "Sev4", "Sev5", "Custom" ], - "pattern": "^(Sev[0-5])?(Custom)?$" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "d30fb809-6456-484d-8e2c-ee12e0f6888d", - "name": "PartnerStack", - "dockerRepository": "airbyte/source-partnerstack", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/partnerstack", - "icon": "partnerstack.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/partnerstack", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Partnerstack Spec", - "type": "object", - "required": [ "public_key", "private_key" ], - "additionalProperties": true, - "properties": { - "public_key": { - "type": "string", - "title": "Partnerstack Public key", - "description": "The Live Public Key for a Partnerstack account.", - "airbyte_secret": true - }, - "private_key": { - "type": "string", - "title": "Partnerstack Private key", - "description": "The Live Private Key for a Partnerstack account.", - "airbyte_secret": true - }, - "start_date": { - "type": "string", - "title": "Start date", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", - "examples": [ "2017-01-25T00:00:00Z" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "d913b0f2-cc51-4e55-a44c-8ba1697b9239", - "name": "Paypal Transaction", - "dockerRepository": "airbyte/source-paypal-transaction", - "dockerImageTag": "0.1.12", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/paypal-transaction", - "icon": "paypal.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/paypal-transactions", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Paypal Transaction Search", - "type": "object", - "required": [ "start_date", "is_sandbox" ], - "additionalProperties": true, - "properties": { - "client_id": { - "type": "string", - "title": "Client ID", - "description": "The Client ID of your Paypal developer application.", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "title": "Client secret", - "description": "The Client Secret of your Paypal developer application.", - "airbyte_secret": true - }, - "refresh_token": { - "type": "string", - "title": "Refresh token", - "description": "The key to refresh the expired access token.", - "airbyte_secret": true - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "Start Date for data extraction in ISO format. Date must be in range from 3 years till 12 hrs before present time.", - "examples": [ "2021-06-11T23:59:59-00:00" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}[+-][0-9]{2}:[0-9]{2}$" - }, - "is_sandbox": { - "title": "Sandbox", - "description": "Determines whether to use the sandbox or production environment.", - "type": "boolean", - "default": false - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "api-m.paypal.com", "api-m.sandbox.paypal.com" ] - } - }, { - "sourceDefinitionId": "193bdcb8-1dd9-48d1-aade-91cadfd74f9b", - "name": "Paystack", - "dockerRepository": "airbyte/source-paystack", - "dockerImageTag": "0.1.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/paystack", - "icon": "paystack.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/paystack", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Paystack Source Spec", - "type": "object", - "required": [ "secret_key", "start_date" ], - "additionalProperties": true, - "properties": { - "secret_key": { - "type": "string", - "title": "Secret Key", - "pattern": "^(s|r)k_(live|test)_[a-zA-Z0-9]+$", - "description": "The Paystack API key (usually starts with 'sk_live_'; find yours here).", - "airbyte_secret": true - }, - "start_date": { - "type": "string", - "title": "Start Date", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", - "examples": [ "2017-01-25T00:00:00Z" ], - "format": "date-time" - }, - "lookback_window_days": { - "type": "integer", - "title": "Lookback Window (in days)", - "default": 0, - "minimum": 0, - "description": "When set, the connector will always reload data from the past N days, where N is the value set here. This is useful if your data is updated after creation." - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "api.paystack.co" ] - } - }, { - "sourceDefinitionId": "b1ccb590-e84f-46c0-83a0-2048ccfffdae", - "name": "Pendo", - "dockerRepository": "airbyte/source-pendo", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/pendo", - "icon": "pendo.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/pendo", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "required": [ "api_key" ], - "properties": { - "api_key": { - "type": "string", - "title": "API Key", - "airbyte_secret": true - } - }, - "additionalProperties": true - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "3052c77e-8b91-47e2-97a0-a29a22794b4b", - "name": "PersistIq", - "dockerRepository": "airbyte/source-persistiq", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/persistiq", - "icon": "persistiq.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/persistiq", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Persistiq Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": false, - "properties": { - "api_key": { - "type": "string", - "description": "PersistIq API Key. See the docs for more information on where to find that key.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "69d9eb65-8026-47dc-baf1-e4bf67901fd6", - "name": "Pexels API", - "dockerRepository": "airbyte/source-pexels-api", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/pexels-api", - "icon": "pexels.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/pexels-api", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Pexel API Spec", - "type": "object", - "required": [ "api_key", "query" ], - "additionalProperties": true, - "properties": { - "api_key": { - "title": "API Key from the pexels website", - "type": "string", - "description": "API key is required to access pexels api, For getting your's goto https://www.pexels.com/api/documentation and create account for free.", - "airbyte_secret": true - }, - "query": { - "title": "Specific query for the search", - "type": "string", - "description": "Optional, the search query, Example Ocean, Tigers, Pears, etc.", - "examples": [ "people", "oceans" ] - }, - "orientation": { - "title": "Specific orientation for the search", - "type": "string", - "description": "Optional, Desired photo orientation. The current supported orientations are landscape, portrait or square", - "examples": [ "square", "landscape" ] - }, - "size": { - "title": "Specific size for the search", - "type": "string", - "description": "Optional, Minimum photo size. The current supported sizes are large(24MP), medium(12MP) or small(4MP).", - "examples": [ "large", "small" ] - }, - "color": { - "title": "Specific color for the search", - "type": "string", - "description": "Optional, Desired photo color. Supported colors red, orange, yellow, green, turquoise, blue, violet, pink, brown, black, gray, white or any hexidecimal color code.", - "examples": [ "red", "orange" ] - }, - "locale": { - "title": "Specific locale for the search", - "type": "string", - "description": "Optional, The locale of the search you are performing. The current supported locales are 'en-US' 'pt-BR' 'es-ES' 'ca-ES' 'de-DE' 'it-IT' 'fr-FR' 'sv-SE' 'id-ID' 'pl-PL' 'ja-JP' 'zh-TW' 'zh-CN' 'ko-KR' 'th-TH' 'nl-NL' 'hu-HU' 'vi-VN' 'cs-CZ' 'da-DK' 'fi-FI' 'uk-UA' 'el-GR' 'ro-RO' 'nb-NO' 'sk-SK' 'tr-TR' 'ru-RU'.", - "examples": [ "en-US", "pt-BR" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "5cb7e5fe-38c2-11ec-8d3d-0242ac130003", - "name": "Pinterest", - "dockerRepository": "airbyte/source-pinterest", - "dockerImageTag": "0.2.5", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/pinterest", - "icon": "pinterest.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/pinterest", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Pinterest Spec", - "type": "object", - "required": [ "start_date" ], - "additionalProperties": true, - "properties": { - "start_date": { - "type": "string", - "title": "Start Date", - "description": "A date in the format YYYY-MM-DD. If you have not set a date, it would be defaulted to latest allowed date by api (89 days from today).", - "examples": [ "2022-07-28" ] - }, - "status": { - "title": "Status", - "description": "Entity statuses based off of campaigns, ad_groups, and ads. If you do not have a status set, it will be ignored completely.", - "type": [ "array", "null" ], - "items": { - "type": "string", - "enum": [ "ACTIVE", "PAUSED", "ARCHIVED" ] - }, - "uniqueItems": true - }, - "credentials": { - "title": "Authorization Method", - "type": "object", - "oneOf": [ { - "type": "object", - "title": "OAuth2.0", - "required": [ "auth_method", "refresh_token" ], - "properties": { - "auth_method": { - "type": "string", - "const": "oauth2.0", - "order": 0 - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "The Client ID of your OAuth application", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "The Client Secret of your OAuth application.", - "airbyte_secret": true - }, - "refresh_token": { - "type": "string", - "title": "Refresh Token", - "description": "Refresh Token to obtain new Access Token, when it's expired.", - "airbyte_secret": true - } - } - }, { - "type": "object", - "title": "Access Token", - "required": [ "auth_method", "access_token" ], - "properties": { - "auth_method": { - "type": "string", - "const": "access_token", - "order": 0 - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "The Access Token to make authenticated requests.", - "airbyte_secret": true - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "auth_method" ], - "predicate_value": "oauth2.0", - "oauth_config_specification": { - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "refresh_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "refresh_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "api.pinterest.com" ] - } - }, { - "sourceDefinitionId": "d8286229-c680-4063-8c59-23b9b391c700", - "name": "Pipedrive", - "dockerRepository": "airbyte/source-pipedrive", - "dockerImageTag": "0.1.17", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/pipedrive", - "icon": "pipedrive.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/pipedrive", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Pipedrive Spec", - "type": "object", - "required": [ "replication_start_date" ], - "additionalProperties": true, - "properties": { - "authorization": { - "type": "object", - "title": "API Key Authentication", - "required": [ "auth_type", "api_token" ], - "properties": { - "auth_type": { - "type": "string", - "const": "Token", - "order": 0 - }, - "api_token": { - "title": "API Token", - "type": "string", - "description": "The Pipedrive API Token.", - "airbyte_secret": true - } - } - }, - "replication_start_date": { - "title": "Start Date", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated. When specified and not None, then stream will behave as incremental", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2017-01-25T00:00:00Z" ], - "type": "string", - "format": "date-time" - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "api.pipedrive.com" ] - } - }, { - "sourceDefinitionId": "d60f5393-f99e-4310-8d05-b1876820f40e", - "name": "Pivotal Tracker", - "dockerRepository": "airbyte/source-pivotal-tracker", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/pivotal-tracker", - "icon": "pivotal-tracker.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Pivotal Tracker Spec", - "type": "object", - "required": [ "api_token" ], - "additionalProperties": false, - "properties": { - "api_token": { - "type": "string", - "description": "Pivotal Tracker API token", - "examples": [ "5c054d0de3440452190fdc5d5a04d871" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "ed799e2b-2158-4c66-8da4-b40fe63bc72a", - "name": "Plaid", - "dockerRepository": "airbyte/source-plaid", - "dockerImageTag": "0.3.2", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/plaid", - "icon": "plaid.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://plaid.com/docs/api/", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "required": [ "access_token", "api_key", "client_id", "plaid_env" ], - "additionalProperties": true, - "properties": { - "access_token": { - "type": "string", - "title": "Access Token", - "description": "The end-user's Link access token." - }, - "api_key": { - "title": "API Key", - "type": "string", - "description": "The Plaid API key to use to hit the API.", - "airbyte_secret": true - }, - "client_id": { - "title": "Client ID", - "type": "string", - "description": "The Plaid client id" - }, - "plaid_env": { - "title": "Plaid Environment", - "type": "string", - "enum": [ "sandbox", "development", "production" ], - "description": "The Plaid environment" - }, - "start_date": { - "title": "Start Date", - "type": "string", - "description": "The date from which you'd like to replicate data for Plaid in the format YYYY-MM-DD. All data generated after this date will be replicated.", - "examples": [ "2021-03-01" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "603ba446-3d75-41d7-92f3-aba901f8b897", - "name": "Plausible", - "dockerRepository": "airbyte/source-plausible", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/plausible", - "icon": "plausible.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/plausible", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Plausible Spec", - "type": "object", - "required": [ "api_key", "site_id" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "title": "Plausible API key", - "description": "Plausible API Key. See the docs for information on how to generate this key.", - "airbyte_secret": true - }, - "site_id": { - "type": "string", - "title": "Target website domain", - "description": "The domain of the site you want to retrieve data for. Enter the name of your site as configured on Plausible, i.e., excluding \"https://\" and \"www\". Can be retrieved from the 'domain' field in your Plausible site settings.", - "pattern": "^[A-Za-z0-9-.]+\\.[A-Z-a-z0-9-.]+", - "examples": [ "airbyte.com", "docs.airbyte.com" ] - }, - "start_date": { - "type": "string", - "title": "Data start date", - "description": "Start date for data to retrieve, in ISO-8601 format.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "YYYY-MM-DD" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "b0dd65f1-081f-4731-9c51-38e9e6aa0ebf", - "name": "Pocket", - "dockerRepository": "airbyte/source-pocket", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/pocket", - "icon": "pocket.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/pocket", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Pocket Spec", - "type": "object", - "required": [ "consumer_key", "access_token" ], - "additionalProperties": true, - "properties": { - "consumer_key": { - "type": "string", - "title": "Consumer Key", - "description": "Your application's Consumer Key.", - "airbyte_secret": true, - "order": 0 - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "The user's Pocket access token.", - "airbyte_secret": true, - "order": 1 - }, - "state": { - "type": "string", - "title": "State", - "description": "Select the state of the items to retrieve.", - "order": 2, - "enum": [ "unread", "archive", "all" ] - }, - "favorite": { - "type": "boolean", - "title": "Is Favorite?", - "description": "Retrieve only favorited items.", - "default": false, - "order": 3 - }, - "tag": { - "type": "string", - "title": "Tag Name", - "description": "Return only items tagged with this tag name. Use _untagged_ for retrieving only untagged items.", - "order": 4 - }, - "content_type": { - "type": "string", - "title": "Content Type", - "description": "Select the content type of the items to retrieve.", - "order": 5, - "enum": [ "article", "video", "image" ] - }, - "sort": { - "type": "string", - "title": "Sort By", - "description": "Sort retrieved items by the given criteria.", - "order": 6, - "enum": [ "newest", "oldest", "title", "site" ] - }, - "detail_type": { - "type": "string", - "title": "Detail Type", - "description": "Select the granularity of the information about each item.", - "order": 7, - "enum": [ "simple", "complete" ] - }, - "search": { - "type": "string", - "title": "Search Query", - "description": "Only return items whose title or url contain the `search` string.", - "order": 8 - }, - "domain": { - "type": "string", - "title": "Domain", - "description": "Only return items from a particular `domain`.", - "order": 9 - }, - "since": { - "type": "string", - "title": "Since", - "description": "Only return items modified since the given timestamp.", - "pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}", - "examples": [ "2022-10-20 14:14:14" ], - "order": 10 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "6371b14b-bc68-4236-bfbd-468e8df8e968", - "name": "PokeAPI", - "dockerRepository": "airbyte/source-pokeapi", - "dockerImageTag": "0.1.5", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/pokeapi", - "icon": "pokeapi.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/pokeapi", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Pokeapi Spec", - "type": "object", - "required": [ "pokemon_name" ], - "additionalProperties": false, - "properties": { - "pokemon_name": { - "type": "string", - "title": "Pokemon Name", - "description": "Pokemon requested from the API.", - "pattern": "^[a-z0-9_\\-]+$", - "examples": [ "ditto", "luxray", "snorlax" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "5807d72f-0abc-49f9-8fa5-ae820007032b", - "name": "Polygon Stock API", - "dockerRepository": "airbyte/source-polygon-stock-api", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/polygon-stock-api", - "icon": "polygon.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/airtable", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Weather API Spec", - "type": "object", - "required": [ "apiKey", "stocksTicker", "multiplier", "timespan", "start_date", "end_date" ], - "additionalProperties": true, - "properties": { - "apiKey": { - "title": "API Key", - "type": "string", - "description": "Your API ACCESS Key", - "airbyte_secret": true - }, - "stocksTicker": { - "title": "Stock Ticker", - "type": "string", - "description": "The exchange symbol that this item is traded under.", - "examples": [ "IBM", "MSFT" ] - }, - "multiplier": { - "title": "Multiplier", - "type": "integer", - "description": "The size of the timespan multiplier.", - "examples": [ 1, 2 ] - }, - "timespan": { - "title": "Timespan", - "type": "string", - "description": "The size of the time window.", - "examples": [ "day" ] - }, - "start_date": { - "title": "Start Date", - "type": "string", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "description": "The beginning date for the aggregate window.", - "examples": [ "2020-10-14" ], - "format": "date" - }, - "end_date": { - "title": "End Date", - "type": "string", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "description": "The target date for the aggregate window.", - "examples": [ "2020-10-14" ], - "format": "date" - }, - "adjusted": { - "title": "Adjusted", - "type": "string", - "description": "Determines whether or not the results are adjusted for splits. By default, results are adjusted and set to true. Set this to false to get results that are NOT adjusted for splits.", - "examples": [ "true", "false" ] - }, - "sort": { - "title": "Sort", - "type": "string", - "description": "Sort the results by timestamp. asc will return results in ascending order (oldest at the top), desc will return results in descending order (newest at the top).", - "examples": [ "asc", "desc" ] - }, - "limit": { - "title": "Limit", - "type": "integer", - "description": "The target date for the aggregate window.", - "examples": [ 100, 120 ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "allowedHosts": { - "hosts": [ "api.polygon.io" ] - } - }, { - "sourceDefinitionId": "af6d50ee-dddf-4126-a8ee-7faee990774f", - "name": "PostHog", - "dockerRepository": "airbyte/source-posthog", - "dockerImageTag": "0.1.9", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/posthog", - "icon": "posthog.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/posthog", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "PostHog Spec", - "type": "object", - "required": [ "api_key", "start_date" ], - "properties": { - "start_date": { - "title": "Start Date", - "type": "string", - "description": "The date from which you'd like to replicate the data. Any data before this date will not be replicated.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2021-01-01T00:00:00Z" ], - "format": "date-time" - }, - "api_key": { - "type": "string", - "airbyte_secret": true, - "title": "API Key", - "description": "API Key. See the docs for information on how to generate this key." - }, - "base_url": { - "type": "string", - "default": "https://app.posthog.com", - "title": "Base URL", - "description": "Base PostHog url. Defaults to PostHog Cloud (https://app.posthog.com).", - "examples": [ "https://posthog.example.com" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "${base_url}", "app.posthog.com" ] - } - }, { - "sourceDefinitionId": "decd338e-5647-4c0b-adf4-da0e75f5a750", - "name": "Postgres", - "dockerRepository": "airbyte/source-postgres", - "dockerImageTag": "2.0.25", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/postgres", - "icon": "postgresql.svg", - "sourceType": "database", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/postgres", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Postgres Source Spec", - "type": "object", - "required": [ "host", "port", "database", "username" ], - "properties": { - "host": { - "title": "Host", - "description": "Hostname of the database.", - "type": "string", - "order": 0, - "group": "db" - }, - "port": { - "title": "Port", - "description": "Port of the database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 5432, - "examples": [ "5432" ], - "order": 1, - "group": "db" - }, - "database": { - "title": "Database Name", - "description": "Name of the database.", - "type": "string", - "order": 2, - "group": "db" - }, - "schemas": { - "title": "Schemas", - "description": "The list of schemas (case sensitive) to sync from. Defaults to public.", - "type": "array", - "items": { - "type": "string" - }, - "minItems": 0, - "uniqueItems": true, - "default": [ "public" ], - "order": 3, - "group": "db" - }, - "username": { - "title": "Username", - "description": "Username to access the database.", - "type": "string", - "order": 4, - "group": "auth" - }, - "password": { - "title": "Password", - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 5, - "group": "auth", - "always_show": true - }, - "jdbc_url_params": { - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (Eg. key1=value1&key2=value2&key3=value3). For more information read about JDBC URL parameters.", - "title": "JDBC URL Parameters (Advanced)", - "type": "string", - "order": 6, - "group": "advanced", - "pattern_descriptor": "key1=value1&key2=value2" - }, - "ssl_mode": { - "title": "SSL Modes", - "description": "SSL connection modes. \n Read more in the docs.", - "type": "object", - "order": 8, - "group": "security", - "oneOf": [ { - "title": "disable", - "additionalProperties": true, - "description": "Disables encryption of communication between Airbyte and source database.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "disable", - "order": 0 - } - } - }, { - "title": "allow", - "additionalProperties": true, - "description": "Enables encryption only when required by the source database.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "allow", - "order": 0 - } - } - }, { - "title": "prefer", - "additionalProperties": true, - "description": "Allows unencrypted connection only if the source database does not support encryption.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "prefer", - "order": 0 - } - } - }, { - "title": "require", - "additionalProperties": true, - "description": "Always require encryption. If the source database server does not support encryption, connection will fail.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "require", - "order": 0 - } - } - }, { - "title": "verify-ca", - "additionalProperties": true, - "description": "Always require encryption and verifies that the source database server has a valid SSL certificate.", - "required": [ "mode", "ca_certificate" ], - "properties": { - "mode": { - "type": "string", - "const": "verify-ca", - "order": 0 - }, - "ca_certificate": { - "type": "string", - "title": "CA Certificate", - "description": "CA certificate", - "airbyte_secret": true, - "multiline": true, - "order": 1 - }, - "client_certificate": { - "type": "string", - "title": "Client Certificate", - "description": "Client certificate", - "airbyte_secret": true, - "multiline": true, - "order": 2, - "always_show": true - }, - "client_key": { - "type": "string", - "title": "Client Key", - "description": "Client key", - "airbyte_secret": true, - "multiline": true, - "order": 3, - "always_show": true - }, - "client_key_password": { - "type": "string", - "title": "Client key password", - "description": "Password for keystorage. If you do not add it - the password will be generated automatically.", - "airbyte_secret": true, - "order": 4 - } - } - }, { - "title": "verify-full", - "additionalProperties": true, - "description": "This is the most secure mode. Always require encryption and verifies the identity of the source database server.", - "required": [ "mode", "ca_certificate" ], - "properties": { - "mode": { - "type": "string", - "const": "verify-full", - "order": 0 - }, - "ca_certificate": { - "type": "string", - "title": "CA Certificate", - "description": "CA certificate", - "airbyte_secret": true, - "multiline": true, - "order": 1 - }, - "client_certificate": { - "type": "string", - "title": "Client Certificate", - "description": "Client certificate", - "airbyte_secret": true, - "multiline": true, - "order": 2, - "always_show": true - }, - "client_key": { - "type": "string", - "title": "Client Key", - "description": "Client key", - "airbyte_secret": true, - "multiline": true, - "order": 3, - "always_show": true - }, - "client_key_password": { - "type": "string", - "title": "Client key password", - "description": "Password for keystorage. If you do not add it - the password will be generated automatically.", - "airbyte_secret": true, - "order": 4 - } - } - } ] - }, - "replication_method": { - "type": "object", - "title": "Replication Method", - "description": "Replication method for extracting data from the database.", - "order": 9, - "group": "advanced", - "oneOf": [ { - "title": "Standard", - "description": "Standard replication requires no setup on the DB side but will not be able to represent deletions incrementally.", - "required": [ "method" ], - "properties": { - "method": { - "type": "string", - "const": "Standard", - "order": 0 - } - } - }, { - "title": "Logical Replication (CDC)", - "description": "Logical replication uses the Postgres write-ahead log (WAL) to detect inserts, updates, and deletes. This needs to be configured on the source database itself. Only available on Postgres 10 and above. Read the docs.", - "required": [ "method", "replication_slot", "publication" ], - "additionalProperties": true, - "properties": { - "method": { - "type": "string", - "const": "CDC", - "order": 1 - }, - "plugin": { - "type": "string", - "title": "Plugin", - "description": "A logical decoding plugin installed on the PostgreSQL server.", - "enum": [ "pgoutput" ], - "default": "pgoutput", - "order": 2 - }, - "replication_slot": { - "type": "string", - "title": "Replication Slot", - "description": "A plugin logical replication slot. Read about replication slots.", - "order": 3 - }, - "publication": { - "type": "string", - "title": "Publication", - "description": "A Postgres publication used for consuming changes. Read about publications and replication identities.", - "order": 4 - }, - "initial_waiting_seconds": { - "type": "integer", - "title": "Initial Waiting Time in Seconds (Advanced)", - "description": "The amount of time the connector will wait when it launches to determine if there is new data to sync or not. Defaults to 300 seconds. Valid range: 120 seconds to 1200 seconds. Read about initial waiting time.", - "default": 300, - "order": 5, - "min": 120, - "max": 1200 - }, - "lsn_commit_behaviour": { - "type": "string", - "title": "LSN commit behaviour", - "description": "Determines when Airbtye should flush the LSN of processed WAL logs in the source database. `After loading Data in the destination` is default. If `While reading Data` is selected, in case of a downstream failure (while loading data into the destination), next sync would result in a full sync.", - "enum": [ "While reading Data", "After loading Data in the destination" ], - "default": "After loading Data in the destination", - "order": 6 - } - } - } ] - }, - "tunnel_method": { - "type": "object", - "title": "SSH Tunnel Method", - "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", - "oneOf": [ { - "title": "No Tunnel", - "required": [ "tunnel_method" ], - "properties": { - "tunnel_method": { - "description": "No ssh tunnel needed to connect to database", - "type": "string", - "const": "NO_TUNNEL", - "order": 0 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host.", - "type": "string", - "order": 3 - }, - "ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - }, { - "title": "Password Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host", - "type": "string", - "order": 3 - }, - "tunnel_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 4 - } - } - } ], - "group": "security" - } - }, - "groups": [ { - "id": "db" - }, { - "id": "auth" - }, { - "id": "security", - "title": "Security" - }, { - "id": "advanced", - "title": "Advanced" - } ] - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "${host}", "${tunnel_method.tunnel_host}" ] - }, - "maxSecondsBetweenMessages": 7200 - }, { - "sourceDefinitionId": "cde75ca1-1e28-4a0f-85bb-90c546de9f1f", - "name": "Postmark App", - "dockerRepository": "airbyte/source-postmarkapp", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/postmarkapp", - "icon": "postmark.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Postmarkapp Spec", - "type": "object", - "required": [ "X-Postmark-Server-Token", "X-Postmark-Account-Token" ], - "additionalProperties": true, - "properties": { - "X-Postmark-Server-Token": { - "title": "X-Postmark-Server-Token", - "type": "string", - "description": "API Key for server", - "airbyte_secret": true - }, - "X-Postmark-Account-Token": { - "title": "X-Postmark-Account-Token", - "type": "string", - "description": "API Key for account", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "d60a46d4-709f-4092-a6b7-2457f7d455f5", - "name": "PrestaShop", - "dockerRepository": "airbyte/source-prestashop", - "dockerImageTag": "0.3.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/prestashop", - "icon": "prestashop.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/prestashop", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "PrestaShop Spec", - "type": "object", - "required": [ "access_key", "url", "start_date" ], - "properties": { - "access_key": { - "type": "string", - "title": "Access Key", - "description": "Your PrestaShop access key. See the docs for info on how to obtain this.", - "order": 0, - "airbyte_secret": true - }, - "url": { - "type": "string", - "title": "Shop URL", - "description": "Shop URL without trailing slash.", - "order": 1 - }, - "start_date": { - "type": "string", - "title": "Start date", - "description": "The Start date in the format YYYY-MM-DD.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "2022-01-01" ], - "format": "date", - "order": 2 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "${domain}" ] - } - }, { - "sourceDefinitionId": "f636c3c6-4077-45ac-b109-19fc62a283c1", - "name": "Primetric", - "dockerRepository": "airbyte/source-primetric", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/primetric", - "icon": "primetric.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Primetric Spec", - "type": "object", - "required": [ "client_id", "client_secret" ], - "properties": { - "client_id": { - "type": "string", - "title": "Client ID", - "description": "The Client ID of your Primetric developer application. The Client ID is visible here.", - "pattern": "^[a-zA-Z0-9]+$", - "airbyte_secret": true, - "examples": [ "1234aBcD5678EFGh9045Neq79sdDlA15082VMYcj" ], - "order": 0 - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "The Client Secret of your Primetric developer application. You can manage your client's credentials here.", - "pattern": "^[a-zA-Z0-9]+$", - "airbyte_secret": true, - "order": 1 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "a4617b39-3c14-44cd-a2eb-6e720f269235", - "name": "Public APIs", - "dockerRepository": "airbyte/source-public-apis", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/public-apis", - "icon": "publicapi.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/public-apis", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Public Apis Spec", - "type": "object", - "required": [ ], - "properties": { } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "dbe9b7ae-7b46-4e44-a507-02a343cf7230", - "name": "Punk API", - "dockerRepository": "airbyte/source-punk-api", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/punk-api", - "icon": "punkapi.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/punk-api", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Punk Api Spec", - "type": "object", - "required": [ "brewed_before", "brewed_after" ], - "additionalProperties": true, - "properties": { - "id": { - "title": "Beers with specific ID", - "type": "string", - "description": "To extract specific data with Unique ID", - "examples": [ 1, 22 ] - }, - "brewed_before": { - "title": "Brewed before data to get incremental reads", - "type": "string", - "description": "To extract specific data with Unique ID", - "pattern": "^[0-9]{2}-[0-9]{4}$", - "examples": [ "MM-YYYY" ] - }, - "brewed_after": { - "title": "Brewed after data to get incremental reads", - "type": "string", - "description": "To extract specific data with Unique ID", - "pattern": "^[0-9]{2}-[0-9]{4}$", - "examples": [ "MM-YYYY" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "88ecd3a8-5f5b-11ed-9b6a-0242ac120002", - "name": "PyPI", - "dockerRepository": "airbyte/source-pypi", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/pypi", - "icon": "pypi.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/pypi", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Pypi Spec", - "type": "object", - "required": [ "project_name" ], - "additionalProperties": true, - "properties": { - "project_name": { - "type": "string", - "title": "PyPI Package", - "description": "Name of the project/package. Can only be in lowercase with hyphen. This is the name used using pip command for installing the package.", - "examples": [ "sampleproject" ] - }, - "version": { - "title": "Package Version", - "type": "string", - "description": "Version of the project/package. Use it to find a particular release instead of all releases.", - "examples": [ "1.2.0" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "f7c0b910-5f66-11ed-9b6a-0242ac120002", - "name": "Qonto", - "dockerRepository": "airbyte/source-qonto", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/public-qonto", - "icon": "qonto.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Qonto Spec", - "type": "object", - "required": [ "endpoint", "organization_slug", "secret_key", "iban" ], - "properties": { - "endpoint": { - "title": "Endpoint", - "type": "string", - "description": "Please choose the right endpoint to use in this connection", - "enum": [ "Production", "Test Mocked API Server" ] - }, - "organization_slug": { - "title": "Organization slug", - "type": "string", - "description": "Organization slug used in Qonto" - }, - "secret_key": { - "title": "Secret Key", - "type": "string", - "description": "Secret key of the Qonto account", - "airbyte_secret": true - }, - "iban": { - "title": "IBAN", - "type": "string", - "description": "International Bank Account Number linked used with your Qonto Account", - "pattern": "^[A-Z0-9]*$" - }, - "start_date": { - "title": "Start date", - "type": "string", - "description": "Start getting data from that date.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "YYYY-MM-DD" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "b08e4776-d1de-4e80-ab5c-1e51dad934a2", - "name": "Qualaroo", - "dockerRepository": "airbyte/source-qualaroo", - "dockerImageTag": "0.1.2", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/qualaroo", - "icon": "qualaroo.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/qualaroo", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Qualaroo Spec", - "type": "object", - "required": [ "token", "key", "start_date" ], - "additionalProperties": true, - "properties": { - "token": { - "type": "string", - "title": "API token", - "description": "A Qualaroo token. See the docs for instructions on how to generate it.", - "airbyte_secret": true - }, - "key": { - "type": "string", - "title": "API key", - "description": "A Qualaroo token. See the docs for instructions on how to generate it.", - "airbyte_secret": true - }, - "start_date": { - "type": "string", - "title": "Start Date", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}Z$", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", - "examples": [ "2021-03-01T00:00:00.000Z" ] - }, - "survey_ids": { - "type": "array", - "items": { - "type": "string", - "pattern": "^[0-9]{1,8}$" - }, - "title": "Qualaroo survey IDs", - "description": "IDs of the surveys from which you'd like to replicate data. If left empty, data from all surveys to which you have access will be replicated." - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ ], - "oauthFlowInitParameters": [ ], - "oauthFlowOutputParameters": [ [ "token" ], [ "key" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "cf9c4355-b171-4477-8f2d-6c5cc5fc8b7e", - "name": "QuickBooks", - "dockerRepository": "airbyte/source-quickbooks", - "dockerImageTag": "2.0.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/quickbooks", - "icon": "quickbooks.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/quickbooks", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Source QuickBooks Spec", - "type": "object", - "required": [ "credentials", "start_date", "sandbox" ], - "additionalProperties": true, - "properties": { - "credentials": { - "title": "Authorization Method", - "type": "object", - "order": 0, - "oneOf": [ { - "type": "object", - "title": "OAuth2.0", - "required": [ "client_id", "client_secret", "refresh_token", "access_token", "token_expiry_date", "realm_id" ], - "properties": { - "auth_type": { - "type": "string", - "const": "oauth2.0" - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "Identifies which app is making the request. Obtain this value from the Keys tab on the app profile via My Apps on the developer site. There are two versions of this key: development and production." - }, - "client_secret": { - "description": " Obtain this value from the Keys tab on the app profile via My Apps on the developer site. There are two versions of this key: development and production.", - "title": "Client Secret", - "type": "string", - "airbyte_secret": true - }, - "refresh_token": { - "description": "A token used when refreshing the access token.", - "title": "Refresh Token", - "type": "string", - "airbyte_secret": true - }, - "access_token": { - "description": "Access token fot making authenticated requests.", - "title": "Access Token", - "type": "string", - "airbyte_secret": true - }, - "token_expiry_date": { - "type": "string", - "title": "Token Expiry Date", - "description": "The date-time when the access token should be refreshed.", - "format": "date-time" - }, - "realm_id": { - "description": "Labeled Company ID. The Make API Calls panel is populated with the realm id and the current access token.", - "title": "Realm ID", - "type": "string", - "airbyte_secret": true - } - } - } ] - }, - "start_date": { - "order": 1, - "description": "The default value to use if no bookmark exists for an endpoint (rfc3339 date string). E.g, 2021-03-20T00:00:00+00:00. Any data before this date will not be replicated.", - "title": "Start Date", - "type": "string", - "format": "date-time", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2021-03-20T00:00:00+00:00" ] - }, - "sandbox": { - "order": 2, - "description": "Determines whether to use the sandbox or production environment.", - "title": "Sandbox", - "type": "boolean", - "default": false - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "allowedHosts": { - "hosts": [ "sandbox-quickbooks.api.intuit.com", "quickbooks.api.intuit.com", "oauth.platform.intuit.com" ] - } - }, { - "sourceDefinitionId": "9b6cc0c0-da81-4103-bbfd-5279e18a849a", - "name": "Railz", - "dockerRepository": "airbyte/source-railz", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/railz", - "icon": "railz.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Railz Spec", - "type": "object", - "required": [ "client_id", "secret_key", "start_date" ], - "properties": { - "client_id": { - "type": "string", - "title": "Client ID", - "description": "Client ID (client_id)", - "order": 0 - }, - "secret_key": { - "type": "string", - "title": "Secret key", - "description": "Secret key (secret_key)", - "order": 1, - "airbyte_secret": true - }, - "start_date": { - "type": "string", - "title": "Start date", - "description": "Start date", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "order": 2 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "45d2e135-2ede-49e1-939f-3e3ec357a65e", - "name": "Recharge", - "dockerRepository": "airbyte/source-recharge", - "dockerImageTag": "0.2.9", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/recharge", - "icon": "recharge.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/recharge", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Recharge Spec", - "type": "object", - "required": [ "start_date", "access_token" ], - "additionalProperties": true, - "properties": { - "start_date": { - "type": "string", - "title": "Start Date", - "description": "The date from which you'd like to replicate data for Recharge API, in the format YYYY-MM-DDT00:00:00Z. Any data before this date will not be replicated.", - "examples": [ "2021-05-14T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "format": "date-time" - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "The value of the Access Token generated. See the docs for more information.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "api.rechargeapps.com" ] - } - }, { - "sourceDefinitionId": "25d7535d-91e0-466a-aa7f-af81578be277", - "name": "Recreation", - "dockerRepository": "airbyte/source-recreation", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/recreation", - "icon": "recreation.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/recreation", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Recreation Spec", - "type": "object", - "required": [ "apikey" ], - "additionalProperties": true, - "properties": { - "apikey": { - "title": "API Key", - "type": "string", - "description": "API Key", - "airbyte_secret": true - }, - "query_campsites": { - "title": "Query Campsite", - "type": "string" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "3b046ac7-d8d3-4eb3-b122-f96b2a16d8a8", - "name": "Recruitee", - "dockerRepository": "airbyte/source-recruitee", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/recruitee", - "icon": "recruitee.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/recruitee", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Recruitee Spec", - "type": "object", - "required": [ "api_key", "company_id" ], - "additionalProperties": true, - "properties": { - "api_key": { - "title": "API Key", - "type": "string", - "description": "Recruitee API Key. See here.", - "airbyte_secret": true - }, - "company_id": { - "title": "Company ID", - "type": "integer", - "description": "Recruitee Company ID. You can also find this ID on the Recruitee API tokens page." - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "cd42861b-01fc-4658-a8ab-5d11d0510f01", - "name": "Recurly", - "dockerRepository": "airbyte/source-recurly", - "dockerImageTag": "0.4.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/recurly", - "icon": "recurly.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/recurly", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Recurly Source Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": false, - "properties": { - "api_key": { - "type": "string", - "title": "API Key", - "airbyte_secret": true, - "description": "Recurly API Key. See the docs for more information on how to generate this key.", - "order": 1 - }, - "begin_time": { - "type": "string", - "description": "ISO8601 timestamp from which the replication from Recurly API will start from.", - "examples": [ "2021-12-01T00:00:00" ], - "pattern": "^$|^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}$", - "order": 2 - }, - "end_time": { - "type": "string", - "description": "ISO8601 timestamp to which the replication from Recurly API will stop. Records after that date won't be imported.", - "examples": [ "2021-12-01T00:00:00" ], - "pattern": "^$|^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}$", - "order": 3 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "e87ffa8e-a3b5-f69c-9076-6011339de1f6", - "name": "Redshift", - "dockerRepository": "airbyte/source-redshift", - "dockerImageTag": "0.3.16", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/redshift", - "icon": "redshift.svg", - "sourceType": "database", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/destinations/redshift", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Redshift Source Spec", - "type": "object", - "required": [ "host", "port", "database", "username", "password" ], - "properties": { - "host": { - "title": "Host", - "description": "Host Endpoint of the Redshift Cluster (must include the cluster-id, region and end with .redshift.amazonaws.com).", - "type": "string", - "order": 1 - }, - "port": { - "title": "Port", - "description": "Port of the database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 5439, - "examples": [ "5439" ], - "order": 2 - }, - "database": { - "title": "Database", - "description": "Name of the database.", - "type": "string", - "examples": [ "master" ], - "order": 3 - }, - "schemas": { - "title": "Schemas", - "description": "The list of schemas to sync from. Specify one or more explicitly or keep empty to process all schemas. Schema names are case sensitive.", - "type": "array", - "items": { - "type": "string" - }, - "minItems": 0, - "uniqueItems": true, - "examples": [ "public" ], - "order": 4 - }, - "username": { - "title": "Username", - "description": "Username to use to access the database.", - "type": "string", - "order": 5 - }, - "password": { - "title": "Password", - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 6 - }, - "jdbc_url_params": { - "title": "JDBC URL Params", - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", - "type": "string", - "order": 7 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "8cc6537e-f8a6-423c-b960-e927af76116e", - "name": "Reply.io", - "dockerRepository": "airbyte/source-reply-io", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/reply-io", - "icon": "reply-io.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/reply-io", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Reply Io Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "title": "API Token", - "description": "The API Token for Reply", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "db04ecd1-42e7-4115-9cec-95812905c626", - "name": "Retently", - "dockerRepository": "airbyte/source-retently", - "dockerImageTag": "0.1.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/retently", - "icon": "retently.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Retently Api Spec", - "type": "object", - "additionalProperties": true, - "properties": { - "credentials": { - "title": "Authentication Mechanism", - "description": "Choose how to authenticate to Retently", - "type": "object", - "oneOf": [ { - "type": "object", - "title": "Authenticate via Retently (OAuth)", - "required": [ "client_id", "client_secret", "refresh_token" ], - "additionalProperties": true, - "properties": { - "auth_type": { - "type": "string", - "const": "Client", - "order": 0 - }, - "client_id": { - "title": "Client ID", - "type": "string", - "description": "The Client ID of your Retently developer application." - }, - "client_secret": { - "title": "Client Secret", - "type": "string", - "description": "The Client Secret of your Retently developer application.", - "airbyte_secret": true - }, - "refresh_token": { - "title": "Refresh Token", - "type": "string", - "description": "Retently Refresh Token which can be used to fetch new Bearer Tokens when the current one expires.", - "airbyte_secret": true - } - } - }, { - "type": "object", - "title": "Authenticate with API Token", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "auth_type": { - "type": "string", - "const": "Token", - "order": 0 - }, - "api_key": { - "title": "API Token", - "description": "Retently API Token. See the docs for more information on how to obtain this key.", - "type": "string", - "airbyte_secret": true - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "auth_type" ], - "predicate_value": "Client", - "oauth_config_specification": { - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": true, - "properties": { - "refresh_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "refresh_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": true, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": true, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "fb141f29-be2a-450b-a4f2-2cd203a00f84", - "name": "RD Station Marketing", - "dockerRepository": "airbyte/source-rd-station-marketing", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/rd-station-marketing", - "icon": "rdstation.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/rd-station-marketing", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "RD Station Marketing Spec", - "type": "object", - "required": [ "start_date" ], - "additionalProperties": true, - "properties": { - "authorization": { - "type": "object", - "title": "Authentication Type", - "description": "Choose one of the possible authorization method", - "oneOf": [ { - "title": "Sign in via RD Station (OAuth)", - "type": "object", - "required": [ "auth_type" ], - "properties": { - "auth_type": { - "type": "string", - "const": "Client", - "order": 0 - }, - "client_id": { - "title": "Client ID", - "type": "string", - "description": "The Client ID of your RD Station developer application.", - "airbyte_secret": true - }, - "client_secret": { - "title": "Client Secret", - "type": "string", - "description": "The Client Secret of your RD Station developer application", - "airbyte_secret": true - }, - "refresh_token": { - "title": "Refresh Token", - "type": "string", - "description": "The token for obtaining the new access token.", - "airbyte_secret": true - } - } - } ] - }, - "start_date": { - "title": "Start Date", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated. When specified and not None, then stream will behave as incremental", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2017-01-25T00:00:00Z" ], - "type": "string" - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ "authorization", "0" ], - "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], - "oauthFlowOutputParameters": [ [ "refresh_token" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "d78e5de0-aa44-4744-aa4f-74c818ccfe19", - "name": "RKI Covid", - "dockerRepository": "airbyte/source-rki-covid", - "dockerImageTag": "0.1.2", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/rki-covid", - "icon": "rki.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/rki-covid", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "RKI Covid Spec", - "type": "object", - "required": [ "start_date" ], - "additionalProperties": true, - "properties": { - "start_date": { - "type": "string", - "title": "Start Date", - "description": "UTC date in the format 2017-01-25. Any data before this date will not be replicated.", - "order": 1 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "0efee448-6948-49e2-b786-17db50647908", - "name": "RSS", - "dockerRepository": "airbyte/source-rss", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/rss", - "icon": "rss.svg", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/rss", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "RSS Spec", - "type": "object", - "required": [ "url" ], - "properties": { - "url": { - "type": "string", - "description": "RSS Feed URL" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false - }, { - "sourceDefinitionId": "921d9608-3915-450b-8078-0af18801ea1b", - "name": "Rocket.chat", - "dockerRepository": "airbyte/source-rocket-chat", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/rocket-chat", - "icon": "rocket-chat.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/rocket-chat", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Rocket Chat Spec", - "type": "object", - "required": [ "token", "user_id", "endpoint" ], - "additionalProperties": true, - "properties": { - "endpoint": { - "title": "Endpoint", - "type": "string", - "description": "Your rocket.chat instance URL.", - "examples": [ "https://airbyte-connector-poc.rocket.chat", "https://hey.yoursite.com" ] - }, - "token": { - "title": "Token", - "type": "string", - "description": "Your API Token. See here. The token is case sensitive.", - "airbyte_secret": true - }, - "user_id": { - "title": "User ID.", - "type": "string", - "description": "Your User Id." - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "69589781-7828-43c5-9f63-8925b1c1ccc2", - "name": "S3", - "dockerRepository": "airbyte/source-s3", - "dockerImageTag": "2.1.2", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/s3", - "icon": "s3.svg", - "sourceType": "file", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/s3", - "changelogUrl": "https://docs.airbyte.com/integrations/sources/s3", - "connectionSpecification": { - "title": "S3 Source Spec", - "type": "object", - "properties": { - "dataset": { - "title": "Output Stream Name", - "description": "The name of the stream you would like this source to output. Can contain letters, numbers, or underscores.", - "pattern": "^([A-Za-z0-9-_]+)$", - "order": 0, - "type": "string" - }, - "path_pattern": { - "title": "Pattern of files to replicate", - "description": "A regular expression which tells the connector which files to replicate. All files which match this pattern will be replicated. Use | to separate multiple patterns. See this page to understand pattern syntax (GLOBSTAR and SPLIT flags are enabled). Use pattern ** to pick up all files.", - "examples": [ "**", "myFolder/myTableFiles/*.csv|myFolder/myOtherTableFiles/*.csv" ], - "order": 10, - "type": "string" - }, - "format": { - "title": "File Format", - "description": "The format of the files you'd like to replicate", - "default": "csv", - "order": 20, - "type": "object", - "oneOf": [ { - "title": "CSV", - "description": "This connector utilises PyArrow (Apache Arrow) for CSV parsing.", - "type": "object", - "properties": { - "filetype": { - "title": "Filetype", - "const": "csv", - "type": "string" - }, - "delimiter": { - "title": "Delimiter", - "description": "The character delimiting individual cells in the CSV data. This may only be a 1-character string. For tab-delimited data enter '\\t'.", - "default": ",", - "minLength": 1, - "order": 0, - "type": "string" - }, - "infer_datatypes": { - "title": "Infer Datatypes", - "description": "Configures whether a schema for the source should be inferred from the current data or not. If set to false and a custom schema is set, then the manually enforced schema is used. If a schema is not manually set, and this is set to false, then all fields will be read as strings", - "default": true, - "order": 1, - "type": "boolean" - }, - "quote_char": { - "title": "Quote Character", - "description": "The character used for quoting CSV values. To disallow quoting, make this field blank.", - "default": "\"", - "order": 2, - "type": "string" - }, - "escape_char": { - "title": "Escape Character", - "description": "The character used for escaping special characters. To disallow escaping, leave this field blank.", - "order": 3, - "type": "string" - }, - "encoding": { - "title": "Encoding", - "description": "The character encoding of the CSV data. Leave blank to default to UTF8. See list of python encodings for allowable options.", - "default": "utf8", - "order": 4, - "type": "string" - }, - "double_quote": { - "title": "Double Quote", - "description": "Whether two quotes in a quoted CSV value denote a single quote in the data.", - "default": true, - "order": 5, - "type": "boolean" - }, - "newlines_in_values": { - "title": "Allow newlines in values", - "description": "Whether newline characters are allowed in CSV values. Turning this on may affect performance. Leave blank to default to False.", - "default": false, - "order": 6, - "type": "boolean" - }, - "additional_reader_options": { - "title": "Additional Reader Options", - "description": "Optionally add a valid JSON string here to provide additional options to the csv reader. Mappings must correspond to options detailed here. 'column_types' is used internally to handle schema so overriding that would likely cause problems.", - "examples": [ "{\"timestamp_parsers\": [\"%m/%d/%Y %H:%M\", \"%Y/%m/%d %H:%M\"], \"strings_can_be_null\": true, \"null_values\": [\"NA\", \"NULL\"]}" ], - "order": 7, - "type": "string" - }, - "advanced_options": { - "title": "Advanced Options", - "description": "Optionally add a valid JSON string here to provide additional Pyarrow ReadOptions. Specify 'column_names' here if your CSV doesn't have header, or if you want to use custom column names. 'block_size' and 'encoding' are already used above, specify them again here will override the values above.", - "examples": [ "{\"column_names\": [\"column1\", \"column2\"]}" ], - "order": 8, - "type": "string" - }, - "block_size": { - "title": "Block Size", - "description": "The chunk size in bytes to process at a time in memory from each file. If your data is particularly wide and failing during schema detection, increasing this should solve it. Beware of raising this too high as you could hit OOM errors.", - "default": 10000, - "minimum": 1, - "maximum": 2147483647, - "order": 9, - "type": "integer" - } - } - }, { - "title": "Parquet", - "description": "This connector utilises PyArrow (Apache Arrow) for Parquet parsing.", - "type": "object", - "properties": { - "filetype": { - "title": "Filetype", - "const": "parquet", - "type": "string" - }, - "columns": { - "title": "Selected Columns", - "description": "If you only want to sync a subset of the columns from the file(s), add the columns you want here as a comma-delimited list. Leave it empty to sync all columns.", - "order": 0, - "type": "array", - "items": { - "type": "string" - } - }, - "batch_size": { - "title": "Record batch size", - "description": "Maximum number of records per batch read from the input files. Batches may be smaller if there aren’t enough rows in the file. This option can help avoid out-of-memory errors if your data is particularly wide.", - "default": 65536, - "order": 1, - "type": "integer" - }, - "buffer_size": { - "title": "Buffer Size", - "description": "Perform read buffering when deserializing individual column chunks. By default every group column will be loaded fully to memory. This option can help avoid out-of-memory errors if your data is particularly wide.", - "default": 2, - "type": "integer" - } - } - }, { - "title": "Avro", - "description": "This connector utilises fastavro for Avro parsing.", - "type": "object", - "properties": { - "filetype": { - "title": "Filetype", - "const": "avro", - "type": "string" - } - } - }, { - "title": "Jsonl", - "description": "This connector uses PyArrow for JSON Lines (jsonl) file parsing.", - "type": "object", - "properties": { - "filetype": { - "title": "Filetype", - "const": "jsonl", - "type": "string" - }, - "newlines_in_values": { - "title": "Allow newlines in values", - "description": "Whether newline characters are allowed in JSON values. Turning this on may affect performance. Leave blank to default to False.", - "default": false, - "order": 0, - "type": "boolean" - }, - "unexpected_field_behavior": { - "title": "Unexpected field behavior", - "description": "How JSON fields outside of explicit_schema (if given) are treated. Check PyArrow documentation for details", - "default": "infer", - "examples": [ "ignore", "infer", "error" ], - "order": 1, - "enum": [ "ignore", "infer", "error" ] - }, - "block_size": { - "title": "Block Size", - "description": "The chunk size in bytes to process at a time in memory from each file. If your data is particularly wide and failing during schema detection, increasing this should solve it. Beware of raising this too high as you could hit OOM errors.", - "default": 0, - "order": 2, - "type": "integer" - } - } - } ] - }, - "schema": { - "title": "Manually enforced data schema", - "description": "Optionally provide a schema to enforce, as a valid JSON string. Ensure this is a mapping of { \"column\" : \"type\" }, where types are valid JSON Schema datatypes. Leave as {} to auto-infer the schema.", - "default": "{}", - "examples": [ "{\"column_1\": \"number\", \"column_2\": \"string\", \"column_3\": \"array\", \"column_4\": \"object\", \"column_5\": \"boolean\"}" ], - "order": 30, - "type": "string" - }, - "provider": { - "title": "S3: Amazon Web Services", - "type": "object", - "properties": { - "bucket": { - "title": "Bucket", - "description": "Name of the S3 bucket where the file(s) exist.", - "order": 0, - "type": "string" - }, - "aws_access_key_id": { - "title": "AWS Access Key ID", - "description": "In order to access private Buckets stored on AWS S3, this connector requires credentials with the proper permissions. If accessing publicly available data, this field is not necessary.", - "airbyte_secret": true, - "order": 1, - "type": "string" - }, - "aws_secret_access_key": { - "title": "AWS Secret Access Key", - "description": "In order to access private Buckets stored on AWS S3, this connector requires credentials with the proper permissions. If accessing publicly available data, this field is not necessary.", - "airbyte_secret": true, - "order": 2, - "type": "string" - }, - "path_prefix": { - "title": "Path Prefix", - "description": "By providing a path-like prefix (e.g. myFolder/thisTable/) under which all the relevant files sit, we can optimize finding these in S3. This is optional but recommended if your bucket contains many folders/files which you don't need to replicate.", - "default": "", - "order": 3, - "type": "string" - }, - "endpoint": { - "title": "Endpoint", - "description": "Endpoint to an S3 compatible service. Leave empty to use AWS.", - "default": "", - "order": 4, - "type": "string" - }, - "start_date": { - "title": "Start Date", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any file modified before this date will not be replicated.", - "examples": [ "2021-01-01T00:00:00Z" ], - "format": "date-time", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "order": 5, - "type": "string" - } - }, - "required": [ "bucket" ], - "order": 11, - "description": "Use this to load files from S3 or S3-compatible services" - } - }, - "required": [ "dataset", "path_pattern", "provider" ] - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append", "append_dedup" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "*.s3.amazonaws.com" ] - } - }, { - "sourceDefinitionId": "41991d12-d4b5-439e-afd0-260a31d4c53f", - "name": "SalesLoft", - "dockerRepository": "airbyte/source-salesloft", - "dockerImageTag": "1.0.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/salesloft", - "icon": "salesloft.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/salesloft", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Source Salesloft Spec", - "type": "object", - "required": [ "credentials", "start_date" ], - "additionalProperties": true, - "properties": { - "credentials": { - "order": 0, - "type": "object", - "title": "Credentials", - "oneOf": [ { - "title": "Authenticate via OAuth", - "type": "object", - "required": [ "client_id", "client_secret", "refresh_token", "access_token", "token_expiry_date", "auth_type" ], - "properties": { - "auth_type": { - "type": "string", - "const": "oauth2.0" - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "The Client ID of your Salesloft developer application." - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "The Client Secret of your Salesloft developer application.", - "airbyte_secret": true - }, - "access_token": { - "type": "string", - "description": "Access Token for making authenticated requests.", - "airbyte_secret": true - }, - "token_expiry_date": { - "type": "string", - "description": "The date-time when the access token should be refreshed.", - "format": "date-time" - }, - "refresh_token": { - "type": "string", - "title": "Refresh Token", - "description": "The token for obtaining a new access token.", - "airbyte_secret": true - } - } - }, { - "title": "Authenticate via API Key", - "type": "object", - "required": [ "api_key", "auth_type" ], - "properties": { - "auth_type": { - "type": "string", - "const": "api_key" - }, - "api_key": { - "type": "string", - "airbyte_secret": true, - "title": "API Key", - "description": "API Key for making authenticated requests. More instruction on how to find this value in our docs" - } - } - } ] - }, - "start_date": { - "order": 1, - "type": "string", - "title": "Start Date", - "description": "The date from which you'd like to replicate data for Salesloft API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", - "examples": [ "2020-11-16T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "format": "date-time" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "api.salesloft.com" ] - } - }, { - "sourceDefinitionId": "b117307c-14b6-41aa-9422-947e34922962", - "name": "Salesforce", - "dockerRepository": "airbyte/source-salesforce", - "dockerImageTag": "2.0.11", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/salesforce", - "icon": "salesforce.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/salesforce", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Salesforce Source Spec", - "type": "object", - "required": [ "client_id", "client_secret", "refresh_token" ], - "additionalProperties": true, - "properties": { - "is_sandbox": { - "title": "Sandbox", - "description": "Toggle if you're using a Salesforce Sandbox", - "type": "boolean", - "default": false, - "order": 1 - }, - "auth_type": { - "type": "string", - "const": "Client" - }, - "client_id": { - "title": "Client ID", - "description": "Enter your Salesforce developer application's Client ID", - "type": "string", - "order": 2 - }, - "client_secret": { - "title": "Client Secret", - "description": "Enter your Salesforce developer application's Client secret", - "type": "string", - "airbyte_secret": true, - "order": 3 - }, - "refresh_token": { - "title": "Refresh Token", - "description": "Enter your application's Salesforce Refresh Token used for Airbyte to access your Salesforce account.", - "type": "string", - "airbyte_secret": true, - "order": 4 - }, - "start_date": { - "title": "Start Date", - "description": "Enter the date in the YYYY-MM-DD format. Airbyte will replicate the data added on and after this date. If this field is blank, Airbyte will replicate the data for last two years.", - "type": "string", - "pattern": "^([0-9]{4}-[0-9]{2}-[0-9]{2}(T[0-9]{2}:[0-9]{2}:[0-9]{2}Z)?)$", - "examples": [ "2021-07-25", "2021-07-25T00:00:00Z" ], - "format": "date-time", - "order": 5 - }, - "streams_criteria": { - "type": "array", - "order": 6, - "items": { - "type": "object", - "required": [ "criteria", "value" ], - "properties": { - "criteria": { - "type": "string", - "title": "Search criteria", - "enum": [ "starts with", "ends with", "contains", "exacts", "starts not with", "ends not with", "not contains", "not exacts" ], - "order": 1, - "default": "contains" - }, - "value": { - "type": "string", - "title": "Search value", - "order": 2 - } - } - }, - "title": "Filter Salesforce Objects", - "description": "Filter streams relevant to you" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "auth_type" ], - "predicate_value": "Client", - "oauth_config_specification": { - "oauth_user_input_from_connector_config_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "is_sandbox": { - "type": "boolean", - "path_in_connector_config": [ "is_sandbox" ] - } - } - }, - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "refresh_token": { - "type": "string", - "path_in_connector_config": [ "refresh_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "*.salesforce.com" ] - } - }, { - "sourceDefinitionId": "ec5f3102-fb31-4916-99ae-864faf8e7e25", - "name": "SAP Fieldglass", - "dockerRepository": "airbyte/source-sap-fieldglass", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/sap-fieldglass", - "icon": "sapfieldglass.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/sap-fieldglass", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Sap Fieldglass Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "description": "API Key", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "8d7ef552-2c0f-11ec-8d3d-0242ac130003", - "name": "SearchMetrics", - "dockerRepository": "airbyte/source-search-metrics", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/search-metrics", - "icon": "searchmetrics.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/seacrh-metrics", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Source Search Metrics Spec", - "type": "object", - "required": [ "api_key", "client_secret", "country_code", "start_date" ], - "additionalProperties": true, - "properties": { - "api_key": { - "title": "API Key", - "type": "string", - "description": "", - "airbyte_secret": true - }, - "client_secret": { - "title": "Client Secret", - "type": "string", - "description": "", - "airbyte_secret": true - }, - "country_code": { - "title": "Country Code", - "type": "string", - "default": "", - "description": "The region of the S3 staging bucket to use if utilising a copy strategy.", - "enum": [ "", "AR", "AU", "AT", "BE", "BR", "CA", "CN", "CO", "DK", "FI", "FR", "DE", "HK", "IN", "IE", "IT", "JP", "MX", "NL", "NO", "PL", "RU", "SG", "ZA", "ES", "SE", "CH", "TR", "US", "GB" ], - "order": 2 - }, - "start_date": { - "title": "Start Date", - "type": "string", - "description": "Data generated in SearchMetrics after this date will be replicated. This date must be specified in the format YYYY-MM-DDT00:00:00Z.", - "examples": [ "20200925" ], - "pattern": "^[0-9]{4}[0-9]{2}[0-9]{2}$" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "da9fc6b9-8059-4be0-b204-f56e22e4d52d", - "name": "Secoda", - "dockerRepository": "airbyte/source-secoda", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/secoda", - "icon": "secoda.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/secoda", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Secoda Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "title": "Api Key", - "type": "string", - "description": "Your API Access Key. See here. The key is case sensitive.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "fbb5fbe2-16ad-4cf4-af7d-ff9d9c316c87", - "name": "Sendgrid", - "dockerRepository": "airbyte/source-sendgrid", - "dockerImageTag": "0.3.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/sendgrid", - "icon": "sendgrid.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/sendgrid", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Sendgrid Spec", - "type": "object", - "required": [ "apikey" ], - "additionalProperties": true, - "properties": { - "apikey": { - "title": "Sendgrid API key", - "airbyte_secret": true, - "type": "string", - "description": "API Key, use admin to generate this key.", - "order": 0 - }, - "start_time": { - "title": "Start time", - "type": "string", - "format": "date-time", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(.\\d+)?Z$", - "description": "Start time in ISO8601 format. Any data before this time point will not be replicated.", - "examples": [ "2020-01-01T01:01:01Z", "2020-01-01T01:01:01.000001Z" ], - "order": 1 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "api.sendgrid.com" ] - } - }, { - "sourceDefinitionId": "39de93cb-1511-473e-a673-5cbedb9436af", - "name": "Senseforce", - "dockerRepository": "airbyte/source-senseforce", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/senseforce", - "icon": "senseforce.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/senseforce", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Senseforce Source Spec", - "type": "object", - "required": [ "access_token", "backend_url", "dataset_id", "start_date" ], - "additionalProperties": true, - "properties": { - "access_token": { - "type": "string", - "title": "API Access Token", - "description": "Your API access token. See here. The toke is case sensitive.", - "airbyte_secret": true - }, - "backend_url": { - "type": "string", - "title": "Senseforce backend URL", - "examples": [ "https://galaxyapi.senseforce.io" ], - "description": "Your Senseforce API backend URL. This is the URL shown during the Login screen. See here for more details. (Note: Most Senseforce backend APIs have the term 'galaxy' in their ULR)" - }, - "dataset_id": { - "type": "string", - "title": "Dataset ID", - "examples": [ "8f418098-ca28-4df5-9498-0df9fe78eda7" ], - "description": "The ID of the dataset you want to synchronize. The ID can be found in the URL when opening the dataset. See here for more details. (Note: As the Senseforce API only allows to synchronize a specific dataset, each dataset you want to synchronize needs to be implemented as a separate airbyte source)." - }, - "start_date": { - "type": "string", - "title": "The first day (in UTC) when to read data from.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "description": "UTC date and time in the format 2017-01-25. Only data with \"Timestamp\" after this date will be replicated. Important note: This start date must be set to the first day of where your dataset provides data. If your dataset has data from 2020-10-10 10:21:10, set the start_date to 2020-10-10 or later", - "examples": [ "2017-01-25" ], - "format": "date" - }, - "slice_range": { - "type": "integer", - "title": "Data request time increment in days", - "default": 10, - "minimum": 1, - "maximum": 365, - "examples": [ 1, 3, 10, 30, 180, 360 ], - "airbyte_hidden": true, - "description": "The time increment used by the connector when requesting data from the Senseforce API. The bigger the value is, the less requests will be made and faster the sync will be. On the other hand, the more seldom the state is persisted and the more likely one could run into rate limites. Furthermore, consider that large chunks of time might take a long time for the Senseforce query to return data - meaning it could take in effect longer than with more smaller time slices. If there are a lot of data per day, set this setting to 1. If there is only very little data per day, you might change the setting to 10 or more." - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "allowedHosts": { - "hosts": [ "galaxyapi.senseforce.io", "senseforce.io" ] - } - }, { - "sourceDefinitionId": "2e88fa20-a2f6-43cc-bba6-98a0a3f244fb", - "name": "Sendinblue", - "dockerRepository": "airbyte/source-sendinblue", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/sendinblue", - "icon": "sendinblue.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/sendinblue", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Sendinblue Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "title": "API Key", - "type": "string", - "description": "Your API Key. See here.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "9da77001-af33-4bcd-be46-6252bf9342b9", - "name": "Shopify", - "dockerRepository": "airbyte/source-shopify", - "dockerImageTag": "0.3.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/shopify", - "icon": "shopify.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/shopify", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Shopify Source CDK Specifications", - "type": "object", - "required": [ "shop", "start_date" ], - "additionalProperties": true, - "properties": { - "shop": { - "type": "string", - "title": "Shopify Store", - "description": "The name of your Shopify store found in the URL. For example, if your URL was https://NAME.myshopify.com, then the name would be 'NAME'.", - "order": 1 - }, - "credentials": { - "title": "Shopify Authorization Method", - "description": "The authorization method to use to retrieve data from Shopify", - "type": "object", - "order": 2, - "oneOf": [ { - "title": "API Password", - "description": "API Password Auth", - "type": "object", - "required": [ "auth_method", "api_password" ], - "properties": { - "auth_method": { - "type": "string", - "const": "api_password", - "order": 0 - }, - "api_password": { - "type": "string", - "title": "API Password", - "description": "The API Password for your private application in the `Shopify` store.", - "airbyte_secret": true, - "order": 1 - } - } - }, { - "type": "object", - "title": "OAuth2.0", - "description": "OAuth2.0", - "required": [ "auth_method" ], - "properties": { - "auth_method": { - "type": "string", - "const": "oauth2.0", - "order": 0 - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "The Client ID of the Shopify developer application.", - "airbyte_secret": true, - "order": 1 - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "The Client Secret of the Shopify developer application.", - "airbyte_secret": true, - "order": 2 - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "The Access Token for making authenticated requests.", - "airbyte_secret": true, - "order": 3 - } - } - } ] - }, - "start_date": { - "type": "string", - "title": "Replication Start Date", - "description": "The date you would like to replicate data from. Format: YYYY-MM-DD. Any data before this date will not be replicated.", - "examples": [ "2021-01-01" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "format": "date", - "order": 3 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "auth_method" ], - "predicate_value": "oauth2.0", - "oauth_config_specification": { - "oauth_user_input_from_connector_config_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "shop": { - "type": "string", - "path_in_connector_config": [ "shop" ] - } - } - }, - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "access_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "access_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "2fed2292-5586-480c-af92-9944e39fe12d", - "name": "Short.io", - "dockerRepository": "airbyte/source-shortio", - "dockerImageTag": "0.1.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/shortio", - "icon": "short.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://developers.short.io/reference", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Shortio Spec", - "type": "object", - "required": [ "domain_id", "secret_key", "start_date" ], - "properties": { - "domain_id": { - "type": "string", - "desciprtion": "Short.io Domain ID", - "title": "Domain ID", - "airbyte_secret": false - }, - "secret_key": { - "type": "string", - "title": "Secret Key", - "description": "Short.io Secret Key", - "airbyte_secret": true - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", - "airbyte_secret": false - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "c2281cee-86f9-4a86-bb48-d23286b4c7bd", - "name": "Slack", - "dockerRepository": "airbyte/source-slack", - "dockerImageTag": "0.1.25", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/slack", - "icon": "slack.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/slack", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Slack Spec", - "type": "object", - "required": [ "start_date", "lookback_window", "join_channels" ], - "additionalProperties": true, - "properties": { - "start_date": { - "type": "string", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", - "examples": [ "2017-01-25T00:00:00Z" ], - "title": "Start Date", - "format": "date-time" - }, - "lookback_window": { - "type": "integer", - "title": "Threads Lookback window (Days)", - "description": "How far into the past to look for messages in threads.", - "examples": [ 7, 14 ] - }, - "join_channels": { - "type": "boolean", - "default": true, - "title": "Join all channels", - "description": "Whether to join all channels or to sync data only from channels the bot is already in. If false, you'll need to manually add the bot to all the channels from which you'd like to sync messages. " - }, - "channel_filter": { - "type": "array", - "default": [ ], - "items": { - "type": "string", - "minLength": 0 - }, - "title": "Channel name filter", - "description": "A channel name list (without leading '#' char) which limit the channels from which you'd like to sync. Empty list means no filter.", - "examples": [ "channel_one", "channel_two" ] - }, - "credentials": { - "title": "Authentication mechanism", - "description": "Choose how to authenticate into Slack", - "type": "object", - "oneOf": [ { - "type": "object", - "title": "Sign in via Slack (OAuth)", - "required": [ "option_title", "client_id", "client_secret", "access_token" ], - "properties": { - "option_title": { - "type": "string", - "const": "Default OAuth2.0 authorization" - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "Slack client_id. See our docs if you need help finding this id." - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "Slack client_secret. See our docs if you need help finding this secret.", - "airbyte_secret": true - }, - "access_token": { - "type": "string", - "title": "Access token", - "description": "Slack access_token. See our docs if you need help generating the token.", - "airbyte_secret": true - } - }, - "order": 0 - }, { - "type": "object", - "title": "API Token", - "required": [ "option_title", "api_token" ], - "properties": { - "option_title": { - "type": "string", - "const": "API Token Credentials" - }, - "api_token": { - "type": "string", - "title": "API Token", - "description": "A Slack bot token. See the docs for instructions on how to generate it.", - "airbyte_secret": true - } - }, - "order": 1 - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "option_title" ], - "predicate_value": "Default OAuth2.0 authorization", - "oauth_config_specification": { - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "access_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "access_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "slack.com" ] - } - }, { - "sourceDefinitionId": "781f8b1d-4e20-4842-a2c3-cd9b119d65fa", - "name": "Smaily", - "dockerRepository": "airbyte/source-smaily", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/smaily", - "icon": "smaily.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/smaily", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Smaily Spec", - "type": "object", - "required": [ "api_subdomain", "api_username", "api_password" ], - "additionalProperties": true, - "properties": { - "api_subdomain": { - "type": "string", - "title": "API Subdomain", - "description": "API Subdomain. See https://smaily.com/help/api/general/create-api-user/" - }, - "api_username": { - "type": "string", - "title": "API User Username", - "description": "API user username. See https://smaily.com/help/api/general/create-api-user/" - }, - "api_password": { - "type": "string", - "title": "API User Password", - "description": "API user password. See https://smaily.com/help/api/general/create-api-user/", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "21cc4a17-a011-4485-8a3e-e2341a91ab9f", - "name": "SmartEngage", - "dockerRepository": "airbyte/source-smartengage", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/smartengage", - "icon": "smartengage.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/smartengage", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "SmartEngage Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "title": "API Key", - "type": "string", - "description": "API Key", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "374ebc65-6636-4ea0-925c-7d35999a8ffc", - "name": "Smartsheets", - "dockerRepository": "airbyte/source-smartsheets", - "dockerImageTag": "1.0.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/smartsheets", - "icon": "smartsheet.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/smartsheets", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Smartsheets Source Spec", - "type": "object", - "required": [ "credentials", "spreadsheet_id" ], - "additionalProperties": true, - "properties": { - "credentials": { - "title": "Authorization Method", - "type": "object", - "order": 0, - "oneOf": [ { - "type": "object", - "title": "OAuth2.0", - "required": [ "client_id", "client_secret", "refresh_token", "access_token", "token_expiry_date" ], - "properties": { - "auth_type": { - "type": "string", - "const": "oauth2.0" - }, - "client_id": { - "type": "string", - "description": "The API ID of the SmartSheets developer application.", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "description": "The API Secret the SmartSheets developer application.", - "airbyte_secret": true - }, - "access_token": { - "type": "string", - "description": "Access Token for making authenticated requests.", - "airbyte_secret": true - }, - "token_expiry_date": { - "type": "string", - "description": "The date-time when the access token should be refreshed.", - "format": "date-time" - }, - "refresh_token": { - "type": "string", - "description": "The key to refresh the expired access_token.", - "airbyte_secret": true - } - } - }, { - "title": "API Access Token", - "type": "object", - "required": [ "access_token" ], - "properties": { - "auth_type": { - "type": "string", - "const": "access_token" - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "The access token to use for accessing your data from Smartsheets. This access token must be generated by a user with at least read access to the data you'd like to replicate. Generate an access token in the Smartsheets main menu by clicking Account > Apps & Integrations > API Access. See the setup guide for information on how to obtain this token.", - "airbyte_secret": true - } - } - } ] - }, - "spreadsheet_id": { - "title": "Sheet ID", - "description": "The spreadsheet ID. Find it by opening the spreadsheet then navigating to File > Properties", - "type": "string", - "order": 1 - }, - "start_datetime": { - "title": "Start Datetime", - "type": "string", - "examples": [ "2000-01-01T13:00:00", "2000-01-01T13:00:00-07:00" ], - "description": "Only rows modified after this date/time will be replicated. This should be an ISO 8601 string, for instance: `2000-01-01T13:00:00`", - "format": "date-time", - "default": "2020-01-01T00:00:00+00:00", - "order": 2, - "airbyte_hidden": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "auth_type" ], - "predicate_value": "oauth2.0", - "oauth_config_specification": { - "complete_oauth_output_specification": { - "type": "object", - "properties": { - "access_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "access_token" ] - }, - "refresh_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "refresh_token" ] - }, - "token_expiry_date": { - "type": "string", - "format": "date-time", - "path_in_connector_config": [ "credentials", "token_expiry_date" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "app.smartsheet.com", "api.smartsheet.com" ] - } - }, { - "sourceDefinitionId": "200330b2-ea62-4d11-ac6d-cfe3e3f8ab2b", - "name": "Snapchat Marketing", - "dockerRepository": "airbyte/source-snapchat-marketing", - "dockerImageTag": "0.1.16", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/snapchat-marketing", - "icon": "snapchat.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/snapchat-marketing", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Snapchat Marketing Spec", - "type": "object", - "required": [ "client_id", "client_secret", "refresh_token" ], - "properties": { - "client_id": { - "title": "Client ID", - "type": "string", - "description": "The Client ID of your Snapchat developer application.", - "airbyte_secret": true, - "order": 0 - }, - "client_secret": { - "title": "Client Secret", - "type": "string", - "description": "The Client Secret of your Snapchat developer application.", - "airbyte_secret": true, - "order": 1 - }, - "refresh_token": { - "title": "Refresh Token", - "type": "string", - "description": "Refresh Token to renew the expired Access Token.", - "airbyte_secret": true, - "order": 2 - }, - "start_date": { - "title": "Start Date", - "type": "string", - "description": "Date in the format 2022-01-01. Any data before this date will not be replicated.", - "examples": [ "2022-01-01" ], - "default": "2022-01-01", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "order": 3, - "format": "date" - }, - "end_date": { - "type": "string", - "title": "End Date", - "description": "Date in the format 2017-01-25. Any data after this date will not be replicated.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "2022-01-30" ], - "order": 4, - "format": "date" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ ], - "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], - "oauthFlowOutputParameters": [ [ "refresh_token" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "accounts.snapchat.com", "adsapi.snapchat.com" ] - } - }, { - "sourceDefinitionId": "e2d65910-8c8b-40a1-ae7d-ee2416b2bfa2", - "name": "Snowflake", - "dockerRepository": "airbyte/source-snowflake", - "dockerImageTag": "0.1.34", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/snowflake", - "icon": "snowflake.svg", - "sourceType": "database", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/snowflake", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Snowflake Source Spec", - "type": "object", - "required": [ "host", "role", "warehouse", "database" ], - "properties": { - "credentials": { - "title": "Authorization Method", - "type": "object", - "oneOf": [ { - "type": "object", - "title": "OAuth2.0", - "order": 0, - "required": [ "client_id", "client_secret", "auth_type" ], - "properties": { - "auth_type": { - "type": "string", - "const": "OAuth", - "order": 0 - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "The Client ID of your Snowflake developer application.", - "airbyte_secret": true, - "order": 1 - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "The Client Secret of your Snowflake developer application.", - "airbyte_secret": true, - "order": 2 - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "Access Token for making authenticated requests.", - "airbyte_secret": true, - "order": 3 - }, - "refresh_token": { - "type": "string", - "title": "Refresh Token", - "description": "Refresh Token for making authenticated requests.", - "airbyte_secret": true, - "order": 4 - } - } - }, { - "title": "Username and Password", - "type": "object", - "required": [ "username", "password", "auth_type" ], - "order": 1, - "properties": { - "auth_type": { - "type": "string", - "const": "username/password", - "order": 0 - }, - "username": { - "description": "The username you created to allow Airbyte to access the database.", - "examples": [ "AIRBYTE_USER" ], - "type": "string", - "title": "Username", - "order": 1 - }, - "password": { - "description": "The password associated with the username.", - "type": "string", - "airbyte_secret": true, - "title": "Password", - "order": 2 - } - } - } ], - "order": 0 - }, - "host": { - "description": "The host domain of the snowflake instance (must include the account, region, cloud environment, and end with snowflakecomputing.com).", - "examples": [ "accountname.us-east-2.aws.snowflakecomputing.com" ], - "type": "string", - "title": "Account Name", - "order": 1 - }, - "role": { - "description": "The role you created for Airbyte to access Snowflake.", - "examples": [ "AIRBYTE_ROLE" ], - "type": "string", - "title": "Role", - "order": 2 - }, - "warehouse": { - "description": "The warehouse you created for Airbyte to access data.", - "examples": [ "AIRBYTE_WAREHOUSE" ], - "type": "string", - "title": "Warehouse", - "order": 3 - }, - "database": { - "description": "The database you created for Airbyte to access data.", - "examples": [ "AIRBYTE_DATABASE" ], - "type": "string", - "title": "Database", - "order": 4 - }, - "schema": { - "description": "The source Snowflake schema tables. Leave empty to access tables from multiple schemas.", - "examples": [ "AIRBYTE_SCHEMA" ], - "type": "string", - "title": "Schema", - "order": 5 - }, - "jdbc_url_params": { - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", - "title": "JDBC URL Params", - "type": "string", - "order": 6 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "auth_type" ], - "predicate_value": "OAuth", - "oauth_config_specification": { - "oauth_user_input_from_connector_config_specification": { - "type": "object", - "properties": { - "host": { - "type": "string", - "path_in_connector_config": [ "host" ] - }, - "role": { - "type": "string", - "path_in_connector_config": [ "role" ] - } - } - }, - "complete_oauth_output_specification": { - "type": "object", - "properties": { - "access_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "access_token" ] - }, - "refresh_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "refresh_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "allowedHosts": { - "hosts": [ "${host}" ] - } - }, { - "sourceDefinitionId": "3ab1d7d0-1577-4ab9-bcc4-1ff6a4c2c9f2", - "name": "Sonar Cloud", - "dockerRepository": "airbyte/source-sonar-cloud", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/sonar-cloud", - "icon": "sonarcloud.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/sonar-cloud", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Sonar Cloud Spec", - "type": "object", - "required": [ "user_token", "organization", "component_keys" ], - "additionalProperties": true, - "properties": { - "user_token": { - "title": "User Token", - "type": "string", - "description": "Your User Token. See here. The token is case sensitive.", - "airbyte_secret": true - }, - "organization": { - "title": "Organization", - "type": "string", - "description": "Organization key. See here.", - "examples": [ "airbyte" ] - }, - "component_keys": { - "title": "Component Keys", - "type": "array", - "description": "Comma-separated list of component keys.", - "examples": [ "airbyte-ws-order", "airbyte-ws-checkout" ] - }, - "start_date": { - "title": "Start date", - "type": "string", - "description": "To retrieve issues created after the given date (inclusive).", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "YYYY-MM-DD" ], - "format": "date" - }, - "end_date": { - "title": "End date", - "type": "string", - "description": "To retrieve issues created before the given date (inclusive).", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "YYYY-MM-DD" ], - "format": "date" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "allowedHosts": { - "hosts": [ "sonarcloud.io" ] - } - }, { - "sourceDefinitionId": "62235e65-af7a-4138-9130-0bda954eb6a8", - "name": "SpaceX API", - "dockerRepository": "airbyte/source-spacex-api", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/spacex-api", - "icon": "spacex.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/spacex-api", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Spacex Api Spec", - "type": "object", - "additionalProperties": true, - "properties": { - "id": { - "title": "Unique ID for specific source target", - "type": "string", - "desciption": "Optional, For a specific ID" - }, - "options": { - "title": "Configuration options for endpoints", - "type": "string", - "desciption": "Optional, Possible values for an endpoint. Example values for launches-latest, upcoming, past" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "77225a51-cd15-4a13-af02-65816bd0ecf4", - "name": "Square", - "dockerRepository": "airbyte/source-square", - "dockerImageTag": "0.2.2", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/square", - "icon": "square.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/square", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Square Spec", - "type": "object", - "required": [ "is_sandbox" ], - "additionalProperties": true, - "properties": { - "credentials": { - "title": "Authentication", - "description": "Choose how to authenticate to Square.", - "type": "object", - "order": 0, - "oneOf": [ { - "title": "Oauth authentication", - "type": "object", - "required": [ "auth_type", "client_id", "client_secret", "refresh_token" ], - "properties": { - "credentials_title": { - "type": "string", - "const": "OAuth Credentials", - "order": 0 - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "The Square-issued ID of your application", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "The Square-issued application secret for your application", - "airbyte_secret": true - }, - "refresh_token": { - "title": "Refresh Token", - "type": "string", - "description": "A refresh token generated using the above client ID and secret", - "airbyte_secret": true - } - } - }, { - "title": "API key", - "type": "object", - "required": [ "auth_type", "api_key" ], - "properties": { - "credentials_title": { - "type": "string", - "const": "API Key", - "order": 0 - }, - "api_key": { - "type": "string", - "title": "API key token", - "description": "The API key for a Square application", - "airbyte_secret": true - } - } - } ] - }, - "is_sandbox": { - "type": "boolean", - "description": "Determines whether to use the sandbox or production environment.", - "title": "Sandbox", - "default": false, - "order": 1 - }, - "start_date": { - "type": "string", - "description": "UTC date in the format YYYY-MM-DD. Any data before this date will not be replicated. If not set, all data will be replicated.", - "title": "Start Date", - "default": "2021-01-01", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "order": "2,", - "format": "date" - }, - "include_deleted_objects": { - "type": "boolean", - "description": "In some streams there is an option to include deleted objects (Items, Categories, Discounts, Taxes)", - "title": "Include Deleted Objects", - "default": false, - "order": 3 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ "credentials", "0" ], - "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], - "oauthFlowOutputParameters": [ [ "refresh_token" ] ] - } - }, - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "auth_type" ], - "predicate_value": "Oauth", - "oauth_config_specification": { - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "refresh_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "refresh_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "connect.squareupsandbox.com", "connect.squareup.com" ] - } - }, { - "sourceDefinitionId": "7a4327c4-315a-11ec-8d3d-0242ac130003", - "name": "Strava", - "dockerRepository": "airbyte/source-strava", - "dockerImageTag": "0.1.4", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/strava", - "icon": "strava.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/strava", - "connectionSpecification": { - "$schema": "https://json-schema.org/draft-07/schema#", - "title": "Strava Spec", - "type": "object", - "required": [ "client_id", "client_secret", "refresh_token", "athlete_id", "start_date" ], - "additionalProperties": true, - "properties": { - "auth_type": { - "type": "string", - "const": "Client", - "enum": [ "Client" ], - "default": "Client" - }, - "client_id": { - "type": "string", - "description": "The Client ID of your Strava developer application.", - "title": "Client ID", - "pattern": "^[0-9_\\-]+$", - "examples": [ "12345" ], - "order": 0 - }, - "client_secret": { - "type": "string", - "description": "The Client Secret of your Strava developer application.", - "title": "Client Secret", - "pattern": "^[0-9a-fA-F]+$", - "examples": [ "fc6243f283e51f6ca989aab298b17da125496f50" ], - "airbyte_secret": true, - "order": 1 - }, - "refresh_token": { - "type": "string", - "description": "The Refresh Token with the activity: read_all permissions.", - "title": "Refresh Token", - "pattern": "^[0-9a-fA-F]+$", - "examples": [ "fc6243f283e51f6ca989aab298b17da125496f50" ], - "airbyte_secret": true, - "order": 2 - }, - "athlete_id": { - "type": "integer", - "description": "The Athlete ID of your Strava developer application.", - "title": "Athlete ID", - "pattern": "^[0-9_\\-]+$", - "examples": [ "17831421" ], - "order": 3 - }, - "start_date": { - "type": "string", - "description": "UTC date and time. Any data before this date will not be replicated.", - "title": "Start Date", - "examples": [ "2021-03-01T00:00:00Z" ], - "format": "date-time", - "order": 4 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "auth_type" ], - "predicate_value": "Client", - "oauth_config_specification": { - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": true, - "properties": { - "refresh_token": { - "type": "string", - "path_in_connector_config": [ "refresh_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": true, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "strava.com" ] - } - }, { - "sourceDefinitionId": "74cbd708-46c3-4512-9c93-abd5c3e9a94d", - "name": "Statuspage", - "dockerRepository": "airbyte/source-statuspage", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/statuspage", - "icon": "statuspage.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/statuspage", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Statuspage Spec", - "type": "object", - "required": [ "api_key" ], - "additionalProperties": true, - "properties": { - "api_key": { - "title": "API Key", - "type": "string", - "description": "Your API Key. See here.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "e094cb9a-26de-4645-8761-65c0c425d1de", - "name": "Stripe", - "dockerRepository": "airbyte/source-stripe", - "dockerImageTag": "3.4.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/stripe", - "icon": "stripe.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/stripe", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Stripe Source Spec", - "type": "object", - "required": [ "client_secret", "account_id", "start_date" ], - "properties": { - "account_id": { - "type": "string", - "title": "Account ID", - "description": "Your Stripe account ID (starts with 'acct_', find yours here).", - "order": 0 - }, - "client_secret": { - "type": "string", - "title": "Secret Key", - "description": "Stripe API key (usually starts with 'sk_live_'; find yours here).", - "airbyte_secret": true, - "order": 1 - }, - "start_date": { - "type": "string", - "title": "Replication start date", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Only data generated after this date will be replicated.", - "examples": [ "2017-01-25T00:00:00Z" ], - "format": "date-time", - "order": 2 - }, - "lookback_window_days": { - "type": "integer", - "title": "Lookback Window in days", - "default": 0, - "minimum": 0, - "description": "When set, the connector will always re-export data from the past N days, where N is the value set here. This is useful if your data is frequently updated after creation. More info here", - "order": 3 - }, - "slice_range": { - "type": "integer", - "title": "Data request time increment in days", - "default": 365, - "minimum": 1, - "examples": [ 1, 3, 10, 30, 180, 360 ], - "description": "The time increment used by the connector when requesting data from the Stripe API. The bigger the value is, the less requests will be made and faster the sync will be. On the other hand, the more seldom the state is persisted.", - "order": 4 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "api.stripe.com" ] - } - }, { - "sourceDefinitionId": "dd4632f4-15e0-4649-9b71-41719fb1fdee", - "name": "SurveyCTO", - "dockerRepository": "airbyte/source-surveycto", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/surveycto", - "icon": "surveycto.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/surveycto", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Surveycto Spec", - "type": "object", - "required": [ "server_name", "username", "password", "form_id" ], - "properties": { - "server_name": { - "type": "string", - "title": "Server Name", - "description": "The name of the SurveryCTO server", - "order": 0 - }, - "username": { - "type": "string", - "title": "Username", - "description": "Username to authenticate into the SurveyCTO server", - "order": 1 - }, - "password": { - "type": "string", - "title": "Password", - "description": "Password to authenticate into the SurveyCTO server", - "airbyte_secret": true, - "order": 2 - }, - "form_id": { - "type": "array", - "title": "Form's Id", - "description": "Unique identifier for one of your forms", - "order": 3 - }, - "start_date": { - "type": "string", - "description": "initial date for survey cto", - "title": "Start Date", - "examples": [ "Jan 09, 2022 00:00:00 AM" ], - "default": "Jan 09, 2022 00:00:00 AM", - "order": 4, - "pattern": "^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{2}, [0-9]{4} [0-9]{2}:[0-9]{2}:[0-9]{2} (AM|PM)$" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "badc5925-0485-42be-8caa-b34096cb71b5", - "name": "SurveyMonkey", - "dockerRepository": "airbyte/source-surveymonkey", - "dockerImageTag": "0.1.16", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/surveymonkey", - "icon": "surveymonkey.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/surveymonkey", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "SurveyMonkey Spec", - "type": "object", - "required": [ "start_date" ], - "additionalProperties": true, - "properties": { - "origin": { - "type": "string", - "order": 1, - "enum": [ "USA", "Europe", "Canada" ], - "default": "USA", - "title": "Origin datacenter of the SurveyMonkey account", - "description": "Depending on the originating datacenter of the SurveyMonkey account, the API access URL may be different." - }, - "credentials": { - "title": "SurveyMonkey Authorization Method", - "description": "The authorization method to use to retrieve data from SurveyMonkey", - "type": "object", - "required": [ "auth_method", "access_token" ], - "order": 2, - "properties": { - "auth_method": { - "type": "string", - "const": "oauth2.0", - "order": 0 - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "The Client ID of the SurveyMonkey developer application.", - "airbyte_secret": true, - "order": 1 - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "The Client Secret of the SurveyMonkey developer application.", - "airbyte_secret": true, - "order": 2 - }, - "access_token": { - "title": "Access Token", - "order": 3, - "type": "string", - "airbyte_secret": true, - "description": "Access Token for making authenticated requests. See the docs for information on how to generate this key." - } - } - }, - "start_date": { - "title": "Start Date", - "order": 3, - "type": "string", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z?$", - "examples": [ "2021-01-01T00:00:00Z" ], - "format": "date-time" - }, - "survey_ids": { - "type": "array", - "order": 4, - "items": { - "type": "string", - "pattern": "^[0-9]{8,9}$" - }, - "title": "Survey Monkey survey IDs", - "description": "IDs of the surveys from which you'd like to replicate data. If left empty, data from all boards to which you have access will be replicated." - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "auth_method" ], - "predicate_value": "oauth2.0", - "oauth_config_specification": { - "oauth_user_input_from_connector_config_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "origin": { - "type": "string", - "path_in_connector_config": [ "origin" ] - } - } - }, - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "access_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "access_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "api.surveymonkey.com" ] - } - }, { - "sourceDefinitionId": "4a4d887b-0f2d-4b33-ab7f-9b01b9072804", - "name": "SurveySparrow", - "dockerRepository": "airbyte/source-survey-sparrow", - "dockerImageTag": "0.2.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/survey-sparrow", - "icon": "surveysparrow.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/surveysparrow", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Survey Sparrow Spec", - "type": "object", - "required": [ "access_token" ], - "additionalProperties": true, - "properties": { - "access_token": { - "type": "string", - "description": "Your access token. See here. The key is case sensitive.", - "airbyte_secret": true, - "order": 0 - }, - "survey_id": { - "type": "array", - "description": "A List of your survey ids for survey-specific stream", - "order": 2 - }, - "region": { - "title": "Base URL", - "type": "object", - "description": "Is your account location is EU based? If yes, the base url to retrieve data will be different.", - "oneOf": [ { - "title": "EU-based account", - "type": "object", - "properties": { - "url_base": { - "type": "string", - "const": "https://eu-api.surveysparrow.com/v3" - } - } - }, { - "title": "Global account", - "type": "object", - "properties": { - "url_base": { - "type": "string", - "const": "https://api.surveysparrow.com/v3" - } - } - } ], - "default": { - "title": "Global account", - "type": "object", - "properties": { - "url_base": { - "type": "string", - "const": "https://api.surveysparrow.com/v3" - } - } - }, - "order": 1 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "f00d2cf4-3c28-499a-ba93-b50b6f26359e", - "name": "TalkDesk Explore", - "dockerRepository": "airbyte/source-talkdesk-explore", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/talkdesk-explore", - "icon": "talkdesk-explore.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Talkdesk Explore API Spec", - "type": "object", - "required": [ "start_date", "auth_url", "api_key" ], - "additionalProperties": false, - "properties": { - "start_date": { - "type": "string", - "title": "START DATE", - "description": "The date from which you'd like to replicate data for Talkdesk Explore API, in the format YYYY-MM-DDT00:00:00. All data generated after this date will be replicated.", - "examples": [ "2020-10-15T00:00:00" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}$", - "order": 0 - }, - "timezone": { - "type": "string", - "title": "TIMEZONE", - "description": "Timezone to use when generating reports. Only IANA timezones are supported (https://nodatime.org/TimeZones)", - "examples": [ "Europe/London", "America/Los_Angeles" ], - "default": "UTC", - "order": 1 - }, - "auth_url": { - "title": "AUTH URL", - "type": "string", - "description": "Talkdesk Auth URL. Only 'client_credentials' auth type supported at the moment.", - "examples": [ "https://xxxxxx.talkdeskid.com/oauth/token?grant_type=client_credentials" ], - "order": 2 - }, - "api_key": { - "title": "API KEY", - "type": "string", - "description": "Talkdesk API key.", - "order": 3 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "d1aa448b-7c54-498e-ad95-263cbebcd2db", - "name": "Tempo", - "dockerRepository": "airbyte/source-tempo", - "dockerImageTag": "0.3.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/tempo", - "icon": "tempo.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Tempo Spec", - "type": "object", - "required": [ "api_token" ], - "properties": { - "api_token": { - "type": "string", - "title": "API token", - "description": "Tempo API Token. Go to Tempo>Settings, scroll down to Data Access and select API integration.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "api.tempo.io" ] - } - }, { - "sourceDefinitionId": "aa8ba6fd-4875-d94e-fc8d-4e1e09aa2503", - "name": "Teradata", - "dockerRepository": "airbyte/source-teradata", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/teradata", - "icon": "teradata.svg", - "sourceType": "database", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/teradata", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Teradata Source Spec", - "type": "object", - "required": [ "host", "database", "username" ], - "properties": { - "host": { - "title": "Host", - "description": "Hostname of the database.", - "type": "string", - "order": 0 - }, - "port": { - "title": "Port", - "description": "Port of the database.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 3306, - "examples": [ "3306" ], - "order": 1 - }, - "database": { - "title": "Database", - "description": "Name of the database.", - "type": "string", - "order": 2 - }, - "username": { - "title": "Username", - "description": "Username to use to access the database.", - "type": "string", - "order": 3 - }, - "password": { - "title": "Password", - "description": "Password associated with the username.", - "type": "string", - "airbyte_secret": true, - "order": 4 - }, - "jdbc_url_params": { - "title": "JDBC URL params", - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3)", - "type": "string", - "order": 5 - }, - "replication_method": { - "title": "Replication method", - "description": "Replication method to use for extracting data from the database. STANDARD replication requires no setup on the DB side but will not be able to represent deletions incrementally. CDC uses the Binlog to detect inserts, updates, and deletes. This needs to be configured on the source database itself.", - "type": "string", - "order": 6, - "default": "STANDARD", - "enum": [ "STANDARD", "CDC" ] - }, - "ssl": { - "title": "SSL Connection", - "description": "Encrypt data using SSL. When activating SSL, please select one of the connection modes.", - "type": "boolean", - "default": false, - "order": 7 - }, - "ssl_mode": { - "title": "SSL Modes", - "description": "SSL connection modes. \n disable - Chose this mode to disable encryption of communication between Airbyte and destination database\n allow - Chose this mode to enable encryption only when required by the destination database\n prefer - Chose this mode to allow unencrypted connection only if the destination database does not support encryption\n require - Chose this mode to always require encryption. If the destination database server does not support encryption, connection will fail\n verify-ca - Chose this mode to always require encryption and to verify that the destination database server has a valid SSL certificate\n verify-full - This is the most secure mode. Chose this mode to always require encryption and to verify the identity of the destination database server\n See more information - in the docs.", - "type": "object", - "order": 8, - "oneOf": [ { - "title": "disable", - "additionalProperties": true, - "description": "Disable SSL.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "disable", - "order": 0 - } - } - }, { - "title": "allow", - "additionalProperties": true, - "description": "Allow SSL mode.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "allow", - "order": 0 - } - } - }, { - "title": "prefer", - "additionalProperties": true, - "description": "Prefer SSL mode.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "prefer", - "order": 0 - } - } - }, { - "title": "require", - "additionalProperties": true, - "description": "Require SSL mode.", - "required": [ "mode" ], - "properties": { - "mode": { - "type": "string", - "const": "require", - "order": 0 - } - } - }, { - "title": "verify-ca", - "additionalProperties": true, - "description": "Verify-ca SSL mode.", - "required": [ "mode", "ssl_ca_certificate" ], - "properties": { - "mode": { - "type": "string", - "const": "verify-ca", - "order": 0 - }, - "ssl_ca_certificate": { - "type": "string", - "title": "CA certificate", - "description": "Specifies the file name of a PEM file that contains Certificate Authority (CA) certificates for use with SSLMODE=verify-ca.\n See more information - in the docs.", - "airbyte_secret": true, - "multiline": true, - "order": 1 - } - } - }, { - "title": "verify-full", - "additionalProperties": true, - "description": "Verify-full SSL mode.", - "required": [ "mode", "ssl_ca_certificate" ], - "properties": { - "mode": { - "type": "string", - "const": "verify-full", - "order": 0 - }, - "ssl_ca_certificate": { - "type": "string", - "title": "CA certificate", - "description": "Specifies the file name of a PEM file that contains Certificate Authority (CA) certificates for use with SSLMODE=verify-full.\n See more information - in the docs.", - "airbyte_secret": true, - "multiline": true, - "order": 1 - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "allowedHosts": { - "hosts": [ "${host}" ] - } - }, { - "sourceDefinitionId": "0dad1a35-ccf8-4d03-b73e-6788c00b13ae", - "name": "TiDB", - "dockerRepository": "airbyte/source-tidb", - "dockerImageTag": "0.2.4", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/tidb", - "icon": "tidb.svg", - "sourceType": "database", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/tidb", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "TiDB Source Spec", - "type": "object", - "required": [ "host", "port", "database", "username" ], - "properties": { - "host": { - "description": "Hostname of the database.", - "title": "Host", - "type": "string", - "order": 0 - }, - "port": { - "description": "Port of the database.", - "title": "Port", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 4000, - "examples": [ "4000" ], - "order": 1 - }, - "database": { - "description": "Name of the database.", - "title": "Database", - "type": "string", - "order": 2 - }, - "username": { - "description": "Username to use to access the database.", - "title": "Username", - "type": "string", - "order": 3 - }, - "password": { - "description": "Password associated with the username.", - "title": "Password", - "type": "string", - "airbyte_secret": true, - "order": 4 - }, - "jdbc_url_params": { - "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3)", - "title": "JDBC URL Params", - "type": "string", - "order": 5 - }, - "ssl": { - "title": "SSL Connection", - "description": "Encrypt data using SSL.", - "type": "boolean", - "default": false, - "order": 6 - }, - "tunnel_method": { - "type": "object", - "title": "SSH Tunnel Method", - "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", - "oneOf": [ { - "title": "No Tunnel", - "required": [ "tunnel_method" ], - "properties": { - "tunnel_method": { - "description": "No ssh tunnel needed to connect to database", - "type": "string", - "const": "NO_TUNNEL", - "order": 0 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "ssh_key" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host.", - "type": "string", - "order": 3 - }, - "ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 4 - } - } - }, { - "title": "Password Authentication", - "required": [ "tunnel_method", "tunnel_host", "tunnel_port", "tunnel_user", "tunnel_user_password" ], - "properties": { - "tunnel_method": { - "description": "Connect through a jump server tunnel host using username and password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "tunnel_host": { - "title": "SSH Tunnel Jump Server Host", - "description": "Hostname of the jump server host that allows inbound ssh tunnel.", - "type": "string", - "order": 1 - }, - "tunnel_port": { - "title": "SSH Connection Port", - "description": "Port on the proxy/jump server that accepts inbound ssh connections.", - "type": "integer", - "minimum": 0, - "maximum": 65536, - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "tunnel_user": { - "title": "SSH Login Username", - "description": "OS-level username for logging into the jump server host", - "type": "string", - "order": 3 - }, - "tunnel_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 4 - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha", - "allowedHosts": { - "hosts": [ "${host}", "${tunnel_method.tunnel_host}" ] - } - }, { - "sourceDefinitionId": "4bfac00d-ce15-44ff-95b9-9e3c3e8fbd35", - "name": "TikTok Marketing", - "dockerRepository": "airbyte/source-tiktok-marketing", - "dockerImageTag": "3.0.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/tiktok-marketing", - "icon": "tiktok.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/tiktok-marketing", - "changelogUrl": "https://docs.airbyte.com/integrations/sources/tiktok-marketing", - "connectionSpecification": { - "title": "TikTok Marketing Source Spec", - "type": "object", - "properties": { - "credentials": { - "title": "Authentication Method", - "description": "Authentication method", - "default": { }, - "order": 0, - "type": "object", - "oneOf": [ { - "title": "OAuth2.0", - "type": "object", - "properties": { - "auth_type": { - "title": "Auth Type", - "const": "oauth2.0", - "order": 0, - "type": "string" - }, - "app_id": { - "title": "App ID", - "description": "The Developer Application App ID.", - "airbyte_secret": true, - "type": "string" - }, - "secret": { - "title": "Secret", - "description": "The Developer Application Secret.", - "airbyte_secret": true, - "type": "string" - }, - "access_token": { - "title": "Access Token", - "description": "Long-term Authorized Access Token.", - "airbyte_secret": true, - "type": "string" - }, - "advertiser_id": { - "title": "Advertiser ID", - "description": "The Advertiser ID to filter reports and streams. Let this empty to retrieve all.", - "type": "string" - } - }, - "required": [ "app_id", "secret", "access_token" ] - }, { - "title": "Sandbox Access Token", - "type": "object", - "properties": { - "auth_type": { - "title": "Auth Type", - "const": "sandbox_access_token", - "order": 0, - "type": "string" - }, - "advertiser_id": { - "title": "Advertiser ID", - "description": "The Advertiser ID which generated for the developer's Sandbox application.", - "type": "string" - }, - "access_token": { - "title": "Access Token", - "description": "The long-term authorized access token.", - "airbyte_secret": true, - "type": "string" - } - }, - "required": [ "advertiser_id", "access_token" ] - } ] - }, - "start_date": { - "title": "Replication Start Date", - "description": "The Start Date in format: YYYY-MM-DD. Any data before this date will not be replicated. If this parameter is not set, all data will be replicated.", - "default": "2016-09-01", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "order": 1, - "type": "string", - "format": "date" - }, - "end_date": { - "title": "End Date", - "description": "The date until which you'd like to replicate data for all incremental streams, in the format YYYY-MM-DD. All data generated between start_date and this date will be replicated. Not setting this option will result in always syncing the data till the current date.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "order": 2, - "type": "string", - "format": "date" - }, - "attribution_window": { - "title": "Attribution Window", - "description": "The attribution window in days.", - "default": 0, - "order": 3, - "type": "integer" - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "overwrite", "append", "append_dedup" ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "auth_type" ], - "predicate_value": "oauth2.0", - "oauth_config_specification": { - "complete_oauth_output_specification": { - "title": "CompleteOauthOutputSpecification", - "type": "object", - "properties": { - "access_token": { - "title": "Access Token", - "path_in_connector_config": [ "credentials", "access_token" ], - "type": "string" - } - }, - "required": [ "access_token" ] - }, - "complete_oauth_server_input_specification": { - "title": "CompleteOauthServerInputSpecification", - "type": "object", - "properties": { - "app_id": { - "title": "App Id", - "type": "string" - }, - "secret": { - "title": "Secret", - "type": "string" - } - }, - "required": [ "app_id", "secret" ] - }, - "complete_oauth_server_output_specification": { - "title": "CompleteOauthServerOutputSpecification", - "type": "object", - "properties": { - "app_id": { - "title": "App Id", - "path_in_connector_config": [ "credentials", "app_id" ], - "type": "string" - }, - "secret": { - "title": "Secret", - "path_in_connector_config": [ "credentials", "secret" ], - "type": "string" - } - }, - "required": [ "app_id", "secret" ] - } - } - }, - "additionalProperties": true - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "sandbox-ads.tiktok.com", "business-api.tiktok.com" ] - } - }, { - "sourceDefinitionId": "bc617b5f-1b9e-4a2d-bebe-782fd454a771", - "name": "Timely", - "dockerRepository": "airbyte/source-timely", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/timely", - "icon": "timely.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Timely Integration Spec", - "type": "object", - "required": [ "account_id", "start_date", "bearer_token" ], - "additionalProperties": false, - "properties": { - "account_id": { - "title": "account_id", - "type": "string", - "description": "Timely account id" - }, - "start_date": { - "title": "startDate", - "type": "string", - "description": "start date", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "example": "2022-05-06" - }, - "bearer_token": { - "title": "Bearer token", - "type": "string", - "description": "Timely bearer token" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "6240848f-f795-45eb-8f5e-c7542822fc03", - "name": "TMDb", - "dockerRepository": "airbyte/source-tmdb", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/tmdb", - "icon": "tmdb.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/tmdb", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Tmdb Spec", - "type": "object", - "required": [ "api_key", "movie_id", "query", "language" ], - "additionalProperties": true, - "properties": { - "api_key": { - "title": "Unique key for establishing connection", - "type": "string", - "description": "API Key from tmdb account", - "airbyte_secret": true - }, - "movie_id": { - "title": "Movie ID for targeting movies", - "type": "string", - "description": "Target movie ID, Mandate for movie streams (Example is 550)", - "examples": [ 550, 560 ] - }, - "query": { - "title": "Query for search streams", - "type": "string", - "description": "Target movie ID, Mandate for search streams", - "examples": [ "Marvel", "DC" ] - }, - "language": { - "title": "Language for filtering", - "type": "string", - "description": "Language expressed in ISO 639-1 scheme, Mandate for required streams (Example en-US)", - "examples": [ "en-US", "en-UK" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "7d272065-c316-4c04-a433-cd4ee143f83e", - "name": "Todoist", - "dockerRepository": "airbyte/source-todoist", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/todoist", - "icon": "todoist.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/todoist", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Todoist Spec", - "type": "object", - "required": [ "token" ], - "properties": { - "token": { - "type": "string", - "description": "Your API Token. See here. The token is case sensitive.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "7e7c844f-2300-4342-b7d3-6dd7992593cd", - "name": "Toggl", - "dockerRepository": "airbyte/source-toggl", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/toggl", - "icon": "toggl.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/toggl", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Toggl Spec", - "type": "object", - "required": [ "api_token", "organization_id", "workspace_id", "start_date", "end_date" ], - "additionalProperties": true, - "properties": { - "api_token": { - "title": "API token", - "type": "string", - "description": "Your API Token. See here. The token is case sensitive.", - "airbyte_secret": true - }, - "organization_id": { - "title": "Organization ID", - "type": "integer", - "description": "Your organization id. See here." - }, - "workspace_id": { - "title": "Workspace ID", - "type": "integer", - "description": "Your workspace id. See here." - }, - "start_date": { - "title": "Start date", - "type": "string", - "description": "To retrieve time entries created after the given date (inclusive).", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "YYYY-MM-DD" ] - }, - "end_date": { - "title": "End date", - "type": "string", - "description": "To retrieve time entries created before the given date (inclusive).", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "YYYY-MM-DD" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "d42bd69f-6bf0-4d0b-9209-16231af07a92", - "name": "The Guardian API", - "dockerRepository": "airbyte/source-the-guardian-api", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/the-guardian-api", - "icon": "theguardian.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/the-guardian-api", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "The Guardian Api Spec", - "type": "object", - "required": [ "api_key", "start_date" ], - "additionalProperties": true, - "properties": { - "api_key": { - "title": "API Key", - "type": "string", - "description": "Your API Key. See here. The key is case sensitive.", - "airbyte_secret": true - }, - "start_date": { - "title": "Start Date", - "type": "string", - "description": "Use this to set the minimum date (YYYY-MM-DD) of the results. Results older than the start_date will not be shown.", - "pattern": "^([1-9][0-9]{3})\\-(0?[1-9]|1[012])\\-(0?[1-9]|[12][0-9]|3[01])$", - "examples": [ "YYYY-MM-DD" ] - }, - "query": { - "title": "Query", - "type": "string", - "description": "(Optional) The query (q) parameter filters the results to only those that include that search term. The q parameter supports AND, OR and NOT operators.", - "examples": [ "environment AND NOT water", "environment AND political", "amusement park", "political" ] - }, - "tag": { - "title": "Tag", - "type": "string", - "description": "(Optional) A tag is a piece of data that is used by The Guardian to categorise content. Use this parameter to filter results by showing only the ones matching the entered tag. See here for a list of all tags, and here for the tags endpoint documentation.", - "examples": [ "environment/recycling", "environment/plasticbags", "environment/energyefficiency" ] - }, - "section": { - "title": "Section", - "type": "string", - "description": "(Optional) Use this to filter the results by a particular section. See here for a list of all sections, and here for the sections endpoint documentation.", - "examples": [ "media", "technology", "housing-network" ] - }, - "end_date": { - "title": "End Date", - "type": "string", - "description": "(Optional) Use this to set the maximum date (YYYY-MM-DD) of the results. Results newer than the end_date will not be shown. Default is set to the current date (today) for incremental syncs.", - "pattern": "^([1-9][0-9]{3})\\-(0?[1-9]|1[012])\\-(0?[1-9]|[12][0-9]|3[01])$", - "examples": [ "YYYY-MM-DD" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "f9b6c538-ee12-42fe-8d4b-0c10f5955417", - "name": "TPLcentral", - "dockerRepository": "airbyte/source-tplcentral", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/tplcentral", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/tplcentral", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Tplcentral Spec", - "type": "object", - "required": [ "url_base", "client_id", "client_secret" ], - "additionalProperties": false, - "properties": { - "url_base": { - "title": "URL base", - "type": "string", - "format": "uri", - "default": "https://secure-wms.com/", - "pattern": "^https://" - }, - "client_id": { - "title": "Client ID", - "type": "string" - }, - "client_secret": { - "title": "Client secret", - "type": "string", - "airbyte_secret": true - }, - "user_login_id": { - "title": "User login ID", - "description": "User login ID and/or name is required", - "type": "integer" - }, - "user_login": { - "title": "User login name", - "description": "User login ID and/or name is required", - "type": "string" - }, - "tpl_key": { - "title": "3PL GUID", - "type": "string" - }, - "customer_id": { - "title": "Customer ID", - "type": "integer" - }, - "facility_id": { - "title": "Facility ID", - "type": "integer" - }, - "start_date": { - "title": "Start date", - "description": "Date and time together in RFC 3339 format, for example, 2018-11-13T20:20:39+00:00.", - "type": "string", - "format": "date-time" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "8da67652-004c-11ec-9a03-0242ac130003", - "name": "Trello", - "dockerRepository": "airbyte/source-trello", - "dockerImageTag": "0.3.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/trello", - "icon": "trello.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/trello", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Trello Spec", - "type": "object", - "required": [ "key", "token", "start_date" ], - "additionalProperties": true, - "properties": { - "key": { - "type": "string", - "title": "API key", - "description": "Trello API key. See the docs for instructions on how to generate it.", - "airbyte_secret": true, - "order": 0 - }, - "token": { - "type": "string", - "title": "API token", - "description": "Trello API token. See the docs for instructions on how to generate it.", - "airbyte_secret": true, - "order": 1 - }, - "start_date": { - "type": "string", - "title": "Start Date", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", - "examples": [ "2021-03-01T00:00:00Z" ], - "format": "date-time", - "order": 2 - }, - "board_ids": { - "type": "array", - "items": { - "type": "string", - "pattern": "^[0-9a-fA-F]{24}$" - }, - "title": "Trello Board IDs", - "description": "IDs of the boards to replicate data from. If left empty, data from all boards to which you have access will be replicated.", - "order": 3 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ ], - "oauth_config_specification": { - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "token": { - "type": "string", - "path_in_connector_config": [ "token" ] - }, - "key": { - "type": "string", - "path_in_connector_config": [ "key" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "api.trello.com" ] - } - }, { - "sourceDefinitionId": "d7e23ea6-d741-4314-9209-a33c91a2e945", - "name": "TrustPilot", - "dockerRepository": "airbyte/source-trustpilot", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/trustpilot", - "icon": "trustpilot.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Trustpilot Spec", - "type": "object", - "required": [ "credentials", "business_units", "start_date" ], - "properties": { - "credentials": { - "title": "Authorization Method", - "type": "object", - "order": 0, - "oneOf": [ { - "type": "object", - "title": "OAuth 2.0", - "required": [ "client_id", "client_secret", "refresh_token", "access_token", "token_expiry_date" ], - "properties": { - "auth_type": { - "type": "string", - "const": "oauth2.0" - }, - "client_id": { - "type": "string", - "title": "API key", - "description": "The API key of the Trustpilot API application. (represents the OAuth Client ID)", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "title": "Secret", - "description": "The Secret of the Trustpilot API application. (represents the OAuth Client Secret)", - "airbyte_secret": true - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "Access Token for making authenticated requests.", - "airbyte_secret": true - }, - "token_expiry_date": { - "type": "string", - "title": "Token expiry date time", - "description": "The date-time when the access token should be refreshed.", - "format": "date-time" - }, - "refresh_token": { - "type": "string", - "title": "Refresh token", - "description": "The key to refresh the expired access_token.", - "airbyte_secret": true - } - } - }, { - "type": "object", - "title": "API Key", - "description": "The API key authentication method gives you access to only the streams which are part of the Public API. When you want to get streams available via the Consumer API (e.g. the private reviews) you need to use authentication method OAuth 2.0.", - "required": [ "client_id" ], - "properties": { - "auth_type": { - "type": "string", - "const": "apikey" - }, - "client_id": { - "type": "string", - "title": "API key", - "description": "The API key of the Trustpilot API application.", - "airbyte_secret": true - } - } - } ] - }, - "business_units": { - "type": "array", - "items": { - "type": "string" - }, - "title": "Business Unit names", - "description": "The names of business units which shall be synchronized. Some streams e.g. configured_business_units or private_reviews use this configuration.", - "examples": [ "mydomain.com", "www.mydomain.com" ] - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "For streams with sync. method incremental the start date time to be used", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "%Y-%m-%dT%H:%M:%S" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "bd14b08f-9f43-400f-b2b6-7248b5c72561", - "name": "TVMaze Schedule", - "dockerRepository": "airbyte/source-tvmaze-schedule", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/tvmaze-schedule", - "icon": "tvmazeschedule.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/tvmaze-schedule", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "TVMaze Schedule Spec", - "type": "object", - "required": [ "start_date", "domestic_schedule_country_code" ], - "additionalProperties": true, - "properties": { - "start_date": { - "type": "string", - "description": "Start date for TV schedule retrieval. May be in the future.", - "order": 0, - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" - }, - "end_date": { - "type": "string", - "description": "End date for TV schedule retrieval. May be in the future. Optional.\n", - "order": 1, - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" - }, - "domestic_schedule_country_code": { - "type": "string", - "description": "Country code for domestic TV schedule retrieval.", - "examples": [ "US", "GB" ] - }, - "web_schedule_country_code": { - "type": "string", - "description": "ISO 3166-1 country code for web TV schedule retrieval. Leave blank for\nall countries plus global web channels (e.g. Netflix). Alternatively,\nset to 'global' for just global web channels.\n", - "examples": [ "US", "GB", "global" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "b9dc6155-672e-42ea-b10d-9f1f1fb95ab1", - "name": "Twilio", - "dockerRepository": "airbyte/source-twilio", - "dockerImageTag": "0.5.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/twilio", - "icon": "twilio.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/twilio", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Twilio Spec", - "type": "object", - "required": [ "account_sid", "auth_token", "start_date" ], - "additionalProperties": true, - "properties": { - "account_sid": { - "title": "Account ID", - "description": "Twilio account SID", - "airbyte_secret": true, - "type": "string", - "order": 1 - }, - "auth_token": { - "title": "Auth Token", - "description": "Twilio Auth Token.", - "airbyte_secret": true, - "type": "string", - "order": 2 - }, - "start_date": { - "title": "Replication Start Date", - "description": "UTC date and time in the format 2020-10-01T00:00:00Z. Any data before this date will not be replicated.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2020-10-01T00:00:00Z" ], - "type": "string", - "order": 3, - "format": "date-time" - }, - "lookback_window": { - "title": "Lookback window", - "description": "How far into the past to look for records. (in minutes)", - "examples": [ 60 ], - "default": 0, - "minimum": 0, - "maximum": 576000, - "type": "integer", - "order": 4 - } - } - }, - "supportsIncremental": true, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ "append" ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "api.twilio.com", "monitor.twilio.com" ] - } - }, { - "sourceDefinitionId": "2446953b-b794-429b-a9b3-c821ba992a48", - "name": "Twilio Taskrouter", - "dockerRepository": "airbyte/source-twilio-taskrouter", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/twilio-taskrouter", - "icon": "twilio.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/twilio-taskrouter", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Twilio Taskrouter Spec", - "type": "object", - "required": [ "account_sid", "auth_token" ], - "additionalProperties": true, - "properties": { - "account_sid": { - "title": "Account SID", - "type": "string", - "description": "Twilio Account ID", - "airbyte_secret": true - }, - "auth_token": { - "type": "string", - "description": "Twilio Auth Token", - "airbyte_secret": true, - "title": "Auth Token" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "d7fd4f40-5e5a-4b8b-918f-a73077f8c131", - "name": "Twitter", - "dockerRepository": "airbyte/source-twitter", - "dockerImageTag": "0.1.2", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/twitter", - "icon": "twitter.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/twitter", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Twitter Spec", - "type": "object", - "required": [ "api_key", "query" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "title": "Access Token", - "description": "App only Bearer Token. See the docs for more information on how to obtain this token.", - "airbyte_secret": true, - "order": 0 - }, - "query": { - "type": "string", - "title": "Search Query", - "description": "Query for matching Tweets. You can learn how to build this query by reading build a query guide .", - "order": 1 - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "The start date for retrieving tweets cannot be more than 7 days in the past.", - "format": "date-time", - "order": 2 - }, - "end_date": { - "type": "string", - "title": "End Date", - "description": "The end date for retrieving tweets must be a minimum of 10 seconds prior to the request time.", - "format": "date-time", - "order": 3 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "api.twitter.com" ] - } - }, { - "sourceDefinitionId": "3c0c3cd1-b3e0-464a-9090-d3ceb5f92346", - "name": "Tyntec SMS", - "dockerRepository": "airbyte/source-tyntec-sms", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/tyntec-sms", - "icon": "tyntec.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/tyntec-sms", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Tyntec Sms Spec", - "type": "object", - "required": [ "api_key", "to", "from" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "title": "Tyntec API Key", - "description": "Your Tyntec API Key. See here", - "order": 0, - "airbyte_secret": true - }, - "to": { - "type": "string", - "title": "SMS Message Recipient Phone", - "description": "The phone number of the SMS message recipient (international).", - "order": 1 - }, - "from": { - "type": "string", - "title": "SMS Message Sender Phone", - "description": "The phone number of the SMS message sender (international).", - "order": 2 - }, - "message": { - "type": "string", - "title": "SMS Message Body", - "description": "The content of the SMS message to be sent.", - "order": 3 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "e7eff203-90bf-43e5-a240-19ea3056c474", - "name": "Typeform", - "dockerRepository": "airbyte/source-typeform", - "dockerImageTag": "0.1.12", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/typeform", - "icon": "typeform.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/typeform", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Typeform Spec", - "type": "object", - "required": [ "token", "start_date" ], - "additionalProperties": true, - "properties": { - "token": { - "type": "string", - "description": "The API Token for a Typeform account.", - "title": "API Token", - "airbyte_secret": true, - "order": 0 - }, - "start_date": { - "type": "string", - "description": "UTC date and time in the format: YYYY-MM-DDTHH:mm:ss[Z]. Any data before this date will not be replicated.", - "title": "Start Date", - "examples": [ "2020-01-01T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "order": 1, - "format": "date-time" - }, - "form_ids": { - "title": "Form IDs to replicate", - "description": "When this parameter is set, the connector will replicate data only from the input forms. Otherwise, all forms in your Typeform account will be replicated. You can find form IDs in your form URLs. For example, in the URL \"https://mysite.typeform.com/to/u6nXL7\" the form_id is u6nXL7. You can find form URLs on Share panel", - "type": "array", - "items": { - "type": "string" - }, - "uniqueItems": true, - "order": 2 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "api.typeform.com" ] - } - }, { - "sourceDefinitionId": "f77914a1-442b-4195-9355-8810a1f4ed3f", - "name": "Unleash", - "dockerRepository": "airbyte/source-unleash", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/unleash", - "icon": "unleash.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/unleash", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Unleash Source Spec", - "type": "object", - "required": [ "api_token", "api_url" ], - "additionalProperties": true, - "properties": { - "api_token": { - "title": "API Token Client", - "type": "string", - "description": "Your API Token (Server-Side SDK [Client]). See here. The token is case sensitive.", - "airbyte_secret": true, - "examples": [ "project:environment.be44368985f7fb3237c584ef86f3d6bdada42ddbd63a019d26955178", "*:environment.be44368985f7fb3237c584ef86f3d6bdada42ddbd63a019d26955178", "be44368985f7fb3237c584ef86f3d6bdada42ddbd63a019d26955178" ] - }, - "api_url": { - "title": "API URL", - "type": "string", - "description": "Your API URL. No trailing slash. ex: http://unleash.host.com/api" - }, - "project_name": { - "title": "Project Name", - "type": "string", - "description": "Use this if you want to filter the API call for only one given project (can be used in addition to the \"Feature Name Prefix\" field). See here" - }, - "nameprefix": { - "title": "Feature Name Prefix", - "type": "string", - "description": "Use this if you want to filter the API call for only one given project (can be used in addition to the \"Feature Name Prefix\" field). See here" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "c4cfaeda-c757-489a-8aba-859fb08b6970", - "name": "US Census", - "dockerRepository": "airbyte/source-us-census", - "dockerImageTag": "0.1.2", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/us-census", - "icon": "uscensus.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/us-census", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "https://api.census.gov/ Source Spec", - "type": "object", - "required": [ "api_key", "query_path" ], - "additionalProperties": false, - "properties": { - "query_params": { - "type": "string", - "description": "The query parameters portion of the GET request, without the api key", - "pattern": "^\\w+=[\\w,:*]+(&(?!key)\\w+=[\\w,:*]+)*$", - "examples": [ "get=NAME,NAICS2017_LABEL,LFO_LABEL,EMPSZES_LABEL,ESTAB,PAYANN,PAYQTR1,EMP&for=us:*&NAICS2017=72&LFO=001&EMPSZES=001", "get=MOVEDIN,GEOID1,GEOID2,MOVEDOUT,FULL1_NAME,FULL2_NAME,MOVEDNET&for=county:*" ] - }, - "query_path": { - "type": "string", - "description": "The path portion of the GET request", - "pattern": "^data(\\/[\\w\\d]+)+$", - "examples": [ "data/2019/cbp", "data/2018/acs", "data/timeseries/healthins/sahie" ] - }, - "api_key": { - "type": "string", - "description": "Your API Key. Get your key here.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "afa734e4-3571-11ec-991a-1e0031268139", - "name": "YouTube Analytics", - "dockerRepository": "airbyte/source-youtube-analytics", - "dockerImageTag": "0.1.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/youtube-analytics", - "icon": "youtube-analytics.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/youtube-analytics", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "YouTube Analytics Spec", - "type": "object", - "required": [ "credentials" ], - "additionalProperties": true, - "properties": { - "credentials": { - "title": "Authenticate via OAuth 2.0", - "type": "object", - "required": [ "client_id", "client_secret", "refresh_token" ], - "additionalProperties": true, - "properties": { - "client_id": { - "title": "Client ID", - "type": "string", - "description": "The Client ID of your developer application", - "airbyte_secret": true - }, - "client_secret": { - "title": "Client Secret", - "type": "string", - "description": "The client secret of your developer application", - "airbyte_secret": true - }, - "refresh_token": { - "title": "Refresh Token", - "type": "string", - "description": "A refresh token generated using the above client ID and secret", - "airbyte_secret": true - } - } - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "authSpecification": { - "auth_type": "oauth2.0", - "oauth2Specification": { - "rootObject": [ "credentials" ], - "oauthFlowInitParameters": [ [ "client_id" ], [ "client_secret" ] ], - "oauthFlowOutputParameters": [ [ "refresh_token" ] ] - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "*.googleapis.com" ] - } - }, { - "sourceDefinitionId": "28ce1fbd-1e15-453f-aa9f-da6c4d928e92", - "name": "Vantage", - "dockerRepository": "airbyte/source-vantage", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/vantage", - "icon": "vantage.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/vantage", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Vantage Spec", - "type": "object", - "required": [ "access_token" ], - "additionalProperties": true, - "properties": { - "access_token": { - "title": "API Access Token", - "type": "string", - "description": "Your API Access token. See here.", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "7e20ce3e-d820-4327-ad7a-88f3927fd97a", - "name": "VictorOps", - "dockerRepository": "farosai/airbyte-victorops-source", - "dockerImageTag": "0.1.23", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/victorops", - "icon": "victorops.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.faros.ai", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "VictorOps Spec", - "type": "object", - "required": [ "apiId", "apiKey" ], - "additionalProperties": true, - "properties": { - "apiId": { - "type": "string", - "title": "VictorOps API ID", - "airbyte_secret": true - }, - "apiKey": { - "type": "string", - "title": "VictorOps API key", - "airbyte_secret": true - }, - "maxContentLength": { - "type": "number", - "title": "VictorOps Content Length", - "description": "VictorOps API response content length limit, try increasing if 'RequestError' is encountered.", - "default": 500000 - }, - "pageLimit": { - "type": "number", - "title": "VictorOps Page Limit", - "default": 100 - }, - "currentPhase": { - "type": "string", - "title": "VictorOps Current Phase", - "default": "triggered,acknowledged,resolved" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "42495935-95de-4f5c-ae08-8fac00f6b308", - "name": "Visma E-conomic", - "dockerRepository": "airbyte/source-visma-economic", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/visma-economic", - "icon": "visma-e-conomic.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/visma-economic", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Visma E-conomic Spec", - "type": "object", - "required": [ "app_secret_token", "agreement_grant_token" ], - "properties": { - "app_secret_token": { - "title": "App Secret Token", - "type": "string", - "description": "Identification token for app accessing data", - "airbyte_secret": true - }, - "agreement_grant_token": { - "title": "Agreement Grant Token", - "type": "string", - "description": "Identifier for the grant issued by an agreement", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "6c6d8b0c-db35-4cd1-a7de-0ca8b080f5ac", - "name": "Vitally", - "dockerRepository": "airbyte/source-vitally", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/vitally", - "icon": "vitally.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/vitally", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Vitally Spec", - "type": "object", - "required": [ "api_key", "status" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "title": "API Token", - "description": "The API Token for a Vitally account.", - "airbyte_secret": true - }, - "status": { - "type": "string", - "title": "Status", - "description": "Status of the Vitally accounts. One of the following values; active, churned, activeOrChurned.", - "enum": [ "active", "churned", "activeOrChurned" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "6fd1e833-dd6e-45ec-a727-ab917c5be892", - "name": "Xero", - "dockerRepository": "airbyte/source-xero", - "dockerImageTag": "0.2.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/xero", - "icon": "xero.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/xero", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Xero Spec", - "type": "object", - "required": [ "authentication", "tenant_id", "start_date" ], - "additionalProperties": true, - "properties": { - "authentication": { - "type": "object", - "title": "Authenticate via Xero (OAuth)", - "required": [ "client_id", "client_secret", "refresh_token", "access_token", "token_expiry_date" ], - "properties": { - "client_id": { - "type": "string", - "title": "Client ID", - "description": "Enter your Xero application's Client ID" - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "Enter your Xero application's Client Secret", - "airbyte_secret": true - }, - "refresh_token": { - "type": "string", - "title": "Refresh Token", - "description": "Enter your Xero application's refresh token", - "airbyte_secret": true - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "Enter your Xero application's access token", - "airbyte_secret": true - }, - "token_expiry_date": { - "type": "string", - "description": "The date-time when the access token should be refreshed" - } - }, - "order": 0 - }, - "tenant_id": { - "title": "Tenant ID", - "type": "string", - "description": "Enter your Xero organization's Tenant ID", - "airbyte_secret": true, - "order": 1 - }, - "start_date": { - "type": "string", - "title": "Start Date", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "description": "UTC date and time in the format YYYY-MM-DDTHH:mm:ssZ. Any data with created_at before this data will not be synced.", - "examples": [ "2022-03-01T00:00:00Z" ], - "format": "date-time", - "order": 2 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ ], - "oauth_config_specification": { - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "refresh_token": { - "type": "string", - "path_in_connector_config": [ "authentication", "refresh_token" ] - }, - "access_token": { - "type": "string", - "path_in_connector_config": [ "authentication", "access_token" ] - }, - "token_expiry_date": { - "type": "string", - "path_in_connector_config": [ "authentication", "token_expiry_date" ], - "format": "date-time" - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "authentication", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "authentication", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "api.xero.com" ] - } - }, { - "sourceDefinitionId": "80fddd16-17bd-4c0c-bf4a-80df7863fc9d", - "name": "xkcd", - "dockerRepository": "airbyte/source-xkcd", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/xkcd", - "icon": "xkcd.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/xkcd", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Xkcd Spec", - "type": "object", - "properties": { } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "5db8292c-5f5a-11ed-9b6a-0242ac120002", - "name": "Weatherstack", - "dockerRepository": "airbyte/source-weatherstack", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/weatherstack", - "icon": "weatherstack.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/weatherstack", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Weatherstack Spec", - "type": "object", - "required": [ "access_key", "query", "historical_date" ], - "properties": { - "is_paid_account": { - "order": 0, - "title": "Is Paid Account", - "description": "Toggle if you're using a Paid subscription", - "type": "boolean", - "default": false - }, - "access_key": { - "order": 1, - "type": "string", - "description": "API access key used to retrieve data from the Weatherstack API.(https://weatherstack.com/product)", - "airbyte_secret": true - }, - "query": { - "order": 2, - "type": "string", - "description": "A location to query such as city, IP, latitudeLongitude, or zipcode. Multiple locations with semicolon seperated if using a professional plan or higher. For more info- (https://weatherstack.com/documentation#query_parameter)", - "examples": [ "New York", "London", "98101" ] - }, - "historical_date": { - "order": 3, - "type": "string", - "description": "This is required for enabling the Historical date API with format- (YYYY-MM-DD). * Note, only supported by paid accounts", - "examples": [ "2015-01-21" ], - "default\"": "2000-01-01", - "pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2}" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "ef580275-d9a9-48bb-af5e-db0f5855be04", - "name": "Webflow", - "dockerRepository": "airbyte/source-webflow", - "dockerImageTag": "0.1.2", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/webflow", - "icon": "webflow.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/webflow", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Webflow Spec", - "type": "object", - "required": [ "api_key", "site_id" ], - "additionalProperties": false, - "properties": { - "site_id": { - "title": "Site id", - "type": "string", - "description": "The id of the Webflow site you are requesting data from. See https://developers.webflow.com/#sites", - "example": "a relatively long hex sequence", - "order": 0 - }, - "api_key": { - "title": "API token", - "type": "string", - "description": "The API token for authenticating to Webflow. See https://university.webflow.com/lesson/intro-to-the-webflow-api", - "example": "a very long hex sequence", - "order": 1, - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "e65f84c0-7598-458a-bfac-f770c381ff5d", - "name": "Whisky Hunter", - "dockerRepository": "airbyte/source-whisky-hunter", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/whisky-hunter", - "icon": "whiskyhunter.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/whisky-hunter", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Whisky Hunter Spec", - "type": "object", - "additionalProperties": true, - "properties": { } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "2a2552ca-9f78-4c1c-9eb7-4d0dc66d72df", - "name": "WooCommerce", - "dockerRepository": "airbyte/source-woocommerce", - "dockerImageTag": "0.2.2", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/woocommerce", - "icon": "woocommerce.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/woocommerce", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Woocommerce Spec", - "type": "object", - "required": [ "api_key", "api_secret", "shop", "start_date" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "title": "Customer Key", - "description": "Customer Key for API in WooCommerce shop", - "airbyte_secret": true, - "order": 0 - }, - "api_secret": { - "type": "string", - "title": "Customer Secret", - "description": "Customer Secret for API in WooCommerce shop", - "airbyte_secret": true, - "order": 1 - }, - "shop": { - "type": "string", - "title": "Shop Name", - "description": "The name of the store. For https://EXAMPLE.com, the shop name is 'EXAMPLE.com'.", - "order": 2 - }, - "start_date": { - "type": "string", - "title": "Start Date", - "description": "The date you would like to replicate data from. Format: YYYY-MM-DD", - "examples": [ "2021-01-01" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "format": "date", - "order": 3 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "${domain}" ] - } - }, { - "sourceDefinitionId": "ef3c99c6-9e90-43c8-9517-926cfd978517", - "name": "Workable", - "dockerRepository": "airbyte/source-workable", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/workable", - "icon": "workable.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/sources/workable", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Workable API Spec", - "type": "object", - "required": [ "api_key", "account_subdomain", "start_date" ], - "additionalProperties": true, - "properties": { - "api_key": { - "title": "API Key", - "type": "string", - "description": "Your Workable API Key. See here.", - "airbyte_secret": true - }, - "account_subdomain": { - "title": "Account Subdomain", - "type": "string", - "description": "Your Workable account subdomain, e.g. https://your_account_subdomain.workable.com." - }, - "start_date": { - "title": "Start Date", - "type": "string", - "description": "Get data that was created since this date (format: YYYYMMDDTHHMMSSZ).", - "pattern": "^[0-9]{8}T[0-9]{6}Z$", - "examples": [ "20150708T115616Z", "20221115T225616Z" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "9c13f986-a13b-4988-b808-4705badf71c2", - "name": "Wrike", - "dockerRepository": "airbyte/source-wrike", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/wrike", - "icon": "wrike.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Wrike Spec", - "type": "object", - "required": [ "access_token", "wrike_instance" ], - "properties": { - "access_token": { - "type": "string", - "title": "Permanent Access Token", - "description": "Permanent access token. You can find documentation on how to acquire a permanent access token here", - "airbyte_secret": true, - "order": 0 - }, - "wrike_instance": { - "type": "string", - "title": "Wrike Instance (hostname)", - "description": "Wrike's instance such as `app-us2.wrike.com`", - "default": "app-us2.wrike.com", - "order": 1 - }, - "start_date": { - "type": "string", - "title": "Start date for comments", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Only comments after this date will be replicated.", - "examples": [ "2017-01-25T00:00:00Z" ], - "order": 2 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "b8c917bc-7d1b-4828-995f-6726820266d0", - "name": "Zapier Supported Storage", - "dockerRepository": "airbyte/source-zapier-supported-storage", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-supported-storage", - "icon": "zapiersupportedstorage.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zapier-supported-storage", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Zapier Supported Storage Spec", - "type": "object", - "required": [ "secret" ], - "additionalProperties": true, - "properties": { - "secret": { - "title": "Secret Key", - "type": "string", - "description": "Secret key supplied by zapier", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "40d24d0f-b8f9-4fe0-9e6c-b06c0f3f45e4", - "name": "Zendesk Chat", - "dockerRepository": "airbyte/source-zendesk-chat", - "dockerImageTag": "0.1.14", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-chat", - "icon": "zendesk-chat.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-chat", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Zendesk Chat Spec", - "type": "object", - "required": [ "start_date" ], - "additionalProperties": true, - "properties": { - "start_date": { - "type": "string", - "title": "Start Date", - "description": "The date from which you'd like to replicate data for Zendesk Chat API, in the format YYYY-MM-DDT00:00:00Z.", - "examples": [ "2021-02-01T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "format": "date-time" - }, - "subdomain": { - "type": "string", - "title": "Subdomain", - "description": "Required if you access Zendesk Chat from a Zendesk Support subdomain.", - "default": "" - }, - "credentials": { - "title": "Authorization Method", - "type": "object", - "oneOf": [ { - "type": "object", - "title": "OAuth2.0", - "required": [ "credentials" ], - "properties": { - "credentials": { - "type": "string", - "const": "oauth2.0", - "order": 0 - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "The Client ID of your OAuth application", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "The Client Secret of your OAuth application.", - "airbyte_secret": true - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "Access Token for making authenticated requests.", - "airbyte_secret": true - }, - "refresh_token": { - "type": "string", - "title": "Refresh Token", - "description": "Refresh Token to obtain new Access Token, when it's expired.", - "airbyte_secret": true - } - } - }, { - "type": "object", - "title": "Access Token", - "required": [ "credentials", "access_token" ], - "properties": { - "credentials": { - "type": "string", - "const": "access_token", - "order": 0 - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "The Access Token to make authenticated requests.", - "airbyte_secret": true - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "credentials" ], - "predicate_value": "oauth2.0", - "oauth_config_specification": { - "oauth_user_input_from_connector_config_specification": { - "type": "object", - "properties": { - "subdomain": { - "type": "string", - "path_in_connector_config": [ "subdomain" ] - } - } - }, - "complete_oauth_output_specification": { - "type": "object", - "properties": { - "access_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "access_token" ] - }, - "refresh_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "refresh_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "zopim.com" ] - } - }, { - "sourceDefinitionId": "982eaa4c-bba1-4cce-a971-06a41f700b8c", - "name": "Zendesk Sell", - "dockerRepository": "airbyte/source-zendesk-sell", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-sell", - "icon": "zendesk.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-sell", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Source Zendesk Sell Spec", - "type": "object", - "required": [ "api_token" ], - "properties": { - "api_token": { - "title": "API token", - "type": "string", - "description": "The API token for authenticating to Zendesk Sell", - "examples": [ "f23yhd630otl94y85a8bf384958473pto95847fd006da49382716or937ruw059" ], - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "325e0640-e7b3-4e24-b823-3361008f603f", - "name": "Zendesk Sunshine", - "dockerRepository": "airbyte/source-zendesk-sunshine", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-sunshine", - "icon": "zendesk-sunshine.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk_sunshine", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Zendesk Sunshine Spec", - "type": "object", - "required": [ "start_date", "subdomain" ], - "additionalProperties": true, - "properties": { - "subdomain": { - "title": "Subdomain", - "type": "string", - "description": "The subdomain for your Zendesk Account." - }, - "start_date": { - "title": "Start Date", - "type": "string", - "description": "The date from which you'd like to replicate data for Zendesk Sunshine API, in the format YYYY-MM-DDT00:00:00Z.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2021-01-01T00:00:00Z" ] - }, - "credentials": { - "title": "Authorization Method", - "type": "object", - "oneOf": [ { - "type": "object", - "title": "OAuth2.0", - "required": [ "auth_method", "client_id", "client_secret", "access_token" ], - "properties": { - "auth_method": { - "type": "string", - "const": "oauth2.0", - "enum": [ "oauth2.0" ], - "default": "oauth2.0", - "order": 0 - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "The Client ID of your OAuth application.", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "The Client Secret of your OAuth application.", - "airbyte_secret": true - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "Long-term access Token for making authenticated requests.", - "airbyte_secret": true - } - } - }, { - "type": "object", - "title": "API Token", - "required": [ "auth_method", "api_token", "email" ], - "properties": { - "auth_method": { - "type": "string", - "const": "api_token", - "enum": [ "api_token" ], - "default": "api_token", - "order": 1 - }, - "api_token": { - "type": "string", - "title": "API Token", - "description": "API Token. See the docs for information on how to generate this key.", - "airbyte_secret": true - }, - "email": { - "type": "string", - "title": "Email", - "description": "The user email for your Zendesk account" - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "auth_method" ], - "predicate_value": "oauth2.0", - "oauth_config_specification": { - "oauth_user_input_from_connector_config_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "subdomain": { - "type": "string", - "path_in_connector_config": [ "subdomain" ] - } - } - }, - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "access_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "access_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "79c1aa37-dae3-42ae-b333-d1c105477715", - "name": "Zendesk Support", - "dockerRepository": "airbyte/source-zendesk-support", - "dockerImageTag": "0.2.27", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-support", - "icon": "zendesk-support.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-support", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Source Zendesk Support Spec", - "type": "object", - "required": [ "start_date", "subdomain" ], - "additionalProperties": true, - "properties": { - "start_date": { - "type": "string", - "title": "Start Date", - "description": "The date from which you'd like to replicate data for Zendesk Support API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", - "examples": [ "2020-10-15T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "format": "date-time" - }, - "subdomain": { - "type": "string", - "title": "Subdomain", - "description": "This is your Zendesk subdomain that can be found in your account URL. For example, in https://{MY_SUBDOMAIN}.zendesk.com/, where MY_SUBDOMAIN is the value of your subdomain." - }, - "credentials": { - "title": "Authentication", - "type": "object", - "description": "Zendesk service provides two authentication methods. Choose between: `OAuth2.0` or `API token`.", - "oneOf": [ { - "title": "OAuth2.0", - "type": "object", - "required": [ "access_token" ], - "additionalProperties": true, - "properties": { - "credentials": { - "type": "string", - "const": "oauth2.0", - "order": 0 - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "The value of the API token generated. See the docs for more information.", - "airbyte_secret": true - } - } - }, { - "title": "API Token", - "type": "object", - "required": [ "email", "api_token" ], - "additionalProperties": true, - "properties": { - "credentials": { - "type": "string", - "const": "api_token", - "order": 0 - }, - "email": { - "title": "Email", - "type": "string", - "description": "The user email for your Zendesk account." - }, - "api_token": { - "title": "API Token", - "type": "string", - "description": "The value of the API token generated. See the docs for more information.", - "airbyte_secret": true - } - } - } ] - }, - "ignore_pagination": { - "type": "boolean", - "default": false, - "description": "Makes each stream read a single page of data.", - "title": "Should the connector read the second and further pages of data.", - "airbyte_hidden": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "credentials" ], - "predicate_value": "oauth2.0", - "oauth_config_specification": { - "oauth_user_input_from_connector_config_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "subdomain": { - "type": "string", - "path_in_connector_config": [ "subdomain" ] - } - } - }, - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "access_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "access_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "${subdomain}.zendesk.com", "zendesk.com" ] - }, - "maxSecondsBetweenMessages": 10800 - }, { - "sourceDefinitionId": "c8630570-086d-4a40-99ae-ea5b18673071", - "name": "Zendesk Talk", - "dockerRepository": "airbyte/source-zendesk-talk", - "dockerImageTag": "0.1.7", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-talk", - "icon": "zendesk-talk.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-talk", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Source Zendesk Talk Spec", - "type": "object", - "required": [ "start_date", "subdomain" ], - "properties": { - "subdomain": { - "type": "string", - "title": "Subdomain", - "order": 0, - "description": "This is your Zendesk subdomain that can be found in your account URL. For example, in https://{MY_SUBDOMAIN}.zendesk.com/, where MY_SUBDOMAIN is the value of your subdomain." - }, - "credentials": { - "title": "Authentication", - "type": "object", - "order": 1, - "description": "Zendesk service provides two authentication methods. Choose between: `OAuth2.0` or `API token`.", - "oneOf": [ { - "title": "API Token", - "type": "object", - "required": [ "email", "api_token" ], - "additionalProperties": true, - "properties": { - "auth_type": { - "type": "string", - "const": "api_token" - }, - "email": { - "title": "Email", - "type": "string", - "description": "The user email for your Zendesk account." - }, - "api_token": { - "title": "API Token", - "type": "string", - "description": "The value of the API token generated. See the docs for more information.", - "airbyte_secret": true - } - } - }, { - "title": "OAuth2.0", - "type": "object", - "required": [ "access_token" ], - "additionalProperties": true, - "properties": { - "auth_type": { - "type": "string", - "const": "oauth2.0", - "order": 0 - }, - "access_token": { - "type": "string", - "title": "Access Token", - "description": "The value of the API token generated. See the docs for more information.", - "airbyte_secret": true - } - } - } ] - }, - "start_date": { - "type": "string", - "title": "Start Date", - "order": 2, - "description": "The date from which you'd like to replicate data for Zendesk Talk API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", - "examples": [ "2020-10-15T00:00:00Z" ], - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "format": "date-time" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ], - "advanced_auth": { - "auth_flow_type": "oauth2.0", - "predicate_key": [ "credentials", "auth_type" ], - "predicate_value": "oauth2.0", - "oauth_config_specification": { - "oauth_user_input_from_connector_config_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "subdomain": { - "type": "string", - "path_in_connector_config": [ "subdomain" ] - } - } - }, - "complete_oauth_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "access_token": { - "type": "string", - "path_in_connector_config": [ "credentials", "access_token" ] - } - } - }, - "complete_oauth_server_input_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string" - }, - "client_secret": { - "type": "string" - } - } - }, - "complete_oauth_server_output_specification": { - "type": "object", - "additionalProperties": false, - "properties": { - "client_id": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_id" ] - }, - "client_secret": { - "type": "string", - "path_in_connector_config": [ "credentials", "client_secret" ] - } - } - } - } - } - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "${subdomain}.zendesk.com", "zendesk.com" ] - } - }, { - "sourceDefinitionId": "8baba53d-2fe3-4e33-bc85-210d0eb62884", - "name": "Zenefits", - "dockerRepository": "airbyte/source-zenefits", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zenefits", - "icon": "zenefits.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Zenefits Integration Spec", - "type": "object", - "required": [ "token" ], - "additionalProperties": false, - "properties": { - "token": { - "title": "token", - "type": "string", - "description": "Use Sync with Zenefits button on the link given on the readme file, and get the token to access the api" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "f1e4c7f6-db5c-4035-981f-d35ab4998794", - "name": "Zenloop", - "dockerRepository": "airbyte/source-zenloop", - "dockerImageTag": "0.1.6", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zenloop", - "icon": "zenloop.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zenloop", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Zenloop Spec", - "type": "object", - "required": [ "api_token" ], - "properties": { - "api_token": { - "type": "string", - "description": "Zenloop API Token. You can get the API token in settings page here ", - "airbyte_secret": true - }, - "date_from": { - "type": "string", - "description": "Zenloop date_from. Format: 2021-10-24T03:30:30Z or 2021-10-24. Leave empty if only data from current data should be synced", - "examples": [ "2021-10-24T03:30:30Z" ] - }, - "survey_id": { - "type": "string", - "description": "Zenloop Survey ID. Can be found here. Leave empty to pull answers from all surveys", - "airbyte_secret": true - }, - "survey_group_id": { - "type": "string", - "description": "Zenloop Survey Group ID. Can be found by pulling All Survey Groups via SurveyGroups stream. Leave empty to pull answers from all survey groups", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "api.zenloop.com" ] - } - }, { - "sourceDefinitionId": "cdaf146a-9b75-49fd-9dd2-9d64a0bb4781", - "name": "Sentry", - "dockerRepository": "airbyte/source-sentry", - "dockerImageTag": "0.2.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/sentry", - "icon": "sentry.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/sentry", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Sentry Spec", - "type": "object", - "required": [ "auth_token", "organization", "project" ], - "additionalProperties": true, - "properties": { - "auth_token": { - "type": "string", - "title": "Authentication Tokens", - "description": "Log into Sentry and then create authentication tokens.For self-hosted, you can find or create authentication tokens by visiting \"{instance_url_prefix}/settings/account/api/auth-tokens/\"", - "airbyte_secret": true - }, - "hostname": { - "type": "string", - "title": "Host Name", - "description": "Host name of Sentry API server.For self-hosted, specify your host name here. Otherwise, leave it empty.", - "default": "sentry.io" - }, - "organization": { - "type": "string", - "title": "Organization", - "description": "The slug of the organization the groups belong to." - }, - "project": { - "type": "string", - "title": "Project", - "description": "The name (slug) of the Project you want to sync." - }, - "discover_fields": { - "type": "array", - "item": "string", - "title": "Discover Event Fields", - "description": "Fields to retrieve when fetching discover events" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "generally_available", - "allowedHosts": { - "hosts": [ "*" ] - }, - "maxSecondsBetweenMessages": 64800 - }, { - "sourceDefinitionId": "3dc3037c-5ce8-4661-adc2-f7a9e3c5ece5", - "name": "Zuora", - "dockerRepository": "airbyte/source-zuora", - "dockerImageTag": "0.1.3", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zuora", - "icon": "zuora.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zuora", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Zuora Connector Configuration", - "type": "object", - "required": [ "start_date", "tenant_endpoint", "data_query", "client_id", "client_secret" ], - "properties": { - "start_date": { - "type": "string", - "title": "Start Date", - "description": "Start Date in format: YYYY-MM-DD", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" - }, - "window_in_days": { - "type": "string", - "title": "Query Window (in days)", - "description": "The amount of days for each data-chunk begining from start_date. Bigger the value - faster the fetch. (0.1 - as for couple of hours, 1 - as for a Day; 364 - as for a Year).", - "examples": [ "0.5", "1", "30", "60", "90", "120", "200", "364" ], - "pattern": "^(0|[1-9]\\d*)(\\.\\d+)?$", - "default": "90" - }, - "tenant_endpoint": { - "title": "Tenant Endpoint Location", - "type": "string", - "description": "Please choose the right endpoint where your Tenant is located. More info by this Link", - "enum": [ "US Production", "US Cloud Production", "US API Sandbox", "US Cloud API Sandbox", "US Central Sandbox", "US Performance Test", "EU Production", "EU API Sandbox", "EU Central Sandbox" ] - }, - "data_query": { - "title": "Data Query Type", - "type": "string", - "description": "Choose between `Live`, or `Unlimited` - the optimized, replicated database at 12 hours freshness for high volume extraction Link", - "enum": [ "Live", "Unlimited" ], - "default": "Live" - }, - "client_id": { - "type": "string", - "title": "Client ID", - "description": "Your OAuth user Client ID", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "Your OAuth user Client Secret", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "cd06e646-31bf-4dc8-af48-cbc6530fcad3", - "name": "Kustomer", - "dockerRepository": "airbyte/source-kustomer-singer", - "dockerImageTag": "0.1.2", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/kustomer", - "icon": "kustomer.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/kustomer", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Source Kustomer Singer Spec", - "type": "object", - "required": [ "api_token", "start_date" ], - "additionalProperties": true, - "properties": { - "api_token": { - "title": "API Token", - "type": "string", - "description": "Kustomer API Token. See the docs on how to obtain this", - "airbyte_secret": true - }, - "start_date": { - "title": "Start Date", - "type": "string", - "description": "The date from which you'd like to replicate the data", - "examples": [ "2019-01-01T00:00:00Z" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "4942d392-c7b5-4271-91f9-3b4f4e51eb3e", - "name": "ZohoCRM", - "dockerRepository": "airbyte/source-zoho-crm", - "dockerImageTag": "0.1.2", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zoho-crm", - "icon": "zohocrm.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zoho-crm", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Zoho Crm Configuration", - "type": "object", - "required": [ "client_id", "client_secret", "refresh_token", "environment", "dc_region", "edition" ], - "additionalProperties": true, - "properties": { - "client_id": { - "type": "string", - "title": "Client ID", - "description": "OAuth2.0 Client ID", - "airbyte_secret": true - }, - "client_secret": { - "type": "string", - "title": "Client Secret", - "description": "OAuth2.0 Client Secret", - "airbyte_secret": true - }, - "refresh_token": { - "type": "string", - "title": "Refresh Token", - "description": "OAuth2.0 Refresh Token", - "airbyte_secret": true - }, - "dc_region": { - "title": "Data Center Location", - "type": "string", - "description": "Please choose the region of your Data Center location. More info by this Link", - "enum": [ "US", "AU", "EU", "IN", "CN", "JP" ] - }, - "environment": { - "title": "Environment", - "type": "string", - "description": "Please choose the environment", - "enum": [ "Production", "Developer", "Sandbox" ] - }, - "start_datetime": { - "title": "Start Date", - "type": [ "string", "null" ], - "examples": [ "2000-01-01", "2000-01-01 13:00", "2000-01-01 13:00:00", "2000-01-01T13:00+00:00", "2000-01-01T13:00:00-07:00" ], - "description": "ISO 8601, for instance: `YYYY-MM-DD`, `YYYY-MM-DD HH:MM:SS+HH:MM`", - "format": "date-time" - }, - "edition": { - "title": "Zoho CRM Edition", - "type": "string", - "description": "Choose your Edition of Zoho CRM to determine API Concurrency Limits", - "enum": [ "Free", "Standard", "Professional", "Enterprise", "Ultimate" ], - "default": "Free" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "a827c52e-791c-4135-a245-e233c5255199", - "name": "SFTP", - "dockerRepository": "airbyte/source-sftp", - "dockerImageTag": "0.1.2", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/sftp", - "icon": "sftp.svg", - "sourceType": "file", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/source/sftp", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "SFTP Source Spec", - "type": "object", - "required": [ "user", "host", "port" ], - "additionalProperties": true, - "properties": { - "user": { - "title": "User Name", - "description": "The server user", - "type": "string", - "order": 0 - }, - "host": { - "title": "Host Address", - "description": "The server host address", - "type": "string", - "examples": [ "www.host.com", "192.0.2.1" ], - "order": 1 - }, - "port": { - "title": "Port", - "description": "The server port", - "type": "integer", - "default": 22, - "examples": [ "22" ], - "order": 2 - }, - "credentials": { - "type": "object", - "title": "Authentication", - "description": "The server authentication method", - "order": 3, - "oneOf": [ { - "title": "Password Authentication", - "required": [ "auth_method", "auth_user_password" ], - "properties": { - "auth_method": { - "description": "Connect through password authentication", - "type": "string", - "const": "SSH_PASSWORD_AUTH", - "order": 0 - }, - "auth_user_password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 1 - } - } - }, { - "title": "SSH Key Authentication", - "required": [ "auth_method", "auth_ssh_key" ], - "properties": { - "auth_method": { - "description": "Connect through ssh key", - "type": "string", - "const": "SSH_KEY_AUTH", - "order": 0 - }, - "auth_ssh_key": { - "title": "SSH Private Key", - "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", - "type": "string", - "airbyte_secret": true, - "multiline": true, - "order": 1 - } - } - } ] - }, - "file_types": { - "title": "File types", - "description": "Coma separated file types. Currently only 'csv' and 'json' types are supported.", - "type": "string", - "default": "csv,json", - "order": 4, - "examples": [ "csv,json", "csv" ] - }, - "folder_path": { - "title": "Folder Path", - "description": "The directory to search files for sync", - "type": "string", - "default": "", - "examples": [ "/logs/2022" ], - "order": 5 - }, - "file_pattern": { - "title": "File Pattern", - "description": "The regular expression to specify files for sync in a chosen Folder Path", - "type": "string", - "default": "", - "examples": [ "log-([0-9]{4})([0-9]{2})([0-9]{2}) - This will filter files which `log-yearmmdd`" ], - "order": 6 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "31e3242f-dee7-4cdc-a4b8-8e06c5458517", - "name": "SFTP Bulk", - "dockerRepository": "airbyte/source-sftp-bulk", - "dockerImageTag": "0.1.2", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/sftp-bulk", - "icon": "sftp.svg", - "sourceType": "file", - "spec": { - "documentationUrl": "https://docs.airbyte.io/integrations/source/ftp", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "FTP Source Spec", - "type": "object", - "required": [ "username", "host", "port", "stream_name", "start_date", "folder_path" ], - "additionalProperties": true, - "properties": { - "username": { - "title": "User Name", - "description": "The server user", - "type": "string", - "order": 0 - }, - "password": { - "title": "Password", - "description": "OS-level password for logging into the jump server host", - "type": "string", - "airbyte_secret": true, - "order": 1 - }, - "private_key": { - "title": "Private key", - "description": "The private key", - "type": "string", - "multiline": true, - "order": 2 - }, - "host": { - "title": "Host Address", - "description": "The server host address", - "type": "string", - "examples": [ "www.host.com", "192.0.2.1" ], - "order": 3 - }, - "port": { - "title": "Port", - "description": "The server port", - "type": "integer", - "default": 22, - "examples": [ "22" ], - "order": 4 - }, - "stream_name": { - "title": "Stream name", - "description": "The name of the stream or table you want to create", - "type": "string", - "examples": [ "ftp_contacts" ], - "order": 5 - }, - "file_type": { - "title": "File type", - "description": "The file type you want to sync. Currently only 'csv' and 'json' files are supported.", - "type": "string", - "default": "csv", - "enum": [ "csv", "json" ], - "order": 6, - "examples": [ "csv", "json" ] - }, - "separator": { - "title": "CSV Separator (Optional)", - "description": "The separator used in the CSV files. Define None if you want to use the Sniffer functionality", - "type": "string", - "default": ",", - "examples": [ "," ], - "order": 7 - }, - "folder_path": { - "title": "Folder Path (Optional)", - "description": "The directory to search files for sync", - "type": "string", - "default": "", - "examples": [ "/logs/2022" ], - "order": 8 - }, - "file_pattern": { - "title": "File Pattern (Optional)", - "description": "The regular expression to specify files for sync in a chosen Folder Path", - "type": "string", - "default": "", - "examples": [ "log-([0-9]{4})([0-9]{2})([0-9]{2}) - This will filter files which `log-yearmmdd`" ], - "order": 9 - }, - "file_most_recent": { - "title": "Most recent file (Optional)", - "description": "Sync only the most recent file for the configured folder path and file pattern", - "type": "boolean", - "default": false, - "order": 10 - }, - "start_date": { - "type": "string", - "title": "Start Date", - "format": "date-time", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "examples": [ "2017-01-25T00:00:00Z" ], - "description": "The date from which you'd like to replicate data for all incremental streams, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", - "order": 11 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "6f2ac653-8623-43c4-8950-19218c7caf3d", - "name": "Firebolt", - "dockerRepository": "airbyte/source-firebolt", - "dockerImageTag": "0.2.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/firebolt", - "icon": "firebolt.svg", - "sourceType": "database", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/firebolt", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Firebolt Spec", - "type": "object", - "required": [ "username", "password", "database" ], - "additionalProperties": true, - "properties": { - "username": { - "type": "string", - "title": "Username", - "description": "Firebolt email address you use to login.", - "examples": [ "username@email.com" ] - }, - "password": { - "type": "string", - "title": "Password", - "description": "Firebolt password.", - "airbyte_secret": true - }, - "account": { - "type": "string", - "title": "Account", - "description": "Firebolt account to login." - }, - "host": { - "type": "string", - "title": "Host", - "description": "The host name of your Firebolt database.", - "examples": [ "api.app.firebolt.io" ] - }, - "database": { - "type": "string", - "title": "Database", - "description": "The database to connect to." - }, - "engine": { - "type": "string", - "title": "Engine", - "description": "Engine name or url to connect to." - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "7cf88806-25f5-4e1a-b422-b2fa9e1b0090", - "name": "Elasticsearch", - "dockerRepository": "airbyte/source-elasticsearch", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/elasticsearch", - "icon": "elasticsearch.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/source/elasticsearch", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Elasticsearch Connection Configuration", - "type": "object", - "required": [ "endpoint" ], - "additionalProperties": true, - "properties": { - "endpoint": { - "title": "Server Endpoint", - "type": "string", - "description": "The full url of the Elasticsearch server" - }, - "authenticationMethod": { - "title": "Authentication Method", - "type": "object", - "description": "The type of authentication to be used", - "oneOf": [ { - "title": "None", - "additionalProperties": true, - "description": "No authentication will be used", - "required": [ "method" ], - "properties": { - "method": { - "type": "string", - "const": "none" - } - } - }, { - "title": "Api Key/Secret", - "additionalProperties": true, - "description": "Use a api key and secret combination to authenticate", - "required": [ "method", "apiKeyId", "apiKeySecret" ], - "properties": { - "method": { - "type": "string", - "const": "secret" - }, - "apiKeyId": { - "title": "API Key ID", - "description": "The Key ID to used when accessing an enterprise Elasticsearch instance.", - "type": "string" - }, - "apiKeySecret": { - "title": "API Key Secret", - "description": "The secret associated with the API Key ID.", - "type": "string", - "airbyte_secret": true - } - } - }, { - "title": "Username/Password", - "additionalProperties": true, - "description": "Basic auth header with a username and password", - "required": [ "method", "username", "password" ], - "properties": { - "method": { - "type": "string", - "const": "basic" - }, - "username": { - "title": "Username", - "description": "Basic auth username to access a secure Elasticsearch server", - "type": "string" - }, - "password": { - "title": "Password", - "description": "Basic auth password to access a secure Elasticsearch server", - "type": "string", - "airbyte_secret": true - } - } - } ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "03a53b13-794a-4d6b-8544-3b36ed8f3ce4", - "name": "Waiteraid", - "dockerRepository": "airbyte/source-waiteraid", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/waiteraid", - "icon": "waiteraid.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Waiteraid Spec", - "type": "object", - "required": [ "start_date", "auth_hash", "restid" ], - "additionalProperties": true, - "properties": { - "start_date": { - "title": "Start Date", - "type": "string", - "description": "Start getting data from that date.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "examples": [ "YYYY-MM-DD" ] - }, - "auth_hash": { - "title": "Authentication Hash", - "type": "string", - "description": "Your WaiterAid API key, obtained from API request with Username and Password", - "airbyte_secret": true - }, - "restid": { - "title": "Restaurant ID", - "type": "string", - "description": "Your WaiterAid restaurant id from API request to getRestaurants", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "87c58f70-6f7a-4f70-aba5-bab1a458f5ba", - "name": "Wikipedia Pageviews", - "dockerRepository": "airbyte/source-wikipedia-pageviews", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/wikipedia-pageviews", - "icon": "wikipediapageviews.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docsurl.com", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Wikipedia Pageviews Spec", - "type": "object", - "required": [ "project", "access", "agent", "article", "start", "end", "country" ], - "additionalProperties": true, - "properties": { - "project": { - "type": "string", - "title": "Project", - "description": "If you want to filter by project, use the domain of any Wikimedia project.", - "examples": [ "en.wikipedia.org", "www.mediawiki.org", "commons.wikimedia.org" ] - }, - "access": { - "type": "string", - "title": "Access", - "description": "If you want to filter by access method, use one of desktop, mobile-app or mobile-web. If you are interested in pageviews regardless of access method, use all-access.", - "examples": [ "all-access", "desktop", "mobile-app", "mobile-web" ] - }, - "agent": { - "type": "string", - "title": "Agent", - "description": "If you want to filter by agent type, use one of user, automated or spider. If you are interested in pageviews regardless of agent type, use all-agents.", - "examples": [ "all-agents", "user", "spider", "automated" ] - }, - "article": { - "type": "string", - "title": "Article", - "description": "The title of any article in the specified project. Any spaces should be replaced with underscores. It also should be URI-encoded, so that non-URI-safe characters like %, / or ? are accepted.", - "examples": [ "Are_You_the_One%3F" ] - }, - "start": { - "type": "string", - "title": "Start", - "description": "The date of the first day to include, in YYYYMMDD or YYYYMMDDHH format." - }, - "end": { - "type": "string", - "title": "End", - "description": "The date of the last day to include, in YYYYMMDD or YYYYMMDDHH format." - }, - "country": { - "type": "string", - "title": "Country", - "description": "The ISO 3166-1 alpha-2 code of a country for which to retrieve top articles.", - "examples": [ "FR", "IN" ] - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "05b0bce2-4ec4-4534-bb1a-5d0127bd91b7", - "name": "WorkRamp", - "dockerRepository": "airbyte/source-workramp", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/workramp", - "icon": "workramp.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/workramp", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Workramp Spec", - "type": "object", - "required": [ "api_key", "academy_id" ], - "additionalProperties": true, - "properties": { - "api_key": { - "type": "string", - "title": "API Token", - "description": "The API Token for Workramp", - "airbyte_secret": true - }, - "academy_id": { - "type": "string", - "title": "Academy ID", - "description": "The id of the Academy" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "7865dce4-2211-4f6a-88e5-9d0fe161afe7", - "name": "Yandex Metrica", - "dockerRepository": "airbyte/source-yandex-metrica", - "dockerImageTag": "1.0.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/yandex-metrica", - "icon": "yandexmetrica.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/yandex-metrica", - "connectionSpecification": { - "$schema": "https://json-schema.org/draft-07/schema#", - "title": "Yandex Metrica Spec", - "type": "object", - "required": [ "auth_token", "counter_id", "start_date" ], - "additionalProperties": true, - "properties": { - "auth_token": { - "type": "string", - "title": "Authentication Token", - "description": "Your Yandex Metrica API access token", - "airbyte_secret": true, - "order": 0 - }, - "counter_id": { - "type": "string", - "title": "Counter ID", - "description": "Counter ID", - "pattern": "^[0-9]+$", - "order": 1 - }, - "start_date": { - "title": "Start Date", - "type": "string", - "description": "Starting point for your data replication, in format of \"YYYY-MM-DD\".", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "format": "date", - "examples": [ "2022-01-01" ], - "order": 2 - }, - "end_date": { - "title": "End Date", - "type": "string", - "description": "Starting point for your data replication, in format of \"YYYY-MM-DD\". If not provided will sync till most recent date.", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", - "format": "date", - "examples": [ "2022-01-01" ], - "order": 3 - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "beta", - "allowedHosts": { - "hosts": [ "api-metrica.yandex.net" ] - } - }, { - "sourceDefinitionId": "9c74c2d7-531a-4ebf-b6d8-6181f805ecdc", - "name": "Younium", - "dockerRepository": "airbyte/source-younium", - "dockerImageTag": "0.1.0", - "documentationUrl": "https://docs.airbyte.com/integrations/sources/younium", - "icon": "younium.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/younium", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Younium Spec", - "type": "object", - "required": [ "username", "password", "legal_entity" ], - "properties": { - "username": { - "title": "Username", - "type": "string", - "description": "Username for Younium account" - }, - "password": { - "title": "Password", - "type": "string", - "description": "Account password for younium account API key", - "airbyte_secret": true - }, - "legal_entity": { - "title": "Legal Entity", - "type": "string", - "description": "Legal Entity that data should be pulled from" - }, - "playground": { - "title": "Playground environment", - "type": "boolean", - "description": "Property defining if connector is used against playground or production environment", - "default": false - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "cbfd9856-1322-44fb-bcf1-0b39b7a8e92e", - "name": "Zoom", - "dockerRepository": "airbyte/source-zoom", - "dockerImageTag": "0.1.1", - "documentationUrl": "https://docs.airbyte.io/integrations/sources/zoom", - "icon": "zoom.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/zoom", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Zoom Spec", - "type": "object", - "required": [ "jwt_token" ], - "additionalProperties": true, - "properties": { - "jwt_token": { - "type": "string", - "description": "JWT Token", - "airbyte_secret": true - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - }, { - "sourceDefinitionId": "68b9c98e-0747-4c84-b05b-d30b47686725", - "name": "Braze", - "dockerRepository": "airbyte/source-braze", - "dockerImageTag": "0.1.3", - "documentationUrl": "https://docs.airbyte.io/integrations/sources/braze", - "icon": "braze.svg", - "sourceType": "api", - "spec": { - "documentationUrl": "https://docs.airbyte.com/integrations/sources/braze", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Braze Spec", - "type": "object", - "additionalProperties": true, - "required": [ "url", "api_key", "start_date" ], - "properties": { - "url": { - "type": "string", - "title": "URL", - "description": "Braze REST API endpoint" - }, - "api_key": { - "type": "string", - "title": "Rest API Key", - "airbyte_secret": true, - "description": "Braze REST API key" - }, - "start_date": { - "type": "string", - "format": "date", - "title": "Start date", - "description": "Rows after this date will be synced" - } - } - }, - "supportsNormalization": false, - "supportsDBT": false, - "supported_destination_sync_modes": [ ] - }, - "tombstone": false, - "public": true, - "custom": false, - "releaseStage": "alpha" - } ] -} \ No newline at end of file +{ + "destinations": [ + { + "destinationDefinitionId": "b4c5d105-31fd-4817-96b6-cb923bfc04cb", + "name": "Azure Blob Storage", + "dockerRepository": "airbyte/destination-azure-blob-storage", + "dockerImageTag": "0.2.0", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/azureblobstorage", + "icon": "azureblobstorage.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/azureblobstorage", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "AzureBlobStorage Destination Spec", + "type": "object", + "required": [ + "azure_blob_storage_account_name", + "azure_blob_storage_account_key", + "format" + ], + "additionalProperties": false, + "properties": { + "azure_blob_storage_endpoint_domain_name": { + "title": "Endpoint Domain Name", + "type": "string", + "default": "blob.core.windows.net", + "description": "This is Azure Blob Storage endpoint domain name. Leave default value (or leave it empty if run container from command line) to use Microsoft native from example.", + "examples": ["blob.core.windows.net"] + }, + "azure_blob_storage_container_name": { + "title": "Azure blob storage container (Bucket) Name", + "type": "string", + "description": "The name of the Azure blob storage container. If not exists - will be created automatically. May be empty, then will be created automatically airbytecontainer+timestamp", + "examples": ["airbytetescontainername"] + }, + "azure_blob_storage_account_name": { + "title": "Azure Blob Storage account name", + "type": "string", + "description": "The account's name of the Azure Blob Storage.", + "examples": ["airbyte5storage"] + }, + "azure_blob_storage_account_key": { + "title": "Azure Blob Storage account key", + "description": "The Azure blob storage account key.", + "airbyte_secret": true, + "type": "string", + "examples": [ + "Z8ZkZpteggFx394vm+PJHnGTvdRncaYS+JhLKdj789YNmD+iyGTnG+PV+POiuYNhBg/ACS+LKjd%4FG3FHGN12Nd==" + ] + }, + "azure_blob_storage_output_buffer_size": { + "title": "Azure Blob Storage output buffer size (Megabytes)", + "type": "integer", + "description": "The amount of megabytes to buffer for the output stream to Azure. This will impact memory footprint on workers, but may need adjustment for performance and appropriate block size in Azure.", + "minimum": 1, + "maximum": 2047, + "default": 5, + "examples": [5] + }, + "azure_blob_storage_spill_size": { + "title": "Azure Blob Storage file spill size", + "type": "integer", + "description": "The amount of megabytes after which the connector should spill the records in a new blob object. Make sure to configure size greater than individual records. Enter 0 if not applicable", + "default": 500, + "examples": [500] + }, + "format": { + "title": "Output Format", + "type": "object", + "description": "Output data format", + "oneOf": [ + { + "title": "CSV: Comma-Separated Values", + "required": ["format_type", "flattening"], + "properties": { + "format_type": { + "type": "string", + "const": "CSV" + }, + "flattening": { + "type": "string", + "title": "Normalization (Flattening)", + "description": "Whether the input json data should be normalized (flattened) in the output CSV. Please refer to docs for details.", + "default": "No flattening", + "enum": ["No flattening", "Root level flattening"] + } + } + }, + { + "title": "JSON Lines: newline-delimited JSON", + "required": ["format_type"], + "properties": { + "format_type": { + "type": "string", + "const": "JSONL" + } + } + } + ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["overwrite", "append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "resourceRequirements": { + "jobSpecific": [ + { + "jobType": "sync", + "resourceRequirements": { + "memory_request": "1Gi", + "memory_limit": "1Gi" + } + } + ] + } + }, + { + "destinationDefinitionId": "0eeee7fb-518f-4045-bacc-9619e31c43ea", + "name": "Amazon SQS", + "dockerRepository": "airbyte/destination-amazon-sqs", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/amazon-sqs", + "icon": "awssqs.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/amazon-sqs", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Destination Amazon Sqs", + "type": "object", + "required": ["queue_url", "region"], + "additionalProperties": false, + "properties": { + "queue_url": { + "title": "Queue URL", + "description": "URL of the SQS Queue", + "type": "string", + "examples": [ + "https://sqs.eu-west-1.amazonaws.com/1234567890/my-example-queue" + ], + "order": 0 + }, + "region": { + "title": "AWS Region", + "description": "AWS Region of the SQS Queue", + "type": "string", + "enum": [ + "us-east-1", + "us-east-2", + "us-west-1", + "us-west-2", + "af-south-1", + "ap-east-1", + "ap-south-1", + "ap-northeast-1", + "ap-northeast-2", + "ap-northeast-3", + "ap-southeast-1", + "ap-southeast-2", + "ca-central-1", + "cn-north-1", + "cn-northwest-1", + "eu-central-1", + "eu-north-1", + "eu-south-1", + "eu-west-1", + "eu-west-2", + "eu-west-3", + "sa-east-1", + "me-south-1", + "us-gov-east-1", + "us-gov-west-1" + ], + "order": 1 + }, + "message_delay": { + "title": "Message Delay", + "description": "Modify the Message Delay of the individual message from the Queue's default (seconds).", + "type": "integer", + "examples": ["15"], + "order": 2 + }, + "access_key": { + "title": "AWS IAM Access Key ID", + "description": "The Access Key ID of the AWS IAM Role to use for sending messages", + "type": "string", + "examples": ["xxxxxHRNxxx3TBxxxxxx"], + "order": 3, + "airbyte_secret": true + }, + "secret_key": { + "title": "AWS IAM Secret Key", + "description": "The Secret Key of the AWS IAM Role to use for sending messages", + "type": "string", + "examples": ["hu+qE5exxxxT6o/ZrKsxxxxxxBhxxXLexxxxxVKz"], + "order": 4, + "airbyte_secret": true + }, + "message_body_key": { + "title": "Message Body Key", + "description": "Use this property to extract the contents of the named key in the input record to use as the SQS message body. If not set, the entire content of the input record data is used as the message body.", + "type": "string", + "examples": ["myDataPath"], + "order": 5 + }, + "message_group_id": { + "title": "Message Group Id", + "description": "The tag that specifies that a message belongs to a specific message group. This parameter applies only to, and is REQUIRED by, FIFO queues.", + "type": "string", + "examples": ["my-fifo-group"], + "order": 6 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "05c161bf-ca73-4d48-b524-d392be417002", + "name": "Apache Doris", + "dockerRepository": "airbyte/destination-doris", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/doris", + "icon": "apachedoris.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/destinations/doris", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Doris Destination Spec", + "type": "object", + "required": ["host", "httpport", "queryport", "username", "database"], + "properties": { + "host": { + "title": "Host", + "description": "Hostname of the database", + "type": "string", + "order": 0 + }, + "httpport": { + "title": "HttpPort", + "description": "Http Port of the database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 8030, + "examples": ["8030"], + "order": 1 + }, + "queryport": { + "title": "QueryPort", + "description": "Query(SQL) Port of the database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 9030, + "examples": ["9030"], + "order": 2 + }, + "database": { + "title": "DataBase Name", + "description": "Name of the database.", + "type": "string", + "order": 3 + }, + "username": { + "title": "UserName", + "description": "Username to use to access the database.", + "type": "string", + "order": 4 + }, + "password": { + "title": "Password", + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 5 + } + } + }, + "supportsIncremental": false, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["append", "overwrite"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "df65a8f3-9908-451b-aa9b-445462803560", + "name": "Apache Iceberg", + "dockerRepository": "airbyte/destination-iceberg", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/iceberg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/iceberg", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Iceberg Destination Spec", + "type": "object", + "required": ["catalog_config", "storage_config", "format_config"], + "properties": { + "catalog_config": { + "title": "Iceberg catalog config", + "type": "object", + "description": "Catalog config of Iceberg.", + "oneOf": [ + { + "title": "HiveCatalog: Use Apache Hive MetaStore", + "required": ["catalog_type", "hive_thrift_uri"], + "properties": { + "catalog_type": { + "title": "Catalog Type", + "type": "string", + "default": "Hive", + "enum": ["Hive"], + "order": 0 + }, + "hive_thrift_uri": { + "title": "Hive Metastore thrift uri", + "type": "string", + "description": "Hive MetaStore thrift server uri of iceberg catalog.", + "examples": ["host:port"], + "order": 1 + }, + "database": { + "title": "Default database", + "description": "The default database tables are written to if the source does not specify a namespace. The usual value for this field is \"default\".", + "type": "string", + "default": "default", + "examples": ["default"], + "order": 2 + } + } + }, + { + "title": "HadoopCatalog: Use hierarchical file systems as same as storage config", + "description": "A Hadoop catalog doesn’t need to connect to a Hive MetaStore, but can only be used with HDFS or similar file systems that support atomic rename.", + "required": ["catalog_type"], + "properties": { + "catalog_type": { + "title": "Catalog Type", + "type": "string", + "default": "Hadoop", + "enum": ["Hadoop"], + "order": 0 + }, + "database": { + "title": "Default database", + "description": "The default database tables are written to if the source does not specify a namespace. The usual value for this field is \"default\".", + "type": "string", + "default": "default", + "examples": ["default"], + "order": 1 + } + } + }, + { + "title": "JdbcCatalog: Use relational database", + "description": "Using a table in a relational database to manage Iceberg tables through JDBC. Read more here. Supporting: PostgreSQL", + "required": ["catalog_type"], + "properties": { + "catalog_type": { + "title": "Catalog Type", + "type": "string", + "default": "Jdbc", + "enum": ["Jdbc"], + "order": 0 + }, + "database": { + "title": "Default schema", + "description": "The default schema tables are written to if the source does not specify a namespace. The usual value for this field is \"public\".", + "type": "string", + "default": "public", + "examples": ["public"], + "order": 1 + }, + "jdbc_url": { + "title": "Jdbc url", + "type": "string", + "examples": [ + "jdbc:postgresql://{host}:{port}/{database}" + ], + "order": 2 + }, + "username": { + "title": "User", + "description": "Username to use to access the database.", + "type": "string", + "order": 3 + }, + "password": { + "title": "Password", + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 4 + }, + "ssl": { + "title": "SSL Connection", + "description": "Encrypt data using SSL. When activating SSL, please select one of the connection modes.", + "type": "boolean", + "default": false, + "order": 5 + }, + "catalog_schema": { + "title": "schema for Iceberg catalog", + "description": "Iceberg catalog metadata tables are written to catalog schema. The usual value for this field is \"public\".", + "type": "string", + "default": "public", + "examples": ["public"], + "order": 6 + } + } + } + ], + "order": 0 + }, + "storage_config": { + "title": "Storage config", + "type": "object", + "description": "Storage config of Iceberg.", + "oneOf": [ + { + "title": "S3", + "type": "object", + "description": "S3 object storage", + "required": [ + "storage_type", + "access_key_id", + "secret_access_key", + "s3_warehouse_uri" + ], + "properties": { + "storage_type": { + "title": "Storage Type", + "type": "string", + "default": "S3", + "enum": ["S3"], + "order": 0 + }, + "access_key_id": { + "type": "string", + "description": "The access key ID to access the S3 bucket. Airbyte requires Read and Write permissions to the given bucket. Read more here.", + "title": "S3 Key ID", + "airbyte_secret": true, + "examples": ["A012345678910EXAMPLE"], + "order": 0 + }, + "secret_access_key": { + "type": "string", + "description": "The corresponding secret to the access key ID. Read more here", + "title": "S3 Access Key", + "airbyte_secret": true, + "examples": ["a012345678910ABCDEFGH/AbCdEfGhEXAMPLEKEY"], + "order": 1 + }, + "s3_warehouse_uri": { + "title": "S3 Warehouse Uri for Iceberg", + "type": "string", + "description": "The Warehouse Uri for Iceberg", + "examples": [ + "s3a://my-bucket/path/to/warehouse", + "s3://my-bucket/path/to/warehouse" + ], + "order": 2 + }, + "s3_bucket_region": { + "title": "S3 Bucket Region", + "type": "string", + "default": "", + "description": "The region of the S3 bucket. See here for all region codes.", + "enum": [ + "", + "us-east-1", + "us-east-2", + "us-west-1", + "us-west-2", + "af-south-1", + "ap-east-1", + "ap-south-1", + "ap-northeast-1", + "ap-northeast-2", + "ap-northeast-3", + "ap-southeast-1", + "ap-southeast-2", + "ca-central-1", + "cn-north-1", + "cn-northwest-1", + "eu-central-1", + "eu-north-1", + "eu-south-1", + "eu-west-1", + "eu-west-2", + "eu-west-3", + "sa-east-1", + "me-south-1", + "us-gov-east-1", + "us-gov-west-1" + ], + "order": 3 + }, + "s3_endpoint": { + "title": "Endpoint", + "type": "string", + "default": "", + "description": "Your S3 endpoint url. Read more here", + "examples": ["http://localhost:9000", "localhost:9000"], + "order": 4 + }, + "s3_path_style_access": { + "type": "boolean", + "description": "Use path style access", + "examples": [true, false], + "default": true, + "order": 5 + } + } + } + ], + "order": 1 + }, + "format_config": { + "title": "File format", + "type": "object", + "required": ["format"], + "description": "File format of Iceberg storage.", + "properties": { + "format": { + "title": "File storage format", + "type": "string", + "default": "Parquet", + "description": "", + "enum": ["Parquet", "Avro"], + "order": 0 + }, + "flush_batch_size": { + "title": "Data file flushing batch size", + "description": "Iceberg data file flush batch size. Incoming rows write to cache firstly; When cache size reaches this 'batch size', flush into real Iceberg data file.", + "type": "integer", + "default": 10000, + "order": 1 + }, + "auto_compact": { + "title": "Auto compact data files", + "description": "Auto compact data files when stream close", + "type": "boolean", + "default": false, + "order": 2 + }, + "compact_target_file_size_in_mb": { + "title": "Target size of compacted data file", + "description": "Specify the target size of Iceberg data file when performing a compaction action. ", + "type": "integer", + "default": 100, + "order": 3 + } + }, + "order": 2 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["overwrite", "append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "99878c90-0fbd-46d3-9d98-ffde879d17fc", + "name": "AWS Datalake", + "dockerRepository": "airbyte/destination-aws-datalake", + "dockerImageTag": "0.1.3", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/aws-datalake", + "icon": "awsdatalake.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/aws-datalake", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "AWS Datalake Destination Spec", + "type": "object", + "required": [ + "credentials", + "region", + "bucket_name", + "lakeformation_database_name" + ], + "additionalProperties": false, + "properties": { + "aws_account_id": { + "type": "string", + "title": "AWS Account Id", + "description": "target aws account id", + "examples": ["111111111111"], + "order": 1 + }, + "credentials": { + "title": "Authentication mode", + "description": "Choose How to Authenticate to AWS.", + "type": "object", + "oneOf": [ + { + "type": "object", + "title": "IAM Role", + "required": ["role_arn", "credentials_title"], + "properties": { + "credentials_title": { + "type": "string", + "title": "Credentials Title", + "description": "Name of the credentials", + "const": "IAM Role", + "enum": ["IAM Role"], + "default": "IAM Role", + "order": 0 + }, + "role_arn": { + "title": "Target Role Arn", + "type": "string", + "description": "Will assume this role to write data to s3", + "airbyte_secret": false + } + } + }, + { + "type": "object", + "title": "IAM User", + "required": [ + "credentials_title", + "aws_access_key_id", + "aws_secret_access_key" + ], + "properties": { + "credentials_title": { + "type": "string", + "title": "Credentials Title", + "description": "Name of the credentials", + "const": "IAM User", + "enum": ["IAM User"], + "default": "IAM User", + "order": 0 + }, + "aws_access_key_id": { + "title": "Access Key Id", + "type": "string", + "description": "AWS User Access Key Id", + "airbyte_secret": true + }, + "aws_secret_access_key": { + "title": "Secret Access Key", + "type": "string", + "description": "Secret Access Key", + "airbyte_secret": true + } + } + } + ], + "order": 2 + }, + "region": { + "title": "S3 Bucket Region", + "type": "string", + "default": "", + "description": "The region of the S3 bucket. See here for all region codes.", + "enum": [ + "", + "us-east-1", + "us-east-2", + "us-west-1", + "us-west-2", + "af-south-1", + "ap-east-1", + "ap-south-1", + "ap-northeast-1", + "ap-northeast-2", + "ap-northeast-3", + "ap-southeast-1", + "ap-southeast-2", + "ca-central-1", + "cn-north-1", + "cn-northwest-1", + "eu-central-1", + "eu-north-1", + "eu-south-1", + "eu-west-1", + "eu-west-2", + "eu-west-3", + "sa-east-1", + "me-south-1", + "us-gov-east-1", + "us-gov-west-1" + ], + "order": 3 + }, + "bucket_name": { + "title": "S3 Bucket Name", + "type": "string", + "description": "The name of the S3 bucket. Read more here.", + "order": 4 + }, + "bucket_prefix": { + "title": "Target S3 Bucket Prefix", + "type": "string", + "description": "S3 prefix", + "order": 5 + }, + "lakeformation_database_name": { + "title": "Lake Formation Database Name", + "type": "string", + "description": "The default database this destination will use to create tables in per stream. Can be changed per connection by customizing the namespace.", + "order": 6 + }, + "lakeformation_database_default_tag_key": { + "title": "Lake Formation Database Tag Key", + "description": "Add a default tag key to databases created by this destination", + "examples": ["pii_level"], + "type": "string", + "order": 7 + }, + "lakeformation_database_default_tag_values": { + "title": "Lake Formation Database Tag Values", + "description": "Add default values for the `Tag Key` to databases created by this destination. Comma separate for multiple values.", + "examples": ["private,public"], + "type": "string", + "order": 8 + }, + "lakeformation_governed_tables": { + "title": "Lake Formation Governed Tables", + "description": "Whether to create tables as LF governed tables.", + "type": "boolean", + "default": false, + "order": 9 + }, + "format": { + "title": "Output Format *", + "type": "object", + "description": "Format of the data output.", + "oneOf": [ + { + "title": "JSON Lines: Newline-delimited JSON", + "required": ["format_type"], + "properties": { + "format_type": { + "title": "Format Type *", + "type": "string", + "enum": ["JSONL"], + "default": "JSONL" + }, + "compression_codec": { + "title": "Compression Codec (Optional)", + "description": "The compression algorithm used to compress data.", + "type": "string", + "enum": ["UNCOMPRESSED", "GZIP"], + "default": "UNCOMPRESSED" + } + } + }, + { + "title": "Parquet: Columnar Storage", + "required": ["format_type"], + "properties": { + "format_type": { + "title": "Format Type *", + "type": "string", + "enum": ["Parquet"], + "default": "Parquet" + }, + "compression_codec": { + "title": "Compression Codec (Optional)", + "description": "The compression algorithm used to compress data.", + "type": "string", + "enum": ["UNCOMPRESSED", "SNAPPY", "GZIP", "ZSTD"], + "default": "SNAPPY" + } + } + } + ], + "order": 10 + }, + "partitioning": { + "title": "Choose how to partition data", + "description": "Partition data by cursor fields when a cursor field is a date", + "type": "string", + "enum": [ + "NO PARTITIONING", + "DATE", + "YEAR", + "MONTH", + "DAY", + "YEAR/MONTH", + "YEAR/MONTH/DAY" + ], + "default": "NO PARTITIONING", + "order": 11 + }, + "glue_catalog_float_as_decimal": { + "title": "Glue Catalog: Float as Decimal", + "description": "Cast float/double as decimal(38,18). This can help achieve higher accuracy and represent numbers correctly as received from the source.", + "type": "boolean", + "default": false, + "order": 12 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["overwrite", "append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "22f6c74f-5699-40ff-833c-4a879ea40133", + "name": "BigQuery", + "dockerRepository": "airbyte/destination-bigquery", + "dockerImageTag": "1.3.1", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/bigquery", + "icon": "bigquery.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/bigquery", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "BigQuery Destination Spec", + "type": "object", + "required": ["project_id", "dataset_location", "dataset_id"], + "additionalProperties": true, + "properties": { + "project_id": { + "type": "string", + "description": "The GCP project ID for the project containing the target BigQuery dataset. Read more here.", + "title": "Project ID", + "order": 0 + }, + "dataset_location": { + "type": "string", + "description": "The location of the dataset. Warning: Changes made after creation will not be applied. Read more here.", + "title": "Dataset Location", + "order": 1, + "enum": [ + "US", + "EU", + "asia-east1", + "asia-east2", + "asia-northeast1", + "asia-northeast2", + "asia-northeast3", + "asia-south1", + "asia-south2", + "asia-southeast1", + "asia-southeast2", + "australia-southeast1", + "australia-southeast2", + "europe-central1", + "europe-central2", + "europe-north1", + "europe-southwest1", + "europe-west1", + "europe-west2", + "europe-west3", + "europe-west4", + "europe-west6", + "europe-west7", + "europe-west8", + "europe-west9", + "me-west1", + "northamerica-northeast1", + "northamerica-northeast2", + "southamerica-east1", + "southamerica-west1", + "us-central1", + "us-east1", + "us-east2", + "us-east3", + "us-east4", + "us-east5", + "us-west1", + "us-west2", + "us-west3", + "us-west4" + ] + }, + "dataset_id": { + "type": "string", + "description": "The default BigQuery Dataset ID that tables are replicated to if the source does not specify a namespace. Read more here.", + "title": "Default Dataset ID", + "order": 2 + }, + "loading_method": { + "type": "object", + "title": "Loading Method", + "description": "Loading method used to send select the way data will be uploaded to BigQuery.
    Standard Inserts - Direct uploading using SQL INSERT statements. This method is extremely inefficient and provided only for quick testing. In almost all cases, you should use staging.
    GCS Staging - Writes large batches of records to a file, uploads the file to GCS, then uses COPY INTO table to upload the file. Recommended for most workloads for better speed and scalability. Read more about GCS Staging here.", + "order": 3, + "oneOf": [ + { + "title": "Standard Inserts", + "required": ["method"], + "properties": { + "method": { + "type": "string", + "const": "Standard" + } + } + }, + { + "title": "GCS Staging", + "required": [ + "method", + "gcs_bucket_name", + "gcs_bucket_path", + "credential" + ], + "properties": { + "method": { + "type": "string", + "const": "GCS Staging", + "order": 0 + }, + "credential": { + "title": "Credential", + "description": "An HMAC key is a type of credential and can be associated with a service account or a user account in Cloud Storage. Read more here.", + "type": "object", + "order": 1, + "oneOf": [ + { + "title": "HMAC key", + "required": [ + "credential_type", + "hmac_key_access_id", + "hmac_key_secret" + ], + "properties": { + "credential_type": { + "type": "string", + "const": "HMAC_KEY", + "order": 0 + }, + "hmac_key_access_id": { + "type": "string", + "description": "HMAC key access ID. When linked to a service account, this ID is 61 characters long; when linked to a user account, it is 24 characters long.", + "title": "HMAC Key Access ID", + "airbyte_secret": true, + "examples": ["1234567890abcdefghij1234"], + "order": 1 + }, + "hmac_key_secret": { + "type": "string", + "description": "The corresponding secret for the access ID. It is a 40-character base-64 encoded string.", + "title": "HMAC Key Secret", + "airbyte_secret": true, + "examples": [ + "1234567890abcdefghij1234567890ABCDEFGHIJ" + ], + "order": 2 + } + } + } + ] + }, + "gcs_bucket_name": { + "title": "GCS Bucket Name", + "type": "string", + "description": "The name of the GCS bucket. Read more here.", + "examples": ["airbyte_sync"], + "order": 2 + }, + "gcs_bucket_path": { + "title": "GCS Bucket Path", + "description": "Directory under the GCS bucket where data will be written.", + "type": "string", + "examples": ["data_sync/test"], + "order": 3 + }, + "keep_files_in_gcs-bucket": { + "type": "string", + "description": "This upload method is supposed to temporary store records in GCS bucket. By this select you can chose if these records should be removed from GCS when migration has finished. The default \"Delete all tmp files from GCS\" value is used if not set explicitly.", + "title": "GCS Tmp Files Afterward Processing", + "default": "Delete all tmp files from GCS", + "enum": [ + "Delete all tmp files from GCS", + "Keep all tmp files in GCS" + ], + "order": 4 + }, + "file_buffer_count": { + "title": "File Buffer Count", + "type": "integer", + "minimum": 10, + "maximum": 50, + "default": 10, + "description": "Number of file buffers allocated for writing data. Increasing this number is beneficial for connections using Change Data Capture (CDC) and up to the number of streams within a connection. Increasing the number of file buffers past the maximum number of streams has deteriorating effects", + "examples": ["10"], + "order": 5 + } + } + } + ] + }, + "credentials_json": { + "type": "string", + "description": "The contents of the JSON service account key. Check out the docs if you need help generating this key. Default credentials will be used if this field is left empty.", + "title": "Service Account Key JSON (Required for cloud, optional for open-source)", + "airbyte_secret": true, + "order": 4, + "always_show": true + }, + "transformation_priority": { + "type": "string", + "description": "Interactive run type means that the query is executed as soon as possible, and these queries count towards concurrent rate limit and daily limit. Read more about interactive run type here. Batch queries are queued and started as soon as idle resources are available in the BigQuery shared resource pool, which usually occurs within a few minutes. Batch queries don’t count towards your concurrent rate limit. Read more about batch queries here. The default \"interactive\" value is used if not set explicitly.", + "title": "Transformation Query Run Type", + "default": "interactive", + "enum": ["interactive", "batch"], + "order": 5 + }, + "big_query_client_buffer_size_mb": { + "title": "Google BigQuery Client Chunk Size", + "description": "Google BigQuery client's chunk (buffer) size (MIN=1, MAX = 15) for each table. The size that will be written by a single RPC. Written data will be buffered and only flushed upon reaching this size or closing the channel. The default 15MB value is used if not set explicitly. Read more here.", + "type": "integer", + "minimum": 1, + "maximum": 15, + "default": 15, + "examples": ["15"], + "order": 6 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": true, + "supportsDBT": true, + "supported_destination_sync_modes": [ + "overwrite", + "append", + "append_dedup" + ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "resourceRequirements": { + "jobSpecific": [ + { + "jobType": "sync", + "resourceRequirements": { + "memory_request": "1Gi", + "memory_limit": "1Gi" + } + } + ] + }, + "normalizationConfig": { + "normalizationRepository": "airbyte/normalization", + "normalizationTag": "0.4.0", + "normalizationIntegrationType": "bigquery" + }, + "supportsDbt": true + }, + { + "destinationDefinitionId": "079d5540-f236-4294-ba7c-ade8fd918496", + "name": "BigQuery (denormalized typed struct)", + "dockerRepository": "airbyte/destination-bigquery-denormalized", + "dockerImageTag": "1.3.1", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/bigquery", + "icon": "bigquery.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/bigquery", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "BigQuery Denormalized Typed Struct Destination Spec", + "type": "object", + "required": ["project_id", "dataset_id"], + "additionalProperties": true, + "properties": { + "project_id": { + "type": "string", + "description": "The GCP project ID for the project containing the target BigQuery dataset. Read more here.", + "title": "Project ID", + "order": 0 + }, + "dataset_id": { + "type": "string", + "description": "The default BigQuery Dataset ID that tables are replicated to if the source does not specify a namespace. Read more here.", + "title": "Default Dataset ID", + "order": 1 + }, + "loading_method": { + "type": "object", + "title": "Loading Method", + "description": "Loading method used to send select the way data will be uploaded to BigQuery.
    Standard Inserts - Direct uploading using SQL INSERT statements. This method is extremely inefficient and provided only for quick testing. In almost all cases, you should use staging.
    GCS Staging - Writes large batches of records to a file, uploads the file to GCS, then uses COPY INTO table to upload the file. Recommended for most workloads for better speed and scalability. Read more about GCS Staging here.", + "order": 2, + "oneOf": [ + { + "title": "Standard Inserts", + "required": ["method"], + "properties": { + "method": { + "type": "string", + "const": "Standard" + } + } + }, + { + "title": "GCS Staging", + "type": "object", + "required": [ + "method", + "gcs_bucket_name", + "gcs_bucket_path", + "credential" + ], + "properties": { + "method": { + "type": "string", + "const": "GCS Staging", + "order": 0 + }, + "credential": { + "title": "Credential", + "description": "An HMAC key is a type of credential and can be associated with a service account or a user account in Cloud Storage. Read more here.", + "type": "object", + "order": 1, + "oneOf": [ + { + "title": "HMAC key", + "order": 0, + "required": [ + "credential_type", + "hmac_key_access_id", + "hmac_key_secret" + ], + "properties": { + "credential_type": { + "type": "string", + "const": "HMAC_KEY", + "order": 0 + }, + "hmac_key_access_id": { + "type": "string", + "description": "HMAC key access ID. When linked to a service account, this ID is 61 characters long; when linked to a user account, it is 24 characters long.", + "title": "HMAC Key Access ID", + "airbyte_secret": true, + "examples": ["1234567890abcdefghij1234"], + "order": 1 + }, + "hmac_key_secret": { + "type": "string", + "description": "The corresponding secret for the access ID. It is a 40-character base-64 encoded string.", + "title": "HMAC Key Secret", + "airbyte_secret": true, + "examples": [ + "1234567890abcdefghij1234567890ABCDEFGHIJ" + ], + "order": 2 + } + } + } + ] + }, + "gcs_bucket_name": { + "title": "GCS Bucket Name", + "type": "string", + "description": "The name of the GCS bucket. Read more here.", + "examples": ["airbyte_sync"], + "order": 2 + }, + "gcs_bucket_path": { + "title": "GCS Bucket Path", + "description": "Directory under the GCS bucket where data will be written. Read more here.", + "type": "string", + "examples": ["data_sync/test"], + "order": 3 + }, + "keep_files_in_gcs-bucket": { + "type": "string", + "description": "This upload method is supposed to temporary store records in GCS bucket. By this select you can chose if these records should be removed from GCS when migration has finished. The default \"Delete all tmp files from GCS\" value is used if not set explicitly.", + "title": "GCS Tmp Files Afterward Processing", + "default": "Delete all tmp files from GCS", + "enum": [ + "Delete all tmp files from GCS", + "Keep all tmp files in GCS" + ], + "order": 4 + }, + "file_buffer_count": { + "title": "File Buffer Count", + "type": "integer", + "minimum": 10, + "maximum": 50, + "default": 10, + "description": "Number of file buffers allocated for writing data. Increasing this number is beneficial for connections using Change Data Capture (CDC) and up to the number of streams within a connection. Increasing the number of file buffers past the maximum number of streams has deteriorating effects", + "examples": ["10"], + "order": 5 + } + } + } + ] + }, + "credentials_json": { + "type": "string", + "description": "The contents of the JSON service account key. Check out the docs if you need help generating this key. Default credentials will be used if this field is left empty.", + "title": "Service Account Key JSON (Required for cloud, optional for open-source)", + "airbyte_secret": true, + "order": 3, + "always_show": true + }, + "dataset_location": { + "type": "string", + "description": "The location of the dataset. Warning: Changes made after creation will not be applied. The default \"US\" value is used if not set explicitly. Read more here.", + "title": "Dataset Location", + "default": "US", + "order": 4, + "enum": [ + "US", + "EU", + "asia-east1", + "asia-east2", + "asia-northeast1", + "asia-northeast2", + "asia-northeast3", + "asia-south1", + "asia-south2", + "asia-southeast1", + "asia-southeast2", + "australia-southeast1", + "australia-southeast2", + "europe-central1", + "europe-central2", + "europe-north1", + "europe-southwest1", + "europe-west1", + "europe-west2", + "europe-west3", + "europe-west4", + "europe-west6", + "europe-west7", + "europe-west8", + "europe-west9", + "me-west1", + "northamerica-northeast1", + "northamerica-northeast2", + "southamerica-east1", + "southamerica-west1", + "us-central1", + "us-east1", + "us-east2", + "us-east3", + "us-east4", + "us-east5", + "us-west1", + "us-west2", + "us-west3", + "us-west4" + ] + }, + "big_query_client_buffer_size_mb": { + "title": "Google BigQuery Client Chunk Size", + "description": "Google BigQuery client's chunk (buffer) size (MIN=1, MAX = 15) for each table. The size that will be written by a single RPC. Written data will be buffered and only flushed upon reaching this size or closing the channel. The default 15MB value is used if not set explicitly. Read more here.", + "type": "integer", + "minimum": 1, + "maximum": 15, + "default": 15, + "examples": ["15"], + "order": 5 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["overwrite", "append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "resourceRequirements": { + "jobSpecific": [ + { + "jobType": "sync", + "resourceRequirements": { + "memory_request": "1Gi", + "memory_limit": "1Gi" + } + } + ] + } + }, + { + "destinationDefinitionId": "707456df-6f4f-4ced-b5c6-03f73bcad1c5", + "name": "Cassandra", + "dockerRepository": "airbyte/destination-cassandra", + "dockerImageTag": "0.1.4", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/cassandra", + "icon": "cassandra.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/cassandra", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Cassandra Destination Spec", + "type": "object", + "required": ["keyspace", "username", "password", "address", "port"], + "additionalProperties": true, + "properties": { + "keyspace": { + "title": "Keyspace", + "description": "Default Cassandra keyspace to create data in.", + "type": "string", + "order": 0 + }, + "username": { + "title": "Username", + "description": "Username to use to access Cassandra.", + "type": "string", + "order": 1 + }, + "password": { + "title": "Password", + "description": "Password associated with Cassandra.", + "type": "string", + "airbyte_secret": true, + "order": 2 + }, + "address": { + "title": "Address", + "description": "Address to connect to.", + "type": "string", + "examples": ["localhost,127.0.0.1"], + "order": 3 + }, + "port": { + "title": "Port", + "description": "Port of Cassandra.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 9042, + "order": 4 + }, + "datacenter": { + "title": "Datacenter", + "description": "Datacenter of the cassandra cluster.", + "type": "string", + "default": "datacenter1", + "order": 5 + }, + "replication": { + "title": "Replication factor", + "type": "integer", + "description": "Indicates to how many nodes the data should be replicated to.", + "default": 1, + "order": 6 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["overwrite", "append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "e088acb6-9780-4568-880c-54c2dd7f431b", + "name": "Cumul.io", + "dockerRepository": "airbyte/destination-cumulio", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/cumulio", + "icon": "cumulio.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/cumulio", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Destination Cumulio", + "type": "object", + "required": ["api_host", "api_key", "api_token"], + "additionalProperties": true, + "properties": { + "api_host": { + "title": "Cumul.io API Host URL", + "description": "URL of the Cumul.io API (e.g. 'https://api.cumul.io', 'https://api.us.cumul.io', or VPC-specific API url). Defaults to 'https://api.cumul.io'.", + "default": "https://api.cumul.io", + "type": "string", + "order": 0 + }, + "api_key": { + "title": "Cumul.io API Key", + "description": "An API key generated in Cumul.io's platform (can be generated here: https://app.cumul.io/start/profile/integration).", + "type": "string", + "airbyte_secret": true, + "order": 1 + }, + "api_token": { + "title": "Cumul.io API Token", + "description": "The corresponding API token generated in Cumul.io's platform (can be generated here: https://app.cumul.io/start/profile/integration).", + "type": "string", + "airbyte_secret": true, + "order": 2 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["overwrite", "append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "81740ce8-d764-4ea7-94df-16bb41de36ae", + "name": "Chargify (Keen)", + "dockerRepository": "airbyte/destination-keen", + "dockerImageTag": "0.2.4", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/keen", + "icon": "chargify.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/keen", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Keen Spec", + "type": "object", + "required": ["project_id", "api_key"], + "additionalProperties": false, + "properties": { + "project_id": { + "description": "To get Keen Project ID, navigate to the Access tab from the left-hand, side panel and check the Project Details section.", + "title": "Project ID", + "type": "string", + "examples": ["58b4acc22ba938934e888322e"] + }, + "api_key": { + "title": "API Key", + "description": "To get Keen Master API Key, navigate to the Access tab from the left-hand, side panel and check the Project Details section.", + "type": "string", + "examples": ["ABCDEFGHIJKLMNOPRSTUWXYZ"], + "airbyte_secret": true + }, + "infer_timestamp": { + "title": "Infer Timestamp", + "description": "Allow connector to guess keen.timestamp value based on the streamed data.", + "type": "boolean", + "default": true + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["overwrite", "append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "ce0d828e-1dc4-496c-b122-2da42e637e48", + "name": "Clickhouse", + "dockerRepository": "airbyte/destination-clickhouse", + "dockerImageTag": "0.2.3", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/clickhouse", + "icon": "clickhouse.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/clickhouse", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "ClickHouse Destination Spec", + "type": "object", + "required": ["host", "port", "database", "username"], + "additionalProperties": true, + "properties": { + "host": { + "title": "Host", + "description": "Hostname of the database.", + "type": "string", + "order": 0 + }, + "port": { + "title": "Port", + "description": "HTTP port of the database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 8123, + "examples": ["8123"], + "order": 1 + }, + "database": { + "title": "DB Name", + "description": "Name of the database.", + "type": "string", + "order": 2 + }, + "username": { + "title": "User", + "description": "Username to use to access the database.", + "type": "string", + "order": 3 + }, + "password": { + "title": "Password", + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 4 + }, + "jdbc_url_params": { + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", + "title": "JDBC URL Params", + "type": "string", + "order": 5 + }, + "ssl": { + "title": "SSL Connection", + "description": "Encrypt data using SSL.", + "type": "boolean", + "default": false, + "order": 6 + }, + "tunnel_method": { + "type": "object", + "title": "SSH Tunnel Method", + "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", + "oneOf": [ + { + "title": "No Tunnel", + "required": ["tunnel_method"], + "properties": { + "tunnel_method": { + "description": "No ssh tunnel needed to connect to database", + "type": "string", + "const": "NO_TUNNEL", + "order": 0 + } + } + }, + { + "title": "SSH Key Authentication", + "required": [ + "tunnel_method", + "tunnel_host", + "tunnel_port", + "tunnel_user", + "ssh_key" + ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": ["22"], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host.", + "type": "string", + "order": 3 + }, + "ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + }, + { + "title": "Password Authentication", + "required": [ + "tunnel_method", + "tunnel_host", + "tunnel_port", + "tunnel_user", + "tunnel_user_password" + ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": ["22"], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host", + "type": "string", + "order": 3 + }, + "tunnel_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 4 + } + } + } + ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": true, + "supportsDBT": false, + "supported_destination_sync_modes": [ + "overwrite", + "append", + "append_dedup" + ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "normalizationConfig": { + "normalizationRepository": "airbyte/normalization-clickhouse", + "normalizationTag": "0.4.0", + "normalizationIntegrationType": "clickhouse" + }, + "supportsDbt": false + }, + { + "destinationDefinitionId": "0fb07be9-7c3b-4336-850d-5efc006152ee", + "name": "Cloudflare R2", + "dockerRepository": "airbyte/destination-r2", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/r2", + "icon": "cloudflare-r2.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/r2", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "R2 Destination Spec", + "type": "object", + "required": [ + "account_id", + "access_key_id", + "secret_access_key", + "s3_bucket_name", + "s3_bucket_path", + "format" + ], + "properties": { + "account_id": { + "type": "string", + "description": "Cloudflare account ID", + "title": "Cloudflare account ID", + "examples": ["12345678aa1a1a11111aaa1234567abc"], + "order": 0 + }, + "access_key_id": { + "type": "string", + "description": "The access key ID to access the R2 bucket. Airbyte requires Read and Write permissions to the given bucket. Read more here.", + "title": "R2 Key ID", + "airbyte_secret": true, + "examples": ["A012345678910EXAMPLE"], + "order": 1 + }, + "secret_access_key": { + "type": "string", + "description": "The corresponding secret to the access key ID. Read more here", + "title": "R2 Access Key", + "airbyte_secret": true, + "examples": ["a012345678910ABCDEFGHAbCdEfGhEXAMPLEKEY"], + "order": 2 + }, + "s3_bucket_name": { + "title": "R2 Bucket Name", + "type": "string", + "description": "The name of the R2 bucket. Read more here.", + "examples": ["r2_sync"], + "order": 3 + }, + "s3_bucket_path": { + "title": "R2 Bucket Path", + "description": "Directory under the R2 bucket where data will be written.", + "type": "string", + "examples": ["data_sync/test"], + "order": 4 + }, + "format": { + "title": "Output Format", + "type": "object", + "description": "Format of the data output. See here for more details", + "oneOf": [ + { + "title": "Avro: Apache Avro", + "required": ["format_type", "compression_codec"], + "properties": { + "format_type": { + "title": "Format Type", + "type": "string", + "enum": ["Avro"], + "default": "Avro", + "order": 0 + }, + "compression_codec": { + "title": "Compression Codec", + "description": "The compression algorithm used to compress data. Default to no compression.", + "type": "object", + "oneOf": [ + { + "title": "No Compression", + "required": ["codec"], + "properties": { + "codec": { + "type": "string", + "enum": ["no compression"], + "default": "no compression" + } + } + }, + { + "title": "Deflate", + "required": ["codec", "compression_level"], + "properties": { + "codec": { + "type": "string", + "enum": ["Deflate"], + "default": "Deflate" + }, + "compression_level": { + "title": "Deflate Level", + "description": "0: no compression & fastest, 9: best compression & slowest.", + "type": "integer", + "default": 0, + "minimum": 0, + "maximum": 9 + } + } + }, + { + "title": "bzip2", + "required": ["codec"], + "properties": { + "codec": { + "type": "string", + "enum": ["bzip2"], + "default": "bzip2" + } + } + }, + { + "title": "xz", + "required": ["codec", "compression_level"], + "properties": { + "codec": { + "type": "string", + "enum": ["xz"], + "default": "xz" + }, + "compression_level": { + "title": "Compression Level", + "description": "See here for details.", + "type": "integer", + "default": 6, + "minimum": 0, + "maximum": 9 + } + } + }, + { + "title": "zstandard", + "required": ["codec", "compression_level"], + "properties": { + "codec": { + "type": "string", + "enum": ["zstandard"], + "default": "zstandard" + }, + "compression_level": { + "title": "Compression Level", + "description": "Negative levels are 'fast' modes akin to lz4 or snappy, levels above 9 are generally for archival purposes, and levels above 18 use a lot of memory.", + "type": "integer", + "default": 3, + "minimum": -5, + "maximum": 22 + }, + "include_checksum": { + "title": "Include Checksum", + "description": "If true, include a checksum with each data block.", + "type": "boolean", + "default": false + } + } + }, + { + "title": "snappy", + "required": ["codec"], + "properties": { + "codec": { + "type": "string", + "enum": ["snappy"], + "default": "snappy" + } + } + } + ], + "order": 1 + } + } + }, + { + "title": "CSV: Comma-Separated Values", + "required": ["format_type", "flattening"], + "properties": { + "format_type": { + "title": "Format Type", + "type": "string", + "enum": ["CSV"], + "default": "CSV" + }, + "flattening": { + "type": "string", + "title": "Normalization (Flattening)", + "description": "Whether the input json data should be normalized (flattened) in the output CSV. Please refer to docs for details.", + "default": "No flattening", + "enum": ["No flattening", "Root level flattening"] + }, + "compression": { + "title": "Compression", + "type": "object", + "description": "Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \".csv.gz\").", + "oneOf": [ + { + "title": "No Compression", + "requires": ["compression_type"], + "properties": { + "compression_type": { + "type": "string", + "enum": ["No Compression"], + "default": "No Compression" + } + } + }, + { + "title": "GZIP", + "requires": ["compression_type"], + "properties": { + "compression_type": { + "type": "string", + "enum": ["GZIP"], + "default": "GZIP" + } + } + } + ] + } + } + }, + { + "title": "JSON Lines: Newline-delimited JSON", + "required": ["format_type"], + "properties": { + "format_type": { + "title": "Format Type", + "type": "string", + "enum": ["JSONL"], + "default": "JSONL" + }, + "compression": { + "title": "Compression", + "type": "object", + "description": "Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \".jsonl.gz\").", + "oneOf": [ + { + "title": "No Compression", + "requires": "compression_type", + "properties": { + "compression_type": { + "type": "string", + "enum": ["No Compression"], + "default": "No Compression" + } + } + }, + { + "title": "GZIP", + "requires": "compression_type", + "properties": { + "compression_type": { + "type": "string", + "enum": ["GZIP"], + "default": "GZIP" + } + } + } + ] + } + } + } + ], + "order": 5 + }, + "s3_path_format": { + "title": "R2 Path Format", + "description": "Format string on how data will be organized inside the R2 bucket directory. Read more here", + "type": "string", + "examples": [ + "${NAMESPACE}/${STREAM_NAME}/${YEAR}_${MONTH}_${DAY}_${EPOCH}_" + ], + "order": 6 + }, + "file_name_pattern": { + "type": "string", + "description": "The pattern allows you to set the file-name format for the R2 staging file(s)", + "title": "R2 Filename pattern", + "examples": [ + "{date}", + "{date:yyyy_MM}", + "{timestamp}", + "{part_number}", + "{sync_id}" + ], + "order": 7 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["overwrite", "append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "3eb4d99c-11fa-4561-a259-fc88e0c2f8f4", + "name": "Convex", + "dockerRepository": "airbyte/destination-convex", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.io/integrations/destinations/convex", + "icon": "convex.svg", + "spec": { + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Convex", + "type": "object", + "required": ["deployment_url", "access_key"], + "properties": { + "deployment_url": { + "type": "string", + "title": "Deployment Url", + "examples": [ + "https://murky-swan-635.convex.cloud", + "https://cluttered-owl-337.convex.cloud" + ] + }, + "access_key": { + "type": "string", + "title": "Access Key", + "description": "API access key used to retrieve data from Convex.", + "airbyte_secret": true + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ + "overwrite", + "append", + "append_dedup" + ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "4528e960-6f7b-4412-8555-7e0097e1da17", + "name": "Starburst Galaxy", + "dockerRepository": "airbyte/destination-starburst-galaxy", + "dockerImageTag": "0.0.1", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/starburst-galaxy", + "icon": "starburst-galaxy.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/starburst-galaxy", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Starburst Galaxy Destination Spec", + "type": "object", + "required": [ + "accept_terms", + "server_hostname", + "username", + "password", + "catalog", + "staging_object_store" + ], + "properties": { + "accept_terms": { + "title": "Agree to the Starburst Galaxy terms & conditions", + "type": "boolean", + "description": "You must agree to the Starburst Galaxy terms & conditions to use this connector.", + "default": false, + "order": 1 + }, + "server_hostname": { + "title": "Hostname", + "type": "string", + "description": "Starburst Galaxy cluster hostname.", + "examples": ["abc-12345678-wxyz.trino.galaxy-demo.io"], + "order": 2 + }, + "port": { + "title": "Port", + "type": "string", + "description": "Starburst Galaxy cluster port.", + "default": "443", + "examples": ["443"], + "order": 3 + }, + "username": { + "title": "User", + "type": "string", + "description": "Starburst Galaxy user.", + "examples": ["user@example.com"], + "order": 4 + }, + "password": { + "title": "Password", + "type": "string", + "description": "Starburst Galaxy password for the specified user.", + "examples": ["password"], + "airbyte_secret": true, + "order": 5 + }, + "catalog": { + "title": "Amazon S3 catalog", + "type": "string", + "description": "Name of the Starburst Galaxy Amazon S3 catalog.", + "examples": ["sample_s3_catalog"], + "order": 6 + }, + "catalog_schema": { + "title": "Amazon S3 catalog schema", + "type": "string", + "description": "The default Starburst Galaxy Amazon S3 catalog schema where tables are written to if the source does not specify a namespace. Defaults to \"public\".", + "default": "public", + "examples": ["public"], + "order": 7 + }, + "staging_object_store": { + "title": "Staging object store", + "type": "object", + "description": "Temporary storage on which temporary Iceberg table is created.", + "oneOf": [ + { + "title": "Amazon S3", + "required": [ + "object_store_type", + "s3_bucket_name", + "s3_bucket_path", + "s3_bucket_region", + "s3_access_key_id", + "s3_secret_access_key" + ], + "properties": { + "object_store_type": { + "type": "string", + "enum": ["S3"], + "default": "S3", + "order": 1 + }, + "s3_bucket_name": { + "title": "S3 bucket name", + "type": "string", + "description": "Name of the S3 bucket", + "examples": ["airbyte_staging"], + "order": 1 + }, + "s3_bucket_path": { + "title": "S3 bucket path", + "type": "string", + "description": "Directory in the S3 bucket where staging data is stored.", + "examples": ["temp_airbyte__sync/test"], + "order": 2 + }, + "s3_bucket_region": { + "title": "S3 bucket region", + "type": "string", + "default": "us-east-1", + "description": "The region of the S3 bucket.", + "enum": [ + "ap-northeast-1", + "ap-southeast-1", + "ap-southeast-2", + "ca-central-1", + "eu-central-1", + "eu-west-1", + "eu-west-2", + "eu-west-3", + "us-east-1", + "us-east-2", + "us-west-1", + "us-west-2" + ], + "order": 3 + }, + "s3_access_key_id": { + "title": "Access key", + "type": "string", + "description": "Access key with access to the bucket. Airbyte requires read and write permissions to a given bucket.", + "examples": ["A012345678910EXAMPLE"], + "airbyte_secret": true, + "order": 4 + }, + "s3_secret_access_key": { + "title": "Secret key", + "type": "string", + "description": "Secret key used with the specified access key.", + "examples": ["a012345678910ABCDEFGH/AbCdEfGhEXAMPLEKEY"], + "airbyte_secret": true, + "order": 5 + } + } + } + ], + "order": 8 + }, + "purge_staging_table": { + "title": "Purge staging Iceberg table", + "type": "boolean", + "description": "Defaults to 'true'. Switch to 'false' for debugging purposes.", + "default": true, + "order": 9 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["overwrite", "append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "072d5540-f236-4294-ba7c-ade8fd918496", + "name": "Databricks Lakehouse", + "dockerRepository": "airbyte/destination-databricks", + "dockerImageTag": "1.0.2", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/databricks", + "icon": "databricks.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/databricks", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Databricks Lakehouse Destination Spec", + "type": "object", + "required": [ + "accept_terms", + "databricks_server_hostname", + "databricks_http_path", + "databricks_personal_access_token", + "data_source" + ], + "properties": { + "accept_terms": { + "title": "Agree to the Databricks JDBC Driver Terms & Conditions", + "type": "boolean", + "description": "You must agree to the Databricks JDBC Driver Terms & Conditions to use this connector.", + "default": false, + "order": 1 + }, + "databricks_server_hostname": { + "title": "Server Hostname", + "type": "string", + "description": "Databricks Cluster Server Hostname.", + "examples": ["abc-12345678-wxyz.cloud.databricks.com"], + "order": 2 + }, + "databricks_http_path": { + "title": "HTTP Path", + "type": "string", + "description": "Databricks Cluster HTTP Path.", + "examples": ["sql/protocolvx/o/1234567489/0000-1111111-abcd90"], + "order": 3 + }, + "databricks_port": { + "title": "Port", + "type": "string", + "description": "Databricks Cluster Port.", + "default": "443", + "examples": ["443"], + "order": 4 + }, + "databricks_personal_access_token": { + "title": "Access Token", + "type": "string", + "description": "Databricks Personal Access Token for making authenticated requests.", + "examples": ["dapi0123456789abcdefghij0123456789AB"], + "airbyte_secret": true, + "order": 5 + }, + "database": { + "title": "Databricks catalog", + "description": "The name of the catalog. If not specified otherwise, the \"hive_metastore\" will be used.", + "type": "string", + "order": 6 + }, + "schema": { + "title": "Default Schema", + "description": "The default schema tables are written. If not specified otherwise, the \"default\" will be used.", + "type": "string", + "examples": ["default"], + "default": "default", + "order": 7 + }, + "data_source": { + "title": "Data Source", + "type": "object", + "description": "Storage on which the delta lake is built.", + "default": "MANAGED_TABLES_STORAGE", + "order": 8, + "oneOf": [ + { + "title": "[Recommended] Managed tables", + "required": ["data_source_type"], + "properties": { + "data_source_type": { + "type": "string", + "const": "MANAGED_TABLES_STORAGE", + "order": 0 + } + } + }, + { + "title": "Amazon S3", + "required": [ + "data_source_type", + "s3_bucket_name", + "s3_bucket_path", + "s3_bucket_region", + "s3_access_key_id", + "s3_secret_access_key" + ], + "properties": { + "data_source_type": { + "type": "string", + "const": "S3_STORAGE", + "order": 1 + }, + "s3_bucket_name": { + "title": "S3 Bucket Name", + "type": "string", + "description": "The name of the S3 bucket to use for intermittent staging of the data.", + "examples": ["airbyte.staging"], + "order": 2 + }, + "s3_bucket_path": { + "title": "S3 Bucket Path", + "type": "string", + "description": "The directory under the S3 bucket where data will be written.", + "examples": ["data_sync/test"], + "order": 3 + }, + "s3_bucket_region": { + "title": "S3 Bucket Region", + "type": "string", + "default": "", + "description": "The region of the S3 staging bucket to use if utilising a copy strategy.", + "enum": [ + "", + "us-east-1", + "us-east-2", + "us-west-1", + "us-west-2", + "af-south-1", + "ap-east-1", + "ap-south-1", + "ap-northeast-1", + "ap-northeast-2", + "ap-northeast-3", + "ap-southeast-1", + "ap-southeast-2", + "ca-central-1", + "cn-north-1", + "cn-northwest-1", + "eu-central-1", + "eu-north-1", + "eu-south-1", + "eu-west-1", + "eu-west-2", + "eu-west-3", + "sa-east-1", + "me-south-1", + "us-gov-east-1", + "us-gov-west-1" + ], + "order": 4 + }, + "s3_access_key_id": { + "type": "string", + "description": "The Access Key Id granting allow one to access the above S3 staging bucket. Airbyte requires Read and Write permissions to the given bucket.", + "title": "S3 Access Key ID", + "examples": ["A012345678910EXAMPLE"], + "airbyte_secret": true, + "order": 5 + }, + "s3_secret_access_key": { + "title": "S3 Secret Access Key", + "type": "string", + "description": "The corresponding secret to the above access key id.", + "examples": ["a012345678910ABCDEFGH/AbCdEfGhEXAMPLEKEY"], + "airbyte_secret": true, + "order": 6 + }, + "file_name_pattern": { + "type": "string", + "description": "The pattern allows you to set the file-name format for the S3 staging file(s)", + "title": "S3 Filename pattern", + "examples": [ + "{date}", + "{date:yyyy_MM}", + "{timestamp}", + "{part_number}", + "{sync_id}" + ], + "order": 7 + } + } + }, + { + "title": "Azure Blob Storage", + "required": [ + "data_source_type", + "azure_blob_storage_account_name", + "azure_blob_storage_container_name", + "azure_blob_storage_sas_token" + ], + "properties": { + "data_source_type": { + "type": "string", + "const": "AZURE_BLOB_STORAGE", + "order": 0 + }, + "azure_blob_storage_endpoint_domain_name": { + "title": "Endpoint Domain Name", + "type": "string", + "default": "blob.core.windows.net", + "description": "This is Azure Blob Storage endpoint domain name. Leave default value (or leave it empty if run container from command line) to use Microsoft native from example.", + "examples": ["blob.core.windows.net"], + "order": 1 + }, + "azure_blob_storage_account_name": { + "title": "Azure Blob Storage Account Name", + "type": "string", + "description": "The account's name of the Azure Blob Storage.", + "examples": ["airbyte5storage"], + "order": 2 + }, + "azure_blob_storage_container_name": { + "title": "Azure Blob Storage Container Name", + "type": "string", + "description": "The name of the Azure blob storage container.", + "examples": ["airbytetestcontainername"], + "order": 3 + }, + "azure_blob_storage_sas_token": { + "title": "SAS Token", + "type": "string", + "airbyte_secret": true, + "description": "Shared access signature (SAS) token to grant limited access to objects in your storage account.", + "examples": [ + "?sv=2016-05-31&ss=b&srt=sco&sp=rwdl&se=2018-06-27T10:05:50Z&st=2017-06-27T02:05:50Z&spr=https,http&sig=bgqQwoXwxzuD2GJfagRg7VOS8hzNr3QLT7rhS8OFRLQ%3D" + ], + "order": 4 + } + } + } + ] + }, + "purge_staging_data": { + "title": "Purge Staging Files and Tables", + "type": "boolean", + "description": "Default to 'true'. Switch it to 'false' for debugging purpose.", + "default": true, + "order": 9 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["overwrite", "append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "8ccd8909-4e99-4141-b48d-4984b70b2d89", + "name": "DynamoDB", + "dockerRepository": "airbyte/destination-dynamodb", + "dockerImageTag": "0.1.7", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/dynamodb", + "icon": "dynamodb.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/dynamodb", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "DynamoDB Destination Spec", + "type": "object", + "required": [ + "dynamodb_table_name_prefix", + "dynamodb_region", + "access_key_id", + "secret_access_key" + ], + "additionalProperties": false, + "properties": { + "dynamodb_endpoint": { + "title": "Endpoint", + "type": "string", + "default": "", + "description": "This is your DynamoDB endpoint url.(if you are working with AWS DynamoDB, just leave empty).", + "examples": ["http://localhost:9000"] + }, + "dynamodb_table_name_prefix": { + "title": "Table name prefix", + "type": "string", + "description": "The prefix to use when naming DynamoDB tables.", + "examples": ["airbyte_sync"] + }, + "dynamodb_region": { + "title": "DynamoDB Region", + "type": "string", + "default": "", + "description": "The region of the DynamoDB.", + "enum": [ + "", + "us-east-1", + "us-east-2", + "us-west-1", + "us-west-2", + "af-south-1", + "ap-east-1", + "ap-south-1", + "ap-northeast-1", + "ap-northeast-2", + "ap-northeast-3", + "ap-southeast-1", + "ap-southeast-2", + "ca-central-1", + "cn-north-1", + "cn-northwest-1", + "eu-central-1", + "eu-north-1", + "eu-south-1", + "eu-west-1", + "eu-west-2", + "eu-west-3", + "sa-east-1", + "me-south-1", + "us-gov-east-1", + "us-gov-west-1" + ] + }, + "access_key_id": { + "type": "string", + "description": "The access key id to access the DynamoDB. Airbyte requires Read and Write permissions to the DynamoDB.", + "title": "DynamoDB Key Id", + "airbyte_secret": true, + "examples": ["A012345678910EXAMPLE"] + }, + "secret_access_key": { + "type": "string", + "description": "The corresponding secret to the access key id.", + "title": "DynamoDB Access Key", + "airbyte_secret": true, + "examples": ["a012345678910ABCDEFGH/AbCdEfGhEXAMPLEKEY"] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["overwrite", "append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "2eb65e87-983a-4fd7-b3e3-9d9dc6eb8537", + "name": "E2E Testing", + "dockerRepository": "airbyte/destination-e2e-test", + "dockerImageTag": "0.2.4", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/e2e-test", + "icon": "airbyte.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/e2e-test", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "E2E Test Destination Spec", + "type": "object", + "oneOf": [ + { + "title": "Logging", + "required": ["type", "logging_config"], + "properties": { + "type": { + "type": "string", + "const": "LOGGING", + "default": "LOGGING" + }, + "logging_config": { + "title": "Logging Configuration", + "type": "object", + "description": "Configurate how the messages are logged.", + "oneOf": [ + { + "title": "First N Entries", + "description": "Log first N entries per stream.", + "type": "object", + "required": ["logging_type", "max_entry_count"], + "properties": { + "logging_type": { + "type": "string", + "enum": ["FirstN"], + "default": "FirstN" + }, + "max_entry_count": { + "title": "N", + "description": "Number of entries to log. This destination is for testing only. So it won't make sense to log infinitely. The maximum is 1,000 entries.", + "type": "number", + "default": 100, + "examples": [100], + "minimum": 1, + "maximum": 1000 + } + } + }, + { + "title": "Every N-th Entry", + "description": "For each stream, log every N-th entry with a maximum cap.", + "type": "object", + "required": [ + "logging_type", + "nth_entry_to_log", + "max_entry_count" + ], + "properties": { + "logging_type": { + "type": "string", + "enum": ["EveryNth"], + "default": "EveryNth" + }, + "nth_entry_to_log": { + "title": "N", + "description": "The N-th entry to log for each stream. N starts from 1. For example, when N = 1, every entry is logged; when N = 2, every other entry is logged; when N = 3, one out of three entries is logged.", + "type": "number", + "example": [3], + "minimum": 1, + "maximum": 1000 + }, + "max_entry_count": { + "title": "Max Log Entries", + "description": "Max number of entries to log. This destination is for testing only. So it won't make sense to log infinitely. The maximum is 1,000 entries.", + "type": "number", + "default": 100, + "examples": [100], + "minimum": 1, + "maximum": 1000 + } + } + }, + { + "title": "Random Sampling", + "description": "For each stream, randomly log a percentage of the entries with a maximum cap.", + "type": "object", + "required": [ + "logging_type", + "sampling_ratio", + "max_entry_count" + ], + "properties": { + "logging_type": { + "type": "string", + "enum": ["RandomSampling"], + "default": "RandomSampling" + }, + "sampling_ratio": { + "title": "Sampling Ratio", + "description": "A positive floating number smaller than 1.", + "type": "number", + "default": 0.001, + "examples": [0.001], + "minimum": 0, + "maximum": 1 + }, + "seed": { + "title": "Random Number Generator Seed", + "description": "When the seed is unspecified, the current time millis will be used as the seed.", + "type": "number", + "examples": [1900] + }, + "max_entry_count": { + "title": "Max Log Entries", + "description": "Max number of entries to log. This destination is for testing only. So it won't make sense to log infinitely. The maximum is 1,000 entries.", + "type": "number", + "default": 100, + "examples": [100], + "minimum": 1, + "maximum": 1000 + } + } + } + ] + } + } + }, + { + "title": "Silent", + "required": ["type"], + "properties": { + "type": { + "type": "string", + "const": "SILENT", + "default": "SILENT" + } + } + }, + { + "title": "Throttled", + "required": ["type", "millis_per_record"], + "properties": { + "type": { + "type": "string", + "const": "THROTTLED", + "default": "THROTTLED" + }, + "millis_per_record": { + "description": "Number of milli-second to pause in between records.", + "type": "integer" + } + } + }, + { + "title": "Failing", + "required": ["type", "num_messages"], + "properties": { + "type": { + "type": "string", + "const": "FAILING", + "default": "FAILING" + }, + "num_messages": { + "description": "Number of messages after which to fail.", + "type": "integer" + } + } + } + ] + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["overwrite", "append"] + }, + "tombstone": false, + "public": true, + "custom": false + }, + { + "destinationDefinitionId": "68f351a7-2745-4bef-ad7f-996b8e51bb8c", + "name": "ElasticSearch", + "dockerRepository": "airbyte/destination-elasticsearch", + "dockerImageTag": "0.1.6", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/elasticsearch", + "icon": "elasticsearch.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/elasticsearch", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Elasticsearch Connection Configuration", + "type": "object", + "required": ["endpoint"], + "additionalProperties": false, + "properties": { + "endpoint": { + "title": "Server Endpoint", + "type": "string", + "description": "The full url of the Elasticsearch server" + }, + "upsert": { + "type": "boolean", + "title": "Upsert Records", + "description": "If a primary key identifier is defined in the source, an upsert will be performed using the primary key value as the elasticsearch doc id. Does not support composite primary keys.", + "default": true + }, + "ca_certificate": { + "type": "string", + "title": "CA certificate", + "description": "CA certificate", + "airbyte_secret": true, + "multiline": true + }, + "authenticationMethod": { + "title": "Authentication Method", + "type": "object", + "description": "The type of authentication to be used", + "oneOf": [ + { + "title": "None", + "additionalProperties": false, + "description": "No authentication will be used", + "required": ["method"], + "properties": { + "method": { + "type": "string", + "const": "none" + } + } + }, + { + "title": "Api Key/Secret", + "additionalProperties": false, + "description": "Use a api key and secret combination to authenticate", + "required": ["method", "apiKeyId", "apiKeySecret"], + "properties": { + "method": { + "type": "string", + "const": "secret" + }, + "apiKeyId": { + "title": "API Key ID", + "description": "The Key ID to used when accessing an enterprise Elasticsearch instance.", + "type": "string" + }, + "apiKeySecret": { + "title": "API Key Secret", + "description": "The secret associated with the API Key ID.", + "type": "string", + "airbyte_secret": true + } + } + }, + { + "title": "Username/Password", + "additionalProperties": false, + "description": "Basic auth header with a username and password", + "required": ["method", "username", "password"], + "properties": { + "method": { + "type": "string", + "const": "basic" + }, + "username": { + "title": "Username", + "description": "Basic auth username to access a secure Elasticsearch server", + "type": "string" + }, + "password": { + "title": "Password", + "description": "Basic auth password to access a secure Elasticsearch server", + "type": "string", + "airbyte_secret": true + } + } + } + ] + }, + "tunnel_method": { + "type": "object", + "title": "SSH Tunnel Method", + "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", + "oneOf": [ + { + "title": "No Tunnel", + "required": ["tunnel_method"], + "properties": { + "tunnel_method": { + "description": "No ssh tunnel needed to connect to database", + "type": "string", + "const": "NO_TUNNEL", + "order": 0 + } + } + }, + { + "title": "SSH Key Authentication", + "required": [ + "tunnel_method", + "tunnel_host", + "tunnel_port", + "tunnel_user", + "ssh_key" + ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": ["22"], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host.", + "type": "string", + "order": 3 + }, + "ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + }, + { + "title": "Password Authentication", + "required": [ + "tunnel_method", + "tunnel_host", + "tunnel_port", + "tunnel_user", + "tunnel_user_password" + ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": ["22"], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host", + "type": "string", + "order": 3 + }, + "tunnel_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 4 + } + } + } + ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["overwrite", "append"], + "supportsNamespaces": true + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "bb6071d9-6f34-4766-bec2-d1d4ed81a653", + "name": "Exasol", + "dockerRepository": "airbyte/destination-exasol", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/exasol", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/exasol", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Exasol Destination Spec", + "type": "object", + "required": ["host", "port", "username", "schema"], + "additionalProperties": true, + "properties": { + "host": { + "title": "Host", + "description": "Hostname of the database.", + "type": "string", + "order": 0 + }, + "port": { + "title": "Port", + "description": "Port of the database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 8563, + "examples": ["8563"], + "order": 1 + }, + "certificateFingerprint": { + "title": "Certificate Fingerprint", + "description": "Fingerprint of the Exasol server's TLS certificate", + "type": "string", + "examples": ["ABC123..."], + "order": 2 + }, + "username": { + "title": "User", + "description": "Username to use to access the database.", + "type": "string", + "order": 3 + }, + "password": { + "title": "Password", + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 4 + }, + "schema": { + "title": "Schema Name", + "description": "Schema Name", + "type": "string", + "order": 5 + }, + "jdbc_url_params": { + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol ';'. (example: key1=value1;key2=value2;key3=value3).", + "title": "JDBC URL Params", + "type": "string", + "order": 6 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["overwrite", "append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "18081484-02a5-4662-8dba-b270b582f321", + "name": "Firebolt", + "dockerRepository": "airbyte/destination-firebolt", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/firebolt", + "icon": "firebolt.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/firebolt", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Firebolt Spec", + "type": "object", + "required": ["username", "password", "database"], + "additionalProperties": false, + "properties": { + "username": { + "type": "string", + "title": "Username", + "description": "Firebolt email address you use to login.", + "examples": ["username@email.com"], + "order": 0 + }, + "password": { + "type": "string", + "title": "Password", + "description": "Firebolt password.", + "airbyte_secret": true, + "order": 1 + }, + "account": { + "type": "string", + "title": "Account", + "description": "Firebolt account to login." + }, + "host": { + "type": "string", + "title": "Host", + "description": "The host name of your Firebolt database.", + "examples": ["api.app.firebolt.io"] + }, + "database": { + "type": "string", + "title": "Database", + "description": "The database to connect to." + }, + "engine": { + "type": "string", + "title": "Engine", + "description": "Engine name or url to connect to." + }, + "loading_method": { + "type": "object", + "title": "Loading Method", + "description": "Loading method used to select the way data will be uploaded to Firebolt", + "oneOf": [ + { + "title": "SQL Inserts", + "additionalProperties": false, + "required": ["method"], + "properties": { + "method": { + "type": "string", + "const": "SQL" + } + } + }, + { + "title": "External Table via S3", + "additionalProperties": false, + "required": [ + "method", + "s3_bucket", + "s3_region", + "aws_key_id", + "aws_key_secret" + ], + "properties": { + "method": { + "type": "string", + "const": "S3" + }, + "s3_bucket": { + "type": "string", + "title": "S3 bucket name", + "description": "The name of the S3 bucket." + }, + "s3_region": { + "type": "string", + "title": "S3 region name", + "description": "Region name of the S3 bucket.", + "examples": ["us-east-1"] + }, + "aws_key_id": { + "type": "string", + "title": "AWS Key ID", + "airbyte_secret": true, + "description": "AWS access key granting read and write access to S3." + }, + "aws_key_secret": { + "type": "string", + "title": "AWS Key Secret", + "airbyte_secret": true, + "description": "Corresponding secret part of the AWS Key" + } + } + } + ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": true, + "supported_destination_sync_modes": ["overwrite", "append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "supportsDbt": true + }, + { + "destinationDefinitionId": "ca8f6566-e555-4b40-943a-545bf123117a", + "name": "Google Cloud Storage (GCS)", + "dockerRepository": "airbyte/destination-gcs", + "dockerImageTag": "0.2.16", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/gcs", + "icon": "googlecloudstorage.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/gcs", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "GCS Destination Spec", + "type": "object", + "required": [ + "gcs_bucket_name", + "gcs_bucket_path", + "credential", + "format" + ], + "properties": { + "gcs_bucket_name": { + "title": "GCS Bucket Name", + "order": 1, + "type": "string", + "description": "You can find the bucket name in the App Engine Admin console Application Settings page, under the label Google Cloud Storage Bucket. Read more here.", + "examples": ["airbyte_sync"] + }, + "gcs_bucket_path": { + "title": "GCS Bucket Path", + "description": "GCS Bucket Path string Subdirectory under the above bucket to sync the data into.", + "order": 2, + "type": "string", + "examples": ["data_sync/test"] + }, + "gcs_bucket_region": { + "title": "GCS Bucket Region", + "type": "string", + "order": 3, + "default": "us", + "description": "Select a Region of the GCS Bucket. Read more here.", + "enum": [ + "northamerica-northeast1", + "northamerica-northeast2", + "us-central1", + "us-east1", + "us-east4", + "us-west1", + "us-west2", + "us-west3", + "us-west4", + "southamerica-east1", + "southamerica-west1", + "europe-central2", + "europe-north1", + "europe-west1", + "europe-west2", + "europe-west3", + "europe-west4", + "europe-west6", + "asia-east1", + "asia-east2", + "asia-northeast1", + "asia-northeast2", + "asia-northeast3", + "asia-south1", + "asia-south2", + "asia-southeast1", + "asia-southeast2", + "australia-southeast1", + "australia-southeast2", + "asia", + "eu", + "us", + "asia1", + "eur4", + "nam4" + ] + }, + "credential": { + "title": "Authentication", + "description": "An HMAC key is a type of credential and can be associated with a service account or a user account in Cloud Storage. Read more here.", + "type": "object", + "order": 0, + "oneOf": [ + { + "title": "HMAC Key", + "required": [ + "credential_type", + "hmac_key_access_id", + "hmac_key_secret" + ], + "properties": { + "credential_type": { + "type": "string", + "enum": ["HMAC_KEY"], + "default": "HMAC_KEY" + }, + "hmac_key_access_id": { + "type": "string", + "description": "When linked to a service account, this ID is 61 characters long; when linked to a user account, it is 24 characters long. Read more here.", + "title": "Access ID", + "airbyte_secret": true, + "order": 0, + "examples": ["1234567890abcdefghij1234"] + }, + "hmac_key_secret": { + "type": "string", + "description": "The corresponding secret for the access ID. It is a 40-character base-64 encoded string. Read more here.", + "title": "Secret", + "airbyte_secret": true, + "order": 1, + "examples": ["1234567890abcdefghij1234567890ABCDEFGHIJ"] + } + } + } + ] + }, + "format": { + "title": "Output Format", + "type": "object", + "description": "Output data format. One of the following formats must be selected - AVRO format, PARQUET format, CSV format, or JSONL format.", + "order": 4, + "oneOf": [ + { + "title": "Avro: Apache Avro", + "required": ["format_type", "compression_codec"], + "properties": { + "format_type": { + "type": "string", + "enum": ["Avro"], + "default": "Avro" + }, + "compression_codec": { + "title": "Compression Codec", + "description": "The compression algorithm used to compress data. Default to no compression.", + "type": "object", + "oneOf": [ + { + "title": "No Compression", + "required": ["codec"], + "properties": { + "codec": { + "type": "string", + "enum": ["no compression"], + "default": "no compression" + } + } + }, + { + "title": "Deflate", + "required": ["codec"], + "properties": { + "codec": { + "type": "string", + "enum": ["Deflate"], + "default": "Deflate" + }, + "compression_level": { + "title": "Deflate level", + "description": "0: no compression & fastest, 9: best compression & slowest.", + "type": "integer", + "default": 0, + "minimum": 0, + "maximum": 9 + } + } + }, + { + "title": "bzip2", + "required": ["codec"], + "properties": { + "codec": { + "type": "string", + "enum": ["bzip2"], + "default": "bzip2" + } + } + }, + { + "title": "xz", + "required": ["codec"], + "properties": { + "codec": { + "type": "string", + "enum": ["xz"], + "default": "xz" + }, + "compression_level": { + "title": "Compression Level", + "description": "The presets 0-3 are fast presets with medium compression. The presets 4-6 are fairly slow presets with high compression. The default preset is 6. The presets 7-9 are like the preset 6 but use bigger dictionaries and have higher compressor and decompressor memory requirements. Unless the uncompressed size of the file exceeds 8 MiB, 16 MiB, or 32 MiB, it is waste of memory to use the presets 7, 8, or 9, respectively. Read more here for details.", + "type": "integer", + "default": 6, + "minimum": 0, + "maximum": 9 + } + } + }, + { + "title": "zstandard", + "required": ["codec"], + "properties": { + "codec": { + "type": "string", + "enum": ["zstandard"], + "default": "zstandard" + }, + "compression_level": { + "title": "Compression Level", + "description": "Negative levels are 'fast' modes akin to lz4 or snappy, levels above 9 are generally for archival purposes, and levels above 18 use a lot of memory.", + "type": "integer", + "default": 3, + "minimum": -5, + "maximum": 22 + }, + "include_checksum": { + "title": "Include Checksum", + "description": "If true, include a checksum with each data block.", + "type": "boolean", + "default": false + } + } + }, + { + "title": "snappy", + "required": ["codec"], + "properties": { + "codec": { + "type": "string", + "enum": ["snappy"], + "default": "snappy" + } + } + } + ] + } + } + }, + { + "title": "CSV: Comma-Separated Values", + "required": ["format_type"], + "properties": { + "format_type": { + "type": "string", + "enum": ["CSV"], + "default": "CSV" + }, + "flattening": { + "type": "string", + "title": "Normalization", + "description": "Whether the input JSON data should be normalized (flattened) in the output CSV. Please refer to docs for details.", + "default": "No flattening", + "enum": ["No flattening", "Root level flattening"] + }, + "compression": { + "title": "Compression", + "type": "object", + "description": "Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \".csv.gz\").", + "oneOf": [ + { + "title": "No Compression", + "requires": ["compression_type"], + "properties": { + "compression_type": { + "type": "string", + "enum": ["No Compression"], + "default": "No Compression" + } + } + }, + { + "title": "GZIP", + "requires": ["compression_type"], + "properties": { + "compression_type": { + "type": "string", + "enum": ["GZIP"], + "default": "GZIP" + } + } + } + ] + } + } + }, + { + "title": "JSON Lines: newline-delimited JSON", + "required": ["format_type"], + "properties": { + "format_type": { + "type": "string", + "enum": ["JSONL"], + "default": "JSONL" + }, + "compression": { + "title": "Compression", + "type": "object", + "description": "Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \".jsonl.gz\").", + "oneOf": [ + { + "title": "No Compression", + "requires": "compression_type", + "properties": { + "compression_type": { + "type": "string", + "enum": ["No Compression"], + "default": "No Compression" + } + } + }, + { + "title": "GZIP", + "requires": "compression_type", + "properties": { + "compression_type": { + "type": "string", + "enum": ["GZIP"], + "default": "GZIP" + } + } + } + ] + } + } + }, + { + "title": "Parquet: Columnar Storage", + "required": ["format_type"], + "properties": { + "format_type": { + "type": "string", + "enum": ["Parquet"], + "default": "Parquet" + }, + "compression_codec": { + "title": "Compression Codec", + "description": "The compression algorithm used to compress data pages.", + "type": "string", + "default": "UNCOMPRESSED", + "enum": [ + "UNCOMPRESSED", + "SNAPPY", + "GZIP", + "LZO", + "BROTLI", + "LZ4", + "ZSTD" + ] + }, + "block_size_mb": { + "title": "Block Size (Row Group Size) (MB)", + "description": "This is the size of a row group being buffered in memory. It limits the memory usage when writing. Larger values will improve the IO when reading, but consume more memory when writing. Default: 128 MB.", + "type": "integer", + "default": 128, + "examples": [128] + }, + "max_padding_size_mb": { + "title": "Max Padding Size (MB)", + "description": "Maximum size allowed as padding to align row groups. This is also the minimum size of a row group. Default: 8 MB.", + "type": "integer", + "default": 8, + "examples": [8] + }, + "page_size_kb": { + "title": "Page Size (KB)", + "description": "The page size is for compression. A block is composed of pages. A page is the smallest unit that must be read fully to access a single record. If this value is too small, the compression will deteriorate. Default: 1024 KB.", + "type": "integer", + "default": 1024, + "examples": [1024] + }, + "dictionary_page_size_kb": { + "title": "Dictionary Page Size (KB)", + "description": "There is one dictionary page per column per row group when dictionary encoding is used. The dictionary page size works like the page size but for dictionary. Default: 1024 KB.", + "type": "integer", + "default": 1024, + "examples": [1024] + }, + "dictionary_encoding": { + "title": "Dictionary Encoding", + "description": "Default: true.", + "type": "boolean", + "default": true + } + } + } + ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["overwrite", "append"], + "$schema": "http://json-schema.org/draft-07/schema#" + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "resourceRequirements": { + "jobSpecific": [ + { + "jobType": "sync", + "resourceRequirements": { + "memory_request": "1Gi", + "memory_limit": "1Gi" + } + } + ] + } + }, + { + "destinationDefinitionId": "27dc7500-6d1b-40b1-8b07-e2f2aea3c9f4", + "name": "Google Firestore", + "dockerRepository": "airbyte/destination-firestore", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/firestore", + "icon": "firestore.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/firestore", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Destination Google Firestore", + "type": "object", + "required": ["project_id"], + "additionalProperties": false, + "properties": { + "project_id": { + "type": "string", + "description": "The GCP project ID for the project containing the target BigQuery dataset.", + "title": "Project ID" + }, + "credentials_json": { + "type": "string", + "description": "The contents of the JSON service account key. Check out the docs if you need help generating this key. Default credentials will be used if this field is left empty.", + "title": "Credentials JSON", + "airbyte_secret": true + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["append", "overwrite"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "356668e2-7e34-47f3-a3b0-67a8a481b692", + "name": "Google PubSub", + "dockerRepository": "airbyte/destination-pubsub", + "dockerImageTag": "0.2.0", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/pubsub", + "icon": "googlepubsub.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/pubsub", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Google PubSub Destination Spec", + "type": "object", + "required": [ + "project_id", + "topic_id", + "credentials_json", + "ordering_enabled", + "batching_enabled" + ], + "additionalProperties": true, + "properties": { + "project_id": { + "type": "string", + "description": "The GCP project ID for the project containing the target PubSub.", + "title": "Project ID" + }, + "topic_id": { + "type": "string", + "description": "The PubSub topic ID in the given GCP project ID.", + "title": "PubSub Topic ID" + }, + "credentials_json": { + "type": "string", + "description": "The contents of the JSON service account key. Check out the docs if you need help generating this key.", + "title": "Credentials JSON", + "airbyte_secret": true + }, + "ordering_enabled": { + "title": "Message Ordering Enabled", + "description": "If TRUE PubSub publisher will have message ordering enabled. Every message will have an ordering key of stream", + "type": "boolean", + "default": false + }, + "batching_enabled": { + "type": "boolean", + "title": "Message Batching Enabled", + "description": "If TRUE messages will be buffered instead of sending them one by one", + "default": false + }, + "batching_delay_threshold": { + "type": "integer", + "title": "Message Batching: Delay Threshold", + "description": "Number of ms before the buffer is flushed", + "default": 1, + "minimum": 1 + }, + "batching_element_count_threshold": { + "type": "integer", + "title": "Message Batching: Element Count Threshold", + "description": "Number of messages before the buffer is flushed", + "default": 1, + "minimum": 1 + }, + "batching_request_bytes_threshold": { + "type": "integer", + "title": "Message Batching: Request Bytes Threshold", + "description": "Number of bytes before the buffer is flushed", + "default": 1, + "minimum": 1 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "9f760101-60ae-462f-9ee6-b7a9dafd454d", + "name": "Kafka", + "dockerRepository": "airbyte/destination-kafka", + "dockerImageTag": "0.1.10", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/kafka", + "icon": "kafka.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/kafka", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Kafka Destination Spec", + "type": "object", + "required": [ + "bootstrap_servers", + "topic_pattern", + "protocol", + "acks", + "enable_idempotence", + "compression_type", + "batch_size", + "linger_ms", + "max_in_flight_requests_per_connection", + "client_dns_lookup", + "buffer_memory", + "max_request_size", + "retries", + "socket_connection_setup_timeout_ms", + "socket_connection_setup_timeout_max_ms", + "max_block_ms", + "request_timeout_ms", + "delivery_timeout_ms", + "send_buffer_bytes", + "receive_buffer_bytes" + ], + "additionalProperties": true, + "properties": { + "bootstrap_servers": { + "title": "Bootstrap Servers", + "description": "A list of host/port pairs to use for establishing the initial connection to the Kafka cluster. The client will make use of all servers irrespective of which servers are specified here for bootstrapping—this list only impacts the initial hosts used to discover the full set of servers. This list should be in the form host1:port1,host2:port2,.... Since these servers are just used for the initial connection to discover the full cluster membership (which may change dynamically), this list need not contain the full set of servers (you may want more than one, though, in case a server is down).", + "type": "string", + "examples": ["kafka-broker1:9092,kafka-broker2:9092"] + }, + "topic_pattern": { + "title": "Topic Pattern", + "description": "Topic pattern in which the records will be sent. You can use patterns like '{namespace}' and/or '{stream}' to send the message to a specific topic based on these values. Notice that the topic name will be transformed to a standard naming convention.", + "type": "string", + "examples": ["sample.topic", "{namespace}.{stream}.sample"] + }, + "test_topic": { + "title": "Test Topic", + "description": "Topic to test if Airbyte can produce messages.", + "type": "string", + "examples": ["test.topic"] + }, + "sync_producer": { + "title": "Sync Producer", + "description": "Wait synchronously until the record has been sent to Kafka.", + "type": "boolean", + "default": false + }, + "protocol": { + "title": "Protocol", + "type": "object", + "description": "Protocol used to communicate with brokers.", + "oneOf": [ + { + "title": "PLAINTEXT", + "required": ["security_protocol"], + "properties": { + "security_protocol": { + "type": "string", + "enum": ["PLAINTEXT"], + "default": "PLAINTEXT" + } + } + }, + { + "title": "SASL PLAINTEXT", + "required": [ + "security_protocol", + "sasl_mechanism", + "sasl_jaas_config" + ], + "properties": { + "security_protocol": { + "type": "string", + "enum": ["SASL_PLAINTEXT"], + "default": "SASL_PLAINTEXT" + }, + "sasl_mechanism": { + "title": "SASL Mechanism", + "description": "SASL mechanism used for client connections. This may be any mechanism for which a security provider is available.", + "type": "string", + "default": "PLAIN", + "enum": ["PLAIN"] + }, + "sasl_jaas_config": { + "title": "SASL JAAS Config", + "description": "JAAS login context parameters for SASL connections in the format used by JAAS configuration files.", + "type": "string", + "default": "", + "airbyte_secret": true + } + } + }, + { + "title": "SASL SSL", + "required": [ + "security_protocol", + "sasl_mechanism", + "sasl_jaas_config" + ], + "properties": { + "security_protocol": { + "type": "string", + "enum": ["SASL_SSL"], + "default": "SASL_SSL" + }, + "sasl_mechanism": { + "title": "SASL Mechanism", + "description": "SASL mechanism used for client connections. This may be any mechanism for which a security provider is available.", + "type": "string", + "default": "GSSAPI", + "enum": [ + "GSSAPI", + "OAUTHBEARER", + "SCRAM-SHA-256", + "SCRAM-SHA-512", + "PLAIN" + ] + }, + "sasl_jaas_config": { + "title": "SASL JAAS Config", + "description": "JAAS login context parameters for SASL connections in the format used by JAAS configuration files.", + "type": "string", + "default": "", + "airbyte_secret": true + } + } + } + ] + }, + "client_id": { + "title": "Client ID", + "description": "An ID string to pass to the server when making requests. The purpose of this is to be able to track the source of requests beyond just ip/port by allowing a logical application name to be included in server-side request logging.", + "type": "string", + "examples": ["airbyte-producer"] + }, + "acks": { + "title": "ACKs", + "description": "The number of acknowledgments the producer requires the leader to have received before considering a request complete. This controls the durability of records that are sent.", + "type": "string", + "default": "1", + "enum": ["0", "1", "all"] + }, + "enable_idempotence": { + "title": "Enable Idempotence", + "description": "When set to 'true', the producer will ensure that exactly one copy of each message is written in the stream. If 'false', producer retries due to broker failures, etc., may write duplicates of the retried message in the stream.", + "type": "boolean", + "default": false + }, + "compression_type": { + "title": "Compression Type", + "description": "The compression type for all data generated by the producer.", + "type": "string", + "default": "none", + "enum": ["none", "gzip", "snappy", "lz4", "zstd"] + }, + "batch_size": { + "title": "Batch Size", + "description": "The producer will attempt to batch records together into fewer requests whenever multiple records are being sent to the same partition.", + "type": "integer", + "examples": [16384] + }, + "linger_ms": { + "title": "Linger ms", + "description": "The producer groups together any records that arrive in between request transmissions into a single batched request.", + "type": "string", + "examples": [0] + }, + "max_in_flight_requests_per_connection": { + "title": "Max in Flight Requests per Connection", + "description": "The maximum number of unacknowledged requests the client will send on a single connection before blocking. Can be greater than 1, and the maximum value supported with idempotency is 5.", + "type": "integer", + "examples": [5] + }, + "client_dns_lookup": { + "title": "Client DNS Lookup", + "description": "Controls how the client uses DNS lookups. If set to use_all_dns_ips, connect to each returned IP address in sequence until a successful connection is established. After a disconnection, the next IP is used. Once all IPs have been used once, the client resolves the IP(s) from the hostname again. If set to resolve_canonical_bootstrap_servers_only, resolve each bootstrap address into a list of canonical names. After the bootstrap phase, this behaves the same as use_all_dns_ips. If set to default (deprecated), attempt to connect to the first IP address returned by the lookup, even if the lookup returns multiple IP addresses.", + "type": "string", + "default": "use_all_dns_ips", + "enum": [ + "default", + "use_all_dns_ips", + "resolve_canonical_bootstrap_servers_only", + "use_all_dns_ips" + ] + }, + "buffer_memory": { + "title": "Buffer Memory", + "description": "The total bytes of memory the producer can use to buffer records waiting to be sent to the server.", + "type": "string", + "examples": 33554432 + }, + "max_request_size": { + "title": "Max Request Size", + "description": "The maximum size of a request in bytes.", + "type": "integer", + "examples": [1048576] + }, + "retries": { + "title": "Retries", + "description": "Setting a value greater than zero will cause the client to resend any record whose send fails with a potentially transient error.", + "type": "integer", + "examples": [2147483647] + }, + "socket_connection_setup_timeout_ms": { + "title": "Socket Connection Setup Timeout", + "description": "The amount of time the client will wait for the socket connection to be established.", + "type": "string", + "examples": [10000] + }, + "socket_connection_setup_timeout_max_ms": { + "title": "Socket Connection Setup Max Timeout", + "description": "The maximum amount of time the client will wait for the socket connection to be established. The connection setup timeout will increase exponentially for each consecutive connection failure up to this maximum.", + "type": "string", + "examples": [30000] + }, + "max_block_ms": { + "title": "Max Block ms", + "description": "The configuration controls how long the KafkaProducer's send(), partitionsFor(), initTransactions(), sendOffsetsToTransaction(), commitTransaction() and abortTransaction() methods will block.", + "type": "string", + "examples": [60000] + }, + "request_timeout_ms": { + "title": "Request Timeout", + "description": "The configuration controls the maximum amount of time the client will wait for the response of a request. If the response is not received before the timeout elapses the client will resend the request if necessary or fail the request if retries are exhausted.", + "type": "integer", + "examples": [30000] + }, + "delivery_timeout_ms": { + "title": "Delivery Timeout", + "description": "An upper bound on the time to report success or failure after a call to 'send()' returns.", + "type": "integer", + "examples": [120000] + }, + "send_buffer_bytes": { + "title": "Send Buffer bytes", + "description": "The size of the TCP send buffer (SO_SNDBUF) to use when sending data. If the value is -1, the OS default will be used.", + "type": "integer", + "examples": [131072] + }, + "receive_buffer_bytes": { + "title": "Receive Buffer bytes", + "description": "The size of the TCP receive buffer (SO_RCVBUF) to use when reading data. If the value is -1, the OS default will be used.", + "type": "integer", + "examples": [32768] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "6d1d66d4-26ab-4602-8d32-f85894b04955", + "name": "Kinesis", + "dockerRepository": "airbyte/destination-kinesis", + "dockerImageTag": "0.1.5", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/kinesis", + "icon": "kinesis.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/kinesis", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Kinesis Destination Spec", + "type": "object", + "required": [ + "endpoint", + "region", + "shardCount", + "accessKey", + "privateKey", + "bufferSize" + ], + "additionalProperties": true, + "properties": { + "endpoint": { + "title": "Endpoint", + "description": "AWS Kinesis endpoint.", + "type": "string", + "examples": ["kinesis.us‑west‑1.amazonaws.com"], + "order": 0 + }, + "region": { + "title": "Region", + "description": "AWS region. Your account determines the Regions that are available to you.", + "type": "string", + "examples": ["us‑west‑1"], + "order": 1 + }, + "shardCount": { + "title": "Shard Count", + "description": "Number of shards to which the data should be streamed.", + "type": "integer", + "default": 5, + "order": 2 + }, + "accessKey": { + "title": "Access Key", + "description": "Generate the AWS Access Key for current user.", + "airbyte_secret": true, + "type": "string", + "order": 3 + }, + "privateKey": { + "title": "Private Key", + "description": "The AWS Private Key - a string of numbers and letters that are unique for each account, also known as a \"recovery phrase\".", + "airbyte_secret": true, + "type": "string", + "order": 4 + }, + "bufferSize": { + "title": "Buffer Size", + "description": "Buffer size for storing kinesis records before being batch streamed.", + "type": "integer", + "minimum": 1, + "maximum": 500, + "default": 100, + "order": 5 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "8be1cf83-fde1-477f-a4ad-318d23c9f3c6", + "name": "Local CSV", + "dockerRepository": "airbyte/destination-csv", + "dockerImageTag": "1.0.0", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/local-csv", + "icon": "file-csv.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/local-csv", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "CSV Destination Spec", + "type": "object", + "required": ["destination_path"], + "additionalProperties": true, + "properties": { + "destination_path": { + "description": "Path to the directory where csv files will be written. The destination uses the local mount \"/local\" and any data files will be placed inside that local mount. For more information check out our docs", + "type": "string", + "examples": ["/local"] + }, + "delimiter_type": { + "type": "object", + "title": "Delimiter", + "description": "The character delimiting individual cells in the CSV data.", + "oneOf": [ + { + "title": "Comma", + "required": ["delimiter"], + "properties": { + "delimiter": { + "type": "string", + "const": "\\u002c" + } + } + }, + { + "title": "Semicolon", + "required": ["delimiter"], + "properties": { + "delimiter": { + "type": "string", + "const": "\\u003b" + } + } + }, + { + "title": "Pipe", + "required": ["delimiter"], + "properties": { + "delimiter": { + "type": "string", + "const": "\\u007c" + } + } + }, + { + "title": "Tab", + "required": ["delimiter"], + "properties": { + "delimiter": { + "type": "string", + "const": "\\u0009" + } + } + }, + { + "title": "Space", + "required": ["delimiter"], + "properties": { + "delimiter": { + "type": "string", + "const": "\\u0020" + } + } + } + ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["overwrite", "append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "a625d593-bba5-4a1c-a53d-2d246268a816", + "name": "Local JSON", + "dockerRepository": "airbyte/destination-local-json", + "dockerImageTag": "0.2.11", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/local-json", + "icon": "file-json.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/local-json", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Local Json Destination Spec", + "type": "object", + "required": ["destination_path"], + "additionalProperties": false, + "properties": { + "destination_path": { + "description": "Path to the directory where json files will be written. The files will be placed inside that local mount. For more information check out our docs", + "title": "Destination Path", + "type": "string", + "examples": ["/json_data"] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["overwrite", "append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "f3802bc4-5406-4752-9e8d-01e504ca8194", + "name": "MQTT", + "dockerRepository": "airbyte/destination-mqtt", + "dockerImageTag": "0.1.3", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mqtt", + "icon": "mqtt.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mqtt", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "MQTT Destination Spec", + "type": "object", + "required": [ + "broker_host", + "broker_port", + "use_tls", + "topic_pattern", + "publisher_sync", + "connect_timeout", + "automatic_reconnect", + "clean_session", + "message_retained", + "message_qos" + ], + "additionalProperties": true, + "properties": { + "broker_host": { + "title": "MQTT broker host", + "description": "Host of the broker to connect to.", + "type": "string" + }, + "broker_port": { + "title": "MQTT broker port", + "description": "Port of the broker.", + "type": "integer" + }, + "use_tls": { + "title": "Use TLS", + "description": "Whether to use TLS encryption on the connection.", + "type": "boolean", + "default": false + }, + "username": { + "title": "Username", + "description": "User name to use for the connection.", + "type": "string" + }, + "password": { + "title": "Password", + "description": "Password to use for the connection.", + "type": "string", + "airbyte_secret": true + }, + "topic_pattern": { + "title": "Topic pattern", + "description": "Topic pattern in which the records will be sent. You can use patterns like '{namespace}' and/or '{stream}' to send the message to a specific topic based on these values. Notice that the topic name will be transformed to a standard naming convention.", + "type": "string", + "examples": ["sample.topic", "{namespace}/{stream}/sample"] + }, + "topic_test": { + "title": "Test topic", + "description": "Topic to test if Airbyte can produce messages.", + "type": "string", + "examples": ["test/topic"] + }, + "client": { + "title": "Client ID", + "description": "A client identifier that is unique on the server being connected to.", + "type": "string", + "examples": ["airbyte-client1"] + }, + "publisher_sync": { + "title": "Sync publisher", + "description": "Wait synchronously until the record has been sent to the broker.", + "type": "boolean", + "default": false + }, + "connect_timeout": { + "title": "Connect timeout", + "description": " Maximum time interval (in seconds) the client will wait for the network connection to the MQTT server to be established.", + "type": "integer", + "default": 30 + }, + "automatic_reconnect": { + "title": "Automatic reconnect", + "description": "Whether the client will automatically attempt to reconnect to the server if the connection is lost.", + "type": "boolean", + "default": true + }, + "clean_session": { + "title": "Clean session", + "description": "Whether the client and server should remember state across restarts and reconnects.", + "type": "boolean", + "default": true + }, + "message_retained": { + "title": "Message retained", + "description": "Whether or not the publish message should be retained by the messaging engine.", + "type": "boolean", + "default": false + }, + "message_qos": { + "title": "Message QoS", + "description": "Quality of service used for each message to be delivered.", + "default": "AT_LEAST_ONCE", + "enum": ["AT_MOST_ONCE", "AT_LEAST_ONCE", "EXACTLY_ONCE"] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "d4353156-9217-4cad-8dd7-c108fd4f74cf", + "name": "MS SQL Server", + "dockerRepository": "airbyte/destination-mssql", + "dockerImageTag": "0.1.23", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mssql", + "icon": "mssql.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mssql", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "MS SQL Server Destination Spec", + "type": "object", + "required": ["host", "port", "username", "database", "schema"], + "properties": { + "host": { + "title": "Host", + "description": "The host name of the MSSQL database.", + "type": "string", + "order": 0 + }, + "port": { + "title": "Port", + "description": "The port of the MSSQL database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 1433, + "examples": ["1433"], + "order": 1 + }, + "database": { + "title": "DB Name", + "description": "The name of the MSSQL database.", + "type": "string", + "order": 2 + }, + "schema": { + "title": "Default Schema", + "description": "The default schema tables are written to if the source does not specify a namespace. The usual value for this field is \"public\".", + "type": "string", + "examples": ["public"], + "default": "public", + "order": 3 + }, + "username": { + "title": "User", + "description": "The username which is used to access the database.", + "type": "string", + "order": 4 + }, + "password": { + "title": "Password", + "description": "The password associated with this username.", + "type": "string", + "airbyte_secret": true, + "order": 5 + }, + "jdbc_url_params": { + "title": "JDBC URL Params", + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", + "type": "string", + "order": 6 + }, + "ssl_method": { + "title": "SSL Method", + "type": "object", + "description": "The encryption method which is used to communicate with the database.", + "order": 7, + "oneOf": [ + { + "title": "Unencrypted", + "description": "The data transfer will not be encrypted.", + "required": ["ssl_method"], + "type": "object", + "properties": { + "ssl_method": { + "type": "string", + "const": "unencrypted", + "enum": ["unencrypted"], + "default": "unencrypted" + } + } + }, + { + "title": "Encrypted (trust server certificate)", + "description": "Use the certificate provided by the server without verification. (For testing purposes only!)", + "required": ["ssl_method"], + "type": "object", + "properties": { + "ssl_method": { + "type": "string", + "const": "encrypted_trust_server_certificate", + "enum": ["encrypted_trust_server_certificate"], + "default": "encrypted_trust_server_certificate" + } + } + }, + { + "title": "Encrypted (verify certificate)", + "description": "Verify and use the certificate provided by the server.", + "required": [ + "ssl_method", + "trustStoreName", + "trustStorePassword" + ], + "type": "object", + "properties": { + "ssl_method": { + "type": "string", + "const": "encrypted_verify_certificate", + "enum": ["encrypted_verify_certificate"], + "default": "encrypted_verify_certificate" + }, + "hostNameInCertificate": { + "title": "Host Name In Certificate", + "type": "string", + "description": "Specifies the host name of the server. The value of this property must match the subject property of the certificate.", + "order": 8 + } + } + } + ] + }, + "tunnel_method": { + "type": "object", + "title": "SSH Tunnel Method", + "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", + "oneOf": [ + { + "title": "No Tunnel", + "required": ["tunnel_method"], + "properties": { + "tunnel_method": { + "description": "No ssh tunnel needed to connect to database", + "type": "string", + "const": "NO_TUNNEL", + "order": 0 + } + } + }, + { + "title": "SSH Key Authentication", + "required": [ + "tunnel_method", + "tunnel_host", + "tunnel_port", + "tunnel_user", + "ssh_key" + ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": ["22"], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host.", + "type": "string", + "order": 3 + }, + "ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + }, + { + "title": "Password Authentication", + "required": [ + "tunnel_method", + "tunnel_host", + "tunnel_port", + "tunnel_user", + "tunnel_user_password" + ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": ["22"], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host", + "type": "string", + "order": 3 + }, + "tunnel_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 4 + } + } + } + ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": true, + "supportsDBT": true, + "supported_destination_sync_modes": [ + "overwrite", + "append", + "append_dedup" + ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "normalizationConfig": { + "normalizationRepository": "airbyte/normalization-mssql", + "normalizationTag": "0.4.0", + "normalizationIntegrationType": "mssql" + }, + "supportsDbt": true + }, + { + "destinationDefinitionId": "af7c921e-5892-4ff2-b6c1-4a5ab258fb7e", + "name": "MeiliSearch", + "dockerRepository": "airbyte/destination-meilisearch", + "dockerImageTag": "1.0.0", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/meilisearch", + "icon": "meilisearch.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/meilisearch", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Destination Meilisearch", + "type": "object", + "required": ["host"], + "additionalProperties": false, + "properties": { + "host": { + "title": "Host", + "description": "Hostname of the MeiliSearch instance.", + "type": "string", + "order": 0 + }, + "api_key": { + "title": "API Key", + "airbyte_secret": true, + "description": "MeiliSearch API Key. See the docs for more information on how to obtain this key.", + "type": "string", + "order": 1 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["overwrite", "append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "8b746512-8c2e-6ac1-4adc-b59faafd473c", + "name": "MongoDB", + "dockerRepository": "airbyte/destination-mongodb", + "dockerImageTag": "0.1.9", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mongodb", + "icon": "mongodb.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mongodb", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "MongoDB Destination Spec", + "type": "object", + "required": ["database", "auth_type"], + "properties": { + "instance_type": { + "description": "MongoDb instance to connect to. For MongoDB Atlas and Replica Set TLS connection is used by default.", + "title": "MongoDb Instance Type", + "type": "object", + "order": 0, + "oneOf": [ + { + "title": "Standalone MongoDb Instance", + "required": ["instance", "host", "port"], + "properties": { + "instance": { + "type": "string", + "enum": ["standalone"], + "default": "standalone" + }, + "host": { + "title": "Host", + "type": "string", + "description": "The Host of a Mongo database to be replicated.", + "order": 0 + }, + "port": { + "title": "Port", + "type": "integer", + "description": "The Port of a Mongo database to be replicated.", + "minimum": 0, + "maximum": 65536, + "default": 27017, + "examples": ["27017"], + "order": 1 + }, + "tls": { + "title": "TLS Connection", + "type": "boolean", + "description": "Indicates whether TLS encryption protocol will be used to connect to MongoDB. It is recommended to use TLS connection if possible. For more information see documentation.", + "default": false, + "order": 2 + } + } + }, + { + "title": "Replica Set", + "required": ["instance", "server_addresses"], + "properties": { + "instance": { + "type": "string", + "enum": ["replica"], + "default": "replica" + }, + "server_addresses": { + "title": "Server addresses", + "type": "string", + "description": "The members of a replica set. Please specify `host`:`port` of each member seperated by comma.", + "examples": ["host1:27017,host2:27017,host3:27017"], + "order": 0 + }, + "replica_set": { + "title": "Replica Set", + "type": "string", + "description": "A replica set name.", + "order": 1 + } + } + }, + { + "title": "MongoDB Atlas", + "required": ["instance", "cluster_url"], + "properties": { + "instance": { + "type": "string", + "enum": ["atlas"], + "default": "atlas" + }, + "cluster_url": { + "title": "Cluster URL", + "type": "string", + "description": "URL of a cluster to connect to.", + "order": 0 + } + } + } + ] + }, + "database": { + "title": "DB Name", + "description": "Name of the database.", + "type": "string", + "order": 2 + }, + "auth_type": { + "title": "Authorization type", + "type": "object", + "description": "Authorization type.", + "oneOf": [ + { + "title": "None", + "description": "None.", + "required": ["authorization"], + "type": "object", + "properties": { + "authorization": { + "type": "string", + "const": "none" + } + } + }, + { + "title": "Login/Password", + "description": "Login/Password.", + "required": ["authorization", "username", "password"], + "type": "object", + "properties": { + "authorization": { + "type": "string", + "const": "login/password" + }, + "username": { + "title": "User", + "description": "Username to use to access the database.", + "type": "string", + "order": 1 + }, + "password": { + "title": "Password", + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 2 + } + } + } + ] + }, + "tunnel_method": { + "type": "object", + "title": "SSH Tunnel Method", + "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", + "oneOf": [ + { + "title": "No Tunnel", + "required": ["tunnel_method"], + "properties": { + "tunnel_method": { + "description": "No ssh tunnel needed to connect to database", + "type": "string", + "const": "NO_TUNNEL", + "order": 0 + } + } + }, + { + "title": "SSH Key Authentication", + "required": [ + "tunnel_method", + "tunnel_host", + "tunnel_port", + "tunnel_user", + "ssh_key" + ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": ["22"], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host.", + "type": "string", + "order": 3 + }, + "ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + }, + { + "title": "Password Authentication", + "required": [ + "tunnel_method", + "tunnel_host", + "tunnel_port", + "tunnel_user", + "tunnel_user_password" + ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": ["22"], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host", + "type": "string", + "order": 3 + }, + "tunnel_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 4 + } + } + } + ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["overwrite", "append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "ca81ee7c-3163-4246-af40-094cc31e5e42", + "name": "MySQL", + "dockerRepository": "airbyte/destination-mysql", + "dockerImageTag": "0.1.20", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mysql", + "icon": "mysql.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mysql", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "MySQL Destination Spec", + "type": "object", + "required": ["host", "port", "username", "database"], + "additionalProperties": true, + "properties": { + "host": { + "title": "Host", + "description": "Hostname of the database.", + "type": "string", + "order": 0 + }, + "port": { + "title": "Port", + "description": "Port of the database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 3306, + "examples": ["3306"], + "order": 1 + }, + "database": { + "title": "DB Name", + "description": "Name of the database.", + "type": "string", + "order": 2 + }, + "username": { + "title": "User", + "description": "Username to use to access the database.", + "type": "string", + "order": 3 + }, + "password": { + "title": "Password", + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 4 + }, + "ssl": { + "title": "SSL Connection", + "description": "Encrypt data using SSL.", + "type": "boolean", + "default": true, + "order": 5 + }, + "jdbc_url_params": { + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", + "title": "JDBC URL Params", + "type": "string", + "order": 6 + }, + "tunnel_method": { + "type": "object", + "title": "SSH Tunnel Method", + "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", + "oneOf": [ + { + "title": "No Tunnel", + "required": ["tunnel_method"], + "properties": { + "tunnel_method": { + "description": "No ssh tunnel needed to connect to database", + "type": "string", + "const": "NO_TUNNEL", + "order": 0 + } + } + }, + { + "title": "SSH Key Authentication", + "required": [ + "tunnel_method", + "tunnel_host", + "tunnel_port", + "tunnel_user", + "ssh_key" + ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": ["22"], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host.", + "type": "string", + "order": 3 + }, + "ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + }, + { + "title": "Password Authentication", + "required": [ + "tunnel_method", + "tunnel_host", + "tunnel_port", + "tunnel_user", + "tunnel_user_password" + ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": ["22"], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host", + "type": "string", + "order": 3 + }, + "tunnel_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 4 + } + } + } + ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": true, + "supportsDBT": true, + "supported_destination_sync_modes": ["overwrite", "append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "normalizationConfig": { + "normalizationRepository": "airbyte/normalization-mysql", + "normalizationTag": "0.4.0", + "normalizationIntegrationType": "mysql" + }, + "supportsDbt": true + }, + { + "destinationDefinitionId": "3986776d-2319-4de9-8af8-db14c0996e72", + "name": "Oracle", + "dockerRepository": "airbyte/destination-oracle", + "dockerImageTag": "0.1.19", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/oracle", + "icon": "oracle.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/oracle", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Oracle Destination Spec", + "type": "object", + "required": ["host", "port", "username", "sid"], + "additionalProperties": true, + "properties": { + "host": { + "title": "Host", + "description": "The hostname of the database.", + "type": "string", + "order": 0 + }, + "port": { + "title": "Port", + "description": "The port of the database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 1521, + "examples": ["1521"], + "order": 1 + }, + "sid": { + "title": "SID", + "description": "The System Identifier uniquely distinguishes the instance from any other instance on the same computer.", + "type": "string", + "order": 2 + }, + "username": { + "title": "User", + "description": "The username to access the database. This user must have CREATE USER privileges in the database.", + "type": "string", + "order": 3 + }, + "password": { + "title": "Password", + "description": "The password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 4 + }, + "jdbc_url_params": { + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", + "title": "JDBC URL Params", + "type": "string", + "order": 5 + }, + "schema": { + "title": "Default Schema", + "description": "The default schema is used as the target schema for all statements issued from the connection that do not explicitly specify a schema name. The usual value for this field is \"airbyte\". In Oracle, schemas and users are the same thing, so the \"user\" parameter is used as the login credentials and this is used for the default Airbyte message schema.", + "type": "string", + "examples": ["airbyte"], + "default": "airbyte", + "order": 6 + }, + "encryption": { + "title": "Encryption", + "type": "object", + "description": "The encryption method which is used when communicating with the database.", + "order": 7, + "oneOf": [ + { + "title": "Unencrypted", + "description": "Data transfer will not be encrypted.", + "required": ["encryption_method"], + "properties": { + "encryption_method": { + "type": "string", + "const": "unencrypted", + "enum": ["unencrypted"], + "default": "unencrypted" + } + } + }, + { + "title": "Native Network Encryption (NNE)", + "description": "The native network encryption gives you the ability to encrypt database connections, without the configuration overhead of TCP/IP and SSL/TLS and without the need to open and listen on different ports.", + "required": ["encryption_method"], + "properties": { + "encryption_method": { + "type": "string", + "const": "client_nne", + "enum": ["client_nne"], + "default": "client_nne" + }, + "encryption_algorithm": { + "type": "string", + "description": "This parameter defines the database encryption algorithm.", + "title": "Encryption Algorithm", + "default": "AES256", + "enum": ["AES256", "RC4_56", "3DES168"] + } + } + }, + { + "title": "TLS Encrypted (verify certificate)", + "description": "Verify and use the certificate provided by the server.", + "required": ["encryption_method", "ssl_certificate"], + "properties": { + "encryption_method": { + "type": "string", + "const": "encrypted_verify_certificate", + "enum": ["encrypted_verify_certificate"], + "default": "encrypted_verify_certificate" + }, + "ssl_certificate": { + "title": "SSL PEM file", + "description": "Privacy Enhanced Mail (PEM) files are concatenated certificate containers frequently used in certificate installations.", + "type": "string", + "airbyte_secret": true, + "multiline": true + } + } + } + ] + }, + "tunnel_method": { + "type": "object", + "title": "SSH Tunnel Method", + "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", + "oneOf": [ + { + "title": "No Tunnel", + "required": ["tunnel_method"], + "properties": { + "tunnel_method": { + "description": "No ssh tunnel needed to connect to database", + "type": "string", + "const": "NO_TUNNEL", + "order": 0 + } + } + }, + { + "title": "SSH Key Authentication", + "required": [ + "tunnel_method", + "tunnel_host", + "tunnel_port", + "tunnel_user", + "ssh_key" + ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": ["22"], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host.", + "type": "string", + "order": 3 + }, + "ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + }, + { + "title": "Password Authentication", + "required": [ + "tunnel_method", + "tunnel_host", + "tunnel_port", + "tunnel_user", + "tunnel_user_password" + ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": ["22"], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host", + "type": "string", + "order": 3 + }, + "tunnel_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 4 + } + } + } + ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["overwrite", "append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "normalizationConfig": { + "normalizationRepository": "airbyte/normalization-oracle", + "normalizationTag": "0.4.0", + "normalizationIntegrationType": "oracle" + }, + "supportsDbt": true + }, + { + "destinationDefinitionId": "25c5221d-dce2-4163-ade9-739ef790f503", + "name": "Postgres", + "dockerRepository": "airbyte/destination-postgres", + "dockerImageTag": "0.3.27", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/postgres", + "icon": "postgresql.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/postgres", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Postgres Destination Spec", + "type": "object", + "required": ["host", "port", "username", "database", "schema"], + "additionalProperties": true, + "properties": { + "host": { + "title": "Host", + "description": "Hostname of the database.", + "type": "string", + "order": 0 + }, + "port": { + "title": "Port", + "description": "Port of the database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 5432, + "examples": ["5432"], + "order": 1 + }, + "database": { + "title": "DB Name", + "description": "Name of the database.", + "type": "string", + "order": 2 + }, + "schema": { + "title": "Default Schema", + "description": "The default schema tables are written to if the source does not specify a namespace. The usual value for this field is \"public\".", + "type": "string", + "examples": ["public"], + "default": "public", + "order": 3 + }, + "username": { + "title": "User", + "description": "Username to use to access the database.", + "type": "string", + "order": 4 + }, + "password": { + "title": "Password", + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 5 + }, + "ssl": { + "title": "SSL Connection", + "description": "Encrypt data using SSL. When activating SSL, please select one of the connection modes.", + "type": "boolean", + "default": false, + "order": 6 + }, + "ssl_mode": { + "title": "SSL modes", + "description": "SSL connection modes. \n disable - Chose this mode to disable encryption of communication between Airbyte and destination database\n allow - Chose this mode to enable encryption only when required by the source database\n prefer - Chose this mode to allow unencrypted connection only if the source database does not support encryption\n require - Chose this mode to always require encryption. If the source database server does not support encryption, connection will fail\n verify-ca - Chose this mode to always require encryption and to verify that the source database server has a valid SSL certificate\n verify-full - This is the most secure mode. Chose this mode to always require encryption and to verify the identity of the source database server\n See more information - in the docs.", + "type": "object", + "order": 7, + "oneOf": [ + { + "title": "disable", + "additionalProperties": false, + "description": "Disable SSL.", + "required": ["mode"], + "properties": { + "mode": { + "type": "string", + "const": "disable", + "enum": ["disable"], + "default": "disable", + "order": 0 + } + } + }, + { + "title": "allow", + "additionalProperties": false, + "description": "Allow SSL mode.", + "required": ["mode"], + "properties": { + "mode": { + "type": "string", + "const": "allow", + "enum": ["allow"], + "default": "allow", + "order": 0 + } + } + }, + { + "title": "prefer", + "additionalProperties": false, + "description": "Prefer SSL mode.", + "required": ["mode"], + "properties": { + "mode": { + "type": "string", + "const": "prefer", + "enum": ["prefer"], + "default": "prefer", + "order": 0 + } + } + }, + { + "title": "require", + "additionalProperties": false, + "description": "Require SSL mode.", + "required": ["mode"], + "properties": { + "mode": { + "type": "string", + "const": "require", + "enum": ["require"], + "default": "require", + "order": 0 + } + } + }, + { + "title": "verify-ca", + "additionalProperties": false, + "description": "Verify-ca SSL mode.", + "required": ["mode", "ca_certificate"], + "properties": { + "mode": { + "type": "string", + "const": "verify-ca", + "enum": ["verify-ca"], + "default": "verify-ca", + "order": 0 + }, + "ca_certificate": { + "type": "string", + "title": "CA certificate", + "description": "CA certificate", + "airbyte_secret": true, + "multiline": true, + "order": 1 + }, + "client_key_password": { + "type": "string", + "title": "Client key password", + "description": "Password for keystorage. This field is optional. If you do not add it - the password will be generated automatically.", + "airbyte_secret": true, + "order": 4 + } + } + }, + { + "title": "verify-full", + "additionalProperties": false, + "description": "Verify-full SSL mode.", + "required": [ + "mode", + "ca_certificate", + "client_certificate", + "client_key" + ], + "properties": { + "mode": { + "type": "string", + "const": "verify-full", + "enum": ["verify-full"], + "default": "verify-full", + "order": 0 + }, + "ca_certificate": { + "type": "string", + "title": "CA certificate", + "description": "CA certificate", + "airbyte_secret": true, + "multiline": true, + "order": 1 + }, + "client_certificate": { + "type": "string", + "title": "Client certificate", + "description": "Client certificate", + "airbyte_secret": true, + "multiline": true, + "order": 2 + }, + "client_key": { + "type": "string", + "title": "Client key", + "description": "Client key", + "airbyte_secret": true, + "multiline": true, + "order": 3 + }, + "client_key_password": { + "type": "string", + "title": "Client key password", + "description": "Password for keystorage. This field is optional. If you do not add it - the password will be generated automatically.", + "airbyte_secret": true, + "order": 4 + } + } + } + ] + }, + "jdbc_url_params": { + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", + "title": "JDBC URL Params", + "type": "string", + "order": 8 + }, + "tunnel_method": { + "type": "object", + "title": "SSH Tunnel Method", + "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", + "oneOf": [ + { + "title": "No Tunnel", + "required": ["tunnel_method"], + "properties": { + "tunnel_method": { + "description": "No ssh tunnel needed to connect to database", + "type": "string", + "const": "NO_TUNNEL", + "order": 0 + } + } + }, + { + "title": "SSH Key Authentication", + "required": [ + "tunnel_method", + "tunnel_host", + "tunnel_port", + "tunnel_user", + "ssh_key" + ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": ["22"], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host.", + "type": "string", + "order": 3 + }, + "ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + }, + { + "title": "Password Authentication", + "required": [ + "tunnel_method", + "tunnel_host", + "tunnel_port", + "tunnel_user", + "tunnel_user_password" + ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": ["22"], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host", + "type": "string", + "order": 3 + }, + "tunnel_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 4 + } + } + } + ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": true, + "supportsDBT": true, + "supported_destination_sync_modes": [ + "overwrite", + "append", + "append_dedup" + ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "normalizationConfig": { + "normalizationRepository": "airbyte/normalization", + "normalizationTag": "0.4.0", + "normalizationIntegrationType": "postgres" + }, + "supportsDbt": true + }, + { + "destinationDefinitionId": "2340cbba-358e-11ec-8d3d-0242ac130203", + "name": "Pulsar", + "dockerRepository": "airbyte/destination-pulsar", + "dockerImageTag": "0.1.3", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/pulsar", + "icon": "pulsar.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/pulsar", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Pulsar Destination Spec", + "type": "object", + "required": [ + "brokers", + "use_tls", + "topic_type", + "topic_tenant", + "topic_namespace", + "topic_pattern", + "compression_type", + "send_timeout_ms", + "max_pending_messages", + "max_pending_messages_across_partitions", + "batching_enabled", + "batching_max_messages", + "batching_max_publish_delay", + "block_if_queue_full" + ], + "additionalProperties": true, + "properties": { + "brokers": { + "title": "Pulsar brokers", + "description": "A list of host/port pairs to use for establishing the initial connection to the Pulsar cluster.", + "type": "string", + "examples": ["broker1:6650,broker2:6650"] + }, + "use_tls": { + "title": "Use TLS", + "description": "Whether to use TLS encryption on the connection.", + "type": "boolean", + "default": false + }, + "topic_type": { + "title": "Topic type", + "description": "It identifies type of topic. Pulsar supports two kind of topics: persistent and non-persistent. In persistent topic, all messages are durably persisted on disk (that means on multiple disks unless the broker is standalone), whereas non-persistent topic does not persist message into storage disk.", + "type": "string", + "default": "persistent", + "enum": ["persistent", "non-persistent"] + }, + "topic_tenant": { + "title": "Topic tenant", + "description": "The topic tenant within the instance. Tenants are essential to multi-tenancy in Pulsar, and spread across clusters.", + "type": "string", + "default": "public", + "examples": ["public"] + }, + "topic_namespace": { + "title": "Topic namespace", + "description": "The administrative unit of the topic, which acts as a grouping mechanism for related topics. Most topic configuration is performed at the namespace level. Each tenant has one or multiple namespaces.", + "type": "string", + "default": "default", + "examples": ["default"] + }, + "topic_pattern": { + "title": "Topic pattern", + "description": "Topic pattern in which the records will be sent. You can use patterns like '{namespace}' and/or '{stream}' to send the message to a specific topic based on these values. Notice that the topic name will be transformed to a standard naming convention.", + "type": "string", + "examples": ["sample.topic", "{namespace}.{stream}.sample"] + }, + "topic_test": { + "title": "Test topic", + "description": "Topic to test if Airbyte can produce messages.", + "type": "string", + "examples": ["test.topic"] + }, + "producer_name": { + "title": "Producer name", + "description": "Name for the producer. If not filled, the system will generate a globally unique name which can be accessed with.", + "type": "string", + "examples": ["airbyte-producer"] + }, + "producer_sync": { + "title": "Sync producer", + "description": "Wait synchronously until the record has been sent to Pulsar.", + "type": "boolean", + "default": false + }, + "compression_type": { + "title": "Compression type", + "description": "Compression type for the producer.", + "type": "string", + "default": "NONE", + "enum": ["NONE", "LZ4", "ZLIB", "ZSTD", "SNAPPY"] + }, + "send_timeout_ms": { + "title": "Message send timeout", + "description": "If a message is not acknowledged by a server before the send-timeout expires, an error occurs (in ms).", + "type": "integer", + "default": 30000 + }, + "max_pending_messages": { + "title": "Max pending messages", + "description": "The maximum size of a queue holding pending messages.", + "type": "integer", + "default": 1000 + }, + "max_pending_messages_across_partitions": { + "title": "Max pending messages across partitions", + "description": "The maximum number of pending messages across partitions.", + "type": "integer", + "default": 50000 + }, + "batching_enabled": { + "title": "Enable batching", + "description": "Control whether automatic batching of messages is enabled for the producer.", + "type": "boolean", + "default": true + }, + "batching_max_messages": { + "title": "Batching max messages", + "description": "Maximum number of messages permitted in a batch.", + "type": "integer", + "default": 1000 + }, + "batching_max_publish_delay": { + "title": "Batching max publish delay", + "description": " Time period in milliseconds within which the messages sent will be batched.", + "type": "integer", + "default": 1 + }, + "block_if_queue_full": { + "title": "Block if queue is full", + "description": "If the send operation should block when the outgoing message queue is full.", + "type": "boolean", + "default": false + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "e06ad785-ad6f-4647-b2e8-3027a5c59454", + "name": "RabbitMQ", + "dockerRepository": "airbyte/destination-rabbitmq", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/rabbitmq", + "icon": "pulsar.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/rabbitmq", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Destination Rabbitmq", + "type": "object", + "required": ["host", "routing_key"], + "additionalProperties": false, + "properties": { + "ssl": { + "type": "boolean", + "description": "SSL enabled.", + "default": true + }, + "host": { + "type": "string", + "description": "The RabbitMQ host name." + }, + "port": { + "type": "integer", + "description": "The RabbitMQ port." + }, + "virtual_host": { + "type": "string", + "description": "The RabbitMQ virtual host name." + }, + "username": { + "type": "string", + "description": "The username to connect." + }, + "password": { + "type": "string", + "title": "Password", + "description": "The password to connect.", + "airbyte_secret": true + }, + "exchange": { + "type": "string", + "description": "The exchange name." + }, + "routing_key": { + "type": "string", + "description": "The routing key." + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "d4d3fef9-e319-45c2-881a-bd02ce44cc9f", + "name": "Redis", + "dockerRepository": "airbyte/destination-redis", + "dockerImageTag": "0.1.4", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/redis", + "icon": "redis.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/redis", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Redis Destination Spec", + "type": "object", + "required": ["host", "username", "port", "cache_type"], + "additionalProperties": false, + "properties": { + "host": { + "title": "Host", + "description": "Redis host to connect to.", + "type": "string", + "examples": ["localhost,127.0.0.1"], + "order": 1 + }, + "port": { + "title": "Port", + "description": "Port of Redis.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 6379, + "order": 2 + }, + "username": { + "title": "Username", + "description": "Username associated with Redis.", + "type": "string", + "order": 3 + }, + "password": { + "title": "Password", + "description": "Password associated with Redis.", + "type": "string", + "airbyte_secret": true, + "order": 4 + }, + "ssl": { + "title": "SSL Connection", + "type": "boolean", + "description": "Indicates whether SSL encryption protocol will be used to connect to Redis. It is recommended to use SSL connection if possible.", + "default": false, + "order": 5 + }, + "ssl_mode": { + "title": "SSL Modes", + "description": "SSL connection modes. \n
  • verify-full - This is the most secure mode. Always require encryption and verifies the identity of the source database server", + "type": "object", + "order": 6, + "oneOf": [ + { + "title": "disable", + "additionalProperties": false, + "description": "Disable SSL.", + "required": ["mode"], + "properties": { + "mode": { + "type": "string", + "const": "disable", + "enum": ["disable"], + "default": "disable", + "order": 0 + } + } + }, + { + "title": "verify-full", + "additionalProperties": false, + "description": "Verify-full SSL mode.", + "required": [ + "mode", + "ca_certificate", + "client_certificate", + "client_key" + ], + "properties": { + "mode": { + "type": "string", + "const": "verify-full", + "enum": ["verify-full"], + "default": "verify-full", + "order": 0 + }, + "ca_certificate": { + "type": "string", + "title": "CA Certificate", + "description": "CA certificate", + "airbyte_secret": true, + "multiline": true, + "order": 1 + }, + "client_certificate": { + "type": "string", + "title": "Client Certificate", + "description": "Client certificate", + "airbyte_secret": true, + "multiline": true, + "order": 2 + }, + "client_key": { + "type": "string", + "title": "Client Key", + "description": "Client key", + "airbyte_secret": true, + "multiline": true, + "order": 3 + }, + "client_key_password": { + "type": "string", + "title": "Client key password", + "description": "Password for keystorage. If you do not add it - the password will be generated automatically.", + "airbyte_secret": true, + "order": 4 + } + } + } + ] + }, + "cache_type": { + "title": "Cache type", + "type": "string", + "default": "hash", + "description": "Redis cache type to store data in.", + "enum": ["hash"], + "order": 7 + }, + "tunnel_method": { + "type": "object", + "title": "SSH Tunnel Method", + "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", + "oneOf": [ + { + "title": "No Tunnel", + "required": ["tunnel_method"], + "properties": { + "tunnel_method": { + "description": "No ssh tunnel needed to connect to database", + "type": "string", + "const": "NO_TUNNEL", + "order": 0 + } + } + }, + { + "title": "SSH Key Authentication", + "required": [ + "tunnel_method", + "tunnel_host", + "tunnel_port", + "tunnel_user", + "ssh_key" + ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": ["22"], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host.", + "type": "string", + "order": 3 + }, + "ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + }, + { + "title": "Password Authentication", + "required": [ + "tunnel_method", + "tunnel_host", + "tunnel_port", + "tunnel_user", + "tunnel_user_password" + ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": ["22"], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host", + "type": "string", + "order": 3 + }, + "tunnel_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 4 + } + } + } + ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["overwrite", "append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "f7a7d195-377f-cf5b-70a5-be6b819019dc", + "name": "Redshift", + "dockerRepository": "airbyte/destination-redshift", + "dockerImageTag": "0.4.5", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/redshift", + "icon": "redshift.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/redshift", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Redshift Destination Spec", + "type": "object", + "required": [ + "host", + "port", + "database", + "username", + "password", + "schema" + ], + "additionalProperties": true, + "properties": { + "host": { + "description": "Host Endpoint of the Redshift Cluster (must include the cluster-id, region and end with .redshift.amazonaws.com)", + "type": "string", + "title": "Host", + "order": 1 + }, + "port": { + "description": "Port of the database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 5439, + "examples": ["5439"], + "title": "Port", + "order": 2 + }, + "username": { + "description": "Username to use to access the database.", + "type": "string", + "title": "Username", + "order": 3 + }, + "password": { + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "title": "Password", + "order": 4 + }, + "database": { + "description": "Name of the database.", + "type": "string", + "title": "Database", + "order": 5 + }, + "schema": { + "description": "The default schema tables are written to if the source does not specify a namespace. Unless specifically configured, the usual value for this field is \"public\".", + "type": "string", + "examples": ["public"], + "default": "public", + "title": "Default Schema", + "order": 6 + }, + "jdbc_url_params": { + "title": "JDBC URL Params", + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", + "type": "string", + "order": 7 + }, + "uploading_method": { + "title": "Uploading Method", + "type": "object", + "description": "The method how the data will be uploaded to the database.", + "order": 8, + "oneOf": [ + { + "title": "Standard", + "required": ["method"], + "properties": { + "method": { + "type": "string", + "const": "Standard" + } + } + }, + { + "title": "S3 Staging", + "required": [ + "method", + "s3_bucket_name", + "s3_bucket_region", + "access_key_id", + "secret_access_key" + ], + "properties": { + "method": { + "type": "string", + "const": "S3 Staging" + }, + "s3_bucket_name": { + "title": "S3 Bucket Name", + "type": "string", + "description": "The name of the staging S3 bucket to use if utilising a COPY strategy. COPY is recommended for production workloads for better speed and scalability. See AWS docs for more details.", + "examples": ["airbyte.staging"] + }, + "s3_bucket_path": { + "title": "S3 Bucket Path", + "type": "string", + "description": "The directory under the S3 bucket where data will be written. If not provided, then defaults to the root directory. See path's name recommendations for more details.", + "examples": ["data_sync/test"] + }, + "s3_bucket_region": { + "title": "S3 Bucket Region", + "type": "string", + "default": "", + "description": "The region of the S3 staging bucket to use if utilising a COPY strategy. See AWS docs for details.", + "enum": [ + "", + "us-east-1", + "us-east-2", + "us-west-1", + "us-west-2", + "af-south-1", + "ap-east-1", + "ap-south-1", + "ap-northeast-1", + "ap-northeast-2", + "ap-northeast-3", + "ap-southeast-1", + "ap-southeast-2", + "ca-central-1", + "cn-north-1", + "cn-northwest-1", + "eu-central-1", + "eu-north-1", + "eu-south-1", + "eu-west-1", + "eu-west-2", + "eu-west-3", + "sa-east-1", + "me-south-1" + ] + }, + "file_name_pattern": { + "type": "string", + "description": "The pattern allows you to set the file-name format for the S3 staging file(s)", + "title": "S3 Filename pattern", + "examples": [ + "{date}", + "{date:yyyy_MM}", + "{timestamp}", + "{part_number}", + "{sync_id}" + ], + "order": 8 + }, + "access_key_id": { + "type": "string", + "description": "This ID grants access to the above S3 staging bucket. Airbyte requires Read and Write permissions to the given bucket. See AWS docs on how to generate an access key ID and secret access key.", + "title": "S3 Key Id", + "airbyte_secret": true + }, + "secret_access_key": { + "type": "string", + "description": "The corresponding secret to the above access key id. See AWS docs on how to generate an access key ID and secret access key.", + "title": "S3 Access Key", + "airbyte_secret": true + }, + "purge_staging_data": { + "title": "Purge Staging Files and Tables", + "type": "boolean", + "description": "Whether to delete the staging files from S3 after completing the sync. See docs for details.", + "default": true + }, + "encryption": { + "title": "Encryption", + "type": "object", + "description": "How to encrypt the staging data", + "default": { + "encryption_type": "none" + }, + "oneOf": [ + { + "title": "No encryption", + "description": "Staging data will be stored in plaintext.", + "type": "object", + "required": ["encryption_type"], + "properties": { + "encryption_type": { + "type": "string", + "const": "none", + "enum": ["none"], + "default": "none" + } + } + }, + { + "title": "AES-CBC envelope encryption", + "description": "Staging data will be encrypted using AES-CBC envelope encryption.", + "type": "object", + "required": ["encryption_type"], + "properties": { + "encryption_type": { + "type": "string", + "const": "aes_cbc_envelope", + "enum": ["aes_cbc_envelope"], + "default": "aes_cbc_envelope" + }, + "key_encrypting_key": { + "type": "string", + "title": "Key", + "description": "The key, base64-encoded. Must be either 128, 192, or 256 bits. Leave blank to have Airbyte generate an ephemeral key for each sync.", + "airbyte_secret": true + } + } + } + ] + }, + "file_buffer_count": { + "title": "File Buffer Count", + "type": "integer", + "minimum": 10, + "maximum": 50, + "default": 10, + "description": "Number of file buffers allocated for writing data. Increasing this number is beneficial for connections using Change Data Capture (CDC) and up to the number of streams within a connection. Increasing the number of file buffers past the maximum number of streams has deteriorating effects", + "examples": ["10"] + } + } + } + ] + }, + "tunnel_method": { + "type": "object", + "title": "SSH Tunnel Method", + "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", + "oneOf": [ + { + "title": "No Tunnel", + "required": ["tunnel_method"], + "properties": { + "tunnel_method": { + "description": "No ssh tunnel needed to connect to database", + "type": "string", + "const": "NO_TUNNEL", + "order": 0 + } + } + }, + { + "title": "SSH Key Authentication", + "required": [ + "tunnel_method", + "tunnel_host", + "tunnel_port", + "tunnel_user", + "ssh_key" + ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": ["22"], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host.", + "type": "string", + "order": 3 + }, + "ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + }, + { + "title": "Password Authentication", + "required": [ + "tunnel_method", + "tunnel_host", + "tunnel_port", + "tunnel_user", + "tunnel_user_password" + ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": ["22"], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host", + "type": "string", + "order": 3 + }, + "tunnel_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 4 + } + } + } + ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": true, + "supportsDBT": true, + "supported_destination_sync_modes": [ + "overwrite", + "append", + "append_dedup" + ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "resourceRequirements": { + "jobSpecific": [ + { + "jobType": "sync", + "resourceRequirements": { + "memory_request": "1Gi", + "memory_limit": "1Gi" + } + } + ] + }, + "normalizationConfig": { + "normalizationRepository": "airbyte/normalization-redshift", + "normalizationTag": "0.4.0", + "normalizationIntegrationType": "redshift" + }, + "supportsDbt": true + }, + { + "destinationDefinitionId": "825c5ee3-ed9a-4dd1-a2b6-79ed722f7b13", + "name": "Redpanda", + "dockerRepository": "airbyte/destination-redpanda", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/redpanda", + "icon": "redpanda.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/redpanda", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Redpanda destination connector", + "type": "object", + "required": [ + "bootstrap_servers", + "buffer_memory", + "compression_type", + "retries", + "batch_size" + ], + "properties": { + "bootstrap_servers": { + "title": "Bootstrap Servers", + "description": "A list of host/port pairs to use for establishing the initial connection to the Redpanda cluster. The client will make use of all servers irrespective of which servers are specified here for bootstrapping—this list only impacts the initial hosts used to discover the full set of servers. This list should be in the form host1:port1,host2:port2,.... Since these servers are just used for the initial connection to discover the full cluster membership (which may change dynamically), this list need not contain the full set of servers (you may want more than one, though, in case a server is down).", + "type": "string", + "examples": ["redpanda-broker1:9092,redpanda-broker2:9092"] + }, + "buffer_memory": { + "title": "Buffer Memory", + "description": "The total bytes of memory the producer can use to buffer records waiting to be sent to the server.", + "type": "string", + "examples": 33554432 + }, + "compression_type": { + "title": "Compression Type", + "description": "The compression type for all data generated by the producer.", + "type": "string", + "default": "none", + "enum": ["none", "gzip", "snappy", "lz4", "zstd"] + }, + "batch_size": { + "title": "Batch Size", + "description": "The producer will attempt to batch records together into fewer requests whenever multiple records are being sent to the same partition.", + "type": "integer", + "examples": [16384] + }, + "retries": { + "title": "Retries", + "description": "Setting a value greater than zero will cause the client to resend any record whose send fails with a potentially transient error.", + "type": "integer", + "examples": [2147483647] + }, + "topic_num_partitions": { + "title": "Number of topic partitions", + "description": "The number of topic partitions which will be created on topic creation", + "type": "integer", + "examples": [10] + }, + "topic_replication_factor": { + "title": "Topic replication factor", + "description": "The number of topics to which messages will be replicated", + "type": "integer", + "examples": [10] + }, + "socket_connection_setup_timeout_ms": { + "title": "Socket Connection Setup Timeout", + "description": "The amount of time the client will wait for the socket connection to be established.", + "type": "integer", + "examples": [10000] + }, + "socket_connection_setup_timeout_max_ms": { + "title": "Socket Connection Setup Max Timeout", + "description": "The maximum amount of time the client will wait for the socket connection to be established. The connection setup timeout will increase exponentially for each consecutive connection failure up to this maximum.", + "type": "integer", + "examples": [30000] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "2c9d93a7-9a17-4789-9de9-f46f0097eb70", + "name": "Rockset", + "dockerRepository": "airbyte/destination-rockset", + "dockerImageTag": "0.1.4", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/rockset", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/rockset", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Rockset Destination Spec", + "type": "object", + "required": ["api_key", "workspace"], + "additionalProperties": false, + "properties": { + "api_key": { + "title": "Api Key", + "description": "Rockset api key", + "type": "string", + "order": 0, + "airbyte_secret": true + }, + "workspace": { + "title": "Workspace", + "description": "The Rockset workspace in which collections will be created + written to.", + "type": "string", + "examples": ["commons", "my_workspace"], + "default": "commons", + "airbyte_secret": false, + "order": 1 + }, + "api_server": { + "title": "Api Server", + "description": "Rockset api URL", + "type": "string", + "airbyte_secret": false, + "default": "https://api.rs2.usw2.rockset.com", + "pattern": "^https:\\/\\/.*.rockset.com$", + "order": 2 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["append", "overwrite"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "4816b78f-1489-44c1-9060-4b19d5fa9362", + "name": "S3", + "dockerRepository": "airbyte/destination-s3", + "dockerImageTag": "0.3.23", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/s3", + "icon": "s3.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/s3", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "S3 Destination Spec", + "type": "object", + "required": [ + "s3_bucket_name", + "s3_bucket_path", + "s3_bucket_region", + "format" + ], + "properties": { + "access_key_id": { + "type": "string", + "description": "The access key ID to access the S3 bucket. Airbyte requires Read and Write permissions to the given bucket. Read more here.", + "title": "S3 Key ID", + "airbyte_secret": true, + "examples": ["A012345678910EXAMPLE"], + "order": 0 + }, + "secret_access_key": { + "type": "string", + "description": "The corresponding secret to the access key ID. Read more here", + "title": "S3 Access Key", + "airbyte_secret": true, + "examples": ["a012345678910ABCDEFGH/AbCdEfGhEXAMPLEKEY"], + "order": 1 + }, + "s3_bucket_name": { + "title": "S3 Bucket Name", + "type": "string", + "description": "The name of the S3 bucket. Read more here.", + "examples": ["airbyte_sync"], + "order": 2 + }, + "s3_bucket_path": { + "title": "S3 Bucket Path", + "description": "Directory under the S3 bucket where data will be written. Read more here", + "type": "string", + "examples": ["data_sync/test"], + "order": 3 + }, + "s3_bucket_region": { + "title": "S3 Bucket Region", + "type": "string", + "default": "", + "description": "The region of the S3 bucket. See here for all region codes.", + "enum": [ + "", + "us-east-1", + "us-east-2", + "us-west-1", + "us-west-2", + "af-south-1", + "ap-east-1", + "ap-south-1", + "ap-northeast-1", + "ap-northeast-2", + "ap-northeast-3", + "ap-southeast-1", + "ap-southeast-2", + "ca-central-1", + "cn-north-1", + "cn-northwest-1", + "eu-central-1", + "eu-north-1", + "eu-south-1", + "eu-west-1", + "eu-west-2", + "eu-west-3", + "sa-east-1", + "me-south-1", + "us-gov-east-1", + "us-gov-west-1" + ], + "order": 4 + }, + "format": { + "title": "Output Format", + "type": "object", + "description": "Format of the data output. See here for more details", + "oneOf": [ + { + "title": "Avro: Apache Avro", + "required": ["format_type", "compression_codec"], + "properties": { + "format_type": { + "title": "Format Type", + "type": "string", + "enum": ["Avro"], + "default": "Avro", + "order": 0 + }, + "compression_codec": { + "title": "Compression Codec", + "description": "The compression algorithm used to compress data. Default to no compression.", + "type": "object", + "oneOf": [ + { + "title": "No Compression", + "required": ["codec"], + "properties": { + "codec": { + "type": "string", + "enum": ["no compression"], + "default": "no compression" + } + } + }, + { + "title": "Deflate", + "required": ["codec", "compression_level"], + "properties": { + "codec": { + "type": "string", + "enum": ["Deflate"], + "default": "Deflate" + }, + "compression_level": { + "title": "Deflate Level", + "description": "0: no compression & fastest, 9: best compression & slowest.", + "type": "integer", + "default": 0, + "minimum": 0, + "maximum": 9 + } + } + }, + { + "title": "bzip2", + "required": ["codec"], + "properties": { + "codec": { + "type": "string", + "enum": ["bzip2"], + "default": "bzip2" + } + } + }, + { + "title": "xz", + "required": ["codec", "compression_level"], + "properties": { + "codec": { + "type": "string", + "enum": ["xz"], + "default": "xz" + }, + "compression_level": { + "title": "Compression Level", + "description": "See here for details.", + "type": "integer", + "default": 6, + "minimum": 0, + "maximum": 9 + } + } + }, + { + "title": "zstandard", + "required": ["codec", "compression_level"], + "properties": { + "codec": { + "type": "string", + "enum": ["zstandard"], + "default": "zstandard" + }, + "compression_level": { + "title": "Compression Level", + "description": "Negative levels are 'fast' modes akin to lz4 or snappy, levels above 9 are generally for archival purposes, and levels above 18 use a lot of memory.", + "type": "integer", + "default": 3, + "minimum": -5, + "maximum": 22 + }, + "include_checksum": { + "title": "Include Checksum", + "description": "If true, include a checksum with each data block.", + "type": "boolean", + "default": false + } + } + }, + { + "title": "snappy", + "required": ["codec"], + "properties": { + "codec": { + "type": "string", + "enum": ["snappy"], + "default": "snappy" + } + } + } + ], + "order": 1 + } + } + }, + { + "title": "CSV: Comma-Separated Values", + "required": ["format_type", "flattening"], + "properties": { + "format_type": { + "title": "Format Type", + "type": "string", + "enum": ["CSV"], + "default": "CSV" + }, + "flattening": { + "type": "string", + "title": "Flattening", + "description": "Whether the input json data should be normalized (flattened) in the output CSV. Please refer to docs for details.", + "default": "No flattening", + "enum": ["No flattening", "Root level flattening"] + }, + "compression": { + "title": "Compression", + "type": "object", + "description": "Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \".csv.gz\").", + "oneOf": [ + { + "title": "No Compression", + "requires": ["compression_type"], + "properties": { + "compression_type": { + "type": "string", + "enum": ["No Compression"], + "default": "No Compression" + } + } + }, + { + "title": "GZIP", + "requires": ["compression_type"], + "properties": { + "compression_type": { + "type": "string", + "enum": ["GZIP"], + "default": "GZIP" + } + } + } + ] + } + } + }, + { + "title": "JSON Lines: Newline-delimited JSON", + "required": ["format_type"], + "properties": { + "format_type": { + "title": "Format Type", + "type": "string", + "enum": ["JSONL"], + "default": "JSONL" + }, + "flattening": { + "type": "string", + "title": "Flattening", + "description": "Whether the input json data should be normalized (flattened) in the output JSON Lines. Please refer to docs for details.", + "default": "No flattening", + "enum": ["No flattening", "Root level flattening"] + }, + "compression": { + "title": "Compression", + "type": "object", + "description": "Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \".jsonl.gz\").", + "oneOf": [ + { + "title": "No Compression", + "requires": "compression_type", + "properties": { + "compression_type": { + "type": "string", + "enum": ["No Compression"], + "default": "No Compression" + } + } + }, + { + "title": "GZIP", + "requires": "compression_type", + "properties": { + "compression_type": { + "type": "string", + "enum": ["GZIP"], + "default": "GZIP" + } + } + } + ] + } + } + }, + { + "title": "Parquet: Columnar Storage", + "required": ["format_type"], + "properties": { + "format_type": { + "title": "Format Type", + "type": "string", + "enum": ["Parquet"], + "default": "Parquet" + }, + "compression_codec": { + "title": "Compression Codec", + "description": "The compression algorithm used to compress data pages.", + "type": "string", + "enum": [ + "UNCOMPRESSED", + "SNAPPY", + "GZIP", + "LZO", + "BROTLI", + "LZ4", + "ZSTD" + ], + "default": "UNCOMPRESSED" + }, + "block_size_mb": { + "title": "Block Size (Row Group Size) (MB)", + "description": "This is the size of a row group being buffered in memory. It limits the memory usage when writing. Larger values will improve the IO when reading, but consume more memory when writing. Default: 128 MB.", + "type": "integer", + "default": 128, + "examples": [128] + }, + "max_padding_size_mb": { + "title": "Max Padding Size (MB)", + "description": "Maximum size allowed as padding to align row groups. This is also the minimum size of a row group. Default: 8 MB.", + "type": "integer", + "default": 8, + "examples": [8] + }, + "page_size_kb": { + "title": "Page Size (KB)", + "description": "The page size is for compression. A block is composed of pages. A page is the smallest unit that must be read fully to access a single record. If this value is too small, the compression will deteriorate. Default: 1024 KB.", + "type": "integer", + "default": 1024, + "examples": [1024] + }, + "dictionary_page_size_kb": { + "title": "Dictionary Page Size (KB)", + "description": "There is one dictionary page per column per row group when dictionary encoding is used. The dictionary page size works like the page size but for dictionary. Default: 1024 KB.", + "type": "integer", + "default": 1024, + "examples": [1024] + }, + "dictionary_encoding": { + "title": "Dictionary Encoding", + "description": "Default: true.", + "type": "boolean", + "default": true + } + } + } + ], + "order": 5 + }, + "s3_endpoint": { + "title": "Endpoint", + "type": "string", + "default": "", + "description": "Your S3 endpoint url. Read more here", + "examples": ["http://localhost:9000"], + "order": 6 + }, + "s3_path_format": { + "title": "S3 Path Format", + "description": "Format string on how data will be organized inside the S3 bucket directory. Read more here", + "type": "string", + "examples": [ + "${NAMESPACE}/${STREAM_NAME}/${YEAR}_${MONTH}_${DAY}_${EPOCH}_" + ], + "order": 7 + }, + "file_name_pattern": { + "type": "string", + "description": "The pattern allows you to set the file-name format for the S3 staging file(s)", + "title": "S3 Filename pattern", + "examples": [ + "{date}", + "{date:yyyy_MM}", + "{timestamp}", + "{part_number}", + "{sync_id}" + ], + "order": 8 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["overwrite", "append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "resourceRequirements": { + "jobSpecific": [ + { + "jobType": "sync", + "resourceRequirements": { + "memory_request": "1Gi", + "memory_limit": "1Gi" + } + } + ] + } + }, + { + "destinationDefinitionId": "471e5cab-8ed1-49f3-ba11-79c687784737", + "name": "S3 Glue", + "dockerRepository": "airbyte/destination-s3-glue", + "dockerImageTag": "0.1.6", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/s3-glue", + "icon": "s3-glue.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/s3-glue", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "S3 Destination Spec", + "type": "object", + "required": [ + "s3_bucket_name", + "s3_bucket_path", + "s3_bucket_region", + "format", + "glue_database", + "glue_serialization_library" + ], + "properties": { + "access_key_id": { + "type": "string", + "description": "The access key ID to access the S3 bucket. Airbyte requires Read and Write permissions to the given bucket. Read more here.", + "title": "S3 Key ID", + "airbyte_secret": true, + "examples": ["A012345678910EXAMPLE"], + "order": 0 + }, + "secret_access_key": { + "type": "string", + "description": "The corresponding secret to the access key ID. Read more here", + "title": "S3 Access Key", + "airbyte_secret": true, + "examples": ["a012345678910ABCDEFGH/AbCdEfGhEXAMPLEKEY"], + "order": 1 + }, + "s3_bucket_name": { + "title": "S3 Bucket Name", + "type": "string", + "description": "The name of the S3 bucket. Read more here.", + "examples": ["airbyte_sync"], + "order": 2 + }, + "s3_bucket_path": { + "title": "S3 Bucket Path", + "description": "Directory under the S3 bucket where data will be written. Read more here", + "type": "string", + "examples": ["data_sync/test"], + "order": 3 + }, + "s3_bucket_region": { + "title": "S3 Bucket Region", + "type": "string", + "default": "", + "description": "The region of the S3 bucket. See here for all region codes.", + "enum": [ + "", + "us-east-1", + "us-east-2", + "us-west-1", + "us-west-2", + "af-south-1", + "ap-east-1", + "ap-south-1", + "ap-northeast-1", + "ap-northeast-2", + "ap-northeast-3", + "ap-southeast-1", + "ap-southeast-2", + "ca-central-1", + "cn-north-1", + "cn-northwest-1", + "eu-central-1", + "eu-north-1", + "eu-south-1", + "eu-west-1", + "eu-west-2", + "eu-west-3", + "sa-east-1", + "me-south-1", + "us-gov-east-1", + "us-gov-west-1" + ], + "order": 4 + }, + "format": { + "title": "Output Format", + "type": "object", + "description": "Format of the data output. See here for more details", + "oneOf": [ + { + "title": "JSON Lines: Newline-delimited JSON", + "required": ["format_type"], + "properties": { + "format_type": { + "title": "Format Type", + "type": "string", + "enum": ["JSONL"], + "default": "JSONL" + }, + "compression": { + "title": "Compression", + "type": "object", + "description": "Whether the output files should be compressed. If compression is selected, the output filename will have an extra extension (GZIP: \".jsonl.gz\").", + "oneOf": [ + { + "title": "No Compression", + "requires": "compression_type", + "properties": { + "compression_type": { + "type": "string", + "enum": ["No Compression"], + "default": "No Compression" + } + } + }, + { + "title": "GZIP", + "requires": "compression_type", + "properties": { + "compression_type": { + "type": "string", + "enum": ["GZIP"], + "default": "GZIP" + } + } + } + ] + }, + "flattening": { + "type": "string", + "title": "Flattening", + "description": "Whether the input json data should be normalized (flattened) in the output JSON Lines. Please refer to docs for details.", + "default": "Root level flattening", + "enum": ["No flattening", "Root level flattening"] + } + } + } + ], + "order": 5 + }, + "s3_endpoint": { + "title": "Endpoint", + "type": "string", + "default": "", + "description": "Your S3 endpoint url. Read more here", + "examples": ["http://localhost:9000"], + "order": 6 + }, + "s3_path_format": { + "title": "S3 Path Format", + "description": "Format string on how data will be organized inside the S3 bucket directory. Read more here", + "type": "string", + "examples": [ + "${NAMESPACE}/${STREAM_NAME}/${YEAR}_${MONTH}_${DAY}_${EPOCH}_" + ], + "order": 7 + }, + "file_name_pattern": { + "type": "string", + "description": "The pattern allows you to set the file-name format for the S3 staging file(s)", + "title": "S3 Filename pattern", + "examples": [ + "{date}", + "{date:yyyy_MM}", + "{timestamp}", + "{part_number}", + "{sync_id}" + ], + "order": 8 + }, + "glue_database": { + "type": "string", + "description": "Name of the glue database for creating the tables, leave blank if no integration", + "title": "Glue database name", + "examples": ["airbyte_database"], + "order": 9 + }, + "glue_serialization_library": { + "title": "Serialization Library", + "description": "The library that your query engine will use for reading and writing data in your lake.", + "type": "string", + "enum": [ + "org.openx.data.jsonserde.JsonSerDe", + "org.apache.hive.hcatalog.data.JsonSerDe" + ], + "default": "org.openx.data.jsonserde.JsonSerDe", + "order": 10 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["overwrite", "append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "50a559a7-6323-4e33-8aa0-51dfd9dfadac", + "name": "SelectDB", + "dockerRepository": "airbyte/destination-selectdb", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/selectdb", + "icon": "select.db", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/selectdb", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "SelectDB Destination Spec", + "type": "object", + "required": [ + "load_url", + "jdbc_url", + "cluster_name", + "user_name", + "password", + "database" + ], + "properties": { + "load_url": { + "title": "loadURL", + "description": "load host and port: xxx.privatelink.aliyun.com:47057", + "type": "string", + "order": 0 + }, + "jdbc_url": { + "title": "jdbcURL", + "description": "jdbc host and port: xxx.privatelink.aliyun.com:30523", + "type": "string", + "order": 1 + }, + "cluster_name": { + "title": "ClusterName", + "description": "clusterName of SelectDB", + "type": "string", + "order": 2 + }, + "user_name": { + "title": "UserName", + "description": "Username to use to access the database.", + "type": "string", + "order": 3 + }, + "password": { + "title": "Password", + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 4 + }, + "database": { + "title": "DataBase Name", + "description": "Name of the database.", + "type": "string", + "order": 5 + } + } + }, + "supportsIncremental": false, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["append", "overwrite"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "e9810f61-4bab-46d2-bb22-edfc902e0644", + "name": "SFTP-JSON", + "dockerRepository": "airbyte/destination-sftp-json", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/sftp-json", + "icon": "sftp.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/sftp-json", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Destination SFTP JSON", + "type": "object", + "required": ["host", "username", "password", "destination_path"], + "additionalProperties": false, + "properties": { + "host": { + "title": "Host", + "description": "Hostname of the SFTP server.", + "type": "string", + "order": 0 + }, + "port": { + "title": "Port", + "description": "Port of the SFTP server.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": [22], + "order": 1 + }, + "username": { + "title": "User", + "description": "Username to use to access the SFTP server.", + "type": "string", + "order": 2 + }, + "password": { + "title": "Password", + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 3 + }, + "destination_path": { + "title": "Destination path", + "type": "string", + "description": "Path to the directory where json files will be written.", + "examples": ["/json_data"], + "order": 4 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["overwrite", "append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "424892c4-daac-4491-b35d-c6688ba547ba", + "name": "Snowflake", + "dockerRepository": "airbyte/destination-snowflake", + "dockerImageTag": "0.4.61", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/snowflake", + "icon": "snowflake.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/snowflake", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Snowflake Destination Spec", + "type": "object", + "required": [ + "host", + "role", + "warehouse", + "database", + "schema", + "username" + ], + "additionalProperties": true, + "properties": { + "host": { + "description": "Enter your Snowflake account's locator (in the format ...snowflakecomputing.com)", + "examples": [ + "accountname.us-east-2.aws.snowflakecomputing.com", + "accountname.snowflakecomputing.com" + ], + "type": "string", + "title": "Host", + "pattern": "^(http(s)?:\\/\\/)?([^./?#]+\\.)?([^./?#]+\\.)?([^./?#]+\\.)?([^./?#]+\\.snowflakecomputing\\.com)$", + "pattern_descriptor": "{account_name}.snowflakecomputing.com or {accountname}.{aws_location}.aws.snowflakecomputing.com", + "order": 0 + }, + "role": { + "description": "Enter the role that you want to use to access Snowflake", + "examples": ["AIRBYTE_ROLE"], + "type": "string", + "title": "Role", + "order": 1 + }, + "warehouse": { + "description": "Enter the name of the warehouse that you want to sync data into", + "examples": ["AIRBYTE_WAREHOUSE"], + "type": "string", + "title": "Warehouse", + "order": 2 + }, + "database": { + "description": "Enter the name of the database you want to sync data into", + "examples": ["AIRBYTE_DATABASE"], + "type": "string", + "title": "Database", + "order": 3 + }, + "schema": { + "description": "Enter the name of the default schema", + "examples": ["AIRBYTE_SCHEMA"], + "type": "string", + "title": "Default Schema", + "order": 4 + }, + "username": { + "description": "Enter the name of the user you want to use to access the database", + "examples": ["AIRBYTE_USER"], + "type": "string", + "title": "Username", + "order": 5 + }, + "credentials": { + "title": "Authorization Method", + "description": "", + "type": "object", + "oneOf": [ + { + "title": "OAuth2.0", + "type": "object", + "order": 0, + "required": ["access_token", "refresh_token"], + "properties": { + "auth_type": { + "type": "string", + "const": "OAuth2.0", + "enum": ["OAuth2.0"], + "default": "OAuth2.0", + "order": 0 + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "Enter your application's Client ID", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "Enter your application's Client secret", + "airbyte_secret": true + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "Enter you application's Access Token", + "airbyte_secret": true + }, + "refresh_token": { + "type": "string", + "title": "Refresh Token", + "description": "Enter your application's Refresh Token", + "airbyte_secret": true + } + } + }, + { + "title": "Key Pair Authentication", + "type": "object", + "order": 1, + "required": ["private_key"], + "properties": { + "auth_type": { + "type": "string", + "const": "Key Pair Authentication", + "enum": ["Key Pair Authentication"], + "default": "Key Pair Authentication", + "order": 0 + }, + "private_key": { + "type": "string", + "title": "Private Key", + "description": "RSA Private key to use for Snowflake connection. See the docs for more information on how to obtain this key.", + "multiline": true, + "airbyte_secret": true + }, + "private_key_password": { + "type": "string", + "title": "Passphrase", + "description": "Passphrase for private key", + "airbyte_secret": true + } + } + }, + { + "title": "Username and Password", + "type": "object", + "required": ["password"], + "order": 2, + "properties": { + "auth_type": { + "type": "string", + "const": "Username and Password", + "enum": ["Username and Password"], + "default": "Username and Password", + "order": 0 + }, + "password": { + "description": "Enter the password associated with the username.", + "type": "string", + "airbyte_secret": true, + "title": "Password", + "order": 1 + } + } + } + ], + "order": 6 + }, + "jdbc_url_params": { + "description": "Enter the additional properties to pass to the JDBC URL string when connecting to the database (formatted as key=value pairs separated by the symbol &). Example: key1=value1&key2=value2&key3=value3", + "title": "JDBC URL Params", + "type": "string", + "order": 7 + }, + "loading_method": { + "type": "object", + "title": "Data Staging Method", + "description": "Select a data staging method", + "order": 8, + "oneOf": [ + { + "title": "Select another option", + "description": "Select another option", + "required": ["method"], + "properties": { + "method": { + "title": "", + "description": "", + "type": "string", + "enum": ["Standard"], + "default": "Standard" + } + } + }, + { + "title": "[Recommended] Internal Staging", + "description": "Recommended for large production workloads for better speed and scalability.", + "required": ["method"], + "properties": { + "method": { + "title": "", + "description": "", + "type": "string", + "enum": ["Internal Staging"], + "default": "Internal Staging" + } + } + }, + { + "title": "AWS S3 Staging", + "description": "Recommended for large production workloads for better speed and scalability.", + "required": [ + "method", + "s3_bucket_name", + "access_key_id", + "secret_access_key" + ], + "properties": { + "method": { + "title": "", + "description": "", + "type": "string", + "enum": ["S3 Staging"], + "default": "S3 Staging", + "order": 0 + }, + "s3_bucket_name": { + "title": "S3 Bucket Name", + "type": "string", + "description": "Enter your S3 bucket name", + "examples": ["airbyte.staging"], + "order": 1 + }, + "s3_bucket_region": { + "title": "S3 Bucket Region", + "type": "string", + "default": "", + "description": "Enter the region where your S3 bucket resides", + "enum": [ + "", + "us-east-1", + "us-east-2", + "us-west-1", + "us-west-2", + "af-south-1", + "ap-east-1", + "ap-south-1", + "ap-northeast-1", + "ap-northeast-2", + "ap-northeast-3", + "ap-southeast-1", + "ap-southeast-2", + "ca-central-1", + "cn-north-1", + "cn-northwest-1", + "eu-central-1", + "eu-west-1", + "eu-west-2", + "eu-west-3", + "eu-south-1", + "eu-north-1", + "sa-east-1", + "me-south-1" + ], + "order": 2 + }, + "access_key_id": { + "type": "string", + "description": "Enter your AWS access key ID. Airbyte requires Read and Write permissions on your S3 bucket ", + "title": "AWS access key ID", + "airbyte_secret": true, + "order": 3 + }, + "secret_access_key": { + "type": "string", + "description": "Enter your AWS secret access key", + "title": "AWS secret access key", + "airbyte_secret": true, + "order": 4 + }, + "purge_staging_data": { + "title": "Purge Staging Files and Tables", + "type": "boolean", + "description": "Toggle to delete staging files from the S3 bucket after a successful sync", + "default": true, + "order": 5 + }, + "encryption": { + "title": "Encryption", + "type": "object", + "description": "Choose a data encryption method for the staging data", + "default": { + "encryption_type": "none" + }, + "order": 6, + "oneOf": [ + { + "title": "No encryption", + "description": "Staging data will be stored in plaintext.", + "type": "object", + "required": ["encryption_type"], + "properties": { + "encryption_type": { + "type": "string", + "const": "none", + "enum": ["none"], + "default": "none" + } + } + }, + { + "title": "AES-CBC envelope encryption", + "description": "Staging data will be encrypted using AES-CBC envelope encryption.", + "type": "object", + "required": ["encryption_type"], + "properties": { + "encryption_type": { + "type": "string", + "const": "aes_cbc_envelope", + "enum": ["aes_cbc_envelope"], + "default": "aes_cbc_envelope" + }, + "key_encrypting_key": { + "type": "string", + "title": "Key", + "description": "The key, base64-encoded. Must be either 128, 192, or 256 bits. Leave blank to have Airbyte generate an ephemeral key for each sync.", + "airbyte_secret": true + } + } + } + ] + }, + "file_name_pattern": { + "type": "string", + "description": "The pattern allows you to set the file-name format for the S3 staging file(s)", + "title": "S3 Filename pattern", + "examples": [ + "{date}", + "{date:yyyy_MM}", + "{timestamp}", + "{part_number}", + "{sync_id}" + ], + "order": 7 + } + } + }, + { + "title": "Google Cloud Storage Staging", + "description": "Recommended for large production workloads for better speed and scalability.", + "required": [ + "method", + "project_id", + "bucket_name", + "credentials_json" + ], + "properties": { + "method": { + "title": "", + "description": "", + "type": "string", + "enum": ["GCS Staging"], + "default": "GCS Staging", + "order": 0 + }, + "project_id": { + "title": "Google Cloud project ID", + "type": "string", + "description": "Enter the Google Cloud project ID", + "examples": ["my-project"], + "order": 1 + }, + "bucket_name": { + "title": "Cloud Storage bucket name", + "type": "string", + "description": "Enter the Cloud Storage bucket name", + "examples": ["airbyte-staging"], + "order": 2 + }, + "credentials_json": { + "title": "Google Application Credentials", + "type": "string", + "description": "Enter your Google Cloud service account key in the JSON format with read/write access to your Cloud Storage staging bucket", + "airbyte_secret": true, + "multiline": true, + "order": 3 + } + } + }, + { + "title": "Azure Blob Storage Staging", + "description": "Recommended for large production workloads for better speed and scalability.", + "required": [ + "method", + "azure_blob_storage_account_name", + "azure_blob_storage_container_name", + "azure_blob_storage_sas_token" + ], + "properties": { + "method": { + "title": "", + "description": "", + "type": "string", + "enum": ["Azure Blob Staging"], + "default": "Azure Blob Staging", + "order": 0 + }, + "azure_blob_storage_endpoint_domain_name": { + "title": "Azure Blob Storage Endpoint", + "type": "string", + "default": "blob.core.windows.net", + "description": "Enter the Azure Blob Storage endpoint domain name", + "examples": ["blob.core.windows.net"], + "order": 1 + }, + "azure_blob_storage_account_name": { + "title": "Azure Blob Storage account name", + "type": "string", + "description": "Enter your Azure Blob Storage account name", + "examples": ["airbyte5storage"], + "order": 2 + }, + "azure_blob_storage_container_name": { + "title": "Azure Blob Storage Container Name", + "type": "string", + "description": "Enter your Azure Blob Storage container name", + "examples": ["airbytetestcontainername"], + "order": 3 + }, + "azure_blob_storage_sas_token": { + "title": "SAS Token", + "type": "string", + "airbyte_secret": true, + "description": "Enter the Shared access signature (SAS) token to grant Snowflake limited access to objects in your Azure Blob Storage account", + "examples": [ + "?sv=2016-05-31&ss=b&srt=sco&sp=rwdl&se=2018-06-27T10:05:50Z&st=2017-06-27T02:05:50Z&spr=https,http&sig=bgqQwoXwxzuD2GJfagRg7VOS8hzNr3QLT7rhS8OFRLQ%3D" + ], + "order": 4 + } + } + } + ] + }, + "file_buffer_count": { + "title": "File Buffer Count", + "type": "integer", + "minimum": 10, + "maximum": 50, + "default": 10, + "description": "Number of file buffers allocated for writing data. Increasing this number is beneficial for connections using Change Data Capture (CDC) and up to the number of streams within a connection. Increasing the number of file buffers past the maximum number of streams has deteriorating effects", + "examples": ["10"], + "order": 9 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": true, + "supportsDBT": true, + "supported_destination_sync_modes": [ + "overwrite", + "append", + "append_dedup" + ], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": ["credentials", "auth_type"], + "predicate_value": "OAuth2.0", + "oauth_config_specification": { + "oauth_user_input_from_connector_config_specification": { + "type": "object", + "properties": { + "host": { + "type": "string", + "path_in_connector_config": ["host"] + } + } + }, + "complete_oauth_output_specification": { + "type": "object", + "properties": { + "access_token": { + "type": "string", + "path_in_connector_config": ["credentials", "access_token"] + }, + "refresh_token": { + "type": "string", + "path_in_connector_config": ["credentials", "refresh_token"] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": ["credentials", "client_id"] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": ["credentials", "client_secret"] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "resourceRequirements": { + "jobSpecific": [ + { + "jobType": "sync", + "resourceRequirements": { + "memory_request": "1Gi", + "memory_limit": "1Gi" + } + } + ] + }, + "normalizationConfig": { + "normalizationRepository": "airbyte/normalization-snowflake", + "normalizationTag": "0.4.0", + "normalizationIntegrationType": "snowflake" + }, + "supportsDbt": true + }, + { + "destinationDefinitionId": "294a4790-429b-40ae-9516-49826b9702e1", + "name": "MariaDB ColumnStore", + "dockerRepository": "airbyte/destination-mariadb-columnstore", + "dockerImageTag": "0.1.7", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mariadb-columnstore", + "icon": "mariadb.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mariadb-columnstore", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "MariaDB Columnstore Destination Spec", + "type": "object", + "required": ["host", "port", "username", "database"], + "additionalProperties": true, + "properties": { + "host": { + "title": "Host", + "description": "The Hostname of the database.", + "type": "string", + "order": 0 + }, + "port": { + "title": "Port", + "description": "The Port of the database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 3306, + "examples": ["3306"], + "order": 1 + }, + "database": { + "title": "Database", + "description": "Name of the database.", + "type": "string", + "order": 2 + }, + "username": { + "title": "Username", + "description": "The Username which is used to access the database.", + "type": "string", + "order": 3 + }, + "password": { + "title": "Password", + "description": "The Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 4 + }, + "jdbc_url_params": { + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", + "title": "JDBC URL Params", + "type": "string", + "order": 5 + }, + "tunnel_method": { + "type": "object", + "title": "SSH Tunnel Method", + "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", + "oneOf": [ + { + "title": "No Tunnel", + "required": ["tunnel_method"], + "properties": { + "tunnel_method": { + "description": "No ssh tunnel needed to connect to database", + "type": "string", + "const": "NO_TUNNEL", + "order": 0 + } + } + }, + { + "title": "SSH Key Authentication", + "required": [ + "tunnel_method", + "tunnel_host", + "tunnel_port", + "tunnel_user", + "ssh_key" + ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": ["22"], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host.", + "type": "string", + "order": 3 + }, + "ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + }, + { + "title": "Password Authentication", + "required": [ + "tunnel_method", + "tunnel_host", + "tunnel_port", + "tunnel_user", + "tunnel_user_password" + ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": ["22"], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host", + "type": "string", + "order": 3 + }, + "tunnel_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 4 + } + } + } + ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["overwrite", "append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "eebd85cf-60b2-4af6-9ba0-edeca01437b0", + "name": "Streamr", + "dockerRepository": "ghcr.io/devmate-cloud/streamr-airbyte-connectors", + "dockerImageTag": "0.0.1", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/streamr", + "icon": "streamr.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/streamr", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Destination Streamr", + "type": "object", + "required": ["privateKey", "streamId"], + "additionalProperties": false, + "properties": { + "privateKey": { + "type": "string", + "description": "You private key on Streamr", + "airbyte_secret": true + }, + "streamId": { + "type": "string", + "description": "Your full Stream ID", + "examples": [ + "0x0d0102474519cd2fc1b3e3f962a87e39cbcbead2/test-streamr" + ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["append", "append_dedup"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "3dc6f384-cd6b-4be3-ad16-a41450899bf0", + "name": "Scylla", + "dockerRepository": "airbyte/destination-scylla", + "dockerImageTag": "0.1.3", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/scylla", + "icon": "scylla.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/scylla", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Scylla Destination Spec", + "type": "object", + "required": ["keyspace", "username", "password", "address", "port"], + "additionalProperties": true, + "properties": { + "keyspace": { + "title": "Keyspace", + "description": "Default Scylla keyspace to create data in.", + "type": "string", + "order": 0 + }, + "username": { + "title": "Username", + "description": "Username to use to access Scylla.", + "type": "string", + "order": 1 + }, + "password": { + "title": "Password", + "description": "Password associated with Scylla.", + "type": "string", + "airbyte_secret": true, + "order": 2 + }, + "address": { + "title": "Address", + "description": "Address to connect to.", + "type": "string", + "order": 3 + }, + "port": { + "title": "Port", + "description": "Port of Scylla.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 9042, + "order": 4 + }, + "replication": { + "title": "Replication factor", + "type": "integer", + "description": "Indicates to how many nodes the data should be replicated to.", + "default": 1, + "order": 5 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["overwrite", "append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "a4cbd2d1-8dbe-4818-b8bc-b90ad782d12a", + "name": "Google Sheets", + "dockerRepository": "airbyte/destination-google-sheets", + "dockerImageTag": "0.1.2", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/google-sheets", + "icon": "google-sheets.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/google-sheets", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Destination Google Sheets", + "type": "object", + "required": ["spreadsheet_id", "credentials"], + "additionalProperties": false, + "properties": { + "spreadsheet_id": { + "type": "string", + "title": "Spreadsheet Link", + "description": "The link to your spreadsheet. See this guide for more details.", + "examples": [ + "https://docs.google.com/spreadsheets/d/1hLd9Qqti3UyLXZB2aFfUWDT7BG/edit" + ] + }, + "credentials": { + "type": "object", + "title": "Authentication via Google (OAuth)", + "description": "Google API Credentials for connecting to Google Sheets and Google Drive APIs", + "required": ["client_id", "client_secret", "refresh_token"], + "properties": { + "client_id": { + "title": "Client ID", + "type": "string", + "description": "The Client ID of your Google Sheets developer application.", + "airbyte_secret": true + }, + "client_secret": { + "title": "Client Secret", + "type": "string", + "description": "The Client Secret of your Google Sheets developer application.", + "airbyte_secret": true + }, + "refresh_token": { + "title": "Refresh Token", + "type": "string", + "description": "The token for obtaining new access token.", + "airbyte_secret": true + } + } + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ + "overwrite", + "append", + "append_dedup" + ], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": ["credentials"], + "oauthFlowInitParameters": [["client_id"], ["client_secret"]], + "oauthFlowOutputParameters": [["refresh_token"]] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "b76be0a6-27dc-4560-95f6-2623da0bd7b6", + "name": "Local SQLite", + "dockerRepository": "airbyte/destination-sqlite", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/local-sqlite", + "icon": "sqlite.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/sqlite", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Destination Sqlite", + "type": "object", + "required": ["destination_path"], + "additionalProperties": false, + "properties": { + "destination_path": { + "type": "string", + "description": "Path to the sqlite.db file. The file will be placed inside that local mount. For more information check out our docs", + "example": "/local/sqlite.db" + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["overwrite", "append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "06ec60c7-7468-45c0-91ac-174f6e1a788b", + "name": "TiDB", + "dockerRepository": "airbyte/destination-tidb", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/tidb", + "icon": "tidb.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/tidb", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "TiDB Destination Spec", + "type": "object", + "required": ["host", "port", "username", "database"], + "additionalProperties": true, + "properties": { + "host": { + "title": "Host", + "description": "Hostname of the database.", + "type": "string", + "order": 0 + }, + "port": { + "title": "Port", + "description": "Port of the database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 4000, + "examples": ["4000"], + "order": 1 + }, + "database": { + "title": "Database", + "description": "Name of the database.", + "type": "string", + "order": 2 + }, + "username": { + "title": "User", + "description": "Username to use to access the database.", + "type": "string", + "order": 3 + }, + "password": { + "title": "Password", + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "default": "", + "order": 4 + }, + "ssl": { + "title": "SSL Connection", + "description": "Encrypt data using SSL.", + "type": "boolean", + "default": false, + "order": 5 + }, + "jdbc_url_params": { + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", + "title": "JDBC URL Params", + "type": "string", + "order": 6 + }, + "tunnel_method": { + "type": "object", + "title": "SSH Tunnel Method", + "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", + "oneOf": [ + { + "title": "No Tunnel", + "required": ["tunnel_method"], + "properties": { + "tunnel_method": { + "description": "No ssh tunnel needed to connect to database", + "type": "string", + "const": "NO_TUNNEL", + "order": 0 + } + } + }, + { + "title": "SSH Key Authentication", + "required": [ + "tunnel_method", + "tunnel_host", + "tunnel_port", + "tunnel_user", + "ssh_key" + ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": ["22"], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host.", + "type": "string", + "order": 3 + }, + "ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + }, + { + "title": "Password Authentication", + "required": [ + "tunnel_method", + "tunnel_host", + "tunnel_port", + "tunnel_user", + "tunnel_user_password" + ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": ["22"], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host", + "type": "string", + "order": 3 + }, + "tunnel_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 4 + } + } + } + ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": true, + "supportsDBT": true, + "supported_destination_sync_modes": ["overwrite", "append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "normalizationConfig": { + "normalizationRepository": "airbyte/normalization-tidb", + "normalizationTag": "0.4.0", + "normalizationIntegrationType": "tidb" + }, + "supportsDbt": true + }, + { + "destinationDefinitionId": "36be8dc6-9851-49af-b776-9d4c30e4ab6a", + "name": "Typesense", + "dockerRepository": "airbyte/destination-typesense", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/typesense", + "icon": "typesense.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/typesense", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Destination Typesense", + "type": "object", + "required": ["api_key", "host"], + "additionalProperties": false, + "properties": { + "api_key": { + "title": "API Key", + "type": "string", + "description": "Typesense API Key", + "order": 0 + }, + "host": { + "title": "Host", + "type": "string", + "description": "Hostname of the Typesense instance without protocol.", + "order": 1 + }, + "port": { + "title": "Port", + "type": "string", + "description": "Port of the Typesense instance. Ex: 8108, 80, 443. Default is 443", + "order": 2 + }, + "protocol": { + "title": "Protocol", + "type": "string", + "description": "Protocol of the Typesense instance. Ex: http or https. Default is https", + "order": 3 + }, + "batch_size": { + "title": "Batch size", + "type": "string", + "description": "How many documents should be imported together. Default 1000", + "order": 4 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["overwrite", "append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "2300fdcf-a532-419f-9f24-a014336e7966", + "name": "YugabyteDB", + "dockerRepository": "airbyte/destination-yugabytedb", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/yugabytedb", + "icon": "yugabytedb.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/destinations/yugabytedb", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Yugabytedb destination spec", + "type": "object", + "required": ["host", "port", "username", "database", "schema"], + "additionalProperties": true, + "properties": { + "host": { + "title": "Host", + "description": "The Hostname of the database.", + "type": "string", + "order": 0 + }, + "port": { + "title": "Port", + "description": "The Port of the database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 3306, + "examples": ["3306"], + "order": 1 + }, + "database": { + "title": "Database", + "description": "Name of the database.", + "type": "string", + "order": 2 + }, + "username": { + "title": "Username", + "description": "The Username which is used to access the database.", + "type": "string", + "order": 4 + }, + "schema": { + "title": "Default Schema", + "description": "The default schema tables are written to if the source does not specify a namespace. The usual value for this field is \"public\".", + "type": "string", + "examples": ["public"], + "default": "public", + "order": 3 + }, + "password": { + "title": "Password", + "description": "The Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 5 + }, + "jdbc_url_params": { + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", + "title": "JDBC URL Params", + "type": "string", + "order": 6 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["overwrite", "append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "302e4d8e-08d3-4098-acd4-ac67ca365b88", + "name": "Databend", + "dockerRepository": "airbyte/destination-databend", + "dockerImageTag": "0.1.2", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/databend", + "icon": "databend.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/databend", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Destination Databend", + "type": "object", + "required": ["host", "username", "database"], + "additionalProperties": true, + "properties": { + "host": { + "title": "Host", + "description": "Hostname of the database.", + "type": "string", + "order": 0 + }, + "port": { + "title": "Port", + "description": "Port of the database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 443, + "examples": ["443"], + "order": 2 + }, + "database": { + "title": "DB Name", + "description": "Name of the database.", + "type": "string", + "order": 3 + }, + "table": { + "title": "Default Table", + "description": "The default table was written to.", + "type": "string", + "examples": ["default"], + "default": "default", + "order": 4 + }, + "username": { + "title": "User", + "description": "Username to use to access the database.", + "type": "string", + "order": 5 + }, + "password": { + "title": "Password", + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 6 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["overwrite", "append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "58e6f9da-904e-11ed-a1eb-0242ac120002", + "name": "Teradata Vantage", + "dockerRepository": "airbyte/destination-teradata", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.io/integrations/destinations/teradata", + "icon": "teradata.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/destinations/teradata", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Teradata Destination Spec", + "type": "object", + "required": ["host", "username"], + "additionalProperties": true, + "properties": { + "host": { + "title": "Host", + "description": "Hostname of the database.", + "type": "string", + "order": 0 + }, + "username": { + "title": "User", + "description": "Username to use to access the database.", + "type": "string", + "order": 1 + }, + "password": { + "title": "Password", + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 2 + }, + "schema": { + "title": "Default Schema", + "description": "The default schema tables are written to if the source does not specify a namespace. The usual value for this field is \"public\".", + "type": "string", + "examples": ["airbyte_td"], + "default": "airbyte_td", + "order": 3 + }, + "ssl": { + "title": "SSL Connection", + "description": "Encrypt data using SSL. When activating SSL, please select one of the connection modes.", + "type": "boolean", + "default": false, + "order": 5 + }, + "ssl_mode": { + "title": "SSL modes", + "description": "SSL connection modes. \n disable - Chose this mode to disable encryption of communication between Airbyte and destination database\n allow - Chose this mode to enable encryption only when required by the destination database\n prefer - Chose this mode to allow unencrypted connection only if the destination database does not support encryption\n require - Chose this mode to always require encryption. If the destination database server does not support encryption, connection will fail\n verify-ca - Chose this mode to always require encryption and to verify that the destination database server has a valid SSL certificate\n verify-full - This is the most secure mode. Chose this mode to always require encryption and to verify the identity of the destination database server\n See more information - in the docs.", + "type": "object", + "order": 6, + "oneOf": [ + { + "title": "disable", + "additionalProperties": false, + "description": "Disable SSL.", + "required": ["mode"], + "properties": { + "mode": { + "type": "string", + "const": "disable", + "enum": ["disable"], + "default": "disable", + "order": 0 + } + } + }, + { + "title": "allow", + "additionalProperties": false, + "description": "Allow SSL mode.", + "required": ["mode"], + "properties": { + "mode": { + "type": "string", + "const": "allow", + "enum": ["allow"], + "default": "allow", + "order": 0 + } + } + }, + { + "title": "prefer", + "additionalProperties": false, + "description": "Prefer SSL mode.", + "required": ["mode"], + "properties": { + "mode": { + "type": "string", + "const": "prefer", + "enum": ["prefer"], + "default": "prefer", + "order": 0 + } + } + }, + { + "title": "require", + "additionalProperties": false, + "description": "Require SSL mode.", + "required": ["mode"], + "properties": { + "mode": { + "type": "string", + "const": "require", + "enum": ["require"], + "default": "require", + "order": 0 + } + } + }, + { + "title": "verify-ca", + "additionalProperties": false, + "description": "Verify-ca SSL mode.", + "required": ["mode", "ssl_ca_certificate"], + "properties": { + "mode": { + "type": "string", + "const": "verify-ca", + "enum": ["verify-ca"], + "default": "verify-ca", + "order": 0 + }, + "ssl_ca_certificate": { + "type": "string", + "title": "CA certificate", + "description": "Specifies the file name of a PEM file that contains Certificate Authority (CA) certificates for use with SSLMODE=verify-ca.\n See more information - in the docs.", + "airbyte_secret": true, + "multiline": true, + "order": 1 + } + } + }, + { + "title": "verify-full", + "additionalProperties": false, + "description": "Verify-full SSL mode.", + "required": ["mode", "ssl_ca_certificate"], + "properties": { + "mode": { + "type": "string", + "const": "verify-full", + "enum": ["verify-full"], + "default": "verify-full", + "order": 0 + }, + "ssl_ca_certificate": { + "type": "string", + "title": "CA certificate", + "description": "Specifies the file name of a PEM file that contains Certificate Authority (CA) certificates for use with SSLMODE=verify-full.\n See more information - in the docs.", + "airbyte_secret": true, + "multiline": true, + "order": 1 + } + } + } + ] + }, + "jdbc_url_params": { + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", + "title": "JDBC URL Params", + "type": "string", + "order": 7 + } + } + }, + "supportsIncremental": false, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["overwrite", "append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "7b7d7a0d-954c-45a0-bcfc-39a634b97736", + "name": "Weaviate", + "dockerRepository": "airbyte/destination-weaviate", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/weaviate", + "icon": "weaviate.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/weaviate", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Destination Weaviate", + "type": "object", + "required": ["url"], + "additionalProperties": false, + "properties": { + "url": { + "type": "string", + "description": "The URL to the weaviate instance", + "examples": [ + "http://localhost:8080", + "https://your-instance.semi.network" + ] + }, + "username": { + "type": "string", + "description": "Username used with OIDC authentication", + "examples": ["xyz@weaviate.io"] + }, + "password": { + "type": "string", + "description": "Password used with OIDC authentication", + "airbyte_secret": true + }, + "batch_size": { + "type": "integer", + "description": "Batch size for writing to Weaviate", + "default": 100 + }, + "vectors": { + "type": "string", + "description": "Comma separated list of strings of `stream_name.vector_column_name` to specify which field holds the vectors.", + "examples": [ + "my_table.my_vector_column, another_table.vector", + "mytable.vector" + ] + }, + "id_schema": { + "type": "string", + "description": "Comma separated list of strings of `stream_name.id_column_name` to specify which field holds the ID of the record.", + "examples": [ + "my_table.my_id_column, another_table.id", + "users.user_id" + ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["append", "overwrite"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "destinationDefinitionId": "94bd199c-2ff0-4aa2-b98e-17f0acb72610", + "name": "DuckDB", + "dockerRepository": "airbyte/destination-duckdb", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.io/integrations/destinations/duckdb", + "icon": "duckdb.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/destinations/duckdb", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "DuckDB Destination Spec", + "type": "object", + "required": ["destination_path"], + "additionalProperties": false, + "properties": { + "destination_path": { + "type": "string", + "description": "Path to the destination.duckdb file. The file will be placed inside that local mount. For more information check out our docs", + "example": "/local/destination.duckdb" + }, + "schema": { + "type": "string", + "description": "database schema, default for duckdb is main", + "example": "main" + } + } + }, + "supportsIncremental": true, + "supportsNormalization": true, + "supportsDBT": true, + "supported_destination_sync_modes": ["overwrite", "append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + } + ], + "sources": [ + { + "sourceDefinitionId": "9f32dab3-77cb-45a1-9d33-347aa5fbe363", + "name": "ActiveCampaign", + "dockerRepository": "airbyte/source-activecampaign", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/activecampaign", + "icon": "activecampaign.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/activecampaign", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Activecampaign Spec", + "type": "object", + "required": ["api_key", "account_username"], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "description": "API Key", + "airbyte_secret": true + }, + "account_username": { + "type": "string", + "description": "Account Username" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "d3b7fa46-111b-419a-998a-d7f046f6d66d", + "name": "Adjust", + "dockerRepository": "airbyte/source-adjust", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/adjust", + "icon": "adjust.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://raw.githubusercontent.com/appchoose/airbyte/feature/source-adjust/docs/integrations/sources/adjust.md", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Adjust reporting API connector.", + "properties": { + "additional_metrics": { + "description": "Metrics names that are not pre-defined, such as cohort metrics or app specific metrics.", + "items": { + "type": "string" + }, + "order": 3, + "title": "Additional metrics for ingestion", + "type": "array" + }, + "api_token": { + "airbyte_secret": true, + "description": "Adjust API key, see https://help.adjust.com/en/article/report-service-api-authentication", + "order": 0, + "title": "API Token", + "type": "string" + }, + "dimensions": { + "description": "Dimensions allow a user to break down metrics into groups using one or several parameters. For example, the number of installs by date, country and network. See https://help.adjust.com/en/article/reports-endpoint#dimensions for more information about the dimensions.", + "items": { + "enum": [ + "os_name", + "device_type", + "app", + "app_token", + "store_id", + "store_type", + "app_network", + "currency", + "currency_code", + "network", + "campaign", + "campaign_network", + "campaign_id_network", + "adgroup", + "adgroup_network", + "adgroup_id_network", + "source_network", + "source_id_network", + "creative", + "creative_network", + "creative_id_network", + "country", + "country_code", + "region", + "partner_name", + "partner_id" + ], + "type": "string" + }, + "minItems": 1, + "order": 4, + "title": "Dimensions", + "type": "array", + "uniqueItems": true + }, + "ingest_start": { + "description": "Data ingest start date.", + "format": "date", + "order": 1, + "title": "Ingest Start Date", + "type": "string" + }, + "metrics": { + "description": "Select at least one metric to query.", + "items": { + "enum": [ + "network_cost", + "network_cost_diff", + "network_clicks", + "network_impressions", + "network_installs", + "network_installs_diff", + "network_ecpc", + "network_ecpi", + "network_ecpm", + "arpdau_ad", + "arpdau", + "arpdau_iap", + "ad_impressions", + "ad_rpm", + "ad_revenue", + "cohort_ad_revenue", + "cost", + "adjust_cost", + "all_revenue", + "cohort_all_revenue", + "daus", + "maus", + "waus", + "base_sessions", + "ctr", + "click_conversion_rate", + "click_cost", + "clicks", + "paid_clicks", + "deattributions", + "ecpc", + "gdpr_forgets", + "gross_profit", + "cohort_gross_profit", + "impression_conversion_rate", + "impression_cost", + "impressions", + "paid_impressions", + "install_cost", + "installs", + "paid_installs", + "installs_per_mile", + "limit_ad_tracking_installs", + "limit_ad_tracking_install_rate", + "limit_ad_tracking_reattribution_rate", + "limit_ad_tracking_reattributions", + "non_organic_installs", + "organic_installs", + "roas_ad", + "roas", + "roas_iap", + "reattributions", + "return_on_investment", + "revenue", + "cohort_revenue", + "revenue_events", + "revenue_to_cost", + "sessions", + "events", + "ecpi_all", + "ecpi", + "ecpm" + ], + "type": "string" + }, + "minItems": 1, + "order": 2, + "title": "Metrics to ingest", + "type": "array", + "uniqueItems": true + }, + "until_today": { + "default": false, + "description": "Syncs data up until today. Useful when running daily incremental syncs, and duplicates are not desired.", + "order": 5, + "title": "Until Today", + "type": "boolean" + } + }, + "required": ["api_token", "ingest_start", "metrics", "dimensions"], + "title": "Adjust Spec", + "type": "object" + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "912eb6b7-a893-4a5b-b1c0-36ebbe2de8cd", + "name": "Aircall", + "dockerRepository": "airbyte/source-aircall", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/aircall", + "icon": "aircall.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/aircall", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Aircall Spec", + "type": "object", + "required": ["api_id", "api_token", "start_date"], + "additionalProperties": true, + "properties": { + "api_id": { + "title": "API ID", + "type": "string", + "description": "App ID found at settings https://dashboard.aircall.io/integrations/api-keys", + "airbyte_secret": true + }, + "api_token": { + "title": "API Token", + "type": "string", + "description": "App token found at settings (Ref- https://dashboard.aircall.io/integrations/api-keys)", + "airbyte_secret": true + }, + "start_date": { + "title": "Date-From Filter", + "type": "string", + "description": "Date time filter for incremental filter, Specify which date to extract from.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}Z$", + "examples": ["2022-03-01T00:00:00.000Z"], + "format": "date-time" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "14c6e7ea-97ed-4f5e-a7b5-25e9a80b8212", + "name": "Airtable", + "dockerRepository": "airbyte/source-airtable", + "dockerImageTag": "3.0.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/airtable", + "icon": "airtable.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/airtable", + "connectionSpecification": { + "$schema": "https://json-schema.org/draft-07/schema#", + "title": "Airtable Source Spec", + "type": "object", + "additionalProperties": true, + "properties": { + "credentials": { + "title": "Authentication", + "type": "object", + "oneOf": [ + { + "type": "object", + "title": "OAuth2.0", + "required": ["client_id", "client_secret", "refresh_token"], + "properties": { + "auth_method": { + "type": "string", + "const": "oauth2.0" + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "The client ID of the Airtable developer application.", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "title": "Client secret", + "description": "The client secret the Airtable developer application.", + "airbyte_secret": true + }, + "access_token": { + "type": "string", + "description": "Access Token for making authenticated requests.", + "airbyte_secret": true + }, + "token_expiry_date": { + "type": "string", + "description": "The date-time when the access token should be refreshed.", + "format": "date-time" + }, + "refresh_token": { + "type": "string", + "title": "Refresh token", + "description": "The key to refresh the expired access token.", + "airbyte_secret": true + } + } + }, + { + "title": "Personal Access Token", + "type": "object", + "required": ["api_key"], + "properties": { + "auth_method": { + "type": "string", + "const": "api_key" + }, + "api_key": { + "type": "string", + "description": "The Personal Access Token for the Airtable account. See the Support Guide for more information on how to obtain this token.", + "title": "Personal Access Token", + "airbyte_secret": true, + "examples": ["key1234567890"] + } + } + } + ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": ["credentials", "auth_method"], + "predicate_value": "oauth2.0", + "oauth_config_specification": { + "complete_oauth_output_specification": { + "type": "object", + "properties": { + "access_token": { + "type": "string", + "path_in_connector_config": ["credentials", "access_token"] + }, + "refresh_token": { + "type": "string", + "path_in_connector_config": ["credentials", "refresh_token"] + }, + "token_expiry_date": { + "type": "string", + "format": "date-time", + "path_in_connector_config": [ + "credentials", + "token_expiry_date" + ] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": ["credentials", "client_id"] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": ["credentials", "client_secret"] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["api.airtable.com", "airtable.com"] + } + }, + { + "sourceDefinitionId": "81ca39dc-4534-4dd2-b848-b0cfd2c11fce", + "name": "Aha", + "dockerRepository": "airbyte/source-aha", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/aha", + "icon": "aha.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/aha", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Aha Spec", + "type": "object", + "required": ["api_key", "url"], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "description": "API Key", + "title": "API Bearer Token" + }, + "url": { + "type": "string", + "description": "URL", + "title": "Aha Url Instance" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "db385323-9333-4fec-bec3-9e0ca9326c90", + "name": "Alpha Vantage", + "dockerRepository": "airbyte/source-alpha-vantage", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/alpha-vantage", + "icon": "alpha-vantage.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/alpha-vantage", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Alpha Vantage Spec", + "type": "object", + "required": ["api_key", "symbol"], + "properties": { + "api_key": { + "title": "API Key", + "type": "string", + "description": "API Key", + "airbyte_secret": true, + "order": 0 + }, + "symbol": { + "title": "Symbol", + "type": "string", + "description": "Stock symbol (with exchange code)", + "examples": ["AAPL", "TSCO.LON"], + "order": 1 + }, + "interval": { + "title": "Interval", + "type": "string", + "description": "Time-series data point interval. Required for intraday endpoints.\n", + "enum": ["1min", "5min", "15min", "30min", "60min"], + "default": "1min", + "order": 2 + }, + "adjusted": { + "title": "Adjusted?", + "type": "boolean", + "description": "Whether to return adjusted data. Only applicable to intraday endpoints.\n", + "default": false, + "order": 3 + }, + "outputsize": { + "title": "Output Size", + "type": "string", + "description": "Whether to return full or compact data (the last 100 data points).\n", + "enum": ["compact", "full"], + "default": "compact", + "order": 4 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "1fa90628-2b9e-11ed-a261-0242ac120002", + "name": "AlloyDB for PostgreSQL", + "dockerRepository": "airbyte/source-alloydb", + "dockerImageTag": "2.0.23", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/alloydb", + "icon": "alloydb.svg", + "sourceType": "database", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/postgres", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Postgres Source Spec", + "type": "object", + "required": ["host", "port", "database", "username"], + "properties": { + "host": { + "title": "Host", + "description": "Hostname of the database.", + "type": "string", + "order": 0, + "group": "db" + }, + "port": { + "title": "Port", + "description": "Port of the database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 5432, + "examples": ["5432"], + "order": 1, + "group": "db" + }, + "database": { + "title": "Database Name", + "description": "Name of the database.", + "type": "string", + "order": 2, + "group": "db" + }, + "schemas": { + "title": "Schemas", + "description": "The list of schemas (case sensitive) to sync from. Defaults to public.", + "type": "array", + "items": { + "type": "string" + }, + "minItems": 0, + "uniqueItems": true, + "default": ["public"], + "order": 3, + "group": "db" + }, + "username": { + "title": "Username", + "description": "Username to access the database.", + "type": "string", + "order": 4, + "group": "auth" + }, + "password": { + "title": "Password", + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 5, + "group": "auth", + "always_show": true + }, + "jdbc_url_params": { + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (Eg. key1=value1&key2=value2&key3=value3). For more information read about JDBC URL parameters.", + "title": "JDBC URL Parameters (Advanced)", + "type": "string", + "order": 6, + "group": "advanced", + "pattern_descriptor": "key1=value1&key2=value2" + }, + "ssl_mode": { + "title": "SSL Modes", + "description": "SSL connection modes. \n Read more in the docs.", + "type": "object", + "order": 8, + "group": "security", + "oneOf": [ + { + "title": "disable", + "additionalProperties": true, + "description": "Disables encryption of communication between Airbyte and source database.", + "required": ["mode"], + "properties": { + "mode": { + "type": "string", + "const": "disable", + "order": 0 + } + } + }, + { + "title": "allow", + "additionalProperties": true, + "description": "Enables encryption only when required by the source database.", + "required": ["mode"], + "properties": { + "mode": { + "type": "string", + "const": "allow", + "order": 0 + } + } + }, + { + "title": "prefer", + "additionalProperties": true, + "description": "Allows unencrypted connection only if the source database does not support encryption.", + "required": ["mode"], + "properties": { + "mode": { + "type": "string", + "const": "prefer", + "order": 0 + } + } + }, + { + "title": "require", + "additionalProperties": true, + "description": "Always require encryption. If the source database server does not support encryption, connection will fail.", + "required": ["mode"], + "properties": { + "mode": { + "type": "string", + "const": "require", + "order": 0 + } + } + }, + { + "title": "verify-ca", + "additionalProperties": true, + "description": "Always require encryption and verifies that the source database server has a valid SSL certificate.", + "required": ["mode", "ca_certificate"], + "properties": { + "mode": { + "type": "string", + "const": "verify-ca", + "order": 0 + }, + "ca_certificate": { + "type": "string", + "title": "CA Certificate", + "description": "CA certificate", + "airbyte_secret": true, + "multiline": true, + "order": 1 + }, + "client_certificate": { + "type": "string", + "title": "Client Certificate", + "description": "Client certificate", + "airbyte_secret": true, + "multiline": true, + "order": 2, + "always_show": true + }, + "client_key": { + "type": "string", + "title": "Client Key", + "description": "Client key", + "airbyte_secret": true, + "multiline": true, + "order": 3, + "always_show": true + }, + "client_key_password": { + "type": "string", + "title": "Client key password", + "description": "Password for keystorage. If you do not add it - the password will be generated automatically.", + "airbyte_secret": true, + "order": 4 + } + } + }, + { + "title": "verify-full", + "additionalProperties": true, + "description": "This is the most secure mode. Always require encryption and verifies the identity of the source database server.", + "required": ["mode", "ca_certificate"], + "properties": { + "mode": { + "type": "string", + "const": "verify-full", + "order": 0 + }, + "ca_certificate": { + "type": "string", + "title": "CA Certificate", + "description": "CA certificate", + "airbyte_secret": true, + "multiline": true, + "order": 1 + }, + "client_certificate": { + "type": "string", + "title": "Client Certificate", + "description": "Client certificate", + "airbyte_secret": true, + "multiline": true, + "order": 2, + "always_show": true + }, + "client_key": { + "type": "string", + "title": "Client Key", + "description": "Client key", + "airbyte_secret": true, + "multiline": true, + "order": 3, + "always_show": true + }, + "client_key_password": { + "type": "string", + "title": "Client key password", + "description": "Password for keystorage. If you do not add it - the password will be generated automatically.", + "airbyte_secret": true, + "order": 4 + } + } + } + ] + }, + "replication_method": { + "type": "object", + "title": "Replication Method", + "description": "Replication method for extracting data from the database.", + "order": 9, + "group": "advanced", + "oneOf": [ + { + "title": "Standard", + "description": "Standard replication requires no setup on the DB side but will not be able to represent deletions incrementally.", + "required": ["method"], + "properties": { + "method": { + "type": "string", + "const": "Standard", + "order": 0 + } + } + }, + { + "title": "Logical Replication (CDC)", + "description": "Logical replication uses the Postgres write-ahead log (WAL) to detect inserts, updates, and deletes. This needs to be configured on the source database itself. Only available on Postgres 10 and above. Read the docs.", + "required": ["method", "replication_slot", "publication"], + "additionalProperties": true, + "properties": { + "method": { + "type": "string", + "const": "CDC", + "order": 1 + }, + "plugin": { + "type": "string", + "title": "Plugin", + "description": "A logical decoding plugin installed on the PostgreSQL server.", + "enum": ["pgoutput"], + "default": "pgoutput", + "order": 2 + }, + "replication_slot": { + "type": "string", + "title": "Replication Slot", + "description": "A plugin logical replication slot. Read about replication slots.", + "order": 3 + }, + "publication": { + "type": "string", + "title": "Publication", + "description": "A Postgres publication used for consuming changes. Read about publications and replication identities.", + "order": 4 + }, + "initial_waiting_seconds": { + "type": "integer", + "title": "Initial Waiting Time in Seconds (Advanced)", + "description": "The amount of time the connector will wait when it launches to determine if there is new data to sync or not. Defaults to 300 seconds. Valid range: 120 seconds to 1200 seconds. Read about initial waiting time.", + "default": 300, + "order": 5, + "min": 120, + "max": 1200 + }, + "lsn_commit_behaviour": { + "type": "string", + "title": "LSN commit behaviour", + "description": "Determines when Airbtye should flush the LSN of processed WAL logs in the source database. `After loading Data in the destination` is default. If `While reading Data` is selected, in case of a downstream failure (while loading data into the destination), next sync would result in a full sync.", + "enum": [ + "While reading Data", + "After loading Data in the destination" + ], + "default": "After loading Data in the destination", + "order": 6 + } + } + } + ] + }, + "tunnel_method": { + "type": "object", + "title": "SSH Tunnel Method", + "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", + "oneOf": [ + { + "title": "No Tunnel", + "required": ["tunnel_method"], + "properties": { + "tunnel_method": { + "description": "No ssh tunnel needed to connect to database", + "type": "string", + "const": "NO_TUNNEL", + "order": 0 + } + } + }, + { + "title": "SSH Key Authentication", + "required": [ + "tunnel_method", + "tunnel_host", + "tunnel_port", + "tunnel_user", + "ssh_key" + ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": ["22"], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host.", + "type": "string", + "order": 3 + }, + "ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + }, + { + "title": "Password Authentication", + "required": [ + "tunnel_method", + "tunnel_host", + "tunnel_port", + "tunnel_user", + "tunnel_user_password" + ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": ["22"], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host", + "type": "string", + "order": 3 + }, + "tunnel_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 4 + } + } + } + ], + "group": "security" + } + }, + "groups": [ + { + "id": "db" + }, + { + "id": "auth" + }, + { + "id": "security", + "title": "Security" + }, + { + "id": "advanced", + "title": "Advanced" + } + ] + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["${host}", "${tunnel_method.tunnel_host}"] + } + }, + { + "sourceDefinitionId": "6ff047c0-f5d5-4ce5-8c81-204a830fa7e1", + "name": "AWS CloudTrail", + "dockerRepository": "airbyte/source-aws-cloudtrail", + "dockerImageTag": "0.1.5", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/aws-cloudtrail", + "icon": "awscloudtrail.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/aws-cloudtrail", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Aws CloudTrail Spec", + "type": "object", + "required": [ + "aws_key_id", + "aws_secret_key", + "aws_region_name", + "start_date" + ], + "additionalProperties": true, + "properties": { + "aws_key_id": { + "type": "string", + "title": "Key ID", + "description": "AWS CloudTrail Access Key ID. See the docs for more information on how to obtain this key.", + "airbyte_secret": true + }, + "aws_secret_key": { + "type": "string", + "title": "Secret Key", + "description": "AWS CloudTrail Access Key ID. See the docs for more information on how to obtain this key.", + "airbyte_secret": true + }, + "aws_region_name": { + "type": "string", + "title": "Region Name", + "description": "The default AWS Region to use, for example, us-west-1 or us-west-2. When specifying a Region inline during client initialization, this property is named region_name." + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "The date you would like to replicate data. Data in AWS CloudTrail is available for last 90 days only. Format: YYYY-MM-DD.", + "examples": ["2021-01-01"], + "default": "1970-01-01", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "format": "date" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "c6b0a29e-1da9-4512-9002-7bfd0cba2246", + "name": "Amazon Ads", + "dockerRepository": "airbyte/source-amazon-ads", + "dockerImageTag": "1.0.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/amazon-ads", + "icon": "amazonads.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/amazon-ads", + "connectionSpecification": { + "title": "Amazon Ads Spec", + "type": "object", + "properties": { + "auth_type": { + "title": "Auth Type", + "const": "oauth2.0", + "order": 0, + "type": "string" + }, + "client_id": { + "title": "Client ID", + "description": "The client ID of your Amazon Ads developer application. See the docs for more information.", + "order": 1, + "type": "string" + }, + "client_secret": { + "title": "Client Secret", + "description": "The client secret of your Amazon Ads developer application. See the docs for more information.", + "airbyte_secret": true, + "order": 2, + "type": "string" + }, + "refresh_token": { + "title": "Refresh Token", + "description": "Amazon Ads refresh token. See the docs for more information on how to obtain this token.", + "airbyte_secret": true, + "order": 3, + "type": "string" + }, + "region": { + "title": "Region", + "description": "Region to pull data from (EU/NA/FE). See docs for more details.", + "enum": ["NA", "EU", "FE"], + "type": "string", + "default": "NA", + "order": 4 + }, + "start_date": { + "title": "Start Date", + "description": "The Start date for collecting reports, should not be more than 60 days in the past. In YYYY-MM-DD format", + "examples": ["2022-10-10", "2022-10-22"], + "order": 5, + "type": "string" + }, + "profiles": { + "title": "Profile IDs", + "description": "Profile IDs you want to fetch data for. See docs for more details.", + "order": 6, + "type": "array", + "items": { + "type": "integer" + } + }, + "state_filter": { + "title": "State Filter", + "description": "Reflects the state of the Display, Product, and Brand Campaign streams as enabled, paused, or archived. If you do not populate this field, it will be ignored completely.", + "items": { + "type": "string", + "enum": ["enabled", "paused", "archived"] + }, + "type": "array", + "uniqueItems": true, + "order": 7 + }, + "look_back_window": { + "title": "Look Back Window", + "description": "The amount of days to go back in time to get the updated data from Amazon Ads", + "examples": [3, 10], + "type": "integer", + "default": 3, + "order": 8 + }, + "report_record_types": { + "title": "Report Record Types", + "description": "Optional configuration which accepts an array of string of record types. Leave blank for default behaviour to pull all report types. Use this config option only if you want to pull specific report type(s). See docs for more details", + "items": { + "type": "string", + "enum": [ + "adGroups", + "asins", + "asins_keywords", + "asins_targets", + "campaigns", + "keywords", + "productAds", + "targets" + ] + }, + "type": "array", + "uniqueItems": true, + "order": 9 + } + }, + "required": ["client_id", "client_secret", "refresh_token"], + "additionalProperties": true + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": ["auth_type"], + "predicate_value": "oauth2.0", + "oauth_config_specification": { + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": true, + "properties": { + "refresh_token": { + "type": "string", + "path_in_connector_config": ["refresh_token"] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": true, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": true, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": ["client_id"] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": ["client_secret"] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ + "api.amazon.com", + "advertising-api.amazon.com", + "advertising-api-eu.amazon.com", + "advertising-api-fe.amazon.com" + ] + } + }, + { + "sourceDefinitionId": "e55879a8-0ef8-4557-abcf-ab34c53ec460", + "name": "Amazon Seller Partner", + "dockerRepository": "airbyte/source-amazon-seller-partner", + "dockerImageTag": "1.0.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/amazon-seller-partner", + "icon": "amazonsellerpartner.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/amazon-seller-partner", + "changelogUrl": "https://docs.airbyte.com/integrations/sources/amazon-seller-partner", + "connectionSpecification": { + "title": "Amazon Seller Partner Spec", + "type": "object", + "properties": { + "app_id": { + "title": "App Id", + "description": "Your Amazon App ID", + "airbyte_secret": true, + "order": 0, + "type": "string" + }, + "auth_type": { + "title": "Auth Type", + "const": "oauth2.0", + "order": 1, + "type": "string" + }, + "lwa_app_id": { + "title": "LWA Client Id", + "description": "Your Login with Amazon Client ID.", + "order": 2, + "type": "string" + }, + "lwa_client_secret": { + "title": "LWA Client Secret", + "description": "Your Login with Amazon Client Secret.", + "airbyte_secret": true, + "order": 3, + "type": "string" + }, + "refresh_token": { + "title": "Refresh Token", + "description": "The Refresh Token obtained via OAuth flow authorization.", + "airbyte_secret": true, + "order": 4, + "type": "string" + }, + "aws_access_key": { + "title": "AWS Access Key", + "description": "Specifies the AWS access key used as part of the credentials to authenticate the user.", + "airbyte_secret": true, + "order": 5, + "type": "string" + }, + "aws_secret_key": { + "title": "AWS Secret Access Key", + "description": "Specifies the AWS secret key used as part of the credentials to authenticate the user.", + "airbyte_secret": true, + "order": 6, + "type": "string" + }, + "role_arn": { + "title": "Role ARN", + "description": "Specifies the Amazon Resource Name (ARN) of an IAM role that you want to use to perform operations requested using this profile. (Needs permission to 'Assume Role' STS).", + "airbyte_secret": true, + "order": 7, + "type": "string" + }, + "replication_start_date": { + "title": "Start Date", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": ["2017-01-25T00:00:00Z"], + "order": 8, + "type": "string" + }, + "replication_end_date": { + "title": "End Date", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data after this date will not be replicated.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$|^$", + "examples": ["2017-01-25T00:00:00Z"], + "order": 9, + "type": "string" + }, + "period_in_days": { + "title": "Period In Days", + "description": "Will be used for stream slicing for initial full_refresh sync when no updated state is present for reports that support sliced incremental sync.", + "default": 90, + "maximum": 90, + "examples": ["1", "10", "30", "60", "90"], + "order": 10, + "type": "integer" + }, + "report_options": { + "title": "Report Options", + "description": "Additional information passed to reports. This varies by report type. Must be a valid json string.", + "examples": [ + "{\"GET_BRAND_ANALYTICS_SEARCH_TERMS_REPORT\": {\"reportPeriod\": \"WEEK\"}}", + "{\"GET_SOME_REPORT\": {\"custom\": \"true\"}}" + ], + "order": 11, + "type": "string" + }, + "max_wait_seconds": { + "title": "Max wait time for reports (in seconds)", + "description": "Sometimes report can take up to 30 minutes to generate. This will set the limit for how long to wait for a successful report.", + "default": 500, + "examples": ["500", "1980"], + "order": 12, + "type": "integer" + }, + "aws_environment": { + "title": "AWSEnvironment", + "description": "An enumeration.", + "enum": ["PRODUCTION", "SANDBOX"], + "type": "string" + }, + "region": { + "title": "AWSRegion", + "description": "An enumeration.", + "enum": [ + "AE", + "AU", + "BE", + "BR", + "CA", + "DE", + "EG", + "ES", + "FR", + "GB", + "IN", + "IT", + "JP", + "MX", + "NL", + "PL", + "SA", + "SE", + "SG", + "TR", + "UK", + "US" + ], + "type": "string" + } + }, + "required": [ + "app_id", + "lwa_app_id", + "lwa_client_secret", + "refresh_token", + "replication_start_date", + "aws_environment", + "region" + ], + "additionalProperties": true, + "definitions": { + "AWSEnvironment": { + "title": "AWSEnvironment", + "description": "An enumeration.", + "enum": ["PRODUCTION", "SANDBOX"], + "type": "string" + }, + "AWSRegion": { + "title": "AWSRegion", + "description": "An enumeration.", + "enum": [ + "AE", + "AU", + "BE", + "BR", + "CA", + "DE", + "EG", + "ES", + "FR", + "GB", + "IN", + "IT", + "JP", + "MX", + "NL", + "PL", + "SA", + "SE", + "SG", + "TR", + "UK", + "US" + ], + "type": "string" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": ["auth_type"], + "predicate_value": "oauth2.0", + "oauth_config_specification": { + "oauth_user_input_from_connector_config_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "app_id": { + "type": "string", + "path_in_connector_config": ["app_id"] + } + } + }, + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "refresh_token": { + "type": "string", + "path_in_connector_config": ["refresh_token"] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "lwa_app_id": { + "type": "string" + }, + "lwa_client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "lwa_app_id": { + "type": "string", + "path_in_connector_config": ["lwa_app_id"] + }, + "lwa_client_secret": { + "type": "string", + "path_in_connector_config": ["lwa_client_secret"] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "983fd355-6bf3-4709-91b5-37afa391eeb6", + "name": "Amazon SQS", + "dockerRepository": "airbyte/source-amazon-sqs", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/amazon-sqs", + "icon": "awssqs.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/amazon-sqs", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Amazon SQS Source Spec", + "type": "object", + "required": ["queue_url", "region", "delete_messages"], + "additionalProperties": false, + "properties": { + "queue_url": { + "title": "Queue URL", + "description": "URL of the SQS Queue", + "type": "string", + "examples": [ + "https://sqs.eu-west-1.amazonaws.com/1234567890/my-example-queue" + ], + "order": 0 + }, + "region": { + "title": "AWS Region", + "description": "AWS Region of the SQS Queue", + "type": "string", + "enum": [ + "us-east-1", + "us-east-2", + "us-west-1", + "us-west-2", + "af-south-1", + "ap-east-1", + "ap-south-1", + "ap-northeast-1", + "ap-northeast-2", + "ap-northeast-3", + "ap-southeast-1", + "ap-southeast-2", + "ca-central-1", + "cn-north-1", + "cn-northwest-1", + "eu-central-1", + "eu-north-1", + "eu-south-1", + "eu-west-1", + "eu-west-2", + "eu-west-3", + "sa-east-1", + "me-south-1", + "us-gov-east-1", + "us-gov-west-1" + ], + "order": 1 + }, + "delete_messages": { + "title": "Delete Messages After Read", + "description": "If Enabled, messages will be deleted from the SQS Queue after being read. If Disabled, messages are left in the queue and can be read more than once. WARNING: Enabling this option can result in data loss in cases of failure, use with caution, see documentation for more detail. ", + "type": "boolean", + "default": false, + "order": 2 + }, + "max_batch_size": { + "title": "Max Batch Size", + "description": "Max amount of messages to get in one batch (10 max)", + "type": "integer", + "examples": ["5"], + "order": 3 + }, + "max_wait_time": { + "title": "Max Wait Time", + "description": "Max amount of time in seconds to wait for messages in a single poll (20 max)", + "type": "integer", + "examples": ["5"], + "order": 4 + }, + "attributes_to_return": { + "title": "Message Attributes To Return", + "description": "Comma separated list of Mesage Attribute names to return", + "type": "string", + "examples": ["attr1,attr2"], + "order": 5 + }, + "visibility_timeout": { + "title": "Message Visibility Timeout", + "description": "Modify the Visibility Timeout of the individual message from the Queue's default (seconds).", + "type": "integer", + "examples": ["15"], + "order": 6 + }, + "access_key": { + "title": "AWS IAM Access Key ID", + "description": "The Access Key ID of the AWS IAM Role to use for pulling messages", + "type": "string", + "examples": ["xxxxxHRNxxx3TBxxxxxx"], + "airbyte_secret": true, + "order": 7 + }, + "secret_key": { + "title": "AWS IAM Secret Key", + "description": "The Secret Key of the AWS IAM Role to use for pulling messages", + "type": "string", + "examples": ["hu+qE5exxxxT6o/ZrKsxxxxxxBhxxXLexxxxxVKz"], + "airbyte_secret": true, + "order": 8 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "fa9f58c6-2d03-4237-aaa4-07d75e0c1396", + "name": "Amplitude", + "dockerRepository": "airbyte/source-amplitude", + "dockerImageTag": "0.2.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/amplitude", + "icon": "amplitude.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/amplitude", + "connectionSpecification": { + "$schema": "https://json-schema.org/draft-07/schema#", + "title": "Amplitude Spec", + "type": "object", + "required": ["api_key", "secret_key", "start_date"], + "additionalProperties": true, + "properties": { + "data_region": { + "type": "string", + "title": "Data region", + "description": "Amplitude data region server", + "enum": ["Standard Server", "EU Residency Server"], + "default": "Standard Server" + }, + "api_key": { + "type": "string", + "title": "API Key", + "description": "Amplitude API Key. See the setup guide for more information on how to obtain this key.", + "airbyte_secret": true + }, + "secret_key": { + "type": "string", + "title": "Secret Key", + "description": "Amplitude Secret Key. See the setup guide for more information on how to obtain this key.", + "airbyte_secret": true + }, + "start_date": { + "type": "string", + "title": "Replication Start Date", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "description": "UTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.", + "examples": ["2021-01-25T00:00:00Z"] + }, + "request_time_range": { + "type": "integer", + "title": "Request time range", + "description": "According to Considerations too big time range in request can cause a timeout error. In this case, set shorter time interval in hours.", + "default": 24, + "minimum": 1, + "maximum": 8760 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["amplitude.com", "analytics.eu.amplitude.com"] + } + }, + { + "sourceDefinitionId": "47f17145-fe20-4ef5-a548-e29b048adf84", + "name": "Apify Dataset", + "dockerRepository": "airbyte/source-apify-dataset", + "dockerImageTag": "0.1.11", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/apify-dataset", + "icon": "apify.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/apify-dataset", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Apify Dataset Spec", + "type": "object", + "required": ["datasetId"], + "additionalProperties": false, + "properties": { + "datasetId": { + "type": "string", + "title": "Dataset ID", + "description": "ID of the dataset you would like to load to Airbyte." + }, + "clean": { + "type": "boolean", + "title": "Clean", + "description": "If set to true, only clean items will be downloaded from the dataset. See description of what clean means in Apify API docs. If not sure, set clean to false." + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "b4375641-e270-41d3-9c20-4f9cecad87a8", + "name": "Appfollow", + "dockerRepository": "airbyte/source-appfollow", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/appfollow", + "icon": "appfollow.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/appfollow", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Appfollow Spec", + "type": "object", + "required": ["ext_id", "country", "cid", "api_secret"], + "additionalProperties": true, + "properties": { + "ext_id": { + "type": "string", + "title": "app external id", + "description": "for App Store — this is 9-10 digits identification number; for Google Play — this is bundle name;" + }, + "cid": { + "type": "string", + "title": "client id", + "description": "client id provided by Appfollow" + }, + "api_secret": { + "type": "string", + "title": "api secret", + "description": "api secret provided by Appfollow", + "airbyte_secret": true + }, + "country": { + "type": "string", + "title": "country", + "description": "getting data by Country" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "e59c8416-c2fa-4bd3-9e95-52677ea281c1", + "name": "Apple Search Ads", + "dockerRepository": "airbyte/source-apple-search-ads", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/apple-search-ads", + "icon": "apple.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/apple-search-ads", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Apple Search Ads Spec", + "type": "object", + "required": ["org_id", "client_id", "client_secret", "start_date"], + "additionalProperties": true, + "properties": { + "org_id": { + "type": "integer", + "title": "Org Id", + "description": "The identifier of the organization that owns the campaign. Your Org Id is the same as your account in the Apple Search Ads UI." + }, + "client_id": { + "type": "string", + "title": "Client Id", + "description": "A user identifier for the token request. See here", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "A string that authenticates the user’s setup request. See here", + "airbyte_secret": true + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "Start getting data from that date.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": ["2020-01-01"] + }, + "end_date": { + "type": "string", + "title": "End Date", + "description": "Data is retrieved until that date (included)", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": ["2021-01-01"] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "16447954-e6a8-4593-b140-43dea13bc457", + "name": "AppsFlyer", + "dockerRepository": "airbyte/source-appsflyer", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/appsflyer", + "icon": "appsflyer.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Appsflyer Spec", + "type": "object", + "required": ["app_id", "api_token", "start_date"], + "additionalProperties": false, + "properties": { + "app_id": { + "type": "string", + "description": "App identifier as found in AppsFlyer." + }, + "api_token": { + "type": "string", + "description": "Pull API token for authentication. If you change the account admin, the token changes, and you must update scripts with the new token. Get the API token in the Dashboard.", + "airbyte_secret": true + }, + "start_date": { + "type": "string", + "description": "The default value to use if no bookmark exists for an endpoint. Raw Reports historical lookback is limited to 90 days.", + "examples": ["2021-11-16", "2021-11-16 15:00:00"], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}( [0-9]{2}:[0-9]{2}:[0-9]{2})?$" + }, + "timezone": { + "type": "string", + "description": "Time zone in which date times are stored. The project timezone may be found in the App settings in the AppsFlyer console.", + "default": "UTC", + "examples": ["US/Pacific", "UTC"] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "2af123bf-0aaf-4e0d-9784-cb497f23741a", + "name": "Appstore", + "dockerRepository": "airbyte/source-appstore-singer", + "dockerImageTag": "0.2.6", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/appstore", + "icon": "appstore.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/appstore", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Source Appstore Singer Spec", + "type": "object", + "required": [ + "key_id", + "private_key", + "issuer_id", + "vendor", + "start_date" + ], + "additionalProperties": false, + "properties": { + "key_id": { + "type": "string", + "title": "Key ID", + "description": "Appstore Key ID. See the docs for more information on how to obtain this key." + }, + "private_key": { + "type": "string", + "title": "Private Key", + "description": "Appstore Private Key. See the docs for more information on how to obtain this key.", + "airbyte_secret": true, + "multiline": true + }, + "issuer_id": { + "type": "string", + "title": "Issuer ID", + "description": "Appstore Issuer ID. See the docs for more information on how to obtain this ID." + }, + "vendor": { + "type": "string", + "title": "Vendor ID", + "description": "Appstore Vendor ID. See the docs for more information on how to obtain this ID." + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", + "examples": ["2020-11-16T00:00:00Z"], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "d0243522-dccf-4978-8ba0-37ed47a0bdbf", + "name": "Asana", + "dockerRepository": "airbyte/source-asana", + "dockerImageTag": "0.1.5", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/asana", + "icon": "asana.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Asana Spec", + "type": "object", + "additionalProperties": true, + "properties": { + "credentials": { + "title": "Authentication mechanism", + "description": "Choose how to authenticate to Github", + "type": "object", + "oneOf": [ + { + "type": "object", + "title": "Authenticate with Personal Access Token", + "required": ["personal_access_token"], + "properties": { + "option_title": { + "type": "string", + "title": "Credentials title", + "description": "PAT Credentials", + "const": "PAT Credentials" + }, + "personal_access_token": { + "type": "string", + "title": "Personal Access Token", + "description": "Asana Personal Access Token (generate yours here).", + "airbyte_secret": true + } + } + }, + { + "type": "object", + "title": "Authenticate via Asana (Oauth)", + "required": ["client_id", "client_secret", "refresh_token"], + "properties": { + "option_title": { + "type": "string", + "title": "Credentials title", + "description": "OAuth Credentials", + "const": "OAuth Credentials" + }, + "client_id": { + "type": "string", + "title": "", + "description": "", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "title": "", + "description": "", + "airbyte_secret": true + }, + "refresh_token": { + "type": "string", + "title": "", + "description": "", + "airbyte_secret": true + } + } + } + ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": ["credentials", "1"], + "oauthFlowInitParameters": [["client_id"], ["client_secret"]], + "oauthFlowOutputParameters": [["refresh_token"]] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta" + }, + { + "sourceDefinitionId": "4e8c9fa0-3634-499b-b948-11581b5c3efa", + "name": "Ashby", + "dockerRepository": "airbyte/source-ashby", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/ashby", + "icon": "ashby.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://developers.ashbyhq.com/reference/introduction", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Ashby Spec", + "type": "object", + "required": ["api_key", "start_date"], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "title": "Ashby API key", + "description": "The Ashby API Key, see doc here.", + "airbyte_secret": true + }, + "start_date": { + "type": "string", + "title": "Start date", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", + "examples": ["2017-01-25T00:00:00Z"] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "6c504e48-14aa-4221-9a72-19cf5ff1ae78", + "name": "Auth0", + "dockerRepository": "airbyte/source-auth0", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/auth0", + "icon": "auth0.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://auth0.com/docs/api/management/v2/", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Auth0 Management API Spec", + "type": "object", + "required": ["base_url", "credentials"], + "additionalProperties": true, + "properties": { + "base_url": { + "type": "string", + "title": "Base URL", + "examples": ["https://dev-yourOrg.us.auth0.com/"], + "description": "The Authentication API is served over HTTPS. All URLs referenced in the documentation have the following base `https://YOUR_DOMAIN`" + }, + "credentials": { + "title": "Authentication Method", + "type": "object", + "oneOf": [ + { + "type": "object", + "title": "OAuth2 Confidential Application", + "required": [ + "auth_type", + "client_id", + "client_secret", + "audience" + ], + "properties": { + "auth_type": { + "type": "string", + "title": "Authentication Method", + "const": "oauth2_confidential_application", + "order": 0 + }, + "client_id": { + "title": "Client ID", + "description": "Your application's Client ID. You can find this value on the application's settings tab after you login the admin portal.", + "type": "string", + "examples": ["Client_ID"] + }, + "client_secret": { + "title": "Client Secret", + "description": "Your application's Client Secret. You can find this value on the application's settings tab after you login the admin portal.", + "type": "string", + "examples": ["Client_Secret"], + "airbyte_secret": true + }, + "audience": { + "title": "Audience", + "description": "The audience for the token, which is your API. You can find this in the Identifier field on your API's settings tab", + "type": "string", + "examples": ["https://dev-yourOrg.us.auth0.com/api/v2/"] + } + } + }, + { + "type": "object", + "title": "OAuth2 Access Token", + "required": ["access_token", "auth_type"], + "properties": { + "auth_type": { + "type": "string", + "title": "Authentication Method", + "const": "oauth2_access_token", + "order": 0 + }, + "access_token": { + "title": "OAuth2 Access Token", + "description": "Also called API Access Token The access token used to call the Auth0 Management API Token. It's a JWT that contains specific grant permissions knowns as scopes.", + "type": "string", + "airbyte_secret": true + } + } + } + ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "798ae795-5189-42b6-b64e-3cb91db93338", + "name": "Azure Table Storage", + "dockerRepository": "airbyte/source-azure-table", + "dockerImageTag": "0.1.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/azure-table", + "icon": "azureblobstorage.svg", + "sourceType": "database", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Azure Data Table Spec", + "type": "object", + "required": ["storage_account_name", "storage_access_key"], + "properties": { + "storage_account_name": { + "title": "Account Name", + "type": "string", + "description": "The name of your storage account.", + "order": 0, + "airbyte_secret": false + }, + "storage_access_key": { + "title": "Access Key", + "type": "string", + "description": "Azure Table Storage Access Key. See the docs for more information on how to obtain this key.", + "order": 1, + "airbyte_secret": true + }, + "storage_endpoint_suffix": { + "title": "Endpoint Suffix", + "type": "string", + "description": "Azure Table Storage service account URL suffix. See the docs for more information on how to obtain endpoint suffix", + "order": 2, + "default": "core.windows.net", + "examples": ["core.windows.net", "core.chinacloudapi.cn"], + "airbyte_secret": false + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "fdaaba68-4875-4ed9-8fcd-4ae1e0a25093", + "name": "Azure Blob Storage", + "dockerRepository": "airbyte/source-azure-blob-storage", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/azure-blob-storage", + "icon": "azureblobstorage.svg", + "sourceType": "file", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/azureblobstorage", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "AzureBlobStorage Source Spec", + "type": "object", + "required": [ + "azure_blob_storage_account_name", + "azure_blob_storage_account_key", + "azure_blob_storage_container_name", + "format" + ], + "additionalProperties": true, + "properties": { + "azure_blob_storage_endpoint": { + "title": "Endpoint Domain Name", + "type": "string", + "default": "blob.core.windows.net", + "description": "This is Azure Blob Storage endpoint domain name. Leave default value (or leave it empty if run container from command line) to use Microsoft native from example.", + "examples": ["blob.core.windows.net"] + }, + "azure_blob_storage_container_name": { + "title": "Azure blob storage container (Bucket) Name", + "type": "string", + "description": "The name of the Azure blob storage container.", + "examples": ["airbytetescontainername"] + }, + "azure_blob_storage_account_name": { + "title": "Azure Blob Storage account name", + "type": "string", + "description": "The account's name of the Azure Blob Storage.", + "examples": ["airbyte5storage"] + }, + "azure_blob_storage_account_key": { + "title": "Azure Blob Storage account key", + "description": "The Azure blob storage account key.", + "airbyte_secret": true, + "type": "string", + "examples": [ + "Z8ZkZpteggFx394vm+PJHnGTvdRncaYS+JhLKdj789YNmD+iyGTnG+PV+POiuYNhBg/ACS+LKjd%4FG3FHGN12Nd==" + ] + }, + "azure_blob_storage_blobs_prefix": { + "title": "Azure Blob Storage blobs prefix", + "description": "The Azure blob storage prefix to be applied", + "type": "string", + "examples": ["FolderA/FolderB/"] + }, + "azure_blob_storage_schema_inference_limit": { + "title": "Azure Blob Storage schema inference limit", + "description": "The Azure blob storage blobs to scan for inferring the schema, useful on large amounts of data with consistent structure", + "type": "integer", + "examples": ["500"] + }, + "format": { + "title": "Input Format", + "type": "object", + "description": "Input data format", + "oneOf": [ + { + "title": "JSON Lines: newline-delimited JSON", + "required": ["format_type"], + "properties": { + "format_type": { + "type": "string", + "const": "JSONL" + } + } + } + ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "971c3e1e-78a5-411e-ad56-c4052b50876b", + "name": "Babelforce", + "dockerRepository": "airbyte/source-babelforce", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/babelforce", + "icon": "babelforce.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Babelforce Spec", + "type": "object", + "required": ["region", "access_key_id", "access_token"], + "additionalProperties": false, + "properties": { + "region": { + "type": "string", + "title": "Region", + "default": "services", + "description": "Babelforce region", + "enum": ["services", "us-east", "ap-southeast"], + "order": 1 + }, + "access_key_id": { + "type": "string", + "title": "Access Key ID", + "description": "The Babelforce access key ID", + "airbyte_secret": true, + "order": 2 + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "The Babelforce access token", + "airbyte_secret": true, + "order": 3 + }, + "date_created_from": { + "type": "integer", + "title": "Date Created from", + "description": "Timestamp in Unix the replication from Babelforce API will start from. For example 1651363200 which corresponds to 2022-05-01 00:00:00.", + "examples": [1651363200], + "order": 4 + }, + "date_created_to": { + "type": "integer", + "title": "Date Created to", + "description": "Timestamp in Unix the replication from Babelforce will be up to. For example 1651363200 which corresponds to 2022-05-01 00:00:00.", + "examples": [1651363200], + "order": 5 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "90916976-a132-4ce9-8bce-82a03dd58788", + "name": "BambooHR", + "dockerRepository": "airbyte/source-bamboo-hr", + "dockerImageTag": "0.2.2", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/bamboo-hr", + "icon": "bamboohr.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/bamboo-hr", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Bamboo HR Spec", + "type": "object", + "required": ["subdomain", "api_key"], + "additionalProperties": true, + "properties": { + "subdomain": { + "type": "string", + "description": "Sub Domain of bamboo hr" + }, + "api_key": { + "type": "string", + "description": "Api key of bamboo hr", + "airbyte_secret": true + }, + "custom_reports_fields": { + "type": "string", + "default": "", + "description": "Comma-separated list of fields to include in custom reports." + }, + "custom_reports_include_default_fields": { + "type": "boolean", + "default": true, + "description": "If true, the custom reports endpoint will include the default fields defined here: https://documentation.bamboohr.com/docs/list-of-field-names." + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "59c5501b-9f95-411e-9269-7143c939adbd", + "name": "BigCommerce", + "dockerRepository": "airbyte/source-bigcommerce", + "dockerImageTag": "0.1.10", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/bigcommerce", + "icon": "bigcommerce.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/bigcommerce", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "BigCommerce Source CDK Specifications", + "type": "object", + "required": ["start_date", "store_hash", "access_token"], + "additionalProperties": true, + "properties": { + "start_date": { + "type": "string", + "title": "Start Date", + "description": "The date you would like to replicate data. Format: YYYY-MM-DD.", + "examples": ["2021-01-01"], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" + }, + "store_hash": { + "type": "string", + "title": "Store Hash", + "description": "The hash code of the store. For https://api.bigcommerce.com/stores/HASH_CODE/v3/, The store's hash code is 'HASH_CODE'." + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "Access Token for making authenticated requests.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "bfd1ddf8-ae8a-4620-b1d7-55597d2ba08c", + "name": "BigQuery", + "dockerRepository": "airbyte/source-bigquery", + "dockerImageTag": "0.2.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/bigquery", + "icon": "bigquery.svg", + "sourceType": "database", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/bigquery", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "BigQuery Source Spec", + "type": "object", + "required": ["project_id", "credentials_json"], + "properties": { + "project_id": { + "type": "string", + "description": "The GCP project ID for the project containing the target BigQuery dataset.", + "title": "Project ID" + }, + "dataset_id": { + "type": "string", + "description": "The dataset ID to search for tables and views. If you are only loading data from one dataset, setting this option could result in much faster schema discovery.", + "title": "Default Dataset ID" + }, + "credentials_json": { + "type": "string", + "description": "The contents of your Service Account Key JSON file. See the docs for more information on how to obtain this key.", + "title": "Credentials JSON", + "airbyte_secret": true + } + } + }, + "supportsIncremental": true, + "supportsNormalization": true, + "supportsDBT": true, + "supported_destination_sync_modes": [], + "supported_sync_modes": ["overwrite", "append", "append_dedup"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "47f25999-dd5e-4636-8c39-e7cea2453331", + "name": "Bing Ads", + "dockerRepository": "airbyte/source-bing-ads", + "dockerImageTag": "0.1.20", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/bing-ads", + "icon": "bingads.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/bing-ads", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Bing Ads Spec", + "type": "object", + "required": [ + "developer_token", + "client_id", + "refresh_token", + "reports_start_date" + ], + "additionalProperties": true, + "properties": { + "auth_method": { + "type": "string", + "const": "oauth2.0" + }, + "tenant_id": { + "type": "string", + "title": "Tenant ID", + "description": "The Tenant ID of your Microsoft Advertising developer application. Set this to \"common\" unless you know you need a different value.", + "airbyte_secret": true, + "default": "common", + "order": 0 + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "The Client ID of your Microsoft Advertising developer application.", + "airbyte_secret": true, + "order": 1 + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "The Client Secret of your Microsoft Advertising developer application.", + "default": "", + "airbyte_secret": true, + "order": 2 + }, + "refresh_token": { + "type": "string", + "title": "Refresh Token", + "description": "Refresh Token to renew the expired Access Token.", + "airbyte_secret": true, + "order": 3 + }, + "developer_token": { + "type": "string", + "title": "Developer Token", + "description": "Developer token associated with user. See more info in the docs.", + "airbyte_secret": true, + "order": 4 + }, + "reports_start_date": { + "type": "string", + "title": "Reports replication start date", + "format": "date", + "default": "2020-01-01", + "description": "The start date from which to begin replicating report data. Any data generated before this date will not be replicated in reports. This is a UTC date in YYYY-MM-DD format.", + "order": 5 + }, + "lookback_window": { + "title": "Lookback window", + "description": "Also known as attribution or conversion window. How far into the past to look for records (in days). If your conversion window has an hours/minutes granularity, round it up to the number of days exceeding. Used only for performance report streams in incremental mode.", + "type": "integer", + "default": 0, + "minimum": 0, + "maximum": 90, + "order": 6 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": ["auth_method"], + "predicate_value": "oauth2.0", + "oauth_config_specification": { + "oauth_user_input_from_connector_config_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "tenant_id": { + "type": "string", + "path_in_connector_config": ["tenant_id"] + } + } + }, + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "refresh_token": { + "type": "string", + "path_in_connector_config": ["refresh_token"] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": ["client_id"] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": ["client_secret"] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ + "bingads.microsoft.com", + "login.microsoftonline.com", + "login.live.com", + "login.windows-ppe.net", + "ads.microsoft.com", + "api.ads.microsoft.com" + ] + } + }, + { + "sourceDefinitionId": "63cea06f-1c75-458d-88fe-ad48c7cb27fd", + "name": "Braintree", + "dockerRepository": "airbyte/source-braintree", + "dockerImageTag": "0.1.4", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/braintree", + "icon": "braintree.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/braintree", + "connectionSpecification": { + "title": "Braintree Spec", + "type": "object", + "properties": { + "merchant_id": { + "title": "Merchant ID", + "description": "The unique identifier for your entire gateway account. See the docs for more information on how to obtain this ID.", + "name": "Merchant ID", + "type": "string" + }, + "public_key": { + "title": "Public Key", + "description": "Braintree Public Key. See the docs for more information on how to obtain this key.", + "name": "Public Key", + "type": "string" + }, + "private_key": { + "title": "Private Key", + "description": "Braintree Private Key. See the docs for more information on how to obtain this key.", + "name": "Private Key", + "airbyte_secret": true, + "type": "string" + }, + "start_date": { + "title": "Start Date", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", + "name": "Start Date", + "examples": ["2020", "2020-12-30", "2020-11-22 20:20:05"], + "type": "string", + "format": "date-time" + }, + "environment": { + "title": "Environment", + "description": "Environment specifies where the data will come from.", + "name": "Environment", + "examples": ["sandbox", "production", "qa", "development"], + "enum": ["Development", "Sandbox", "Qa", "Production"], + "type": "string" + } + }, + "required": [ + "merchant_id", + "public_key", + "private_key", + "environment" + ] + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "7c37685e-8512-4901-addf-9afbef6c0de9", + "name": "Breezometer", + "dockerRepository": "airbyte/source-breezometer", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/breezometer", + "icon": "breezometer.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/breezometer", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Breezometer Spec", + "type": "object", + "required": ["api_key", "latitude", "longitude"], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "tittle": "API Key", + "description": "Your API Access Key. See here.", + "airbyte_secret": true + }, + "latitude": { + "type": "string", + "tittle": "Latitude", + "description": "Latitude of the monitored location.", + "examples": ["54.675003"] + }, + "longitude": { + "type": "string", + "tittle": "Longitude", + "description": "Longitude of the monitored location.", + "examples": ["-113.550282"] + }, + "days_to_forecast": { + "type": "integer", + "tittle": "Days to Forecast", + "description": "Number of days to forecast. Minimum 1, maximum 3. Valid for Polen and Weather Forecast streams.", + "examples": [3] + }, + "hours_to_forecast": { + "type": "integer", + "tittle": "Hours to Forecast", + "description": "Number of hours to forecast. Minimum 1, maximum 96. Valid for Air Quality Forecast stream.", + "examples": [30] + }, + "historic_hours": { + "type": "integer", + "tittle": "Historic Hours", + "description": "Number of hours retireve from Air Quality History stream. Minimum 1, maximum 720.", + "examples": [30] + }, + "radius": { + "type": "integer", + "tittle": "Radius", + "description": "Desired radius from the location provided. Minimum 5, maximum 100. Valid for Wildfires streams.", + "examples": [50] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "dc98a6ad-2dd1-47b6-9529-2ec35820f9c6", + "name": "CallRail", + "dockerRepository": "airbyte/source-callrail", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/callrail", + "icon": "callrail.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/callrail", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Call Rail Spec", + "type": "object", + "required": ["api_key", "account_id", "start_date"], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "description": "API access key", + "airbyte_secret": true + }, + "account_id": { + "type": "string", + "description": "Account ID", + "airbyte_secret": true + }, + "start_date": { + "type": "string", + "description": "Start getting data from that date.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": ["%Y-%m-%d"] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "bb1a6d31-6879-4819-a2bd-3eed299ea8e2", + "name": "Cart.com", + "dockerRepository": "airbyte/source-cart", + "dockerImageTag": "0.2.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/cart", + "icon": "cart.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/cart", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Cart.com Spec", + "type": "object", + "required": ["start_date"], + "additionalProperties": true, + "properties": { + "credentials": { + "title": "Authorization Method", + "description": "", + "type": "object", + "oneOf": [ + { + "title": "Central API Router", + "type": "object", + "order": 0, + "required": [ + "auth_type", + "user_name", + "user_secret", + "site_id" + ], + "properties": { + "auth_type": { + "type": "string", + "const": "CENTRAL_API_ROUTER", + "order": 0 + }, + "user_name": { + "type": "string", + "title": "User Name", + "description": "Enter your application's User Name", + "airbyte_secret": true, + "order": 1 + }, + "user_secret": { + "type": "string", + "title": "User Secret", + "description": "Enter your application's User Secret", + "airbyte_secret": true, + "order": 2 + }, + "site_id": { + "type": "string", + "title": "Site ID", + "description": "You can determine a site provisioning site Id by hitting https://site.com/store/sitemonitor.aspx and reading the response param PSID", + "airbyte_secret": true, + "order": 3 + } + } + }, + { + "title": "Single Store Access Token", + "type": "object", + "order": 1, + "required": ["auth_type", "access_token", "store_name"], + "properties": { + "auth_type": { + "type": "string", + "const": "SINGLE_STORE_ACCESS_TOKEN", + "order": 0 + }, + "access_token": { + "type": "string", + "title": "Access Token", + "airbyte_secret": true, + "order": 1, + "description": "Access Token for making authenticated requests." + }, + "store_name": { + "type": "string", + "title": "Store Name", + "order": 2, + "description": "The name of Cart.com Online Store. All API URLs start with https://[mystorename.com]/api/v1/, where [mystorename.com] is the domain name of your store." + } + } + } + ] + }, + "start_date": { + "title": "Start Date", + "type": "string", + "description": "The date from which you'd like to replicate the data", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": ["2021-01-01T00:00:00Z"] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "686473f1-76d9-4994-9cc7-9b13da46147c", + "name": "Chargebee", + "dockerRepository": "airbyte/source-chargebee", + "dockerImageTag": "0.2.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/chargebee", + "icon": "chargebee.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://apidocs.chargebee.com/docs/api", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Chargebee Spec", + "type": "object", + "required": ["site", "site_api_key", "start_date", "product_catalog"], + "additionalProperties": true, + "properties": { + "site_api_key": { + "type": "string", + "title": "API Key", + "description": "Chargebee API Key. See the docs for more information on how to obtain this key.", + "airbyte_secret": true, + "order": 0 + }, + "site": { + "type": "string", + "title": "Site", + "description": "The site prefix for your Chargebee instance.", + "examples": ["airbyte-test"], + "order": 1 + }, + "start_date": { + "type": "string", + "format": "date-time", + "title": "Start Date", + "description": "UTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": ["2021-01-25T00:00:00Z"], + "order": 2 + }, + "product_catalog": { + "type": "string", + "title": "Product Catalog", + "description": "Product Catalog version of your Chargebee site. Instructions on how to find your version you may find here under `API Version` section.", + "enum": ["1.0", "2.0"], + "order": 3 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["*.chargebee.com"] + } + }, + { + "sourceDefinitionId": "9b2d3607-7222-4709-9fa2-c2abdebbdd88", + "name": "Chargify", + "dockerRepository": "airbyte/source-chargify", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/chargify", + "icon": "chargify.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/chargify", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Chargify Spec", + "type": "object", + "required": ["api_key", "domain"], + "additionalProperties": false, + "properties": { + "api_key": { + "type": "string", + "description": "Chargify API Key.", + "airbyte_secret": true + }, + "domain": { + "type": "string", + "description": "Chargify domain. Normally this domain follows the following format companyname.chargify.com" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "b6604cbd-1b12-4c08-8767-e140d0fb0877", + "name": "Chartmogul", + "dockerRepository": "airbyte/source-chartmogul", + "dockerImageTag": "0.2.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/chartmogul", + "icon": "chartmogul.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/chartmogul", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Chartmogul Spec", + "type": "object", + "required": ["api_key", "start_date", "interval"], + "properties": { + "api_key": { + "type": "string", + "title": "API key", + "description": "Your Chartmogul API key. See the docs for info on how to obtain this.", + "airbyte_secret": true, + "order": 0 + }, + "start_date": { + "type": "string", + "title": "Start date", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. When feasible, any data before this date will not be replicated.", + "examples": ["2017-01-25T00:00:00Z"], + "order": 1, + "format": "date-time" + }, + "interval": { + "type": "string", + "title": "Interval", + "description": "Some APIs such as Metrics require intervals to cluster data.", + "enum": ["day", "week", "month", "quarter"], + "default": "month", + "order": 2 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": ["api.chartmogul.com"] + } + }, + { + "sourceDefinitionId": "bad83517-5e54-4a3d-9b53-63e85fbd4d7c", + "name": "ClickHouse", + "dockerRepository": "airbyte/source-clickhouse", + "dockerImageTag": "0.1.17", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/clickhouse", + "icon": "clickhouse.svg", + "sourceType": "database", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/clickhouse", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "ClickHouse Source Spec", + "type": "object", + "required": ["host", "port", "database", "username"], + "properties": { + "host": { + "description": "The host endpoint of the Clickhouse cluster.", + "title": "Host", + "type": "string", + "order": 0 + }, + "port": { + "description": "The port of the database.", + "title": "Port", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 8123, + "examples": ["8123"], + "order": 1 + }, + "database": { + "description": "The name of the database.", + "title": "Database", + "type": "string", + "examples": ["default"], + "order": 2 + }, + "username": { + "description": "The username which is used to access the database.", + "title": "Username", + "type": "string", + "order": 3 + }, + "password": { + "description": "The password associated with this username.", + "title": "Password", + "type": "string", + "airbyte_secret": true, + "order": 4 + }, + "jdbc_url_params": { + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (Eg. key1=value1&key2=value2&key3=value3). For more information read about JDBC URL parameters.", + "title": "JDBC URL Parameters (Advanced)", + "type": "string", + "order": 5 + }, + "ssl": { + "title": "SSL Connection", + "description": "Encrypt data using SSL.", + "type": "boolean", + "default": true, + "order": 6 + }, + "tunnel_method": { + "type": "object", + "title": "SSH Tunnel Method", + "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", + "oneOf": [ + { + "title": "No Tunnel", + "required": ["tunnel_method"], + "properties": { + "tunnel_method": { + "description": "No ssh tunnel needed to connect to database", + "type": "string", + "const": "NO_TUNNEL", + "order": 0 + } + } + }, + { + "title": "SSH Key Authentication", + "required": [ + "tunnel_method", + "tunnel_host", + "tunnel_port", + "tunnel_user", + "ssh_key" + ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": ["22"], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host.", + "type": "string", + "order": 3 + }, + "ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + }, + { + "title": "Password Authentication", + "required": [ + "tunnel_method", + "tunnel_host", + "tunnel_port", + "tunnel_user", + "tunnel_user_password" + ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": ["22"], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host", + "type": "string", + "order": 3 + }, + "tunnel_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 4 + } + } + } + ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": ["${host}", "${tunnel_method.tunnel_host}"] + } + }, + { + "sourceDefinitionId": "311a7a27-3fb5-4f7e-8265-5e4afe258b66", + "name": "ClickUp", + "dockerRepository": "airbyte/source-clickup-api", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/click-up", + "icon": "clickup.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "ClickUp Api Spec", + "type": "object", + "required": ["api_token"], + "additionalProperties": true, + "properties": { + "api_token": { + "type": "string", + "description": "Every ClickUp API call required authentication. This field is your personal API token. See here.", + "airbyte_secret": true + }, + "team_id": { + "type": "string", + "description": "The ID of your team in ClickUp. Retrieve it from the `/team` of the ClickUp API. See here." + }, + "space_id": { + "type": "string", + "description": "The ID of your space in your workspace. Retrieve it from the `/team/{team_id}/space` of the ClickUp API. See here." + }, + "folder_id": { + "type": "string", + "description": "The ID of your folder in your space. Retrieve it from the `/space/{space_id}/folder` of the ClickUp API. See here." + }, + "list_id": { + "type": "string", + "description": "The ID of your list in your folder. Retrieve it from the `/folder/{folder_id}/list` of the ClickUp API. See here." + }, + "include_closed_tasks": { + "title": "Include Closed Tasks", + "type": "boolean", + "default": false, + "description": "Include or exclude closed tasks. By default, they are excluded. See here." + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "dfffecb7-9a13-43e9-acdc-b92af7997ca9", + "name": "Close.com", + "dockerRepository": "airbyte/source-close-com", + "dockerImageTag": "0.2.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/close-com", + "icon": "close.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/close-com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Close.com Spec", + "type": "object", + "required": ["api_key"], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "description": "Close.com API key (usually starts with 'api_'; find yours here).", + "airbyte_secret": true + }, + "start_date": { + "type": "string", + "description": "The start date to sync data. Leave blank for full sync. Format: YYYY-MM-DD.", + "examples": ["2021-01-01"], + "default": "2021-01-01", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "format": "date-time" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": ["api.close.com"] + } + }, + { + "sourceDefinitionId": "9cdd4183-d0ba-40c3-aad3-6f46d4103974", + "name": "CoinGecko Coins", + "dockerRepository": "airbyte/source-coingecko-coins", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/coingecko-coins", + "icon": "coingeckocoins.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "CoinGecko Coins Spec", + "type": "object", + "required": ["coin_id", "vs_currency", "days", "start_date"], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "description": "API Key (for pro users)", + "airbyte_secret": true, + "order": 0 + }, + "coin_id": { + "type": "string", + "description": "CoinGecko coin ID (e.g. bitcoin). Can be retrieved from the\n`/coins/list` endpoint.\n", + "order": 1 + }, + "vs_currency": { + "type": "string", + "description": "The target currency of market data (e.g. usd, eur, jpy, etc.)\n", + "order": 2 + }, + "days": { + "type": "string", + "description": "The number of days of data for market chart.\n", + "enum": ["1", "7", "14", "30", "90", "180", "365", "max"], + "default": "30", + "order": 3 + }, + "start_date": { + "type": "string", + "description": "The start date for the historical data stream in dd-mm-yyyy format.\n", + "format": "date", + "pattern": "^[0-9]{2}-[0-9]{2}-[0-9]{4}$", + "order": 4 + }, + "end_date": { + "type": "string", + "description": "The end date for the historical data stream in dd-mm-yyyy format.\n", + "format": "date", + "pattern": "^[0-9]{2}-[0-9]{2}-[0-9]{4}$", + "order": 5 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "9fa5862c-da7c-11eb-8d19-0242ac130003", + "name": "Cockroachdb", + "dockerRepository": "airbyte/source-cockroachdb", + "dockerImageTag": "0.1.22", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/cockroachdb", + "icon": "cockroachdb.svg", + "sourceType": "database", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/cockroachdb", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Cockroach Source Spec", + "type": "object", + "required": ["host", "port", "database", "username"], + "properties": { + "host": { + "title": "Host", + "description": "Hostname of the database.", + "type": "string", + "order": 0 + }, + "port": { + "title": "Port", + "description": "Port of the database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 5432, + "examples": ["5432"], + "order": 1 + }, + "database": { + "title": "DB Name", + "description": "Name of the database.", + "type": "string", + "order": 2 + }, + "username": { + "title": "User", + "description": "Username to use to access the database.", + "type": "string", + "order": 3 + }, + "password": { + "title": "Password", + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 4 + }, + "jdbc_url_params": { + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (Eg. key1=value1&key2=value2&key3=value3). For more information read about JDBC URL parameters.", + "title": "JDBC URL Parameters (Advanced)", + "type": "string", + "order": 5 + }, + "ssl": { + "title": "Connect using SSL", + "description": "Encrypt client/server communications for increased security.", + "type": "boolean", + "default": false, + "order": 6 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": ["${host}"] + } + }, + { + "sourceDefinitionId": "27f910fd-f832-4b2e-bcfd-6ab342e434d8", + "name": "Coda", + "dockerRepository": "airbyte/source-coda", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/coda", + "icon": "coda.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/coda", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Required attributes for hitting apis", + "type": "object", + "required": ["auth_token"], + "additionalProperties": true, + "properties": { + "auth_token": { + "title": "Authentication token", + "type": "string", + "description": "Bearer token", + "airbyte_secret": true, + "order": 0 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "919984ef-53a2-479b-8ffe-9c1ddb9fc3f3", + "name": "Coin API", + "dockerRepository": "airbyte/source-coin-api", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/coin-api", + "icon": "coinapi.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/coin-api", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Coin API Spec", + "type": "object", + "required": [ + "api_key", + "environment", + "symbol_id", + "period", + "start_date" + ], + "properties": { + "api_key": { + "type": "string", + "description": "API Key", + "airbyte_secret": true, + "order": 0 + }, + "environment": { + "type": "string", + "description": "The environment to use. Either sandbox or production.\n", + "enum": ["sandbox", "production"], + "default": "sandbox", + "order": 1 + }, + "symbol_id": { + "type": "string", + "description": "The symbol ID to use. See the documentation for a list.\nhttps://docs.coinapi.io/#list-all-symbols-get\n", + "order": 2 + }, + "period": { + "type": "string", + "description": "The period to use. See the documentation for a list. https://docs.coinapi.io/#list-all-periods-get", + "examples": ["5SEC", "2MTH"] + }, + "start_date": { + "type": "string", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}$", + "description": "The start date in ISO 8601 format.", + "examples": ["2019-01-01T00:00:00"] + }, + "end_date": { + "type": "string", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}$", + "description": "The end date in ISO 8601 format. If not supplied, data will be returned\nfrom the start date to the current time, or when the count of result\nelements reaches its limit.\n", + "examples": ["2019-01-01T00:00:00"] + }, + "limit": { + "type": "integer", + "description": "The maximum number of elements to return. If not supplied, the default\nis 100. For numbers larger than 100, each 100 items is counted as one\nrequest for pricing purposes. Maximum value is 100000.\n", + "minimum": 1, + "maximum": 100000, + "default": 100 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "239463f5-64bb-4d88-b4bd-18ce673fd572", + "name": "CoinMarketCap", + "dockerRepository": "airbyte/source-coinmarketcap", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/coinmarketcap", + "icon": "coinmarketcap.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/coinmarketcap", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Coinmarketcap Spec", + "type": "object", + "required": ["api_key", "data_type"], + "additionalProperties": true, + "properties": { + "api_key": { + "title": "API Key", + "type": "string", + "description": "Your API Key. See here. The token is case sensitive.", + "airbyte_secret": true + }, + "data_type": { + "title": "Data type", + "type": "string", + "enum": ["latest", "historical"], + "description": "/latest: Latest market ticker quotes and averages for cryptocurrencies and exchanges. /historical: Intervals of historic market data like OHLCV data or data for use in charting libraries. See here." + }, + "symbols": { + "title": "Symbol", + "type": "array", + "items": { + "type": "string" + }, + "description": "Cryptocurrency symbols. (only used for quotes stream)", + "minItems": 1, + "examples": ["AVAX", "BTC"] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "008b2e26-11a3-11ec-82a8-0242ac130003", + "name": "Commercetools", + "dockerRepository": "airbyte/source-commercetools", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/commercetools", + "icon": "commercetools.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/commercetools", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Commercetools Source CDK Specifications", + "type": "object", + "required": [ + "region", + "start_date", + "host", + "project_key", + "client_id", + "client_secret" + ], + "additionalProperties": false, + "properties": { + "region": { + "type": "string", + "description": "The region of the platform.", + "examples": ["us-central1", "australia-southeast1"] + }, + "host": { + "type": "string", + "enum": ["gcp", "aws"], + "description": "The cloud provider your shop is hosted. See: https://docs.commercetools.com/api/authorization" + }, + "start_date": { + "type": "string", + "description": "The date you would like to replicate data. Format: YYYY-MM-DD.", + "examples": ["2021-01-01"], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" + }, + "project_key": { + "type": "string", + "description": "The project key" + }, + "client_id": { + "type": "string", + "description": "Id of API Client.", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "description": "The password of secret of API Client.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "4fd7565c-8b99-439b-80d0-2d965e1d958c", + "name": "ConfigCat", + "dockerRepository": "airbyte/source-configcat", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/configcat", + "icon": "configcat.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/configcat", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Configcat Spec", + "type": "object", + "required": ["username", "password"], + "additionalProperties": true, + "properties": { + "username": { + "title": "Username", + "type": "string", + "description": "Basic auth user name. See here." + }, + "password": { + "title": "Password", + "type": "string", + "description": "Basic auth password. See here.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "cf40a7f8-71f8-45ce-a7fa-fca053e4028c", + "name": "Confluence", + "dockerRepository": "airbyte/source-confluence", + "dockerImageTag": "0.1.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/confluence", + "icon": "confluence.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Confluence Spec", + "type": "object", + "required": ["api_token", "domain_name", "email"], + "additionalProperties": true, + "properties": { + "api_token": { + "title": "API Token", + "type": "string", + "description": "Please follow the Jira confluence for generating an API token: generating an API token.", + "airbyte_secret": true + }, + "domain_name": { + "title": "Domain name", + "type": "string", + "description": "Your Confluence domain name", + "examples": ["example.atlassian.net"] + }, + "email": { + "title": "Email", + "type": "string", + "description": "Your Confluence login email", + "examples": ["abc@example.com"] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": ["${subdomain}.atlassian.net"] + } + }, + { + "sourceDefinitionId": "be9ee02f-6efe-4970-979b-95f797a37188", + "name": "ConvertKit", + "dockerRepository": "airbyte/source-convertkit", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/convertkit", + "icon": "convertkit.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/convertkit", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Convertkit Spec", + "type": "object", + "required": ["api_secret"], + "additionalProperties": true, + "properties": { + "api_secret": { + "type": "string", + "description": "API Secret", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "f39208dc-7e1c-48b8-919b-5006360cc27f", + "name": "Commcare", + "dockerRepository": "airbyte/source-commcare", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/commcare", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Commcare Source Spec", + "type": "object", + "required": ["api_key", "app_id", "start_date"], + "properties": { + "api_key": { + "type": "string", + "title": "API Key", + "description": "Commcare API Key", + "airbyte_secret": true, + "order": 0 + }, + "project_space": { + "type": "string", + "title": "Project Space", + "description": "Project Space for commcare", + "order": 1 + }, + "app_id": { + "type": "string", + "title": "Application ID", + "description": "The Application ID we are interested in", + "airbyte_secret": true, + "order": 2 + }, + "start_date": { + "type": "string", + "title": "Start date for extracting records", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "default": "2022-10-01T00:00:00Z", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Only records after this date will be replicated.", + "order": 3 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "44f3002f-2df9-4f6d-b21c-02cd3b47d0dc", + "name": "Copper", + "dockerRepository": "airbyte/source-copper", + "dockerImageTag": "0.2.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/copper", + "icon": "copper.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/copper", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Copper Spec", + "type": "object", + "required": ["api_key", "user_email"], + "properties": { + "api_key": { + "type": "string", + "title": "API Key", + "description": "Copper API key", + "airbyte_secret": true + }, + "user_email": { + "type": "string", + "title": "User email", + "description": "user email used to login in to Copper" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "c332628c-f55c-4017-8222-378cfafda9b2", + "name": "Convex", + "dockerRepository": "airbyte/source-convex", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/convex", + "icon": "convex.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/convex", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Convex Source Spec", + "type": "object", + "required": ["deployment_url", "access_key"], + "properties": { + "deployment_url": { + "type": "string", + "title": "Deployment Url", + "examples": [ + "https://murky-swan-635.convex.cloud", + "https://cluttered-owl-337.convex.cloud" + ] + }, + "access_key": { + "type": "string", + "title": "Access Key", + "description": "API access key used to retrieve data from Convex.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "0541b2cd-2367-4986-b5f1-b79ff55439e4", + "name": "Courier", + "dockerRepository": "airbyte/source-courier", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/courier", + "icon": "courier.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/courier", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Courier Source Spec", + "type": "object", + "required": ["api_key"], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "description": "Courier API Key to retrieve your data.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "e71aae8a-5143-11ed-bdc3-0242ac120002", + "name": "Clockify", + "dockerRepository": "airbyte/source-clockify", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/clockify", + "icon": "clockify.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/clockify", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Clockify Spec", + "type": "object", + "required": ["workspace_id", "api_key"], + "additionalProperties": true, + "properties": { + "workspace_id": { + "title": "Workspace Id", + "description": "WorkSpace Id", + "type": "string" + }, + "api_key": { + "title": "API Key", + "description": "You can get your api access_key here This API is Case Sensitive.", + "type": "string", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "c47d6804-8b98-449f-970a-5ddb5cb5d7aa", + "name": "Customer.io", + "dockerRepository": "farosai/airbyte-customer-io-source", + "dockerImageTag": "0.1.23", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/customer-io", + "icon": "customer-io.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.faros.ai", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Customer.io Spec", + "type": "object", + "required": ["app_api_key"], + "additionalProperties": false, + "properties": { + "app_api_key": { + "type": "string", + "title": "Customer.io App API Key", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "1cfc30c7-82db-43f4-9fd7-ac1b42312cda", + "name": "Datadog", + "dockerRepository": "airbyte/source-datadog", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/datadog", + "icon": "datadog.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/datadog", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Datadog Source Spec", + "type": "object", + "required": ["api_key", "application_key"], + "additionalProperties": true, + "properties": { + "api_key": { + "title": "API Key", + "description": "Datadog API key", + "type": "string", + "airbyte_secret": true, + "order": 1 + }, + "application_key": { + "title": "Application Key", + "description": "Datadog application key", + "type": "string", + "airbyte_secret": true, + "order": 2 + }, + "query": { + "title": "Query", + "description": "The search query. This just applies to Incremental syncs. If empty, it'll collect all logs.", + "type": "string", + "order": 3 + }, + "max_records_per_request": { + "type": "integer", + "title": "Max records per requests", + "default": 5000, + "minimum": 1, + "maximum": 5000, + "description": "Maximum number of records to collect per request.", + "order": 4 + }, + "start_date": { + "title": "Start date", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated. This just applies to Incremental syncs.", + "type": "string", + "examples": ["2022-10-01T00:00:00Z"], + "order": 5 + }, + "end_date": { + "title": "End date", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Data after this date will not be replicated. An empty value will represent the current datetime for each execution. This just applies to Incremental syncs.", + "examples": ["2022-10-01T00:00:00Z"], + "type": "string", + "order": 6 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "8e1ae2d2-4790-44d3-9d83-75b3fc3940ff", + "name": "Datascope", + "dockerRepository": "airbyte/source-datascope", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/datascope", + "icon": "datascope.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/datascope", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Datascope Spec", + "type": "object", + "required": ["api_key", "start_date"], + "additionalProperties": true, + "properties": { + "start_date": { + "title": "Start Date", + "type": "string", + "description": "Start date for the data to be replicated", + "examples": ["dd/mm/YYYY HH:MM"], + "pattern": "^[0-9]{2}/[0-9]{2}/[0-9]{4} [0-9]{2}:[0-9]{2}$" + }, + "api_key": { + "title": "Authorization", + "type": "string", + "description": "API Key", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "cc88c43f-6f53-4e8a-8c4d-b284baaf9635", + "name": "Delighted", + "dockerRepository": "airbyte/source-delighted", + "dockerImageTag": "0.2.2", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/delighted", + "icon": "delighted.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Delighted Spec", + "type": "object", + "required": ["since", "api_key"], + "additionalProperties": true, + "properties": { + "api_key": { + "title": "Delighted API Key", + "type": "string", + "description": "A Delighted API key.", + "airbyte_secret": true, + "order": 0 + }, + "since": { + "title": "Date Since", + "type": "string", + "description": "The date from which you'd like to replicate the data", + "examples": ["2022-05-30T04:50:23Z", "2022-05-30 04:50:23"], + "pattern": "^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?Z?$", + "order": 1, + "format": "date-time" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": ["api.delighted.com"] + } + }, + { + "sourceDefinitionId": "0b5c867e-1b12-4d02-ab74-97b2184ff6d7", + "name": "Dixa", + "dockerRepository": "airbyte/source-dixa", + "dockerImageTag": "0.1.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/dixa", + "icon": "dixa.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/dixa", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Dixa Spec", + "type": "object", + "required": ["api_token", "start_date"], + "additionalProperties": false, + "properties": { + "api_token": { + "type": "string", + "description": "Dixa API token", + "airbyte_secret": true + }, + "start_date": { + "type": "string", + "description": "The connector pulls records updated from this date onwards.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": ["YYYY-MM-DD"] + }, + "batch_size": { + "type": "integer", + "description": "Number of days to batch into one request. Max 31.", + "pattern": "^[0-9]{1,2}$", + "examples": [1, 31], + "default": 31 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "72d405a3-56d8-499f-a571-667c03406e43", + "name": "Dockerhub", + "dockerRepository": "airbyte/source-dockerhub", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/dockerhub", + "icon": "dockerhub.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/dockerhub", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Dockerhub Spec", + "type": "object", + "required": ["docker_username"], + "additionalProperties": false, + "properties": { + "docker_username": { + "type": "string", + "description": "Username of DockerHub person or organization (for https://hub.docker.com/v2/repositories/USERNAME/ API call)", + "pattern": "^[a-z0-9_\\-]+$", + "examples": ["airbyte"] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "d99e9ace-8621-46c2-9144-76ae4751d64b", + "name": "Dremio", + "dockerRepository": "airbyte/source-dremio", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/dremio", + "icon": "dremio.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/dremio", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Dremio Spec", + "type": "object", + "additionalProperties": true, + "required": ["api_key", "base_url"], + "properties": { + "api_key": { + "type": "string", + "description": "API Key that is generated when you authenticate to Dremio API", + "airbyte_secret": true + }, + "base_url": { + "type": "string", + "description": "URL of your Dremio instance", + "default": "https://app.dremio.cloud" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "445831eb-78db-4b1f-8f1f-0d96ad8739e2", + "name": "Drift", + "dockerRepository": "airbyte/source-drift", + "dockerImageTag": "0.2.6", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/drift", + "icon": "drift.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/drift", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Drift Spec", + "type": "object", + "required": [], + "additionalProperties": true, + "properties": { + "credentials": { + "title": "Authorization Method", + "type": "object", + "oneOf": [ + { + "type": "object", + "title": "OAuth2.0", + "required": [ + "client_id", + "client_secret", + "access_token", + "refresh_token" + ], + "properties": { + "credentials": { + "type": "string", + "const": "oauth2.0", + "order": 0 + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "The Client ID of your Drift developer application.", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "The Client Secret of your Drift developer application.", + "airbyte_secret": true + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "Access Token for making authenticated requests.", + "airbyte_secret": true + }, + "refresh_token": { + "type": "string", + "title": "Refresh Token", + "description": "Refresh Token to renew the expired Access Token.", + "default": "", + "airbyte_secret": true + } + } + }, + { + "title": "Access Token", + "type": "object", + "required": ["access_token"], + "properties": { + "credentials": { + "type": "string", + "const": "access_token", + "order": 0 + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "Drift Access Token. See the docs for more information on how to generate this key.", + "airbyte_secret": true + } + } + } + ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": ["credentials", "0"], + "oauthFlowInitParameters": [["client_id"], ["client_secret"]], + "oauthFlowOutputParameters": [["access_token"], ["refresh_token"]] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": ["driftapi.com"] + } + }, + { + "sourceDefinitionId": "1356e1d9-977f-4057-ad4b-65f25329cf61", + "name": "DV 360", + "dockerRepository": "airbyte/source-dv-360", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/dv-360", + "icon": "dv360.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Display & Video 360 Spec", + "type": "object", + "required": ["credentials", "partner_id", "start_date"], + "additionalProperties": true, + "properties": { + "credentials": { + "type": "object", + "description": "Oauth2 credentials", + "order": 0, + "required": [ + "access_token", + "refresh_token", + "token_uri", + "client_id", + "client_secret" + ], + "properties": { + "access_token": { + "type": "string", + "description": "Access token", + "airbyte_secret": true + }, + "refresh_token": { + "type": "string", + "description": "Refresh token", + "airbyte_secret": true + }, + "token_uri": { + "type": "string", + "description": "Token URI", + "airbyte_secret": true + }, + "client_id": { + "type": "string", + "description": "Client ID", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "description": "Client secret", + "airbyte_secret": true + } + } + }, + "partner_id": { + "type": "integer", + "description": "Partner ID", + "order": 1 + }, + "start_date": { + "type": "string", + "description": "UTC date and time in the format 2017-01-25. Any data before this date will not be replicated", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "order": 2 + }, + "end_date": { + "type": "string", + "description": "UTC date and time in the format 2017-01-25. Any data after this date will not be replicated.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "order": 3 + }, + "filters": { + "type": "array", + "description": "filters for the dimensions. each filter object had 2 keys: 'type' for the name of the dimension to be used as. and 'value' for the value of the filter", + "default": [], + "order": 4 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "50401137-8871-4c5a-abb7-1f5fda35545a", + "name": "DynamoDB", + "dockerRepository": "airbyte/source-dynamodb", + "dockerImageTag": "0.1.2", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/dynamodb", + "icon": "dynamodb.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/dynamodb", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Dynamodb Source Spec", + "type": "object", + "required": ["access_key_id", "secret_access_key"], + "additionalProperties": false, + "properties": { + "endpoint": { + "title": "Dynamodb Endpoint", + "type": "string", + "default": "", + "description": "the URL of the Dynamodb database", + "examples": ["https://{aws_dynamo_db_url}.com"] + }, + "region": { + "title": "Dynamodb Region", + "type": "string", + "default": "", + "description": "The region of the Dynamodb database", + "enum": [ + "", + "us-east-1", + "us-east-2", + "us-west-1", + "us-west-2", + "af-south-1", + "ap-east-1", + "ap-south-1", + "ap-northeast-1", + "ap-northeast-2", + "ap-northeast-3", + "ap-southeast-1", + "ap-southeast-2", + "ca-central-1", + "cn-north-1", + "cn-northwest-1", + "eu-central-1", + "eu-north-1", + "eu-south-1", + "eu-west-1", + "eu-west-2", + "eu-west-3", + "sa-east-1", + "me-south-1", + "us-gov-east-1", + "us-gov-west-1" + ] + }, + "access_key_id": { + "title": "Dynamodb Key Id", + "type": "string", + "description": "The access key id to access Dynamodb. Airbyte requires read permissions to the database", + "airbyte_secret": true, + "examples": ["A012345678910EXAMPLE"] + }, + "secret_access_key": { + "title": "Dynamodb Access Key", + "type": "string", + "description": "The corresponding secret to the access key id.", + "airbyte_secret": true, + "examples": ["a012345678910ABCDEFGH/AbCdEfGhEXAMPLEKEY"] + }, + "reserved_attribute_names": { + "title": "Reserved attribute names", + "type": "string", + "description": "Comma separated reserved attribute names present in your tables", + "airbyte_secret": true, + "examples": ["name, field_name, field-name"] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "d53f9084-fa6b-4a5a-976c-5b8392f4ad8a", + "name": "E2E Testing", + "dockerRepository": "airbyte/source-e2e-test", + "dockerImageTag": "2.1.4", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/e2e-test", + "icon": "airbyte.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/e2e-test", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "E2E Test Source Spec", + "additionalProperties": true, + "type": "object", + "oneOf": [ + { + "title": "Legacy Infinite Feed", + "description": "This mode is used for Platform acceptance tests. The catalog has one \"data\" stream, which has one string field \"column1\". This mode will emit messages infinitely.", + "required": ["type", "max_records"], + "type": "object", + "additionalProperties": true, + "properties": { + "type": { + "type": "string", + "const": "INFINITE_FEED", + "default": "INFINITE_FEED" + }, + "max_records": { + "title": "Max Records", + "description": "Number of records to emit. If not set, defaults to infinity.", + "type": "integer" + }, + "message_interval": { + "title": "Message Interval", + "description": "Interval between messages in ms.", + "type": "integer" + } + } + }, + { + "title": "Legacy Exception After N", + "description": "This mode is used for Platform acceptance tests. The catalog has one \"data\" stream, which has one string field \"column1\". This mode will throw an exception after N messages.", + "required": ["type", "throw_after_n_records"], + "type": "object", + "additionalProperties": true, + "properties": { + "type": { + "type": "string", + "const": "EXCEPTION_AFTER_N", + "default": "EXCEPTION_AFTER_N" + }, + "throw_after_n_records": { + "title": "Throw After N Records", + "description": "Number of records to emit before throwing an exception. Min 1.", + "type": "integer", + "min": 1 + } + } + }, + { + "title": "Continuous Feed", + "type": "object", + "required": ["type", "max_messages", "mock_catalog"], + "additionalProperties": true, + "properties": { + "type": { + "type": "string", + "const": "CONTINUOUS_FEED", + "default": "CONTINUOUS_FEED", + "order": 10 + }, + "max_messages": { + "title": "Max Records", + "description": "Number of records to emit per stream. Min 1. Max 100 billion.", + "type": "integer", + "default": 100, + "min": 1, + "max": 100000000000, + "order": 20 + }, + "seed": { + "title": "Random Seed", + "description": "When the seed is unspecified, the current time millis will be used as the seed. Range: [0, 1000000].", + "type": "integer", + "default": 0, + "examples": [42], + "min": 0, + "max": 1000000, + "order": 30 + }, + "message_interval_ms": { + "title": "Message Interval (ms)", + "description": "Interval between messages in ms. Min 0 ms. Max 60000 ms (1 minute).", + "type": "integer", + "min": 0, + "max": 60000, + "default": 0, + "order": 40 + }, + "mock_catalog": { + "title": "Mock Catalog", + "type": "object", + "order": 50, + "oneOf": [ + { + "title": "Single Schema", + "description": "A catalog with one or multiple streams that share the same schema.", + "type": "object", + "required": ["type", "stream_name", "stream_schema"], + "properties": { + "type": { + "type": "string", + "const": "SINGLE_STREAM", + "default": "SINGLE_STREAM" + }, + "stream_name": { + "title": "Stream Name", + "description": "Name of the data stream.", + "type": "string", + "default": "data_stream" + }, + "stream_schema": { + "title": "Stream Schema", + "description": "A Json schema for the stream. The schema should be compatible with draft-07. See this doc for examples.", + "type": "string", + "default": "{ \"type\": \"object\", \"properties\": { \"column1\": { \"type\": \"string\" } } }" + }, + "stream_duplication": { + "title": "Duplicate the stream N times", + "description": "Duplicate the stream for easy load testing. Each stream name will have a number suffix. For example, if the stream name is \"ds\", the duplicated streams will be \"ds_0\", \"ds_1\", etc.", + "type": "integer", + "default": 1, + "min": 1, + "max": 10000 + } + } + }, + { + "title": "Multi Schema", + "type": "object", + "description": "A catalog with multiple data streams, each with a different schema.", + "required": ["type", "stream_schemas"], + "properties": { + "type": { + "type": "string", + "const": "MULTI_STREAM", + "default": "MULTI_STREAM" + }, + "stream_schemas": { + "title": "Streams and Schemas", + "description": "A Json object specifying multiple data streams and their schemas. Each key in this object is one stream name. Each value is the schema for that stream. The schema should be compatible with draft-07. See this doc for examples.", + "type": "string", + "default": "{ \"stream1\": { \"type\": \"object\", \"properties\": { \"field1\": { \"type\": \"string\" } } }, \"stream2\": { \"type\": \"object\", \"properties\": { \"field1\": { \"type\": \"boolean\" } } } }" + } + } + } + ] + } + } + }, + { + "title": "Benchmark", + "description": "This mode is used for speed benchmarks. Specifically, it should be used for testing the throughput of the platform and destination. It optimizes for emitting records very quickly, so that it should never be the bottleneck.", + "type": "object", + "required": ["type", "schema", "terminationCondition"], + "additionalProperties": true, + "properties": { + "type": { + "type": "string", + "const": "BENCHMARK", + "default": "BENCHMARK" + }, + "schema": { + "title": "Schema", + "description": "schema of the data in the benchmark.", + "type": "string", + "enum": ["FIVE_STRING_COLUMNS"] + }, + "terminationCondition": { + "title": "Termination Condition", + "description": "when does the benchmark stop?", + "type": "object", + "oneOf": [ + { + "title": "max records", + "type": "object", + "required": ["type", "max"], + "properties": { + "type": { + "type": "string", + "const": "MAX_RECORDS", + "default": "MAX_RECORDS" + }, + "max": { + "type": "number" + } + } + } + ] + } + } + } + ] + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "protocol_version": "0.2.1" + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "46b25e70-c980-4590-a811-8deaf50ee09f", + "name": "EmailOctopus", + "dockerRepository": "airbyte/source-emailoctopus", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/emailoctopus", + "icon": "emailoctopus.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/emailoctopus", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "EmailOctopus Spec", + "type": "object", + "required": ["api_key"], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "title": "EmailOctopus API key", + "description": "EmailOctopus API Key. See the docs for information on how to generate this key.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "e2b40e36-aa0e-4bed-b41b-bcea6fa348b1", + "name": "Exchange Rates Api", + "dockerRepository": "airbyte/source-exchange-rates", + "dockerImageTag": "1.2.8", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/exchangeratesapi", + "icon": "exchangeratesapi.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/exchangeratesapi", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "exchangeratesapi.io Source Spec", + "type": "object", + "required": ["start_date", "access_key"], + "additionalProperties": true, + "properties": { + "start_date": { + "type": "string", + "description": "Start getting data from that date.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": ["YYYY-MM-DD"], + "format": "date" + }, + "access_key": { + "type": "string", + "description": "Your API Key. See here. The key is case sensitive.", + "airbyte_secret": true + }, + "base": { + "type": "string", + "description": "ISO reference currency. See here. Free plan doesn't support Source Currency Switching, default base currency is EUR", + "examples": ["EUR", "USD"] + }, + "ignore_weekends": { + "type": "boolean", + "description": "Ignore weekends? (Exchanges don't run on weekends)", + "default": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": ["${subdomain}.apilayer.com", "apilayer.com"] + } + }, + { + "sourceDefinitionId": "6babfc42-c734-4ef6-a817-6eca15f0f9b7", + "name": "Everhour", + "dockerRepository": "airbyte/source-everhour", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/everhour", + "icon": "everhour.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/everhour", + "connectionSpecification": { + "title": "Everhour Spec", + "type": "object", + "required": ["api_key"], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "title": "API Key", + "description": "Everhour API Key. See the docs for information on how to generate this key.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": ["api.everhour.com"] + } + }, + { + "sourceDefinitionId": "e7778cfc-e97c-4458-9ecb-b4f2bba8946c", + "name": "Facebook Marketing", + "dockerRepository": "airbyte/source-facebook-marketing", + "dockerImageTag": "0.3.4", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/facebook-marketing", + "icon": "facebook.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/facebook-marketing", + "changelogUrl": "https://docs.airbyte.com/integrations/sources/facebook-marketing", + "connectionSpecification": { + "title": "Source Facebook Marketing", + "type": "object", + "properties": { + "account_id": { + "title": "Account ID", + "description": "The Facebook Ad account ID to use when pulling data from the Facebook Marketing API. Open your Meta Ads Manager. The Ad account ID number is in the account dropdown menu or in your browser's address bar. See the docs for more information.", + "order": 0, + "examples": ["111111111111111"], + "type": "string" + }, + "start_date": { + "title": "Start Date", + "description": "The date from which you'd like to replicate data for all incremental streams, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", + "order": 1, + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": ["2017-01-25T00:00:00Z"], + "type": "string", + "format": "date-time" + }, + "end_date": { + "title": "End Date", + "description": "The date until which you'd like to replicate data for all incremental streams, in the format YYYY-MM-DDT00:00:00Z. All data generated between the start date and this end date will be replicated. Not setting this option will result in always syncing the latest data.", + "order": 2, + "pattern": "^$|^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": ["2017-01-26T00:00:00Z"], + "type": "string" + }, + "access_token": { + "title": "Access Token", + "description": "The value of the generated access token. From your App’s Dashboard, click on \"Marketing API\" then \"Tools\". Select permissions ads_management, ads_read, read_insights, business_management. Then click on \"Get token\". See the docs for more information.", + "order": 3, + "airbyte_secret": true, + "type": "string" + }, + "include_deleted": { + "title": "Include Deleted Campaigns, Ads, and AdSets", + "description": "Set to active if you want to include data from deleted Campaigns, Ads, and AdSets.", + "default": false, + "order": 4, + "type": "boolean" + }, + "fetch_thumbnail_images": { + "title": "Fetch Thumbnail Images from Ad Creative", + "description": "Set to active if you want to fetch the thumbnail_url and store the result in thumbnail_data_url for each Ad Creative.", + "default": false, + "order": 5, + "type": "boolean" + }, + "custom_insights": { + "title": "Custom Insights", + "description": "A list which contains ad statistics entries, each entry must have a name and can contains fields, breakdowns or action_breakdowns. Click on \"add\" to fill this field.", + "order": 6, + "type": "array", + "items": { + "title": "InsightConfig", + "description": "Config for custom insights", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "The name value of insight", + "type": "string" + }, + "level": { + "title": "Level", + "description": "Chosen level for API", + "default": "ad", + "enum": ["ad", "adset", "campaign", "account"], + "type": "string" + }, + "fields": { + "title": "Fields", + "description": "A list of chosen fields for fields parameter", + "default": [], + "type": "array", + "items": { + "title": "ValidEnums", + "description": "Generic enumeration.\n\nDerive from this class to define new enumerations.", + "enum": [ + "account_currency", + "account_id", + "account_name", + "action_values", + "actions", + "ad_bid_value", + "ad_click_actions", + "ad_id", + "ad_impression_actions", + "ad_name", + "adset_bid_value", + "adset_end", + "adset_id", + "adset_name", + "adset_start", + "age_targeting", + "attribution_setting", + "auction_bid", + "auction_competitiveness", + "auction_max_competitor_bid", + "buying_type", + "campaign_id", + "campaign_name", + "canvas_avg_view_percent", + "canvas_avg_view_time", + "catalog_segment_actions", + "catalog_segment_value", + "catalog_segment_value_mobile_purchase_roas", + "catalog_segment_value_omni_purchase_roas", + "catalog_segment_value_website_purchase_roas", + "clicks", + "conversion_rate_ranking", + "conversion_values", + "conversions", + "converted_product_quantity", + "converted_product_value", + "cost_per_15_sec_video_view", + "cost_per_2_sec_continuous_video_view", + "cost_per_action_type", + "cost_per_ad_click", + "cost_per_conversion", + "cost_per_dda_countby_convs", + "cost_per_estimated_ad_recallers", + "cost_per_inline_link_click", + "cost_per_inline_post_engagement", + "cost_per_one_thousand_ad_impression", + "cost_per_outbound_click", + "cost_per_thruplay", + "cost_per_unique_action_type", + "cost_per_unique_click", + "cost_per_unique_conversion", + "cost_per_unique_inline_link_click", + "cost_per_unique_outbound_click", + "cpc", + "cpm", + "cpp", + "created_time", + "ctr", + "date_start", + "date_stop", + "dda_countby_convs", + "dda_results", + "engagement_rate_ranking", + "estimated_ad_recall_rate", + "estimated_ad_recall_rate_lower_bound", + "estimated_ad_recall_rate_upper_bound", + "estimated_ad_recallers", + "estimated_ad_recallers_lower_bound", + "estimated_ad_recallers_upper_bound", + "frequency", + "full_view_impressions", + "full_view_reach", + "gender_targeting", + "impressions", + "inline_link_click_ctr", + "inline_link_clicks", + "inline_post_engagement", + "instant_experience_clicks_to_open", + "instant_experience_clicks_to_start", + "instant_experience_outbound_clicks", + "interactive_component_tap", + "labels", + "location", + "mobile_app_purchase_roas", + "objective", + "optimization_goal", + "outbound_clicks", + "outbound_clicks_ctr", + "place_page_name", + "purchase_roas", + "qualifying_question_qualify_answer_rate", + "quality_ranking", + "quality_score_ectr", + "quality_score_ecvr", + "quality_score_organic", + "reach", + "social_spend", + "spend", + "total_postbacks", + "total_postbacks_detailed", + "unique_actions", + "unique_clicks", + "unique_conversions", + "unique_ctr", + "unique_inline_link_click_ctr", + "unique_inline_link_clicks", + "unique_link_clicks_ctr", + "unique_outbound_clicks", + "unique_outbound_clicks_ctr", + "unique_video_continuous_2_sec_watched_actions", + "unique_video_view_15_sec", + "updated_time", + "video_15_sec_watched_actions", + "video_30_sec_watched_actions", + "video_avg_time_watched_actions", + "video_continuous_2_sec_watched_actions", + "video_p100_watched_actions", + "video_p25_watched_actions", + "video_p50_watched_actions", + "video_p75_watched_actions", + "video_p95_watched_actions", + "video_play_actions", + "video_play_curve_actions", + "video_play_retention_0_to_15s_actions", + "video_play_retention_20_to_60s_actions", + "video_play_retention_graph_actions", + "video_thruplay_watched_actions", + "video_time_watched_actions", + "website_ctr", + "website_purchase_roas", + "wish_bid" + ] + } + }, + "breakdowns": { + "title": "Breakdowns", + "description": "A list of chosen breakdowns for breakdowns", + "default": [], + "type": "array", + "items": { + "title": "ValidBreakdowns", + "description": "Generic enumeration.\n\nDerive from this class to define new enumerations.", + "enum": [ + "ad_format_asset", + "age", + "app_id", + "body_asset", + "call_to_action_asset", + "country", + "description_asset", + "device_platform", + "dma", + "frequency_value", + "gender", + "hourly_stats_aggregated_by_advertiser_time_zone", + "hourly_stats_aggregated_by_audience_time_zone", + "image_asset", + "impression_device", + "is_conversion_id_modeled", + "link_url_asset", + "mmm", + "place_page_id", + "platform_position", + "product_id", + "publisher_platform", + "region", + "skan_campaign_id", + "skan_conversion_id", + "title_asset", + "video_asset" + ] + } + }, + "action_breakdowns": { + "title": "Action Breakdowns", + "description": "A list of chosen action_breakdowns for action_breakdowns", + "default": [], + "type": "array", + "items": { + "title": "ValidActionBreakdowns", + "description": "Generic enumeration.\n\nDerive from this class to define new enumerations.", + "enum": [ + "action_canvas_component_name", + "action_carousel_card_id", + "action_carousel_card_name", + "action_destination", + "action_device", + "action_reaction", + "action_target_id", + "action_type", + "action_video_sound", + "action_video_type" + ] + } + }, + "time_increment": { + "title": "Time Increment", + "description": "Time window in days by which to aggregate statistics. The sync will be chunked into N day intervals, where N is the number of days you specified. For example, if you set this value to 7, then all statistics will be reported as 7-day aggregates by starting from the start_date. If the start and end dates are October 1st and October 30th, then the connector will output 5 records: 01 - 06, 07 - 13, 14 - 20, 21 - 27, and 28 - 30 (3 days only).", + "default": 1, + "exclusiveMaximum": 90, + "exclusiveMinimum": 0, + "type": "integer" + }, + "start_date": { + "title": "Start Date", + "description": "The date from which you'd like to replicate data for this stream, in the format YYYY-MM-DDT00:00:00Z.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": ["2017-01-25T00:00:00Z"], + "type": "string", + "format": "date-time" + }, + "end_date": { + "title": "End Date", + "description": "The date until which you'd like to replicate data for this stream, in the format YYYY-MM-DDT00:00:00Z. All data generated between the start date and this end date will be replicated. Not setting this option will result in always syncing the latest data.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": ["2017-01-26T00:00:00Z"], + "type": "string", + "format": "date-time" + }, + "insights_lookback_window": { + "title": "Custom Insights Lookback Window", + "description": "The attribution window", + "default": 28, + "maximum": 28, + "mininum": 1, + "exclusiveMinimum": 0, + "type": "integer" + } + }, + "required": ["name"] + } + }, + "page_size": { + "title": "Page Size of Requests", + "description": "Page size used when sending requests to Facebook API to specify number of records per page when response has pagination. Most users do not need to set this field unless they specifically need to tune the connector to address specific issues or use cases.", + "default": 100, + "order": 7, + "exclusiveMinimum": 0, + "type": "integer" + }, + "insights_lookback_window": { + "title": "Insights Lookback Window", + "description": "The attribution window. Facebook freezes insight data 28 days after it was generated, which means that all data from the past 28 days may have changed since we last emitted it, so you can retrieve refreshed insights from the past by setting this parameter. If you set a custom lookback window value in Facebook account, please provide the same value here.", + "default": 28, + "order": 8, + "maximum": 28, + "mininum": 1, + "exclusiveMinimum": 0, + "type": "integer" + }, + "max_batch_size": { + "title": "Maximum size of Batched Requests", + "description": "Maximum batch size used when sending batch requests to Facebook API. Most users do not need to set this field unless they specifically need to tune the connector to address specific issues or use cases.", + "default": 50, + "order": 9, + "exclusiveMinimum": 0, + "type": "integer" + }, + "action_breakdowns_allow_empty": { + "title": "Action Breakdowns Allow Empty", + "description": "Allows action_breakdowns to be an empty list", + "default": true, + "airbyte_hidden": true, + "type": "boolean" + } + }, + "required": ["account_id", "start_date", "access_token"] + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["append"], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": [], + "oauthFlowInitParameters": [], + "oauthFlowOutputParameters": [["access_token"]] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["graph.facebook.com"] + } + }, + { + "sourceDefinitionId": "010eb12f-837b-4685-892d-0a39f76a98f5", + "name": "Facebook Pages", + "dockerRepository": "airbyte/source-facebook-pages", + "dockerImageTag": "0.2.4", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/facebook-pages", + "icon": "facebook.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/facebook-pages", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Facebook Pages Spec", + "type": "object", + "required": ["access_token", "page_id"], + "additionalProperties": true, + "properties": { + "access_token": { + "type": "string", + "title": "Page Access Token", + "description": "Facebook Page Access Token", + "airbyte_secret": true, + "order": 0 + }, + "page_id": { + "type": "string", + "title": "Page ID", + "description": "Page ID", + "order": 1 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": ["graph.facebook.com"] + } + }, + { + "sourceDefinitionId": "dfd88b22-b603-4c3d-aad7-3701784586b1", + "name": "Sample Data (Faker)", + "dockerRepository": "airbyte/source-faker", + "dockerImageTag": "2.0.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/faker", + "icon": "faker.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/faker", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Faker Source Spec", + "type": "object", + "required": ["count"], + "additionalProperties": true, + "properties": { + "count": { + "title": "Count", + "description": "How many users should be generated in total. This setting does not apply to the purchases or products stream.", + "type": "integer", + "minimum": 1, + "default": 1000, + "order": 0 + }, + "seed": { + "title": "Seed", + "description": "Manually control the faker random seed to return the same values on subsequent runs (leave -1 for random)", + "type": "integer", + "default": -1, + "order": 1 + }, + "records_per_sync": { + "title": "Records Per Sync", + "description": "How many fake records will be returned for each sync, for each stream? By default, it will take 2 syncs to create the requested 1000 records.", + "type": "integer", + "minimum": 1, + "default": 500, + "order": 2 + }, + "records_per_slice": { + "title": "Records Per Stream Slice", + "description": "How many fake records will be in each page (stream slice), before a state message is emitted?", + "type": "integer", + "minimum": 1, + "default": 1000, + "order": 3 + }, + "parallelism": { + "title": "Parallelism", + "description": "How many parallel workers should we use to generate fake data? Choose a value equal to the number of CPUs you will allocate to this source.", + "type": "integer", + "minimum": 1, + "default": 4, + "order": 4 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "resourceRequirements": { + "jobSpecific": [ + { + "jobType": "sync", + "resourceRequirements": { + "cpu_request": "1.0", + "cpu_limit": "4.0" + } + } + ] + }, + "allowedHosts": { + "hosts": [] + }, + "suggestedStreams": { + "streams": ["users", "products", "purchases"] + } + }, + { + "sourceDefinitionId": "eb3e9c1c-0467-4eb7-a172-5265e04ccd0a", + "name": "Fastbill", + "dockerRepository": "airbyte/source-fastbill", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/fastbill", + "icon": "fastbill.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/fastbill", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Fastbill Spec", + "type": "object", + "required": ["username", "api_key"], + "properties": { + "username": { + "title": "Username", + "type": "string", + "description": "Username for Fastbill account" + }, + "api_key": { + "title": "API Key", + "type": "string", + "description": "Fastbill API key", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "3825db3e-c94b-42ac-bd53-b5a9507ace2b", + "name": "Fauna", + "dockerRepository": "airbyte/source-fauna", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/fauna", + "icon": "fauna.svg", + "sourceType": "database", + "spec": { + "documentationUrl": "https://github.com/fauna/airbyte/blob/source-fauna/docs/integrations/sources/fauna.md", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Fauna Spec", + "type": "object", + "required": ["domain", "port", "scheme", "secret"], + "additionalProperties": true, + "properties": { + "domain": { + "order": 0, + "type": "string", + "title": "Domain", + "description": "Domain of Fauna to query. Defaults db.fauna.com. See the docs.", + "default": "db.fauna.com" + }, + "port": { + "order": 1, + "type": "integer", + "title": "Port", + "description": "Endpoint port.", + "default": 443 + }, + "scheme": { + "order": 2, + "type": "string", + "title": "Scheme", + "description": "URL scheme.", + "default": "https" + }, + "secret": { + "order": 3, + "type": "string", + "title": "Fauna Secret", + "description": "Fauna secret, used when authenticating with the database.", + "airbyte_secret": true + }, + "collection": { + "order": 5, + "type": "object", + "title": "Collection", + "description": "Settings for the Fauna Collection.", + "required": ["page_size", "deletions"], + "properties": { + "page_size": { + "order": 4, + "type": "integer", + "title": "Page Size", + "default": 64, + "description": "The page size used when reading documents from the database. The larger the page size, the faster the connector processes documents. However, if a page is too large, the connector may fail.
    \nChoose your page size based on how large the documents are.
    \nSee the docs." + }, + "deletions": { + "order": 5, + "type": "object", + "title": "Deletion Mode", + "description": "This only applies to incremental syncs.
    \nEnabling deletion mode informs your destination of deleted documents.
    \nDisabled - Leave this feature disabled, and ignore deleted documents.
    \nEnabled - Enables this feature. When a document is deleted, the connector exports a record with a \"deleted at\" column containing the time that the document was deleted.", + "oneOf": [ + { + "title": "Disabled", + "type": "object", + "order": 0, + "required": ["deletion_mode"], + "properties": { + "deletion_mode": { + "type": "string", + "const": "ignore" + } + } + }, + { + "title": "Enabled", + "type": "object", + "order": 1, + "required": ["deletion_mode", "column"], + "properties": { + "deletion_mode": { + "type": "string", + "const": "deleted_field" + }, + "column": { + "type": "string", + "title": "Deleted At Column", + "description": "Name of the \"deleted at\" column.", + "default": "deleted_at" + } + } + } + ] + } + } + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "778daa7c-feaf-4db6-96f3-70fd645acc77", + "name": "File (CSV, JSON, Excel, Feather, Parquet)", + "dockerRepository": "airbyte/source-file", + "dockerImageTag": "0.3.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/file", + "icon": "file.svg", + "sourceType": "file", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/file", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "File Source Spec", + "type": "object", + "additionalProperties": true, + "required": ["dataset_name", "format", "url", "provider"], + "properties": { + "dataset_name": { + "type": "string", + "title": "Dataset Name", + "description": "The Name of the final table to replicate this file into (should include letters, numbers dash and underscores only)." + }, + "format": { + "type": "string", + "enum": [ + "csv", + "json", + "jsonl", + "excel", + "excel_binary", + "feather", + "parquet", + "yaml" + ], + "default": "csv", + "title": "File Format", + "description": "The Format of the file which should be replicated (Warning: some formats may be experimental, please refer to the docs)." + }, + "reader_options": { + "type": "string", + "title": "Reader Options", + "description": "This should be a string in JSON format. It depends on the chosen file format to provide additional options and tune its behavior.", + "examples": [ + "{}", + "{\"sep\": \" \"}", + "{\"sep\": \"\t\", \"header\": 0, \"names\": [\"column1\", \"column2\"] }" + ] + }, + "url": { + "type": "string", + "title": "URL", + "description": "The URL path to access the file which should be replicated.", + "examples": [ + "https://storage.googleapis.com/covid19-open-data/v2/latest/epidemiology.csv", + "gs://my-google-bucket/data.csv", + "s3://gdelt-open-data/events/20190914.export.csv" + ] + }, + "provider": { + "type": "object", + "title": "Storage Provider", + "description": "The storage Provider or Location of the file(s) which should be replicated.", + "default": "Public Web", + "oneOf": [ + { + "title": "HTTPS: Public Web", + "required": ["storage"], + "properties": { + "storage": { + "type": "string", + "const": "HTTPS" + }, + "user_agent": { + "type": "boolean", + "title": "User-Agent", + "default": false, + "description": "Add User-Agent to request" + } + } + }, + { + "title": "GCS: Google Cloud Storage", + "required": ["storage"], + "properties": { + "storage": { + "type": "string", + "title": "Storage", + "const": "GCS" + }, + "service_account_json": { + "type": "string", + "title": "Service Account JSON", + "description": "In order to access private Buckets stored on Google Cloud, this connector would need a service account json credentials with the proper permissions as described here. Please generate the credentials.json file and copy/paste its content to this field (expecting JSON formats). If accessing publicly available data, this field is not necessary." + } + } + }, + { + "title": "S3: Amazon Web Services", + "required": ["storage"], + "properties": { + "storage": { + "type": "string", + "title": "Storage", + "const": "S3" + }, + "aws_access_key_id": { + "type": "string", + "title": "AWS Access Key ID", + "description": "In order to access private Buckets stored on AWS S3, this connector would need credentials with the proper permissions. If accessing publicly available data, this field is not necessary." + }, + "aws_secret_access_key": { + "type": "string", + "title": "AWS Secret Access Key", + "description": "In order to access private Buckets stored on AWS S3, this connector would need credentials with the proper permissions. If accessing publicly available data, this field is not necessary.", + "airbyte_secret": true + } + } + }, + { + "title": "AzBlob: Azure Blob Storage", + "required": ["storage", "storage_account"], + "properties": { + "storage": { + "type": "string", + "title": "Storage", + "const": "AzBlob" + }, + "storage_account": { + "type": "string", + "title": "Storage Account", + "description": "The globally unique name of the storage account that the desired blob sits within. See here for more details." + }, + "sas_token": { + "type": "string", + "title": "SAS Token", + "description": "To access Azure Blob Storage, this connector would need credentials with the proper permissions. One option is a SAS (Shared Access Signature) token. If accessing publicly available data, this field is not necessary.", + "airbyte_secret": true + }, + "shared_key": { + "type": "string", + "title": "Shared Key", + "description": "To access Azure Blob Storage, this connector would need credentials with the proper permissions. One option is a storage account shared key (aka account key or access key). If accessing publicly available data, this field is not necessary.", + "airbyte_secret": true + } + } + }, + { + "title": "SSH: Secure Shell", + "required": ["storage", "user", "host"], + "properties": { + "storage": { + "type": "string", + "title": "Storage", + "const": "SSH" + }, + "user": { + "type": "string", + "title": "User", + "description": "" + }, + "password": { + "type": "string", + "title": "Password", + "description": "", + "airbyte_secret": true + }, + "host": { + "type": "string", + "title": "Host", + "description": "" + }, + "port": { + "type": "string", + "title": "Port", + "default": "22", + "description": "" + } + } + }, + { + "title": "SCP: Secure copy protocol", + "required": ["storage", "user", "host"], + "properties": { + "storage": { + "type": "string", + "title": "Storage", + "const": "SCP" + }, + "user": { + "type": "string", + "title": "User", + "description": "" + }, + "password": { + "type": "string", + "title": "Password", + "description": "", + "airbyte_secret": true + }, + "host": { + "type": "string", + "title": "Host", + "description": "" + }, + "port": { + "type": "string", + "title": "Port", + "default": "22", + "description": "" + } + } + }, + { + "title": "SFTP: Secure File Transfer Protocol", + "required": ["storage", "user", "host"], + "properties": { + "storage": { + "type": "string", + "title": "Storage", + "const": "SFTP" + }, + "user": { + "type": "string", + "title": "User", + "description": "" + }, + "password": { + "type": "string", + "title": "Password", + "description": "", + "airbyte_secret": true + }, + "host": { + "type": "string", + "title": "Host", + "description": "" + }, + "port": { + "type": "string", + "title": "Port", + "default": "22", + "description": "" + } + } + }, + { + "title": "Local Filesystem (limited)", + "required": ["storage"], + "properties": { + "storage": { + "type": "string", + "title": "Storage", + "description": "WARNING: Note that the local storage URL available for reading must start with the local mount \"/local/\" at the moment until we implement more advanced docker mounting options.", + "const": "local" + } + } + } + ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["*"] + } + }, + { + "sourceDefinitionId": "acb5f973-a565-441e-992f-4946f3e65662", + "name": "Firebase Realtime Database", + "dockerRepository": "airbyte/source-firebase-realtime-database", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.io/integrations/sources/firebase-realtime-database", + "sourceType": "database", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/firebase-realtime-database", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Firebase Realtime Database Spec", + "type": "object", + "required": ["database_name", "google_application_credentials"], + "properties": { + "database_name": { + "title": "Database Name", + "type": "string", + "description": "Database name (This will be part of the url pointing to the database, https://.firebaseio.com/)" + }, + "google_application_credentials": { + "title": "Service Account Key JSON", + "type": "string", + "description": "Cert credentials in JSON format of Service Account with Firebase Realtime Database Viewer role. (see, https://firebase.google.com/docs/projects/iam/roles-predefined-product#realtime-database)", + "airbyte_secret": true + }, + "path": { + "title": "Node Path", + "type": "string", + "description": "Path to a node in the Firebase realtime database" + }, + "buffer_size": { + "title": "Buffer Size", + "type": "number", + "description": "Number of records to fetch at once" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "supported_sync_modes": ["full_refresh"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": ["*"] + } + }, + { + "sourceDefinitionId": "8a5d48f6-03bb-4038-a942-a8d3f175cca3", + "name": "Freshcaller", + "dockerRepository": "airbyte/source-freshcaller", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/freshcaller", + "icon": "freshcaller.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/freshcaller", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Freshcaller Spec", + "type": "object", + "required": ["domain", "api_key", "start_date"], + "additionalProperties": true, + "properties": { + "domain": { + "type": "string", + "title": "Domain for Freshcaller account", + "description": "Used to construct Base URL for the Freshcaller APIs", + "examples": ["snaptravel"] + }, + "api_key": { + "type": "string", + "title": "API Key", + "description": "Freshcaller API Key. See the docs for more information on how to obtain this key.", + "airbyte_secret": true + }, + "requests_per_minute": { + "title": "Requests per minute", + "type": "integer", + "description": "The number of requests per minute that this source allowed to use. There is a rate limit of 50 requests per minute per app per account." + }, + "start_date": { + "title": "Start Date", + "description": "UTC date and time. Any data created after this date will be replicated.", + "format": "date-time", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": ["2022-01-01T12:00:00Z"] + }, + "sync_lag_minutes": { + "title": "Lag in minutes for each sync", + "type": "integer", + "description": "Lag in minutes for each sync, i.e., at time T, data for the time range [prev_sync_time, T-30] will be fetched" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false + }, + { + "sourceDefinitionId": "f95337f1-2ad1-4baf-922f-2ca9152de630", + "name": "Flexport", + "dockerRepository": "airbyte/source-flexport", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/flexport", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/flexport", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Flexport Spec", + "additionalProperties": true, + "type": "object", + "required": ["api_key", "start_date"], + "properties": { + "api_key": { + "order": 0, + "type": "string", + "title": "API Key", + "airbyte_secret": true + }, + "start_date": { + "order": 1, + "title": "Start Date", + "type": "string", + "format": "date-time" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "ec4b9503-13cb-48ab-a4ab-6ade4be46567", + "name": "Freshdesk", + "dockerRepository": "airbyte/source-freshdesk", + "dockerImageTag": "3.0.2", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/freshdesk", + "icon": "freshdesk.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/freshdesk", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Freshdesk Spec", + "type": "object", + "required": ["domain", "api_key"], + "additionalProperties": true, + "properties": { + "domain": { + "type": "string", + "description": "Freshdesk domain", + "title": "Domain", + "examples": ["myaccount.freshdesk.com"], + "pattern": "^[a-zA-Z0-9._-]*\\.freshdesk\\.com$" + }, + "api_key": { + "type": "string", + "title": "API Key", + "description": "Freshdesk API Key. See the docs for more information on how to obtain this key.", + "airbyte_secret": true + }, + "requests_per_minute": { + "title": "Requests per minute", + "type": "integer", + "description": "The number of requests per minute that this source allowed to use. There is a rate limit of 50 requests per minute per app per account." + }, + "start_date": { + "title": "Start Date", + "type": "string", + "description": "UTC date and time. Any data created after this date will be replicated. If this parameter is not set, all data will be replicated.", + "format": "date-time", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": ["2020-12-01T00:00:00Z"] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["*.freshdesk.com"] + } + }, + { + "sourceDefinitionId": "eca08d79-7b92-4065-b7f3-79c14836ebe7", + "name": "Freshsales", + "dockerRepository": "airbyte/source-freshsales", + "dockerImageTag": "0.1.4", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/freshsales", + "icon": "freshsales.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/freshsales", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Freshsales Spec", + "type": "object", + "required": ["domain_name", "api_key"], + "additionalProperties": true, + "properties": { + "domain_name": { + "type": "string", + "title": "Domain Name", + "description": "The Name of your Freshsales domain", + "examples": ["mydomain.myfreshworks.com"] + }, + "api_key": { + "type": "string", + "title": "API Key", + "description": "Freshsales API Key. See here. The key is case sensitive.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": ["*.myfreshworks.com"] + } + }, + { + "sourceDefinitionId": "9bb85338-ea95-4c93-b267-6be89125b267", + "name": "Freshservice", + "dockerRepository": "airbyte/source-freshservice", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/freshservice", + "icon": "freshservice.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/freshservice", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Freshservice Spec", + "type": "object", + "required": ["domain_name", "api_key", "start_date"], + "additionalProperties": false, + "properties": { + "domain_name": { + "type": "string", + "title": "Domain Name", + "description": "The name of your Freshservice domain", + "examples": ["mydomain.freshservice.com"] + }, + "api_key": { + "title": "API Key", + "type": "string", + "description": "Freshservice API Key. See here. The key is case sensitive.", + "airbyte_secret": true + }, + "start_date": { + "title": "Start Date", + "type": "string", + "description": "UTC date and time in the format 2020-10-01T00:00:00Z. Any data before this date will not be replicated.", + "examples": ["2020-10-01T00:00:00Z"], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "2a8c41ae-8c23-4be0-a73f-2ab10ca1a820", + "name": "GCS", + "dockerRepository": "airbyte/source-gcs", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/gcs", + "icon": "gcs.svg", + "sourceType": "file", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Gcs Spec", + "type": "object", + "required": ["gcs_bucket", "gcs_path", "service_account"], + "properties": { + "gcs_bucket": { + "type": "string", + "title": "GCS bucket", + "description": "GCS bucket name" + }, + "gcs_path": { + "type": "string", + "title": "GCS Path", + "description": "GCS path to data" + }, + "service_account": { + "type": "string", + "title": "Service Account Information.", + "description": "Enter your Google Cloud service account key in JSON format", + "airbyte_secret": true, + "examples": [ + "{ \"type\": \"service_account\", \"project_id\": YOUR_PROJECT_ID, \"private_key_id\": YOUR_PRIVATE_KEY, ... }" + ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false + }, + { + "sourceDefinitionId": "5ea4459a-8f1a-452a-830f-a65c38cc438d", + "name": "Genesys", + "dockerRepository": "airbyte/source-genesys", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/genesys", + "icon": "genesys.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/genesys", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Genesys Connector Configuration", + "type": "object", + "required": [ + "start_date", + "tenant_endpoint", + "client_id", + "client_secret" + ], + "properties": { + "client_id": { + "type": "string", + "title": "Client ID", + "description": "Your OAuth user Client ID", + "airbyte_secret": true, + "order": 0 + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "Your OAuth user Client Secret", + "airbyte_secret": true, + "order": 1 + }, + "tenant_endpoint": { + "title": "Tenant Endpoint Location", + "type": "string", + "description": "Please choose the right endpoint where your Tenant is located. More info by this Link", + "enum": [ + "Americas (US East)", + "Americas (US East 2)", + "Americas (US West)", + "Americas (Canada)", + "Americas (São Paulo)", + "EMEA (Frankfurt)", + "EMEA (Dublin)", + "EMEA (London)", + "Asia Pacific (Mumbai)", + "Asia Pacific (Seoul)", + "Asia Pacific (Sydney)" + ], + "order": 2 + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "Start Date in format: YYYY-MM-DD", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "order": 3 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false + }, + { + "sourceDefinitionId": "e1a3866b-d3b2-43b6-b6d7-8c1ee4d7f53f", + "name": "GetLago", + "dockerRepository": "airbyte/source-getlago", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/getlago", + "icon": "getlago.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/getlago", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Getlago Spec", + "type": "object", + "required": ["api_key"], + "additionalProperties": true, + "properties": { + "api_key": { + "title": "API Key", + "type": "string", + "description": "Your API Key. See here.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "6cbea164-3237-433b-9abb-36d384ee4cbf", + "name": "Gridly", + "dockerRepository": "airbyte/source-gridly", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/gridly", + "icon": "gridly.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/gridly", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Gridly Spec", + "type": "object", + "required": ["api_key", "grid_id"], + "properties": { + "api_key": { + "type": "string", + "title": "API Key", + "airbyte_secret": true + }, + "grid_id": { + "type": "string", + "title": "Grid ID", + "description": "ID of a grid, or can be ID of a branch" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "ef69ef6e-aa7f-4af1-a01d-ef775033524e", + "name": "GitHub", + "dockerRepository": "airbyte/source-github", + "dockerImageTag": "0.4.8", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/github", + "icon": "github.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/github", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "GitHub Source Spec", + "type": "object", + "required": ["start_date", "repository"], + "additionalProperties": true, + "properties": { + "credentials": { + "title": "Authentication", + "description": "Choose how to authenticate to GitHub", + "type": "object", + "order": 0, + "group": "auth", + "oneOf": [ + { + "type": "object", + "title": "OAuth", + "required": ["access_token"], + "properties": { + "option_title": { + "type": "string", + "const": "OAuth Credentials", + "order": 0 + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "OAuth access token", + "airbyte_secret": true + } + } + }, + { + "type": "object", + "title": "Personal Access Token", + "required": ["personal_access_token"], + "properties": { + "option_title": { + "type": "string", + "const": "PAT Credentials", + "order": 0 + }, + "personal_access_token": { + "type": "string", + "title": "Personal Access Tokens", + "description": "Log into GitHub and then generate a personal access token. To load balance your API quota consumption across multiple API tokens, input multiple tokens separated with \",\"", + "airbyte_secret": true + } + } + } + ] + }, + "start_date": { + "type": "string", + "title": "Start date", + "description": "The date from which you'd like to replicate data from GitHub in the format YYYY-MM-DDT00:00:00Z. For the streams which support this configuration, only data generated on or after the start date will be replicated. This field doesn't apply to all streams, see the docs for more info", + "examples": ["2021-03-01T00:00:00Z"], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "order": 1, + "format": "date-time" + }, + "repository": { + "type": "string", + "examples": [ + "airbytehq/airbyte airbytehq/another-repo", + "airbytehq/*", + "airbytehq/airbyte" + ], + "title": "GitHub Repositories", + "description": "Space-delimited list of GitHub organizations/repositories, e.g. `airbytehq/airbyte` for single repository, `airbytehq/*` for get all repositories from organization and `airbytehq/airbyte airbytehq/another-repo` for multiple repositories.", + "order": 2, + "pattern_descriptor": "org/repo1 org/repo2" + }, + "branch": { + "type": "string", + "title": "Branch", + "examples": [ + "airbytehq/airbyte/master airbytehq/airbyte/my-branch" + ], + "description": "Space-delimited list of GitHub repository branches to pull commits for, e.g. `airbytehq/airbyte/master`. If no branches are specified for a repository, the default branch will be pulled.", + "order": 3, + "pattern_descriptor": "org/repo/branch1 org/repo/branch2" + }, + "page_size_for_large_streams": { + "type": "integer", + "title": "Page size for large streams", + "minimum": 1, + "maximum": 100, + "default": 10, + "description": "The Github connector contains several streams with a large amount of data. The page size of such streams depends on the size of your repository. We recommended that you specify values between 10 and 30.", + "order": 4 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": ["credentials", "option_title"], + "predicate_value": "OAuth Credentials", + "oauth_config_specification": { + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "access_token": { + "type": "string", + "path_in_connector_config": ["credentials", "access_token"] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": ["credentials", "client_id"] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": ["credentials", "client_secret"] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["api.github.com"] + }, + "suggestedStreams": { + "streams": [ + "branches", + "comments", + "issues", + "organizations", + "pull_requests", + "repositories", + "stargazers", + "tags", + "teams", + "users" + ] + }, + "maxSecondsBetweenMessages": 5400 + }, + { + "sourceDefinitionId": "5e6175e5-68e1-4c17-bff9-56103bbb0d80", + "name": "Gitlab", + "dockerRepository": "airbyte/source-gitlab", + "dockerImageTag": "1.0.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/gitlab", + "icon": "gitlab.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/gitlab", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Source Gitlab Spec", + "type": "object", + "required": ["api_url", "start_date", "credentials"], + "additionalProperties": true, + "properties": { + "credentials": { + "title": "Authorization Method", + "type": "object", + "order": 0, + "oneOf": [ + { + "type": "object", + "title": "OAuth2.0", + "required": [ + "client_id", + "client_secret", + "refresh_token", + "access_token", + "token_expiry_date" + ], + "properties": { + "auth_type": { + "type": "string", + "const": "oauth2.0" + }, + "client_id": { + "type": "string", + "description": "The API ID of the Gitlab developer application.", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "description": "The API Secret the Gitlab developer application.", + "airbyte_secret": true + }, + "access_token": { + "type": "string", + "description": "Access Token for making authenticated requests.", + "airbyte_secret": true + }, + "token_expiry_date": { + "type": "string", + "description": "The date-time when the access token should be refreshed.", + "format": "date-time" + }, + "refresh_token": { + "type": "string", + "description": "The key to refresh the expired access_token.", + "airbyte_secret": true + } + } + }, + { + "title": "Private Token", + "type": "object", + "required": ["access_token"], + "properties": { + "auth_type": { + "type": "string", + "const": "access_token" + }, + "access_token": { + "type": "string", + "title": "Private Token", + "description": "Log into your Gitlab account and then generate a personal Access Token.", + "airbyte_secret": true + } + } + } + ] + }, + "api_url": { + "type": "string", + "examples": ["gitlab.com"], + "title": "API URL", + "default": "gitlab.com", + "description": "Please enter your basic URL from GitLab instance.", + "order": 1 + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "The date from which you'd like to replicate data for GitLab API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", + "examples": ["2021-03-01T00:00:00Z"], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "order": 2, + "format": "date-time" + }, + "groups": { + "type": "string", + "examples": ["airbyte.io"], + "title": "Groups", + "description": "Space-delimited list of groups. e.g. airbyte.io.", + "order": 3 + }, + "projects": { + "type": "string", + "title": "Projects", + "examples": ["airbyte.io/documentation"], + "description": "Space-delimited list of projects. e.g. airbyte.io/documentation meltano/tap-gitlab.", + "order": 4 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": ["credentials", "auth_type"], + "predicate_value": "oauth2.0", + "oauth_config_specification": { + "oauth_user_input_from_connector_config_specification": { + "type": "object", + "properties": { + "domain": { + "type": "string", + "path_in_connector_config": ["api_url"] + } + } + }, + "complete_oauth_output_specification": { + "type": "object", + "properties": { + "access_token": { + "type": "string", + "path_in_connector_config": ["credentials", "access_token"] + }, + "refresh_token": { + "type": "string", + "path_in_connector_config": ["credentials", "refresh_token"] + }, + "token_expiry_date": { + "type": "string", + "format": "date-time", + "path_in_connector_config": [ + "credentials", + "token_expiry_date" + ] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": ["credentials", "client_id"] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": ["credentials", "client_secret"] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": ["*"] + } + }, + { + "sourceDefinitionId": "cf8ff320-6272-4faa-89e6-4402dc17e5d5", + "name": "Glassfrog", + "dockerRepository": "airbyte/source-glassfrog", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/glassfrog", + "icon": "glassfrog.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/glassfrog", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Glassfrog Spec", + "type": "object", + "required": ["api_key"], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "description": "API key provided by Glassfrog", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "ce38aec4-5a77-439a-be29-9ca44fd4e811", + "name": "GNews", + "dockerRepository": "airbyte/source-gnews", + "dockerImageTag": "0.1.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/gnews", + "icon": "gnews.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/gnews", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Gnews Spec", + "type": "object", + "required": ["api_key", "query"], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "title": "API Key", + "description": "API Key", + "order": 0, + "airbyte_secret": true + }, + "query": { + "type": "string", + "order": 1, + "title": "Query", + "description": "This parameter allows you to specify your search keywords to find the news articles you are looking for. The keywords will be used to return the most relevant articles. It is possible to use logical operators with keywords. - Phrase Search Operator: This operator allows you to make an exact search. Keywords surrounded by \n quotation marks are used to search for articles with the exact same keyword sequence. \n For example the query: \"Apple iPhone\" will return articles matching at least once this sequence of keywords.\n- Logical AND Operator: This operator allows you to make sure that several keywords are all used in the article\n search. By default the space character acts as an AND operator, it is possible to replace the space character \n by AND to obtain the same result. For example the query: Apple Microsoft is equivalent to Apple AND Microsoft\n- Logical OR Operator: This operator allows you to retrieve articles matching the keyword a or the keyword b.\n It is important to note that this operator has a higher precedence than the AND operator. For example the \n query: Apple OR Microsoft will return all articles matching the keyword Apple as well as all articles matching \n the keyword Microsoft\n- Logical NOT Operator: This operator allows you to remove from the results the articles corresponding to the\n specified keywords. To use it, you need to add NOT in front of each word or phrase surrounded by quotes.\n For example the query: Apple NOT iPhone will return all articles matching the keyword Apple but not the keyword\n iPhone", + "examples": [ + "Microsoft Windows 10", + "Apple OR Microsoft", + "Apple AND NOT iPhone", + "(Windows 7) AND (Windows 10)", + "Intel AND (i7 OR i9)" + ] + }, + "language": { + "type": "string", + "title": "Language", + "decription": "This parameter allows you to specify the language of the news articles returned by the API. You have to set as value the 2 letters code of the language you want to filter.", + "order": 2, + "enum": [ + "ar", + "zh", + "nl", + "en", + "fr", + "de", + "el", + "he", + "hi", + "it", + "ja", + "ml", + "mr", + "no", + "pt", + "ro", + "ru", + "es", + "sv", + "ta", + "te", + "uk" + ] + }, + "country": { + "type": "string", + "title": "Country", + "description": "This parameter allows you to specify the country where the news articles returned by the API were published, the contents of the articles are not necessarily related to the specified country. You have to set as value the 2 letters code of the country you want to filter.", + "order": 3, + "enum": [ + "au", + "br", + "ca", + "cn", + "eg", + "fr", + "de", + "gr", + "hk", + "in", + "ie", + "il", + "it", + "jp", + "nl", + "no", + "pk", + "pe", + "ph", + "pt", + "ro", + "ru", + "sg", + "es", + "se", + "ch", + "tw", + "ua", + "gb", + "us" + ] + }, + "in": { + "type": "array", + "title": "In", + "description": "This parameter allows you to choose in which attributes the keywords are searched. The attributes that can be set are title, description and content. It is possible to combine several attributes.", + "order": 4, + "items": { + "type": "string", + "enum": ["title", "description", "content"] + } + }, + "nullable": { + "type": "array", + "title": "Nullable", + "description": "This parameter allows you to specify the attributes that you allow to return null values. The attributes that can be set are title, description and content. It is possible to combine several attributes", + "order": 5, + "items": { + "type": "string", + "enum": ["title", "description", "content"] + } + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "This parameter allows you to filter the articles that have a publication date greater than or equal to the specified value. The date must respect the following format: YYYY-MM-DD hh:mm:ss (in UTC)", + "order": 6, + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$", + "examples": ["2022-08-21 16:27:09"] + }, + "end_date": { + "type": "string", + "title": "End Date", + "description": "This parameter allows you to filter the articles that have a publication date smaller than or equal to the specified value. The date must respect the following format: YYYY-MM-DD hh:mm:ss (in UTC)", + "order": 6, + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$", + "examples": ["2022-08-21 16:27:09"] + }, + "sortby": { + "type": "string", + "title": "Sort By", + "description": "This parameter allows you to choose with which type of sorting the articles should be returned. Two values are possible:\n - publishedAt = sort by publication date, the articles with the most recent publication date are returned first\n - relevance = sort by best match to keywords, the articles with the best match are returned first", + "order": 7, + "enum": ["publishedAt", "relevance"] + }, + "top_headlines_query": { + "type": "string", + "order": 8, + "title": "Top Headlines Query", + "description": "This parameter allows you to specify your search keywords to find the news articles you are looking for. The keywords will be used to return the most relevant articles. It is possible to use logical operators with keywords. - Phrase Search Operator: This operator allows you to make an exact search. Keywords surrounded by \n quotation marks are used to search for articles with the exact same keyword sequence. \n For example the query: \"Apple iPhone\" will return articles matching at least once this sequence of keywords.\n- Logical AND Operator: This operator allows you to make sure that several keywords are all used in the article\n search. By default the space character acts as an AND operator, it is possible to replace the space character \n by AND to obtain the same result. For example the query: Apple Microsoft is equivalent to Apple AND Microsoft\n- Logical OR Operator: This operator allows you to retrieve articles matching the keyword a or the keyword b.\n It is important to note that this operator has a higher precedence than the AND operator. For example the \n query: Apple OR Microsoft will return all articles matching the keyword Apple as well as all articles matching \n the keyword Microsoft\n- Logical NOT Operator: This operator allows you to remove from the results the articles corresponding to the\n specified keywords. To use it, you need to add NOT in front of each word or phrase surrounded by quotes.\n For example the query: Apple NOT iPhone will return all articles matching the keyword Apple but not the keyword\n iPhone", + "examples": [ + "Microsoft Windows 10", + "Apple OR Microsoft", + "Apple AND NOT iPhone", + "(Windows 7) AND (Windows 10)", + "Intel AND (i7 OR i9)" + ] + }, + "top_headlines_topic": { + "type": "string", + "title": "Top Headlines Topic", + "description": "This parameter allows you to change the category for the request.", + "order": 9, + "enum": [ + "breaking-news", + "world", + "nation", + "business", + "technology", + "entertainment", + "sports", + "science", + "health" + ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "ba15ac82-5c6a-4fb2-bf24-925c23a1180c", + "name": "GoCardless", + "dockerRepository": "airbyte/source-gocardless", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/gocardless", + "icon": "gocardless.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/gocardless", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Gocardless Spec", + "type": "object", + "required": [ + "access_token", + "gocardless_environment", + "gocardless_version", + "start_date" + ], + "properties": { + "access_token": { + "title": "Access Token", + "type": "string", + "pattern": "^(sandbox|live)_.+$", + "description": "Gocardless API TOKEN", + "airbyte_secret": true, + "order": 0 + }, + "gocardless_environment": { + "title": "GoCardless API Environment", + "type": "string", + "enum": ["sandbox", "live"], + "default": "sandbox", + "description": "Environment you are trying to connect to.", + "order": 1 + }, + "gocardless_version": { + "title": "GoCardless API Version", + "type": "string", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "description": "GoCardless version. This is a date. You can find the latest here: \nhttps://developer.gocardless.com/api-reference/#api-usage-making-requests\n", + "order": 2 + }, + "start_date": { + "title": "Start Date", + "type": "string", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data\nbefore this date will not be replicated.\n", + "examples": ["2017-01-25T00:00:00Z"], + "order": 3 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "32382e40-3b49-4b99-9c5c-4076501914e7", + "name": "Gong", + "dockerRepository": "airbyte/source-gong", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/gong", + "icon": "gong.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/gong", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Gong Spec", + "type": "object", + "required": ["access_key", "access_key_secret"], + "additionalProperties": true, + "properties": { + "access_key": { + "type": "string", + "title": "Gong Access Key", + "description": "Gong Access Key", + "airbyte_secret": true + }, + "access_key_secret": { + "type": "string", + "title": "Gong Access Key Secret", + "description": "Gong Access Key Secret", + "airbyte_secret": true + }, + "start_date": { + "type": "string", + "title": "Start date", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "description": "The date from which to list calls, in the ISO-8601 format; if not specified, the calls start with the earliest recorded call. For web-conference calls recorded by Gong, the date denotes its scheduled time, otherwise, it denotes its actual start time.", + "examples": ["2018-02-18T08:00:00Z"] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "253487c0-2246-43ba-a21f-5116b20a2c50", + "name": "Google Ads", + "dockerRepository": "airbyte/source-google-ads", + "dockerImageTag": "0.2.14", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-ads", + "icon": "google-adwords.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-ads", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Google Ads Spec", + "type": "object", + "required": ["credentials", "start_date", "customer_id"], + "additionalProperties": true, + "properties": { + "credentials": { + "type": "object", + "description": "", + "title": "Google Credentials", + "order": 0, + "required": [ + "developer_token", + "client_id", + "client_secret", + "refresh_token" + ], + "properties": { + "developer_token": { + "type": "string", + "title": "Developer Token", + "order": 0, + "description": "Developer token granted by Google to use their APIs. More instruction on how to find this value in our docs", + "airbyte_secret": true + }, + "client_id": { + "type": "string", + "title": "Client ID", + "order": 1, + "description": "The Client ID of your Google Ads developer application. More instruction on how to find this value in our docs" + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "order": 2, + "description": "The Client Secret of your Google Ads developer application. More instruction on how to find this value in our docs", + "airbyte_secret": true + }, + "refresh_token": { + "type": "string", + "title": "Refresh Token", + "order": 3, + "description": "The token for obtaining a new access token. More instruction on how to find this value in our docs", + "airbyte_secret": true + }, + "access_token": { + "type": "string", + "title": "Access Token", + "order": 4, + "description": "Access Token for making authenticated requests. More instruction on how to find this value in our docs", + "airbyte_secret": true + } + } + }, + "customer_id": { + "title": "Customer ID(s)", + "type": "string", + "description": "Comma separated list of (client) customer IDs. Each customer ID must be specified as a 10-digit number without dashes. More instruction on how to find this value in our docs. Metrics streams like AdGroupAdReport cannot be requested for a manager account.", + "pattern": "^[0-9]{10}(,[0-9]{10})*$", + "examples": ["6783948572,5839201945"], + "order": 1 + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "UTC date and time in the format 2017-01-25. Any data before this date will not be replicated.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": ["2017-01-25"], + "order": 2, + "format": "date" + }, + "end_date": { + "type": "string", + "title": "End Date", + "description": "UTC date and time in the format 2017-01-25. Any data after this date will not be replicated.", + "pattern": "^$|^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": ["2017-01-30"], + "order": 6, + "format": "date" + }, + "custom_queries": { + "type": "array", + "title": "Custom GAQL Queries", + "description": "", + "order": 3, + "items": { + "type": "object", + "required": ["query", "table_name"], + "properties": { + "query": { + "type": "string", + "title": "Custom Query", + "description": "A custom defined GAQL query for building the report. Should not contain segments.date expression because it is used by incremental streams. See Google's query builder for more information.", + "examples": [ + "SELECT segments.ad_destination_type, campaign.advertising_channel_sub_type FROM campaign WHERE campaign.status = 'PAUSED'" + ] + }, + "table_name": { + "type": "string", + "title": "Destination Table Name", + "description": "The table name in your destination database for choosen query." + } + } + } + }, + "login_customer_id": { + "type": "string", + "title": "Login Customer ID for Managed Accounts", + "description": "If your access to the customer account is through a manager account, this field is required and must be set to the customer ID of the manager account (10-digit number without dashes). More information about this field you can see here", + "pattern": "^([0-9]{10})?$", + "examples": ["7349206847"], + "order": 4 + }, + "conversion_window_days": { + "title": "Conversion Window", + "type": "integer", + "description": "A conversion window is the period of time after an ad interaction (such as an ad click or video view) during which a conversion, such as a purchase, is recorded in Google Ads. For more information, see Google's documentation.", + "minimum": 0, + "maximum": 1095, + "default": 14, + "examples": [14], + "order": 5 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": ["credentials"], + "oauthFlowInitParameters": [ + ["client_id"], + ["client_secret"], + ["developer_token"] + ], + "oauthFlowOutputParameters": [["access_token"], ["refresh_token"]] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["accounts.google.com", "googleads.googleapis.com"] + } + }, + { + "sourceDefinitionId": "eff3616a-f9c3-11eb-9a03-0242ac130003", + "name": "Google Analytics (Universal Analytics)", + "dockerRepository": "airbyte/source-google-analytics-v4", + "dockerImageTag": "0.1.34", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-analytics-v4", + "icon": "google-analytics.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-analytics-universal-analytics", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Google Analytics (Universal Analytics) Spec", + "type": "object", + "required": ["view_id", "start_date"], + "additionalProperties": true, + "properties": { + "credentials": { + "order": 0, + "type": "object", + "title": "Credentials", + "description": "Credentials for the service", + "oneOf": [ + { + "title": "Authenticate via Google (Oauth)", + "type": "object", + "required": ["client_id", "client_secret", "refresh_token"], + "properties": { + "auth_type": { + "type": "string", + "const": "Client", + "order": 0 + }, + "client_id": { + "title": "Client ID", + "type": "string", + "description": "The Client ID of your Google Analytics developer application.", + "airbyte_secret": true, + "order": 1 + }, + "client_secret": { + "title": "Client Secret", + "type": "string", + "description": "The Client Secret of your Google Analytics developer application.", + "airbyte_secret": true, + "order": 2 + }, + "refresh_token": { + "title": "Refresh Token", + "type": "string", + "description": "The token for obtaining a new access token.", + "airbyte_secret": true, + "order": 3 + }, + "access_token": { + "title": "Access Token", + "type": "string", + "description": "Access Token for making authenticated requests.", + "airbyte_secret": true, + "order": 4 + } + } + }, + { + "type": "object", + "title": "Service Account Key Authentication", + "required": ["credentials_json"], + "properties": { + "auth_type": { + "type": "string", + "const": "Service", + "order": 0 + }, + "credentials_json": { + "title": "Service Account JSON Key", + "type": "string", + "description": "The JSON key of the service account to use for authorization", + "examples": [ + "{ \"type\": \"service_account\", \"project_id\": YOUR_PROJECT_ID, \"private_key_id\": YOUR_PRIVATE_KEY, ... }" + ], + "airbyte_secret": true + } + } + } + ] + }, + "start_date": { + "order": 1, + "type": "string", + "title": "Replication Start Date", + "description": "The date in the format YYYY-MM-DD. Any data before this date will not be replicated.", + "examples": ["2020-06-01"] + }, + "view_id": { + "order": 2, + "type": "string", + "title": "View ID", + "description": "The ID for the Google Analytics View you want to fetch data from. This can be found from the Google Analytics Account Explorer." + }, + "custom_reports": { + "order": 3, + "type": "string", + "title": "Custom Reports", + "description": "A JSON array describing the custom reports you want to sync from Google Analytics. See the docs for more information about the exact format you can use to fill out this field." + }, + "window_in_days": { + "type": "integer", + "title": "Data request time increment in days", + "description": "The time increment used by the connector when requesting data from the Google Analytics API. More information is available in the the docs. The bigger this value is, the faster the sync will be, but the more likely that sampling will be applied to your data, potentially causing inaccuracies in the returned results. We recommend setting this to 1 unless you have a hard requirement to make the sync faster at the expense of accuracy. The minimum allowed value for this field is 1, and the maximum is 364. ", + "examples": [30, 60, 90, 120, 200, 364], + "default": 1, + "order": 4 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": ["credentials", "0"], + "oauthFlowInitParameters": [["client_id"], ["client_secret"]], + "oauthFlowOutputParameters": [["access_token"], ["refresh_token"]] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ + "oauth2.googleapis.com", + "www.googleapis.com", + "analyticsdata.googleapis.com", + "analyticsreporting.googleapis.com" + ] + } + }, + { + "sourceDefinitionId": "3cc2eafd-84aa-4dca-93af-322d9dfeec1a", + "name": "Google Analytics 4 (GA4)", + "dockerRepository": "airbyte/source-google-analytics-data-api", + "dockerImageTag": "0.2.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-analytics-data-api", + "icon": "google-analytics.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-analytics-data-api", + "connectionSpecification": { + "$schema": "https://json-schema.org/draft-07/schema#", + "title": "Google Analytics (Data API) Spec", + "type": "object", + "required": ["property_id", "date_ranges_start_date"], + "additionalProperties": true, + "properties": { + "credentials": { + "order": 0, + "type": "object", + "title": "Credentials", + "description": "Credentials for the service", + "oneOf": [ + { + "title": "Authenticate via Google (Oauth)", + "type": "object", + "required": ["client_id", "client_secret", "refresh_token"], + "properties": { + "auth_type": { + "type": "string", + "const": "Client", + "order": 0 + }, + "client_id": { + "title": "Client ID", + "type": "string", + "description": "The Client ID of your Google Analytics developer application.", + "order": 1 + }, + "client_secret": { + "title": "Client Secret", + "type": "string", + "description": "The Client Secret of your Google Analytics developer application.", + "airbyte_secret": true, + "order": 2 + }, + "refresh_token": { + "title": "Refresh Token", + "type": "string", + "description": "The token for obtaining a new access token.", + "airbyte_secret": true, + "order": 3 + }, + "access_token": { + "title": "Access Token", + "type": "string", + "description": "Access Token for making authenticated requests.", + "airbyte_secret": true, + "order": 4 + } + } + }, + { + "type": "object", + "title": "Service Account Key Authentication", + "required": ["credentials_json"], + "properties": { + "auth_type": { + "type": "string", + "const": "Service", + "order": 0 + }, + "credentials_json": { + "title": "Service Account JSON Key", + "type": "string", + "description": "The JSON key of the service account to use for authorization", + "examples": [ + "{ \"type\": \"service_account\", \"project_id\": YOUR_PROJECT_ID, \"private_key_id\": YOUR_PRIVATE_KEY, ... }" + ], + "airbyte_secret": true, + "order": 1 + } + } + } + ] + }, + "property_id": { + "type": "string", + "title": "Property ID", + "description": "A Google Analytics GA4 property identifier whose events are tracked. Specified in the URL path and not the body", + "order": 1 + }, + "date_ranges_start_date": { + "type": "string", + "title": "Start Date", + "description": "The start date from which to replicate report data in the format YYYY-MM-DD. Data generated before this date will not be included in the report. Not applied to custom Cohort reports.", + "format": "date", + "order": 2 + }, + "custom_reports": { + "order": 3, + "type": "string", + "title": "Custom Reports", + "description": "A JSON array describing the custom reports you want to sync from Google Analytics. See the docs for more information about the exact format you can use to fill out this field." + }, + "window_in_days": { + "type": "integer", + "title": "Data request time increment in days", + "description": "The time increment used by the connector when requesting data from the Google Analytics API. More information is available in the the docs. The bigger this value is, the faster the sync will be, but the more likely that sampling will be applied to your data, potentially causing inaccuracies in the returned results. We recommend setting this to 1 unless you have a hard requirement to make the sync faster at the expense of accuracy. The minimum allowed value for this field is 1, and the maximum is 364. Not applied to custom Cohort reports.", + "examples": [30, 60, 90, 120, 200, 364], + "minimum": 1, + "maximum": 364, + "default": 1, + "order": 4 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": ["credentials", "0"], + "oauthFlowInitParameters": [["client_id"], ["client_secret"]], + "oauthFlowOutputParameters": [["access_token"], ["refresh_token"]] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": [ + "oauth2.googleapis.com", + "www.googleapis.com", + "analyticsdata.googleapis.com" + ] + } + }, + { + "sourceDefinitionId": "d19ae824-e289-4b14-995a-0632eb46d246", + "name": "Google Directory", + "dockerRepository": "airbyte/source-google-directory", + "dockerImageTag": "0.1.9", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-directory", + "icon": "googledirectory.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-directory", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Google Directory Spec", + "type": "object", + "required": [], + "additionalProperties": true, + "properties": { + "credentials": { + "title": "Google Credentials", + "description": "Google APIs use the OAuth 2.0 protocol for authentication and authorization. The Source supports Web server application and Service accounts scenarios.", + "type": "object", + "oneOf": [ + { + "title": "Sign in via Google (OAuth)", + "description": "For these scenario user only needs to give permission to read Google Directory data.", + "type": "object", + "required": ["client_id", "client_secret", "refresh_token"], + "properties": { + "credentials_title": { + "type": "string", + "title": "Credentials Title", + "description": "Authentication Scenario", + "const": "Web server app", + "enum": ["Web server app"], + "default": "Web server app", + "order": 0 + }, + "client_id": { + "title": "Client ID", + "type": "string", + "description": "The Client ID of the developer application.", + "airbyte_secret": true + }, + "client_secret": { + "title": "Client secret", + "type": "string", + "description": "The Client Secret of the developer application.", + "airbyte_secret": true + }, + "refresh_token": { + "title": "Refresh Token", + "type": "string", + "description": "The Token for obtaining a new access token.", + "airbyte_secret": true + } + } + }, + { + "title": "Service Account Key", + "description": "For these scenario user should obtain service account's credentials from the Google API Console and provide delegated email.", + "type": "object", + "required": ["credentials_json", "email"], + "properties": { + "credentials_title": { + "type": "string", + "title": "Credentials Title", + "description": "Authentication Scenario", + "const": "Service accounts", + "enum": ["Service accounts"], + "default": "Service accounts", + "order": 0 + }, + "credentials_json": { + "type": "string", + "title": "Credentials JSON", + "description": "The contents of the JSON service account key. See the docs for more information on how to generate this key.", + "airbyte_secret": true + }, + "email": { + "type": "string", + "title": "Email", + "description": "The email of the user, which has permissions to access the Google Workspace Admin APIs." + } + } + } + ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": ["credentials", "0"], + "oauthFlowInitParameters": [["client_id"], ["client_secret"]], + "oauthFlowOutputParameters": [["refresh_token"]] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "1e9086ab-ddac-4c1d-aafd-ba43ff575fe4", + "name": "Google PageSpeed Insights", + "dockerRepository": "airbyte/source-google-pagespeed-insights", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-pagespeed-insights", + "icon": "google-pagespeed-insights.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/google-pagespeed-insights", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Google PageSpeed Insights Spec", + "type": "object", + "required": ["urls", "strategies", "categories"], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "title": "API Key", + "description": "Google PageSpeed API Key. See here. The key is optional - however the API is heavily rate limited when using without API Key. Creating and using the API key therefore is recommended. The key is case sensitive.", + "airbyte_secret": true + }, + "urls": { + "type": "array", + "items": { + "type": "string", + "pattern": "^(?:origin:)?(http(s)?:\\/\\/)[\\w.-]+(?:\\.[\\w\\.-]+)+[\\w\\-\\._~:\\/?#[\\]@!\\$&'\\(\\)\\*\\+,;=.]+$" + }, + "title": "URLs to analyse", + "description": "The URLs to retrieve pagespeed information from. The connector will attempt to sync PageSpeed reports for all the defined URLs. Format: https://(www.)url.domain", + "example": "https://example.com" + }, + "strategies": { + "type": "array", + "items": { + "type": "string", + "enum": ["desktop", "mobile"] + }, + "title": "Analyses Strategies", + "description": "The analyses strategy to use. Either \"desktop\" or \"mobile\"." + }, + "categories": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "accessibility", + "best-practices", + "performance", + "pwa", + "seo" + ] + }, + "title": "Lighthouse Categories", + "description": "Defines which Lighthouse category to run. One or many of: \"accessibility\", \"best-practices\", \"performance\", \"pwa\", \"seo\"." + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "eb4c9e00-db83-4d63-a386-39cfa91012a8", + "name": "Google Search Console", + "dockerRepository": "airbyte/source-google-search-console", + "dockerImageTag": "0.1.22", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-search-console", + "icon": "googlesearchconsole.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-search-console", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Google Search Console Spec", + "type": "object", + "required": ["site_urls", "start_date", "authorization"], + "properties": { + "site_urls": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Website URL Property", + "description": "The URLs of the website property attached to your GSC account. Read more here.", + "examples": ["https://example1.com/", "sc-domain:example2.com"], + "order": 0 + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "UTC date in the format 2017-01-25. Any data before this date will not be replicated.", + "examples": ["2021-01-01"], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "order": 1, + "format": "date" + }, + "end_date": { + "type": "string", + "title": "End Date", + "description": "UTC date in the format 2017-01-25. Any data after this date will not be replicated. Must be greater or equal to the start date field.", + "examples": ["2021-12-12"], + "pattern": "^$|^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "order": 2, + "format": "date" + }, + "authorization": { + "type": "object", + "title": "Authentication Type", + "description": "", + "order": 3, + "oneOf": [ + { + "title": "OAuth", + "type": "object", + "required": [ + "auth_type", + "client_id", + "client_secret", + "refresh_token" + ], + "properties": { + "auth_type": { + "type": "string", + "const": "Client", + "order": 0 + }, + "client_id": { + "title": "Client ID", + "type": "string", + "description": "The client ID of your Google Search Console developer application. Read more here.", + "airbyte_secret": true + }, + "client_secret": { + "title": "Client Secret", + "type": "string", + "description": "The client secret of your Google Search Console developer application. Read more here.", + "airbyte_secret": true + }, + "access_token": { + "title": "Access Token", + "type": "string", + "description": "Access token for making authenticated requests. Read more here.", + "airbyte_secret": true + }, + "refresh_token": { + "title": "Refresh Token", + "type": "string", + "description": "The token for obtaining a new access token. Read more here.", + "airbyte_secret": true + } + } + }, + { + "type": "object", + "title": "Service Account Key Authentication", + "required": ["auth_type", "service_account_info", "email"], + "properties": { + "auth_type": { + "type": "string", + "const": "Service", + "order": 0 + }, + "service_account_info": { + "title": "Service Account JSON Key", + "type": "string", + "description": "The JSON key of the service account to use for authorization. Read more here.", + "examples": [ + "{ \"type\": \"service_account\", \"project_id\": YOUR_PROJECT_ID, \"private_key_id\": YOUR_PRIVATE_KEY, ... }" + ], + "airbyte_secret": true + }, + "email": { + "title": "Admin Email", + "type": "string", + "description": "The email of the user which has permissions to access the Google Workspace Admin APIs." + } + } + } + ] + }, + "custom_reports": { + "order": 4, + "type": "string", + "title": "Custom Reports", + "description": "A JSON array describing the custom reports you want to sync from Google Search Console. See the docs for more information about the exact format you can use to fill out this field." + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": ["authorization", "0"], + "oauthFlowInitParameters": [["client_id"], ["client_secret"]], + "oauthFlowOutputParameters": [["access_token"], ["refresh_token"]] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["*.googleapis.com"] + } + }, + { + "sourceDefinitionId": "71607ba1-c0ac-4799-8049-7f4b90dd50f7", + "name": "Google Sheets", + "dockerRepository": "airbyte/source-google-sheets", + "dockerImageTag": "0.2.37", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-sheets", + "icon": "google-sheets.svg", + "sourceType": "file", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-sheets", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Google Sheets Source Spec", + "type": "object", + "required": ["spreadsheet_id", "credentials"], + "additionalProperties": true, + "properties": { + "spreadsheet_id": { + "type": "string", + "title": "Spreadsheet Link", + "description": "Enter the link to the Google spreadsheet you want to sync", + "examples": [ + "https://docs.google.com/spreadsheets/d/1hLd9Qqti3UyLXZB2aFfUWDT7BG-arw2xy4HR3D-dwUb/edit" + ] + }, + "row_batch_size": { + "type": "integer", + "title": "Row Batch Size", + "description": "Number of rows fetched when making a Google Sheet API call. Defaults to 200.", + "default": 200 + }, + "names_conversion": { + "type": "boolean", + "title": "Columns Name Conversion", + "description": "Columns name conversion using a set of rules, for example, 'My Name' -> 'my-name'.", + "default": false + }, + "credentials": { + "type": "object", + "title": "Authentication", + "description": "Credentials for connecting to the Google Sheets API", + "oneOf": [ + { + "title": "Authenticate via Google (OAuth)", + "type": "object", + "required": [ + "auth_type", + "client_id", + "client_secret", + "refresh_token" + ], + "properties": { + "auth_type": { + "type": "string", + "const": "Client" + }, + "client_id": { + "title": "Client ID", + "type": "string", + "description": "Enter your Google application's Client ID", + "airbyte_secret": true + }, + "client_secret": { + "title": "Client Secret", + "type": "string", + "description": "Enter your Google application's Client Secret", + "airbyte_secret": true + }, + "refresh_token": { + "title": "Refresh Token", + "type": "string", + "description": "Enter your Google application's refresh token", + "airbyte_secret": true + } + } + }, + { + "title": "Service Account Key Authentication", + "type": "object", + "required": ["auth_type", "service_account_info"], + "properties": { + "auth_type": { + "type": "string", + "const": "Service" + }, + "service_account_info": { + "type": "string", + "title": "Service Account Information.", + "description": "Enter your Google Cloud service account key in JSON format", + "airbyte_secret": true, + "examples": [ + "{ \"type\": \"service_account\", \"project_id\": YOUR_PROJECT_ID, \"private_key_id\": YOUR_PRIVATE_KEY, ... }" + ] + } + } + } + ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": ["credentials", "0"], + "oauthFlowInitParameters": [["client_id"], ["client_secret"]], + "oauthFlowOutputParameters": [["refresh_token"]] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["*.googleapis.com"] + } + }, + { + "sourceDefinitionId": "a68fbcde-b465-4ab3-b2a6-b0590a875835", + "name": "Google Webfonts", + "dockerRepository": "airbyte/source-google-webfonts", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-webfonts", + "icon": "googleworkpace.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-webfonts", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Google Webfonts Spec", + "type": "object", + "required": ["api_key"], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "description": "API key is required to access google apis, For getting your's goto google console and generate api key for Webfonts", + "airbyte_secret": true + }, + "sort": { + "type": "string", + "description": "Optional, to find how to sort" + }, + "prettyPrint": { + "type": "string", + "description": "Optional, boolean type" + }, + "alt": { + "type": "string", + "description": "Optional, Available params- json, media, proto" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "ed9dfefa-1bbc-419d-8c5e-4d78f0ef6734", + "name": "Google Workspace Admin Reports", + "dockerRepository": "airbyte/source-google-workspace-admin-reports", + "dockerImageTag": "0.1.8", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-workspace-admin-reports", + "icon": "googleworkpace.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/google-workspace-admin-reports", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Google Directory Spec", + "type": "object", + "required": ["credentials_json", "email"], + "additionalProperties": false, + "properties": { + "credentials_json": { + "type": "string", + "title": "Credentials JSON", + "description": "The contents of the JSON service account key. See the docs for more information on how to generate this key.", + "airbyte_secret": true + }, + "email": { + "type": "string", + "title": "Email", + "description": "The email of the user, who has permissions to access the Google Workspace Admin APIs." + }, + "lookback": { + "type": "integer", + "title": "Lookback Window in Days", + "minimum": 0, + "maximum": 180, + "description": "Sets the range of time shown in the report. The maximum value allowed by the Google API is 180 days." + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "59f1e50a-331f-4f09-b3e8-2e8d4d355f44", + "name": "Greenhouse", + "dockerRepository": "airbyte/source-greenhouse", + "dockerImageTag": "0.3.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/greenhouse", + "icon": "greenhouse.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/greenhouse", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Greenhouse Spec", + "type": "object", + "required": ["api_key"], + "additionalProperties": true, + "properties": { + "api_key": { + "title": "API Key", + "type": "string", + "description": "Greenhouse API Key. See the docs for more information on how to generate this key.", + "airbyte_secret": true, + "order": 0 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["harvest.greenhouse.io"] + } + }, + { + "sourceDefinitionId": "bff9a277-e01d-420d-81ee-80f28a307318", + "name": "Gutendex", + "dockerRepository": "airbyte/source-gutendex", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/gutendex", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/gutendex", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Gutendex Spec", + "type": "object", + "additionalProperties": true, + "properties": { + "author_year_start": { + "type": "string", + "description": "(Optional) Defines the minimum birth year of the authors. Books by authors born prior to the start year will not be returned. Supports both positive (CE) or negative (BCE) integer values", + "pattern": "^[-]?[0-9]{1,4}$", + "examples": [2002, 500, -500, 2020] + }, + "author_year_end": { + "type": "string", + "description": "(Optional) Defines the maximum birth year of the authors. Books by authors born after the end year will not be returned. Supports both positive (CE) or negative (BCE) integer values", + "pattern": "^[-]?[0-9]{1,4}$", + "examples": [2002, 500, -500, 2020] + }, + "copyright": { + "type": "string", + "description": "(Optional) Use this to find books with a certain copyright status - true for books with existing copyrights, false for books in the public domain in the USA, or null for books with no available copyright information.", + "pattern": "^(true|false|null)$", + "examples": [true, false, null] + }, + "languages": { + "type": "string", + "description": "(Optional) Use this to find books in any of a list of languages. They must be comma-separated, two-character language codes.", + "examples": ["en", "en,fr,fi"] + }, + "search": { + "type": "string", + "description": "(Optional) Use this to search author names and book titles with given words. They must be separated by a space (i.e. %20 in URL-encoded format) and are case-insensitive.", + "examples": ["dickens%20great%20expect", "dickens"] + }, + "sort": { + "type": "string", + "description": "(Optional) Use this to sort books - ascending for Project Gutenberg ID numbers from lowest to highest, descending for IDs highest to lowest, or popular (the default) for most popular to least popular by number of downloads.", + "pattern": "^(ascending|descending|popular)$", + "examples": ["ascending", "descending", "popular"] + }, + "topic": { + "type": "string", + "description": "(Optional) Use this to search for a case-insensitive key-phrase in books' bookshelves or subjects.", + "examples": ["children", "fantasy"] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "6fe89830-d04d-401b-aad6-6552ffa5c4af", + "name": "Harness", + "dockerRepository": "farosai/airbyte-harness-source", + "dockerImageTag": "0.1.23", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/harness", + "icon": "harness.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.faros.ai", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Harness Spec", + "type": "object", + "required": ["api_key", "account_id"], + "additionalProperties": false, + "properties": { + "api_key": { + "type": "string", + "title": "Harness API key", + "airbyte_secret": true + }, + "account_id": { + "type": "string", + "title": "Harness account ID" + }, + "api_url": { + "type": "string", + "title": "Harness API URL", + "default": "https://app.harness.io", + "examples": ["https://my-harness-server.example.com"] + }, + "cutoff_days": { + "type": "number", + "title": "Harness Cutoff Days", + "default": 90, + "description": "Only fetch deployments updated after cutoff" + }, + "page_size": { + "type": "number", + "title": "Harness Page Size", + "default": 100, + "description": "number of pipelines (builds) to fetch per call" + }, + "deployment_timeout": { + "type": "number", + "title": "Harness Deployment Timeout", + "default": 24, + "description": "Max number of hours to consider for a deployment to be running/queued before giving up on syncing it" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "fe2b4084-3386-4d3b-9ad6-308f61a6f1e6", + "name": "Harvest", + "dockerRepository": "airbyte/source-harvest", + "dockerImageTag": "0.1.17", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/harvest", + "icon": "harvest.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/harvest", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Harvest Spec", + "type": "object", + "required": ["account_id", "replication_start_date"], + "additionalProperties": true, + "properties": { + "account_id": { + "title": "Account ID", + "description": "Harvest account ID. Required for all Harvest requests in pair with Personal Access Token", + "airbyte_secret": true, + "type": "string", + "order": 0 + }, + "replication_start_date": { + "title": "Start Date", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": ["2017-01-25T00:00:00Z"], + "type": "string", + "order": 1, + "format": "date-time" + }, + "replication_end_date": { + "title": "End Date", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data after this date will not be replicated.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": ["2017-01-25T00:00:00Z"], + "type": "string", + "airbyte_hidden": true, + "order": 2, + "format": "date-time" + }, + "credentials": { + "title": "Authentication mechanism", + "description": "Choose how to authenticate to Harvest.", + "type": "object", + "order": 3, + "oneOf": [ + { + "type": "object", + "title": "Authenticate via Harvest (OAuth)", + "required": ["client_id", "client_secret", "refresh_token"], + "additionalProperties": true, + "properties": { + "auth_type": { + "type": "string", + "const": "Client", + "order": 0 + }, + "client_id": { + "title": "Client ID", + "type": "string", + "description": "The Client ID of your Harvest developer application." + }, + "client_secret": { + "title": "Client Secret", + "type": "string", + "description": "The Client Secret of your Harvest developer application.", + "airbyte_secret": true + }, + "refresh_token": { + "title": "Refresh Token", + "type": "string", + "description": "Refresh Token to renew the expired Access Token.", + "airbyte_secret": true + } + } + }, + { + "type": "object", + "title": "Authenticate with Personal Access Token", + "required": ["api_token"], + "additionalProperties": true, + "properties": { + "auth_type": { + "type": "string", + "const": "Token", + "order": 0 + }, + "api_token": { + "title": "Personal Access Token", + "description": "Log into Harvest and then create new personal access token.", + "type": "string", + "airbyte_secret": true + } + } + } + ] + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["append"], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": ["credentials", "0"], + "oauthFlowInitParameters": [["client_id"], ["client_secret"]], + "oauthFlowOutputParameters": [["refresh_token"]] + } + }, + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": ["credentials", "auth_type"], + "predicate_value": "Client", + "oauth_config_specification": { + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": true, + "properties": { + "refresh_token": { + "type": "string", + "path_in_connector_config": ["credentials", "refresh_token"] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": true, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": true, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": ["credentials", "client_id"] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": ["credentials", "client_secret"] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["api.harvestapp.com"] + } + }, + { + "sourceDefinitionId": "492b56d1-937c-462e-8076-21ad2031e784", + "name": "Hellobaton", + "dockerRepository": "airbyte/source-hellobaton", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/hellobaton", + "icon": "hellobaton.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Hellobaton Spec", + "type": "object", + "required": ["api_key", "company"], + "additionalProperties": false, + "properties": { + "api_key": { + "type": "string", + "description": "authentication key required to access the api endpoints", + "airbyte_secret": true + }, + "company": { + "type": "string", + "description": "Company name that generates your base api url", + "examples": ["google", "facebook", "microsoft"] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "8097ceb9-383f-42f6-9f92-d3fd4bcc7689", + "name": "Hubplanner", + "dockerRepository": "airbyte/source-hubplanner", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/hubplanner", + "icon": "hubplanner.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/hubplanner", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Hubplanner Spec", + "type": "object", + "required": ["api_key"], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "description": "Hubplanner API key. See https://github.com/hubplanner/API#authentication for more details.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "36c891d9-4bd9-43ac-bad2-10e12756272c", + "name": "HubSpot", + "dockerRepository": "airbyte/source-hubspot", + "dockerImageTag": "0.6.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/hubspot", + "icon": "hubspot.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/hubspot", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "HubSpot Source Spec", + "type": "object", + "required": ["start_date", "credentials"], + "additionalProperties": true, + "properties": { + "start_date": { + "type": "string", + "title": "Start date", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", + "examples": ["2017-01-25T00:00:00Z"], + "format": "date-time" + }, + "credentials": { + "title": "Authentication", + "description": "Choose how to authenticate to HubSpot.", + "type": "object", + "oneOf": [ + { + "type": "object", + "title": "OAuth", + "required": [ + "client_id", + "client_secret", + "refresh_token", + "credentials_title" + ], + "properties": { + "credentials_title": { + "type": "string", + "title": "Credentials", + "description": "Name of the credentials", + "const": "OAuth Credentials", + "order": 0 + }, + "client_id": { + "title": "Client ID", + "description": "The Client ID of your HubSpot developer application. See the Hubspot docs if you need help finding this ID.", + "type": "string", + "examples": ["123456789000"] + }, + "client_secret": { + "title": "Client Secret", + "description": "The client secret for your HubSpot developer application. See the Hubspot docs if you need help finding this secret.", + "type": "string", + "examples": ["secret"], + "airbyte_secret": true + }, + "refresh_token": { + "title": "Refresh Token", + "description": "Refresh token to renew an expired access token. See the Hubspot docs if you need help finding this token.", + "type": "string", + "examples": ["refresh_token"], + "airbyte_secret": true + } + } + }, + { + "type": "object", + "title": "Private App", + "required": ["access_token", "credentials_title"], + "properties": { + "credentials_title": { + "type": "string", + "title": "Credentials", + "description": "Name of the credentials set", + "const": "Private App Credentials", + "order": 0 + }, + "access_token": { + "title": "Access token", + "description": "HubSpot Access token. See the Hubspot docs if you need help finding this token.", + "type": "string", + "airbyte_secret": true + } + } + } + ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": ["credentials", "0"], + "oauthFlowInitParameters": [["client_id"], ["client_secret"]], + "oauthFlowOutputParameters": [["refresh_token"]] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["api.hubapi.com"] + } + }, + { + "sourceDefinitionId": "f23b7b7c-d705-49a3-9042-09add3b104a5", + "name": "IP2Whois", + "dockerRepository": "airbyte/source-ip2whois", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/ip2whois", + "icon": "ip2whois.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/ip2whois", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Ip2whois Spec", + "type": "object", + "additionalProperties": true, + "properties": { + "api_key": { + "title": "API key", + "type": "string", + "description": "Your API Key. See here.", + "airbyte_secret": true + }, + "domain": { + "title": "Domain", + "type": "string", + "description": "Domain name. See here.", + "examples": ["www.google.com", "www.facebook.com"] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "447e0381-3780-4b46-bb62-00a4e3c8b8e2", + "name": "IBM Db2", + "dockerRepository": "airbyte/source-db2", + "dockerImageTag": "0.1.19", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/db2", + "icon": "db2.svg", + "sourceType": "database", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/db2", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "IBM Db2 Source Spec", + "type": "object", + "required": [ + "host", + "port", + "db", + "username", + "password", + "encryption" + ], + "properties": { + "host": { + "description": "Host of the Db2.", + "type": "string", + "order": 0 + }, + "port": { + "description": "Port of the database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 8123, + "examples": ["8123"], + "order": 1 + }, + "db": { + "description": "Name of the database.", + "type": "string", + "examples": ["default"], + "order": 2 + }, + "username": { + "description": "Username to use to access the database.", + "type": "string", + "order": 3 + }, + "password": { + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 4 + }, + "jdbc_url_params": { + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", + "title": "JDBC URL Params", + "type": "string", + "order": 5 + }, + "encryption": { + "title": "Encryption", + "type": "object", + "description": "Encryption method to use when communicating with the database", + "order": 6, + "oneOf": [ + { + "title": "Unencrypted", + "description": "Data transfer will not be encrypted.", + "required": ["encryption_method"], + "properties": { + "encryption_method": { + "type": "string", + "const": "unencrypted" + } + } + }, + { + "title": "TLS Encrypted (verify certificate)", + "description": "Verify and use the cert provided by the server.", + "required": ["encryption_method", "ssl_certificate"], + "properties": { + "encryption_method": { + "type": "string", + "const": "encrypted_verify_certificate" + }, + "ssl_certificate": { + "title": "SSL PEM file", + "description": "Privacy Enhanced Mail (PEM) files are concatenated certificate containers frequently used in certificate installations", + "type": "string", + "airbyte_secret": true, + "multiline": true + }, + "key_store_password": { + "title": "Key Store Password. This field is optional. If you do not fill in this field, the password will be randomly generated.", + "description": "Key Store Password", + "type": "string", + "airbyte_secret": true + } + } + } + ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": ["${host}"] + } + }, + { + "sourceDefinitionId": "38f84314-fe6a-4257-97be-a8dcd942d693", + "name": "Insightly", + "dockerRepository": "airbyte/source-insightly", + "dockerImageTag": "0.1.2", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/insightly", + "icon": "insightly.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/insightly", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Insightly Spec", + "type": "object", + "required": ["token", "start_date"], + "additionalProperties": true, + "properties": { + "token": { + "type": ["string", "null"], + "title": "API Token", + "description": "Your Insightly API token.", + "airbyte_secret": true + }, + "start_date": { + "type": ["string", "null"], + "title": "Start Date", + "description": "The date from which you'd like to replicate data for Insightly in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated. Note that it will be used only for incremental streams.", + "examples": ["2021-03-01T00:00:00Z"], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "6acf6b55-4f1e-4fca-944e-1a3caef8aba8", + "name": "Instagram", + "dockerRepository": "airbyte/source-instagram", + "dockerImageTag": "1.0.5", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/instagram", + "icon": "instagram.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/instagram", + "changelogUrl": "https://docs.airbyte.com/integrations/sources/instagram", + "connectionSpecification": { + "title": "Source Instagram", + "type": "object", + "properties": { + "start_date": { + "title": "Start Date", + "description": "The date from which you'd like to replicate data for User Insights, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": ["2017-01-25T00:00:00Z"], + "type": "string", + "format": "date-time" + }, + "access_token": { + "title": "Access Token", + "description": "The value of the access token generated with instagram_basic, instagram_manage_insights, pages_show_list, pages_read_engagement, Instagram Public Content Access permissions. See the docs for more information", + "airbyte_secret": true, + "type": "string" + } + }, + "required": ["start_date", "access_token"] + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["append"], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": [], + "oauthFlowInitParameters": [], + "oauthFlowOutputParameters": [["access_token"]] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["graph.facebook.com"] + } + }, + { + "sourceDefinitionId": "1901024c-0249-45d0-bcac-31a954652927", + "name": "Instatus", + "dockerRepository": "airbyte/source-instatus", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/instatus", + "icon": "instatus.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/instatus", + "connectionSpecification": { + "title": "Instatus Spec", + "type": "object", + "additionalProperties": true, + "required": ["api_key"], + "properties": { + "api_key": { + "type": "string", + "title": "Rest API Key", + "airbyte_secret": true, + "description": "Instatus REST API key" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "d8313939-3782-41b0-be29-b3ca20d8dd3a", + "name": "Intercom", + "dockerRepository": "airbyte/source-intercom", + "dockerImageTag": "0.2.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/intercom", + "icon": "intercom.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/intercom", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Source Intercom Spec", + "type": "object", + "required": ["start_date", "access_token"], + "additionalProperties": true, + "properties": { + "start_date": { + "type": "string", + "title": "Start date", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", + "examples": ["2020-11-16T00:00:00Z"], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "format": "date-time" + }, + "access_token": { + "title": "Access token", + "type": "string", + "description": "Access token for making authenticated requests. See the Intercom docs for more information.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": [], + "oauthFlowInitParameters": [], + "oauthFlowOutputParameters": [["access_token"]] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["api.intercom.io"] + } + }, + { + "sourceDefinitionId": "3d15163b-11d8-412f-b808-795c9b2c3a3a", + "name": "Intruder", + "dockerRepository": "airbyte/source-intruder", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/intruder", + "icon": "intruder.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/intruder", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Intruder Spec", + "type": "object", + "required": ["access_token"], + "additionalProperties": true, + "properties": { + "access_token": { + "title": "API Access token", + "type": "string", + "description": "Your API Access token. See here.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "2e875208-0c0b-4ee4-9e92-1cb3156ea799", + "name": "Iterable", + "dockerRepository": "airbyte/source-iterable", + "dockerImageTag": "0.1.27", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/iterable", + "icon": "iterable.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/iterable", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Iterable Spec", + "type": "object", + "required": ["start_date", "api_key"], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "title": "API Key", + "description": "Iterable API Key. See the docs for more information on how to obtain this key.", + "airbyte_secret": true, + "order": 0 + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "The date from which you'd like to replicate data for Iterable, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", + "examples": ["2021-04-01T00:00:00Z"], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "order": 1, + "format": "date-time" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["api.iterable.com"] + } + }, + { + "sourceDefinitionId": "d6f73702-d7a0-4e95-9758-b0fb1af0bfba", + "name": "Jenkins", + "dockerRepository": "farosai/airbyte-jenkins-source", + "dockerImageTag": "0.1.23", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/jenkins", + "icon": "jenkins.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.faros.ai", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Jenkins Spec", + "type": "object", + "required": ["server_url", "user", "token"], + "additionalProperties": false, + "properties": { + "server_url": { + "type": "string", + "title": "Jenkins Server URL", + "examples": ["https://my-jenkins-server.example.com"] + }, + "user": { + "type": "string", + "description": "Jenkins User" + }, + "token": { + "type": "string", + "title": "Jenkins Token", + "airbyte_secret": true + }, + "depth": { + "type": "number", + "title": "Depth", + "description": "Jenkins JSON API does not support deep scan, it is required to generate a suitable tree for the corresponding depth. Job in some cases have many sub jobs, depth needs to quantify how many sub jobs are showed. If depth is not provided we will try to compute it automatically" + }, + "pageSize": { + "type": "integer", + "minimum": 1, + "default": 10, + "title": "Page Size", + "description": "Quantity of jobs on a single page fetched from Jenkins" + }, + "last100Builds": { + "type": "boolean", + "default": false, + "title": "Last 100 Builds Only", + "description": "Fetch only 100 last builds from Jenkins server" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "68e63de2-bb83-4c7e-93fa-a8a9051e3993", + "name": "Jira", + "dockerRepository": "airbyte/source-jira", + "dockerImageTag": "0.3.7", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/jira", + "icon": "jira.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/jira", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Jira Spec", + "type": "object", + "required": ["api_token", "domain", "email"], + "additionalProperties": true, + "properties": { + "api_token": { + "type": "string", + "title": "API Token", + "description": "Jira API Token. See the docs for more information on how to generate this key.", + "airbyte_secret": true, + "order": 0 + }, + "domain": { + "type": "string", + "title": "Domain", + "examples": [ + ".atlassian.net", + ".jira.com", + "jira..com" + ], + "description": "The Domain for your Jira account, e.g. airbyteio.atlassian.net, airbyteio.jira.com, jira.your-domain.com", + "order": 1 + }, + "email": { + "type": "string", + "title": "Email", + "description": "The user email for your Jira account.", + "order": 2 + }, + "projects": { + "type": "array", + "title": "Projects", + "items": { + "type": "string" + }, + "examples": ["PROJ1", "PROJ2"], + "description": "List of Jira project keys to replicate data for.", + "order": 3 + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "The date from which you want to replicate data from Jira, use the format YYYY-MM-DDT00:00:00Z. Note that this field only applies to certain streams, and only data generated on or after the start date will be replicated. For more information, refer to the documentation.", + "examples": ["2021-03-01T00:00:00Z"], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "format": "date-time", + "order": 4 + }, + "expand_issue_changelog": { + "type": "boolean", + "title": "Expand Issue Changelog", + "description": "Expand the changelog when replicating issues.", + "default": false, + "order": 5 + }, + "render_fields": { + "type": "boolean", + "title": "Render Issue Fields", + "description": "Render issue fields in HTML format in addition to Jira JSON-like format.", + "default": false, + "order": 6 + }, + "enable_experimental_streams": { + "type": "boolean", + "title": "Enable Experimental Streams", + "description": "Allow the use of experimental streams which rely on undocumented Jira API endpoints. See https://docs.airbyte.com/integrations/sources/jira#experimental-tables for more info.", + "default": false, + "order": 7 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": ["${domain}"] + }, + "maxSecondsBetweenMessages": 21600 + }, + { + "sourceDefinitionId": "e300ece7-b073-43a3-852e-8aff36a57f13", + "name": "K6 Cloud", + "dockerRepository": "airbyte/source-k6-cloud", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/k6-cloud", + "icon": "k6cloud.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/k6-cloud", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "K6 Cloud Spec", + "type": "object", + "required": ["api_token"], + "additionalProperties": true, + "properties": { + "api_token": { + "title": "Api Token", + "type": "string", + "description": "Your API Token. See here. The key is case sensitive.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "d917a47b-8537-4d0d-8c10-36a9928d4265", + "name": "Kafka", + "dockerRepository": "airbyte/source-kafka", + "dockerImageTag": "0.2.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/kafka", + "icon": "kafka.svg", + "sourceType": "database", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/kafka", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Kafka Source Spec", + "type": "object", + "required": ["bootstrap_servers", "subscription", "protocol"], + "additionalProperties": true, + "properties": { + "MessageFormat": { + "title": "MessageFormat", + "type": "object", + "description": "The serialization used based on this ", + "oneOf": [ + { + "title": "JSON", + "properties": { + "deserialization_type": { + "type": "string", + "const": "JSON" + } + } + }, + { + "title": "AVRO", + "properties": { + "deserialization_type": { + "const": "AVRO" + }, + "deserialization_strategy": { + "type": "string", + "enum": [ + "TopicNameStrategy", + "RecordNameStrategy", + "TopicRecordNameStrategy" + ], + "default": "TopicNameStrategy" + }, + "schema_registry_url": { + "type": "string", + "examples": ["http://localhost:8081"] + }, + "schema_registry_username": { + "type": "string", + "default": "" + }, + "schema_registry_password": { + "type": "string", + "default": "" + } + } + } + ] + }, + "bootstrap_servers": { + "title": "Bootstrap Servers", + "description": "A list of host/port pairs to use for establishing the initial connection to the Kafka cluster. The client will make use of all servers irrespective of which servers are specified here for bootstrapping—this list only impacts the initial hosts used to discover the full set of servers. This list should be in the form host1:port1,host2:port2,.... Since these servers are just used for the initial connection to discover the full cluster membership (which may change dynamically), this list need not contain the full set of servers (you may want more than one, though, in case a server is down).", + "type": "string", + "examples": ["kafka-broker1:9092,kafka-broker2:9092"] + }, + "subscription": { + "title": "Subscription Method", + "type": "object", + "description": "You can choose to manually assign a list of partitions, or subscribe to all topics matching specified pattern to get dynamically assigned partitions.", + "oneOf": [ + { + "title": "Manually assign a list of partitions", + "required": ["subscription_type", "topic_partitions"], + "properties": { + "subscription_type": { + "description": "Manually assign a list of partitions to this consumer. This interface does not allow for incremental assignment and will replace the previous assignment (if there is one).\nIf the given list of topic partitions is empty, it is treated the same as unsubscribe().", + "type": "string", + "const": "assign" + }, + "topic_partitions": { + "title": "List of topic:partition Pairs", + "type": "string", + "examples": ["sample.topic:0, sample.topic:1"] + } + } + }, + { + "title": "Subscribe to all topics matching specified pattern", + "required": ["subscription_type", "topic_pattern"], + "properties": { + "subscription_type": { + "description": "The Topic pattern from which the records will be read.", + "type": "string", + "const": "subscribe" + }, + "topic_pattern": { + "title": "Topic Pattern", + "type": "string", + "examples": ["sample.topic"] + } + } + } + ] + }, + "test_topic": { + "title": "Test Topic", + "description": "The Topic to test in case the Airbyte can consume messages.", + "type": "string", + "examples": ["test.topic"] + }, + "group_id": { + "title": "Group ID", + "description": "The Group ID is how you distinguish different consumer groups.", + "type": "string", + "examples": ["group.id"] + }, + "max_poll_records": { + "title": "Max Poll Records", + "description": "The maximum number of records returned in a single call to poll(). Note, that max_poll_records does not impact the underlying fetching behavior. The consumer will cache the records from each fetch request and returns them incrementally from each poll.", + "type": "integer", + "default": 500 + }, + "polling_time": { + "title": "Polling Time", + "description": "Amount of time Kafka connector should try to poll for messages.", + "type": "integer", + "default": 100 + }, + "protocol": { + "title": "Protocol", + "type": "object", + "description": "The Protocol used to communicate with brokers.", + "oneOf": [ + { + "title": "PLAINTEXT", + "required": ["security_protocol"], + "properties": { + "security_protocol": { + "type": "string", + "const": "PLAINTEXT" + } + } + }, + { + "title": "SASL PLAINTEXT", + "required": [ + "security_protocol", + "sasl_mechanism", + "sasl_jaas_config" + ], + "properties": { + "security_protocol": { + "type": "string", + "const": "SASL_PLAINTEXT" + }, + "sasl_mechanism": { + "title": "SASL Mechanism", + "description": "The SASL mechanism used for client connections. This may be any mechanism for which a security provider is available.", + "type": "string", + "const": "PLAIN" + }, + "sasl_jaas_config": { + "title": "SASL JAAS Config", + "description": "The JAAS login context parameters for SASL connections in the format used by JAAS configuration files.", + "type": "string", + "default": "", + "airbyte_secret": true + } + } + }, + { + "title": "SASL SSL", + "required": [ + "security_protocol", + "sasl_mechanism", + "sasl_jaas_config" + ], + "properties": { + "security_protocol": { + "type": "string", + "const": "SASL_SSL" + }, + "sasl_mechanism": { + "title": "SASL Mechanism", + "description": "The SASL mechanism used for client connections. This may be any mechanism for which a security provider is available.", + "type": "string", + "default": "GSSAPI", + "enum": [ + "GSSAPI", + "OAUTHBEARER", + "SCRAM-SHA-256", + "SCRAM-SHA-512", + "PLAIN" + ] + }, + "sasl_jaas_config": { + "title": "SASL JAAS Config", + "description": "The JAAS login context parameters for SASL connections in the format used by JAAS configuration files.", + "type": "string", + "default": "", + "airbyte_secret": true + } + } + } + ] + }, + "client_id": { + "title": "Client ID", + "description": "An ID string to pass to the server when making requests. The purpose of this is to be able to track the source of requests beyond just ip/port by allowing a logical application name to be included in server-side request logging.", + "type": "string", + "examples": ["airbyte-consumer"] + }, + "enable_auto_commit": { + "title": "Enable Auto Commit", + "description": "If true, the consumer's offset will be periodically committed in the background.", + "type": "boolean", + "default": true + }, + "auto_commit_interval_ms": { + "title": "Auto Commit Interval, ms", + "description": "The frequency in milliseconds that the consumer offsets are auto-committed to Kafka if enable.auto.commit is set to true.", + "type": "integer", + "default": 5000 + }, + "client_dns_lookup": { + "title": "Client DNS Lookup", + "description": "Controls how the client uses DNS lookups. If set to use_all_dns_ips, connect to each returned IP address in sequence until a successful connection is established. After a disconnection, the next IP is used. Once all IPs have been used once, the client resolves the IP(s) from the hostname again. If set to resolve_canonical_bootstrap_servers_only, resolve each bootstrap address into a list of canonical names. After the bootstrap phase, this behaves the same as use_all_dns_ips. If set to default (deprecated), attempt to connect to the first IP address returned by the lookup, even if the lookup returns multiple IP addresses.", + "type": "string", + "default": "use_all_dns_ips", + "enum": [ + "default", + "use_all_dns_ips", + "resolve_canonical_bootstrap_servers_only" + ] + }, + "retry_backoff_ms": { + "title": "Retry Backoff, ms", + "description": "The amount of time to wait before attempting to retry a failed request to a given topic partition. This avoids repeatedly sending requests in a tight loop under some failure scenarios.", + "type": "integer", + "default": 100 + }, + "request_timeout_ms": { + "title": "Request Timeout, ms", + "description": "The configuration controls the maximum amount of time the client will wait for the response of a request. If the response is not received before the timeout elapses the client will resend the request if necessary or fail the request if retries are exhausted.", + "type": "integer", + "default": 30000 + }, + "receive_buffer_bytes": { + "title": "Receive Buffer, bytes", + "description": "The size of the TCP receive buffer (SO_RCVBUF) to use when reading data. If the value is -1, the OS default will be used.", + "type": "integer", + "default": 32768 + }, + "auto_offset_reset": { + "title": "Auto Offset Reset", + "description": "What to do when there is no initial offset in Kafka or if the current offset does not exist any more on the server - earliest: automatically reset the offset to the earliest offset, latest: automatically reset the offset to the latest offset, none: throw exception to the consumer if no previous offset is found for the consumer's group, anything else: throw exception to the consumer.", + "type": "string", + "default": "latest", + "enum": ["latest", "earliest", "none"] + }, + "repeated_calls": { + "title": "Repeated Calls", + "description": "The number of repeated calls to poll() if no messages were received.", + "type": "integer", + "default": 3 + }, + "max_records_process": { + "title": "Maximum Records", + "description": "The Maximum to be processed per execution", + "type": "integer", + "default": 100000 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "supported_source_sync_modes": ["append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "60c24725-00ae-490c-991d-55b78c3197e0", + "name": "Klarna", + "dockerRepository": "airbyte/source-klarna", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/klarna", + "icon": "klarna.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/klarna", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Klarna Spec", + "type": "object", + "required": ["region", "playground", "username", "password"], + "additionalProperties": true, + "properties": { + "region": { + "title": "Region", + "type": "string", + "enum": ["eu", "us", "oc"], + "description": "Base url region (For playground eu https://docs.klarna.com/klarna-payments/api/payments-api/#tag/API-URLs). Supported 'eu', 'us', 'oc'" + }, + "playground": { + "title": "Playground", + "type": "boolean", + "description": "Propertie defining if connector is used against playground or production environment", + "default": false + }, + "username": { + "title": "Username", + "type": "string", + "description": "Consists of your Merchant ID (eid) - a unique number that identifies your e-store, combined with a random string (https://developers.klarna.com/api/#authentication)" + }, + "password": { + "title": "Password", + "type": "string", + "description": "A string which is associated with your Merchant ID and is used to authorize use of Klarna's APIs (https://developers.klarna.com/api/#authentication)", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "95e8cffd-b8c4-4039-968e-d32fb4a69bde", + "name": "Klaviyo", + "dockerRepository": "airbyte/source-klaviyo", + "dockerImageTag": "0.3.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/klaviyo", + "icon": "klaviyo.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/klaviyo", + "changelogUrl": "https://docs.airbyte.com/integrations/sources/klaviyo", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Klaviyo Spec", + "type": "object", + "properties": { + "api_key": { + "title": "Api Key", + "description": "Klaviyo API Key. See our docs if you need help finding this key.", + "airbyte_secret": true, + "type": "string" + }, + "start_date": { + "title": "Start Date", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": ["2017-01-25T00:00:00Z"], + "type": "string", + "format": "date-time" + } + }, + "required": ["api_key", "start_date"] + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["a.klaviyo.com", "klaviyo.com"] + } + }, + { + "sourceDefinitionId": "547dc08e-ab51-421d-953b-8f3745201a8c", + "name": "Kyriba", + "dockerRepository": "airbyte/source-kyriba", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/kyriba", + "icon": "kyriba.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Kyriba Spec", + "type": "object", + "required": ["domain", "username", "password", "start_date"], + "additionalProperties": false, + "properties": { + "domain": { + "type": "string", + "description": "Kyriba domain", + "title": "Domain", + "examples": ["demo.kyriba.com"], + "pattern": "^[a-zA-Z0-9._-]*\\.[a-zA-Z0-9._-]*\\.[a-z]*" + }, + "username": { + "type": "string", + "description": "Username to be used in basic auth", + "title": "Username" + }, + "password": { + "type": "string", + "description": "Password to be used in basic auth", + "title": "Password", + "airbyte_secret": true + }, + "start_date": { + "type": "string", + "description": "The date the sync should start from.", + "title": "Start Date", + "examples": ["2021-01-10"], + "pattern": "^\\d{4}\\-(0[1-9]|1[012])\\-(0[1-9]|[12][0-9]|3[01])$" + }, + "end_date": { + "type": "string", + "description": "The date the sync should end. If let empty the sync will run to the current date.", + "title": "End Date", + "examples": ["2022-03-01"], + "pattern": "^(?:(\\d{4}\\-(0[1-9]|1[012])\\-(0[1-9]|[12][0-9]|3[01]))|)$" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "f96bb511-5e3c-48fc-b408-547953cd81a4", + "name": "LaunchDarkly", + "dockerRepository": "airbyte/source-launchdarkly", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/launchdarkly", + "icon": "launchdarkly.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/launchdarkly", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Launchdarkly Spec", + "type": "object", + "required": ["access_token"], + "additionalProperties": true, + "properties": { + "access_token": { + "title": "Access token", + "type": "string", + "description": "Your Access token. See here.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "789f8e7a-2d28-11ec-8d3d-0242ac130003", + "name": "Lemlist", + "dockerRepository": "airbyte/source-lemlist", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/lemlist", + "icon": "lemlist.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/lemlist", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Lemlist Spec", + "type": "object", + "required": ["api_key"], + "additionalProperties": false, + "properties": { + "api_key": { + "type": "string", + "title": "API key", + "description": "Lemlist API key.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "3981c999-bd7d-4afc-849b-e53dea90c948", + "name": "Lever Hiring", + "dockerRepository": "airbyte/source-lever-hiring", + "dockerImageTag": "0.1.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/lever-hiring", + "icon": "leverhiring.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/lever-hiring", + "changelogUrl": "https://docs.airbyte.com/integrations/sources/lever-hiring#changelog", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Lever Hiring Source Spec", + "type": "object", + "required": ["start_date"], + "additionalProperties": true, + "properties": { + "credentials": { + "order": 3, + "title": "Authentication Mechanism", + "description": "Choose how to authenticate to Lever Hiring.", + "type": "object", + "oneOf": [ + { + "type": "object", + "title": "Authenticate via Lever (OAuth)", + "required": ["refresh_token"], + "properties": { + "auth_type": { + "type": "string", + "const": "Client", + "order": 0 + }, + "client_id": { + "title": "Client ID", + "type": "string", + "description": "The Client ID of your Lever Hiring developer application." + }, + "client_secret": { + "title": "Client Secret", + "type": "string", + "description": "The Client Secret of your Lever Hiring developer application.", + "airbyte_secret": true + }, + "refresh_token": { + "type": "string", + "title": "Refresh Token", + "description": "The token for obtaining new access token.", + "airbyte_secret": true + } + } + }, + { + "type": "object", + "title": "Authenticate via Lever (Api Key)", + "required": ["api_key"], + "properties": { + "auth_type": { + "type": "string", + "const": "Api Key", + "order": 0 + }, + "api_key": { + "title": "Api key", + "type": "string", + "description": "The Api Key of your Lever Hiring account.", + "airbyte_secret": true, + "order": 1 + } + } + } + ] + }, + "start_date": { + "order": 0, + "type": "string", + "title": "Start Date", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated. Note that it will be used only in the following incremental streams: comments, commits, and issues.", + "examples": ["2021-03-01T00:00:00Z"], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$" + }, + "environment": { + "order": 1, + "type": "string", + "title": "Environment", + "description": "The environment in which you'd like to replicate data for Lever. This is used to determine which Lever API endpoint to use.", + "default": "Sandbox", + "enum": ["Production", "Sandbox"] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": ["credentials", "0"], + "oauthFlowInitParameters": [["client_id"], ["client_secret"]], + "oauthFlowOutputParameters": [["refresh_token"]] + } + }, + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": ["credentials", "auth_type"], + "predicate_value": "Client", + "oauth_config_specification": { + "oauth_user_input_from_connector_config_specification": { + "type": "object", + "properties": { + "environment": { + "type": "string", + "path_in_connector_config": ["environment"] + } + } + }, + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "refresh_token": { + "type": "string", + "path_in_connector_config": ["credentials", "refresh_token"] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": ["credentials", "client_id"] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": ["credentials", "client_secret"] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "137ece28-5434-455c-8f34-69dc3782f451", + "name": "LinkedIn Ads", + "dockerRepository": "airbyte/source-linkedin-ads", + "dockerImageTag": "0.1.15", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/linkedin-ads", + "icon": "linkedin.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/linkedin-ads", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Linkedin Ads Spec", + "type": "object", + "required": ["start_date"], + "additionalProperties": true, + "properties": { + "credentials": { + "title": "Authentication", + "type": "object", + "oneOf": [ + { + "type": "object", + "title": "OAuth2.0", + "required": ["client_id", "client_secret", "refresh_token"], + "properties": { + "auth_method": { + "type": "string", + "const": "oAuth2.0" + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "The client ID of the LinkedIn Ads developer application.", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "title": "Client secret", + "description": "The client secret the LinkedIn Ads developer application.", + "airbyte_secret": true + }, + "refresh_token": { + "type": "string", + "title": "Refresh token", + "description": "The key to refresh the expired access token.", + "airbyte_secret": true + } + } + }, + { + "title": "Access token", + "type": "object", + "required": ["access_token"], + "properties": { + "auth_method": { + "type": "string", + "const": "access_token" + }, + "access_token": { + "type": "string", + "title": "Access token", + "description": "The token value generated using the authentication code. See the docs to obtain yours.", + "airbyte_secret": true + } + } + } + ] + }, + "start_date": { + "type": "string", + "title": "Start date", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "description": "UTC date in the format 2020-09-17. Any data before this date will not be replicated.", + "examples": ["2021-05-17"], + "format": "date" + }, + "account_ids": { + "title": "Account IDs", + "type": "array", + "description": "Specify the account IDs separated by a space, to pull the data from. Leave empty, if you want to pull the data from all associated accounts. See the LinkedIn Ads docs for more info.", + "items": { + "type": "integer" + }, + "default": [] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": ["credentials", "0"], + "oauthFlowInitParameters": [["client_id"], ["client_secret"]], + "oauthFlowOutputParameters": [["refresh_token"]] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["api.linkedin.com"] + }, + "maxSecondsBetweenMessages": 21600 + }, + { + "sourceDefinitionId": "af54297c-e8f8-4d63-a00d-a94695acc9d3", + "name": "LinkedIn Pages", + "dockerRepository": "airbyte/source-linkedin-pages", + "dockerImageTag": "1.0.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/linkedin-pages", + "icon": "linkedin.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/linkedin-pages/", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Linkedin Pages Spec", + "type": "object", + "required": ["org_id"], + "additionalProperties": true, + "properties": { + "org_id": { + "title": "Organization ID", + "type": "string", + "airbyte_secret": true, + "description": "Specify the Organization ID", + "examples": ["123456789"] + }, + "credentials": { + "title": "Authentication", + "type": "object", + "oneOf": [ + { + "type": "object", + "title": "OAuth2.0", + "required": ["client_id", "client_secret", "refresh_token"], + "properties": { + "auth_method": { + "type": "string", + "const": "oAuth2.0" + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "The client ID of the LinkedIn developer application.", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "title": "Client secret", + "description": "The client secret of the LinkedIn developer application.", + "airbyte_secret": true + }, + "refresh_token": { + "type": "string", + "title": "Refresh token", + "description": "The token value generated using the LinkedIn Developers OAuth Token Tools. See the docs to obtain yours.", + "airbyte_secret": true + } + } + }, + { + "title": "Access token", + "type": "object", + "required": ["access_token"], + "properties": { + "auth_method": { + "type": "string", + "const": "access_token" + }, + "access_token": { + "type": "string", + "title": "Access token", + "description": "The token value generated using the LinkedIn Developers OAuth Token Tools. See the docs to obtain yours.", + "airbyte_secret": true + } + } + } + ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "7b86879e-26c5-4ef6-a5ce-2be5c7b46d1e", + "name": "Linnworks", + "dockerRepository": "airbyte/source-linnworks", + "dockerImageTag": "0.1.5", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/linnworks", + "icon": "linnworks.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/linnworks", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Linnworks Spec", + "type": "object", + "required": [ + "application_id", + "application_secret", + "token", + "start_date" + ], + "additionalProperties": false, + "properties": { + "application_id": { + "title": "Application ID.", + "description": "Linnworks Application ID", + "type": "string" + }, + "application_secret": { + "title": "Application Secret", + "description": "Linnworks Application Secret", + "type": "string", + "airbyte_secret": true + }, + "token": { + "title": "API Token", + "type": "string" + }, + "start_date": { + "title": "Start Date", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", + "type": "string", + "format": "date-time" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "45e0b135-615c-40ac-b38e-e65b0944197f", + "name": "Lokalise", + "dockerRepository": "airbyte/source-lokalise", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/lokalise", + "icon": "lokalise.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/lokalise", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Lokalise Spec", + "type": "object", + "required": ["api_key", "project_id"], + "additionalProperties": true, + "properties": { + "api_key": { + "title": "API Key", + "type": "string", + "description": "Lokalise API Key with read-access. Available at Profile settings > API tokens. See here.", + "airbyte_secret": true + }, + "project_id": { + "title": "Project Id", + "type": "string", + "description": "Lokalise project ID. Available at Project Settings > General." + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "00405b19-9768-4e0c-b1ae-9fc2ee2b2a8c", + "name": "Looker", + "dockerRepository": "airbyte/source-looker", + "dockerImageTag": "0.2.8", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/looker", + "icon": "looker.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/looker", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Looker Spec", + "type": "object", + "required": ["domain", "client_id", "client_secret"], + "additionalProperties": true, + "properties": { + "domain": { + "type": "string", + "title": "Domain", + "examples": [ + "domainname.looker.com", + "looker.clientname.com", + "123.123.124.123:8000" + ], + "description": "Domain for your Looker account, e.g. airbyte.cloud.looker.com,looker.[clientname].com,IP address" + }, + "client_id": { + "title": "Client ID", + "type": "string", + "description": "The Client ID is first part of an API3 key that is specific to each Looker user. See the docs for more information on how to generate this key." + }, + "client_secret": { + "title": "Client Secret", + "type": "string", + "description": "The Client Secret is second part of an API3 key.", + "airbyte_secret": true + }, + "run_look_ids": { + "title": "Look IDs to Run", + "type": "array", + "items": { + "type": "string", + "pattern": "^[0-9]*$" + }, + "description": "The IDs of any Looks to run" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "b03a9f3e-22a5-11eb-adc1-0242ac120002", + "name": "Mailchimp", + "dockerRepository": "airbyte/source-mailchimp", + "dockerImageTag": "0.4.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailchimp", + "icon": "mailchimp.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailchimp", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Mailchimp Spec", + "type": "object", + "required": [], + "additionalProperties": true, + "properties": { + "credentials": { + "type": "object", + "title": "Authentication", + "oneOf": [ + { + "title": "OAuth2.0", + "type": "object", + "required": ["auth_type", "access_token"], + "properties": { + "auth_type": { + "type": "string", + "const": "oauth2.0", + "order": 0 + }, + "client_id": { + "title": "Client ID", + "type": "string", + "description": "The Client ID of your OAuth application.", + "airbyte_secret": true + }, + "client_secret": { + "title": "Client Secret", + "type": "string", + "description": "The Client Secret of your OAuth application.", + "airbyte_secret": true + }, + "access_token": { + "title": "Access Token", + "type": "string", + "description": "An access token generated using the above client ID and secret.", + "airbyte_secret": true + } + } + }, + { + "type": "object", + "title": "API Key", + "required": ["auth_type", "apikey"], + "properties": { + "auth_type": { + "type": "string", + "const": "apikey", + "order": 1 + }, + "apikey": { + "type": "string", + "title": "API Key", + "description": "Mailchimp API Key. See the docs for information on how to generate this key.", + "airbyte_secret": true + } + } + } + ] + }, + "campaign_id": { + "type": "string", + "title": "ID of a campaign to sync email activities", + "airbyte_hidden": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": ["credentials", "auth_type"], + "predicate_value": "oauth2.0", + "oauth_config_specification": { + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "access_token": { + "type": "string", + "path_in_connector_config": ["credentials", "access_token"] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": ["credentials", "client_id"] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": ["credentials", "client_secret"] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["*.api.mailchimp.com"] + } + }, + { + "sourceDefinitionId": "56582331-5de2-476b-b913-5798de77bbdf", + "name": "Mailjet Mail", + "dockerRepository": "airbyte/source-mailjet-mail", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailjet-mail", + "icon": "mailjetmail.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailjet-mail", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Mailjet Mail Spec", + "type": "object", + "required": ["api_key", "api_key_secret"], + "additionalProperties": true, + "properties": { + "api_key": { + "title": "API Key", + "type": "string", + "description": "Your API Key. See here." + }, + "api_key_secret": { + "title": "API Secret Key", + "type": "string", + "description": "Your API Secret Key. See here.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "6ec2acea-7fd1-4378-b403-41a666e0c028", + "name": "Mailjet SMS", + "dockerRepository": "airbyte/source-mailjet-sms", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailjet-sms", + "icon": "mailjetsms.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailjet-sms", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Mailjet Sms Spec", + "type": "object", + "required": ["token"], + "additionalProperties": true, + "properties": { + "token": { + "title": "Access Token", + "type": "string", + "description": "Your access token. See here.", + "airbyte_secret": true + }, + "start_date": { + "title": "Start date", + "type": "integer", + "description": "Retrieve SMS messages created after the specified timestamp. Required format - Unix timestamp.", + "pattern": "^[0-9]*$", + "examples": [1666261656] + }, + "end_date": { + "title": "End date", + "type": "integer", + "description": "Retrieve SMS messages created before the specified timestamp. Required format - Unix timestamp.", + "pattern": "^[0-9]*$", + "examples": [1666281656] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "dc3b9003-2432-4e93-a7f4-4620b0f14674", + "name": "MailerLite", + "dockerRepository": "airbyte/source-mailerlite", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailerlite", + "icon": "mailerlite.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailerlite", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Mailerlite Spec", + "type": "object", + "required": ["api_token"], + "additionalProperties": true, + "properties": { + "api_token": { + "type": "string", + "description": "Your API Token. See here.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "2707d529-3c04-46eb-9c7e-40d4038df6f7", + "name": "MailerSend", + "dockerRepository": "airbyte/source-mailersend", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailersend", + "icon": "mailersend.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailersend", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Mailersend Spec", + "type": "object", + "required": ["api_token", "domain_id"], + "additionalProperties": true, + "properties": { + "api_token": { + "type": "string", + "description": "Your API Token. See here.", + "airbyte_secret": true + }, + "domain_id": { + "type": "string", + "description": "The domain entity in mailersend", + "examples": ["airbyte.com", "linkana.com"] + }, + "start_date": { + "type": "number", + "description": "Timestamp is assumed to be UTC.", + "examples": [123131321] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "5b9cb09e-1003-4f9c-983d-5779d1b2cd51", + "name": "Mailgun", + "dockerRepository": "airbyte/source-mailgun", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailgun", + "icon": "mailgun.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mailgun", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Source Mailgun Spec", + "type": "object", + "required": ["private_key"], + "additionalProperties": true, + "properties": { + "private_key": { + "type": "string", + "airbyte_secret": true, + "description": "Primary account API key to access your Mailgun data.", + "title": "Private API Key" + }, + "domain_region": { + "type": "string", + "description": "Domain region code. 'EU' or 'US' are possible values. The default is 'US'.", + "title": "Domain Region Code" + }, + "start_date": { + "title": "Replication Start Date", + "description": "UTC date and time in the format 2020-10-01 00:00:00. Any data before this date will not be replicated. If omitted, defaults to 3 days ago.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}$", + "examples": ["2020-10-01 00:00:00"], + "type": "string", + "format": "date-time" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "9e0556f4-69df-4522-a3fb-03264d36b348", + "name": "Marketo", + "dockerRepository": "airbyte/source-marketo", + "dockerImageTag": "1.0.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/marketo", + "icon": "marketo.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/marketo", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Source Marketo Spec", + "type": "object", + "required": [ + "domain_url", + "client_id", + "client_secret", + "start_date" + ], + "additionalProperties": true, + "properties": { + "domain_url": { + "title": "Domain URL", + "type": "string", + "order": 3, + "description": "Your Marketo Base URL. See the docs for info on how to obtain this.", + "examples": ["https://000-AAA-000.mktorest.com"], + "airbyte_secret": true + }, + "client_id": { + "title": "Client ID", + "type": "string", + "description": "The Client ID of your Marketo developer application. See the docs for info on how to obtain this.", + "order": 0, + "airbyte_secret": true + }, + "client_secret": { + "title": "Client Secret", + "type": "string", + "description": "The Client Secret of your Marketo developer application. See the docs for info on how to obtain this.", + "order": 1, + "airbyte_secret": true + }, + "start_date": { + "title": "Start Date", + "type": "string", + "order": 2, + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", + "examples": ["2020-09-25T00:00:00Z"], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "format": "date-time" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["*.mktorest.com"] + } + }, + { + "sourceDefinitionId": "c7cb421b-942e-4468-99ee-e369bcabaec5", + "name": "Metabase", + "dockerRepository": "airbyte/source-metabase", + "dockerImageTag": "0.3.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/metabase", + "icon": "metabase.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/metabase", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Metabase Source Spec", + "type": "object", + "required": ["instance_api_url"], + "additionalProperties": true, + "properties": { + "instance_api_url": { + "type": "string", + "title": "Metabase Instance API URL", + "description": "URL to your metabase instance API", + "examples": ["https://localhost:3000/api/"], + "pattern": "^https://", + "order": 0 + }, + "username": { + "type": "string", + "order": 1 + }, + "password": { + "type": "string", + "airbyte_secret": true, + "order": 2 + }, + "session_token": { + "type": "string", + "description": "To generate your session token, you need to run the following command: ``` curl -X POST \\\n -H \"Content-Type: application/json\" \\\n -d '{\"username\": \"person@metabase.com\", \"password\": \"fakepassword\"}' \\\n http://localhost:3000/api/session\n``` Then copy the value of the `id` field returned by a successful call to that API.\nNote that by default, sessions are good for 14 days and needs to be regenerated.", + "airbyte_secret": true, + "order": 3 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta" + }, + { + "sourceDefinitionId": "b5ea17b1-f170-46dc-bc31-cc744ca984c1", + "name": "Microsoft SQL Server (MSSQL)", + "dockerRepository": "airbyte/source-mssql", + "dockerImageTag": "1.0.14", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mssql", + "icon": "mssql.svg", + "sourceType": "database", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/mssql", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "MSSQL Source Spec", + "type": "object", + "required": ["host", "port", "database", "username"], + "properties": { + "host": { + "description": "The hostname of the database.", + "title": "Host", + "type": "string", + "order": 0 + }, + "port": { + "description": "The port of the database.", + "title": "Port", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "examples": ["1433"], + "order": 1 + }, + "database": { + "description": "The name of the database.", + "title": "Database", + "type": "string", + "examples": ["master"], + "order": 2 + }, + "schemas": { + "title": "Schemas", + "description": "The list of schemas to sync from. Defaults to user. Case sensitive.", + "type": "array", + "items": { + "type": "string" + }, + "minItems": 0, + "uniqueItems": true, + "default": ["dbo"], + "order": 3 + }, + "username": { + "description": "The username which is used to access the database.", + "title": "Username", + "type": "string", + "order": 4 + }, + "password": { + "description": "The password associated with the username.", + "title": "Password", + "type": "string", + "airbyte_secret": true, + "order": 5 + }, + "jdbc_url_params": { + "title": "JDBC URL Params", + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", + "type": "string", + "order": 6 + }, + "ssl_method": { + "title": "SSL Method", + "type": "object", + "description": "The encryption method which is used when communicating with the database.", + "order": 7, + "oneOf": [ + { + "title": "Unencrypted", + "description": "Data transfer will not be encrypted.", + "required": ["ssl_method"], + "properties": { + "ssl_method": { + "type": "string", + "const": "unencrypted" + } + } + }, + { + "title": "Encrypted (trust server certificate)", + "description": "Use the certificate provided by the server without verification. (For testing purposes only!)", + "required": ["ssl_method"], + "properties": { + "ssl_method": { + "type": "string", + "const": "encrypted_trust_server_certificate" + } + } + }, + { + "title": "Encrypted (verify certificate)", + "description": "Verify and use the certificate provided by the server.", + "required": [ + "ssl_method", + "trustStoreName", + "trustStorePassword" + ], + "properties": { + "ssl_method": { + "type": "string", + "const": "encrypted_verify_certificate" + }, + "hostNameInCertificate": { + "title": "Host Name In Certificate", + "type": "string", + "description": "Specifies the host name of the server. The value of this property must match the subject property of the certificate.", + "order": 7 + } + } + } + ] + }, + "replication_method": { + "type": "object", + "title": "Replication Method", + "description": "The replication method used for extracting data from the database. STANDARD replication requires no setup on the DB side but will not be able to represent deletions incrementally. CDC uses {TBC} to detect inserts, updates, and deletes. This needs to be configured on the source database itself.", + "default": "STANDARD", + "order": 8, + "oneOf": [ + { + "title": "Standard", + "description": "Standard replication requires no setup on the DB side but will not be able to represent deletions incrementally.", + "required": ["method"], + "properties": { + "method": { + "type": "string", + "const": "STANDARD", + "order": 0 + } + } + }, + { + "title": "Logical Replication (CDC)", + "description": "CDC uses {TBC} to detect inserts, updates, and deletes. This needs to be configured on the source database itself.", + "required": ["method"], + "properties": { + "method": { + "type": "string", + "const": "CDC", + "order": 0 + }, + "data_to_sync": { + "title": "Data to Sync", + "type": "string", + "default": "Existing and New", + "enum": ["Existing and New", "New Changes Only"], + "description": "What data should be synced under the CDC. \"Existing and New\" will read existing data as a snapshot, and sync new changes through CDC. \"New Changes Only\" will skip the initial snapshot, and only sync new changes through CDC.", + "order": 1 + }, + "snapshot_isolation": { + "title": "Initial Snapshot Isolation Level", + "type": "string", + "default": "Snapshot", + "enum": ["Snapshot", "Read Committed"], + "description": "Existing data in the database are synced through an initial snapshot. This parameter controls the isolation level that will be used during the initial snapshotting. If you choose the \"Snapshot\" level, you must enable the snapshot isolation mode on the database.", + "order": 2 + }, + "initial_waiting_seconds": { + "type": "integer", + "title": "Initial Waiting Time in Seconds (Advanced)", + "description": "The amount of time the connector will wait when it launches to determine if there is new data to sync or not. Defaults to 300 seconds. Valid range: 120 seconds to 1200 seconds. Read about initial waiting time.", + "default": 300, + "min": 120, + "max": 1200, + "order": 3 + } + } + } + ] + }, + "tunnel_method": { + "type": "object", + "title": "SSH Tunnel Method", + "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", + "oneOf": [ + { + "title": "No Tunnel", + "required": ["tunnel_method"], + "properties": { + "tunnel_method": { + "description": "No ssh tunnel needed to connect to database", + "type": "string", + "const": "NO_TUNNEL", + "order": 0 + } + } + }, + { + "title": "SSH Key Authentication", + "required": [ + "tunnel_method", + "tunnel_host", + "tunnel_port", + "tunnel_user", + "ssh_key" + ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": ["22"], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host.", + "type": "string", + "order": 3 + }, + "ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + }, + { + "title": "Password Authentication", + "required": [ + "tunnel_method", + "tunnel_host", + "tunnel_port", + "tunnel_user", + "tunnel_user_password" + ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": ["22"], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host", + "type": "string", + "order": 3 + }, + "tunnel_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 4 + } + } + } + ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": ["${host}", "${tunnel_method.tunnel_host}"] + } + }, + { + "sourceDefinitionId": "eaf50f04-21dd-4620-913b-2a83f5635227", + "name": "Microsoft teams", + "dockerRepository": "airbyte/source-microsoft-teams", + "dockerImageTag": "0.2.5", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/microsoft-teams", + "icon": "microsoft-teams.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/microsoft-teams", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Microsoft Teams Spec", + "type": "object", + "required": ["period"], + "additionalProperties": true, + "properties": { + "period": { + "type": "string", + "title": "Period", + "description": "Specifies the length of time over which the Team Device Report stream is aggregated. The supported values are: D7, D30, D90, and D180.", + "examples": ["D7"] + }, + "credentials": { + "title": "Authentication mechanism", + "description": "Choose how to authenticate to Microsoft", + "type": "object", + "oneOf": [ + { + "type": "object", + "title": "Authenticate via Microsoft (OAuth 2.0)", + "required": [ + "tenant_id", + "client_id", + "client_secret", + "refresh_token" + ], + "additionalProperties": false, + "properties": { + "auth_type": { + "type": "string", + "const": "Client", + "enum": ["Client"], + "default": "Client", + "order": 0 + }, + "tenant_id": { + "title": "Directory (tenant) ID", + "type": "string", + "description": "A globally unique identifier (GUID) that is different than your organization name or domain. Follow these steps to obtain: open one of the Teams where you belong inside the Teams Application -> Click on the … next to the Team title -> Click on Get link to team -> Copy the link to the team and grab the tenant ID form the URL" + }, + "client_id": { + "title": "Client ID", + "type": "string", + "description": "The Client ID of your Microsoft Teams developer application." + }, + "client_secret": { + "title": "Client Secret", + "type": "string", + "description": "The Client Secret of your Microsoft Teams developer application.", + "airbyte_secret": true + }, + "refresh_token": { + "title": "Refresh Token", + "type": "string", + "description": "A Refresh Token to renew the expired Access Token.", + "airbyte_secret": true + } + } + }, + { + "type": "object", + "title": "Authenticate via Microsoft", + "required": ["tenant_id", "client_id", "client_secret"], + "additionalProperties": false, + "properties": { + "auth_type": { + "type": "string", + "const": "Token", + "enum": ["Token"], + "default": "Token", + "order": 0 + }, + "tenant_id": { + "title": "Directory (tenant) ID", + "type": "string", + "description": "A globally unique identifier (GUID) that is different than your organization name or domain. Follow these steps to obtain: open one of the Teams where you belong inside the Teams Application -> Click on the … next to the Team title -> Click on Get link to team -> Copy the link to the team and grab the tenant ID form the URL" + }, + "client_id": { + "title": "Client ID", + "type": "string", + "description": "The Client ID of your Microsoft Teams developer application." + }, + "client_secret": { + "title": "Client Secret", + "type": "string", + "description": "The Client Secret of your Microsoft Teams developer application.", + "airbyte_secret": true + } + } + } + ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": ["credentials", "auth_type"], + "predicate_value": "Client", + "oauth_config_specification": { + "oauth_user_input_from_connector_config_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "tenant_id": { + "type": "string", + "path_in_connector_config": ["credentials", "tenant_id"] + } + } + }, + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "refresh_token": { + "type": "string", + "path_in_connector_config": ["credentials", "refresh_token"] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": ["credentials", "client_id"] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": ["credentials", "client_secret"] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "9220e3de-3b60-4bb2-a46f-046d59ea235a", + "name": "Microsoft Dataverse", + "dockerRepository": "airbyte/source-microsoft-dataverse", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/microsoft-dataverse", + "icon": "microsoftdataverse.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/microsoft-dataverse", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Microsoft Dataverse Spec", + "type": "object", + "required": ["url", "tenant_id", "client_id", "client_secret_value"], + "additionalProperties": true, + "properties": { + "url": { + "type": "string", + "description": "URL to Microsoft Dataverse API", + "title": "URL", + "examples": ["https://.crm.dynamics.com"], + "order": 0 + }, + "tenant_id": { + "type": "string", + "description": "Tenant Id of your Microsoft Dataverse Instance", + "title": "Tenant Id", + "airbyte_secret": true, + "order": 1 + }, + "client_id": { + "type": "string", + "description": "App Registration Client Id", + "title": "Client Id", + "airbyte_secret": true, + "order": 2 + }, + "client_secret_value": { + "type": "string", + "description": "App Registration Client Secret", + "title": "Client Secret", + "airbyte_secret": true, + "order": 3 + }, + "odata_maxpagesize": { + "type": "integer", + "description": "Max number of results per page. Default=5000", + "title": "Max page size", + "default": 5000, + "order": 4 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "12928b32-bf0a-4f1e-964f-07e12e37153a", + "name": "Mixpanel", + "dockerRepository": "airbyte/source-mixpanel", + "dockerImageTag": "0.1.31", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mixpanel", + "icon": "mixpanel.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mixpanel", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Source Mixpanel Spec", + "type": "object", + "properties": { + "credentials": { + "title": "Authentication *", + "description": "Choose how to authenticate to Mixpanel", + "type": "object", + "order": 0, + "oneOf": [ + { + "type": "object", + "title": "Service Account", + "required": ["username", "secret"], + "properties": { + "option_title": { + "type": "string", + "const": "Service Account", + "order": 0 + }, + "username": { + "order": 1, + "title": "Username", + "type": "string", + "description": "Mixpanel Service Account Username. See the docs for more information on how to obtain this." + }, + "secret": { + "order": 2, + "title": "Secret", + "type": "string", + "description": "Mixpanel Service Account Secret. See the docs for more information on how to obtain this.", + "airbyte_secret": true + } + } + }, + { + "type": "object", + "title": "Project Secret", + "required": ["api_secret"], + "properties": { + "option_title": { + "type": "string", + "const": "Project Secret", + "order": 0 + }, + "api_secret": { + "order": 1, + "title": "Project Secret", + "type": "string", + "description": "Mixpanel project secret. See the docs for more information on how to obtain this.", + "airbyte_secret": true + } + } + } + ] + }, + "project_id": { + "order": 1, + "title": "Project ID", + "description": "Your project ID number. See the docs for more information on how to obtain this.", + "type": "integer" + }, + "attribution_window": { + "order": 2, + "title": "Attribution Window", + "type": "integer", + "description": " A period of time for attributing results to ads and the lookback period after those actions occur during which ad results are counted. Default attribution window is 5 days.", + "default": 5 + }, + "project_timezone": { + "order": 3, + "title": "Project Timezone", + "type": "string", + "description": "Time zone in which integer date times are stored. The project timezone may be found in the project settings in the Mixpanel console.", + "default": "US/Pacific", + "examples": ["US/Pacific", "UTC"] + }, + "select_properties_by_default": { + "order": 4, + "title": "Select Properties By Default", + "type": "boolean", + "description": "Setting this config parameter to TRUE ensures that new properties on events and engage records are captured. Otherwise new properties will be ignored.", + "default": true + }, + "start_date": { + "order": 5, + "title": "Start Date", + "type": "string", + "description": "The date in the format YYYY-MM-DD. Any data before this date will not be replicated. If this option is not set, the connector will replicate data from up to one year ago by default.", + "examples": ["2021-11-16"], + "pattern": "^$|^[0-9]{4}-[0-9]{2}-[0-9]{2}(T[0-9]{2}:[0-9]{2}:[0-9]{2}Z)?$", + "format": "date-time" + }, + "end_date": { + "order": 6, + "title": "End Date", + "type": "string", + "description": "The date in the format YYYY-MM-DD. Any data after this date will not be replicated. Left empty to always sync to most recent date", + "examples": ["2021-11-16"], + "pattern": "^$|^[0-9]{4}-[0-9]{2}-[0-9]{2}(T[0-9]{2}:[0-9]{2}:[0-9]{2}Z)?$", + "format": "date-time" + }, + "region": { + "order": 7, + "title": "Region", + "description": "The region of mixpanel domain instance either US or EU.", + "type": "string", + "enum": ["US", "EU"], + "default": "US" + }, + "date_window_size": { + "order": 8, + "title": "Date slicing window", + "description": "Defines window size in days, that used to slice through data. You can reduce it, if amount of data in each window is too big for your environment.", + "type": "integer", + "minimum": 1, + "default": 30 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["mixpanel.com", "eu.mixpanel.com"] + } + }, + { + "sourceDefinitionId": "80a54ea2-9959-4040-aac1-eee42423ec9b", + "name": "Monday", + "dockerRepository": "airbyte/source-monday", + "dockerImageTag": "0.2.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/monday", + "icon": "monday.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/monday", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Monday Spec", + "type": "object", + "required": [], + "additionalProperties": true, + "properties": { + "credentials": { + "title": "Authorization Method", + "type": "object", + "oneOf": [ + { + "type": "object", + "title": "OAuth2.0", + "required": [ + "auth_type", + "client_id", + "client_secret", + "access_token" + ], + "properties": { + "subdomain": { + "type": "string", + "title": "Subdomain/Slug", + "description": "Slug/subdomain of the account, or the first part of the URL that comes before .monday.com", + "default": "", + "order": 0 + }, + "auth_type": { + "type": "string", + "const": "oauth2.0", + "order": 1 + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "The Client ID of your OAuth application.", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "The Client Secret of your OAuth application.", + "airbyte_secret": true + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "Access Token for making authenticated requests.", + "airbyte_secret": true + } + } + }, + { + "type": "object", + "title": "API Token", + "required": ["auth_type", "api_token"], + "properties": { + "auth_type": { + "type": "string", + "const": "api_token", + "order": 0 + }, + "api_token": { + "type": "string", + "title": "Personal API Token", + "description": "API Token for making authenticated requests.", + "airbyte_secret": true + } + } + } + ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": ["credentials", "auth_type"], + "predicate_value": "oauth2.0", + "oauth_config_specification": { + "oauth_user_input_from_connector_config_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "subdomain": { + "type": "string", + "path_in_connector_config": ["credentials", "subdomain"] + } + } + }, + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "access_token": { + "type": "string", + "path_in_connector_config": ["credentials", "access_token"] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": true, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": ["credentials", "client_id"] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": ["credentials", "client_secret"] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": ["api.monday.com"] + } + }, + { + "sourceDefinitionId": "b2e713cd-cc36-4c0a-b5bd-b47cb8a0561e", + "name": "MongoDb", + "dockerRepository": "airbyte/source-mongodb-v2", + "dockerImageTag": "0.1.19", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mongodb-v2", + "icon": "mongodb.svg", + "sourceType": "database", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mongodb-v2", + "changelogUrl": "https://docs.airbyte.com/integrations/sources/mongodb-v2", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "MongoDb Source Spec", + "type": "object", + "required": ["database"], + "additionalProperties": true, + "properties": { + "instance_type": { + "type": "object", + "title": "MongoDb Instance Type", + "description": "The MongoDb instance to connect to. For MongoDB Atlas and Replica Set TLS connection is used by default.", + "order": 0, + "oneOf": [ + { + "title": "Standalone MongoDb Instance", + "required": ["instance", "host", "port"], + "properties": { + "instance": { + "type": "string", + "enum": ["standalone"], + "default": "standalone" + }, + "host": { + "title": "Host", + "type": "string", + "description": "The host name of the Mongo database.", + "order": 0 + }, + "port": { + "title": "Port", + "type": "integer", + "description": "The port of the Mongo database.", + "minimum": 0, + "maximum": 65536, + "default": 27017, + "examples": ["27017"], + "order": 1 + }, + "tls": { + "title": "TLS Connection", + "type": "boolean", + "description": "Indicates whether TLS encryption protocol will be used to connect to MongoDB. It is recommended to use TLS connection if possible. For more information see documentation.", + "default": false, + "order": 2 + } + } + }, + { + "title": "Replica Set", + "required": ["instance", "server_addresses"], + "properties": { + "instance": { + "type": "string", + "enum": ["replica"], + "default": "replica" + }, + "server_addresses": { + "title": "Server Addresses", + "type": "string", + "description": "The members of a replica set. Please specify `host`:`port` of each member separated by comma.", + "examples": ["host1:27017,host2:27017,host3:27017"], + "order": 0 + }, + "replica_set": { + "title": "Replica Set", + "type": "string", + "description": "A replica set in MongoDB is a group of mongod processes that maintain the same data set.", + "order": 1 + } + } + }, + { + "title": "MongoDB Atlas", + "additionalProperties": false, + "required": ["instance", "cluster_url"], + "properties": { + "instance": { + "type": "string", + "enum": ["atlas"], + "default": "atlas" + }, + "cluster_url": { + "title": "Cluster URL", + "type": "string", + "description": "The URL of a cluster to connect to.", + "order": 0 + } + } + } + ] + }, + "database": { + "title": "Database Name", + "type": "string", + "description": "The database you want to replicate.", + "order": 1 + }, + "user": { + "title": "User", + "type": "string", + "description": "The username which is used to access the database.", + "order": 2 + }, + "password": { + "title": "Password", + "type": "string", + "description": "The password associated with this username.", + "airbyte_secret": true, + "order": 3 + }, + "auth_source": { + "title": "Authentication Source", + "type": "string", + "description": "The authentication source where the user information is stored.", + "default": "admin", + "examples": ["admin"], + "order": 4 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "722ba4bf-06ec-45a4-8dd5-72e4a5cf3903", + "name": "My Hours", + "dockerRepository": "airbyte/source-my-hours", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/my-hours", + "icon": "my-hours.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/my-hours", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "My Hours Spec", + "type": "object", + "required": ["email", "password", "start_date"], + "additionalProperties": false, + "properties": { + "email": { + "title": "Email", + "type": "string", + "description": "Your My Hours username", + "example": "john@doe.com" + }, + "password": { + "title": "Password", + "type": "string", + "description": "The password associated to the username", + "airbyte_secret": true + }, + "start_date": { + "title": "Start Date", + "description": "Start date for collecting time logs", + "examples": ["%Y-%m-%d", "2016-01-01"], + "type": "string", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" + }, + "logs_batch_size": { + "title": "Time logs batch size", + "description": "Pagination size used for retrieving logs in days", + "examples": [30], + "type": "integer", + "minimum": 1, + "maximum": 365, + "default": 30 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "435bb9a5-7887-4809-aa58-28c27df0d7ad", + "name": "MySQL", + "dockerRepository": "airbyte/source-mysql", + "dockerImageTag": "2.0.18", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mysql", + "icon": "mysql.svg", + "sourceType": "database", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/mysql", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "MySql Source Spec", + "type": "object", + "required": [ + "host", + "port", + "database", + "username", + "replication_method" + ], + "properties": { + "host": { + "description": "The host name of the database.", + "title": "Host", + "type": "string", + "order": 0 + }, + "port": { + "description": "The port to connect to.", + "title": "Port", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 3306, + "examples": ["3306"], + "order": 1 + }, + "database": { + "description": "The database name.", + "title": "Database", + "type": "string", + "order": 2 + }, + "username": { + "description": "The username which is used to access the database.", + "title": "Username", + "type": "string", + "order": 3 + }, + "password": { + "description": "The password associated with the username.", + "title": "Password", + "type": "string", + "airbyte_secret": true, + "order": 4 + }, + "jdbc_url_params": { + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3). For more information read about JDBC URL parameters.", + "title": "JDBC URL Parameters (Advanced)", + "type": "string", + "order": 5 + }, + "ssl": { + "title": "SSL Connection", + "description": "Encrypt data using SSL.", + "type": "boolean", + "default": true, + "order": 6 + }, + "ssl_mode": { + "title": "SSL modes", + "description": "SSL connection modes. Read more in the docs.", + "type": "object", + "order": 7, + "oneOf": [ + { + "title": "preferred", + "description": "Automatically attempt SSL connection. If the MySQL server does not support SSL, continue with a regular connection.", + "required": ["mode"], + "properties": { + "mode": { + "type": "string", + "const": "preferred", + "order": 0 + } + } + }, + { + "title": "required", + "description": "Always connect with SSL. If the MySQL server doesn’t support SSL, the connection will not be established. Certificate Authority (CA) and Hostname are not verified.", + "required": ["mode"], + "properties": { + "mode": { + "type": "string", + "const": "required", + "order": 0 + } + } + }, + { + "title": "Verify CA", + "description": "Always connect with SSL. Verifies CA, but allows connection even if Hostname does not match.", + "required": ["mode", "ca_certificate"], + "properties": { + "mode": { + "type": "string", + "const": "verify_ca", + "order": 0 + }, + "ca_certificate": { + "type": "string", + "title": "CA certificate", + "description": "CA certificate", + "airbyte_secret": true, + "multiline": true, + "order": 1 + }, + "client_certificate": { + "type": "string", + "title": "Client certificate", + "description": "Client certificate (this is not a required field, but if you want to use it, you will need to add the Client key as well)", + "airbyte_secret": true, + "multiline": true, + "order": 2, + "always_show": true + }, + "client_key": { + "type": "string", + "title": "Client key", + "description": "Client key (this is not a required field, but if you want to use it, you will need to add the Client certificate as well)", + "airbyte_secret": true, + "multiline": true, + "order": 3, + "always_show": true + }, + "client_key_password": { + "type": "string", + "title": "Client key password", + "description": "Password for keystorage. This field is optional. If you do not add it - the password will be generated automatically.", + "airbyte_secret": true, + "order": 4 + } + } + }, + { + "title": "Verify Identity", + "description": "Always connect with SSL. Verify both CA and Hostname.", + "required": ["mode", "ca_certificate"], + "properties": { + "mode": { + "type": "string", + "const": "verify_identity", + "order": 0 + }, + "ca_certificate": { + "type": "string", + "title": "CA certificate", + "description": "CA certificate", + "airbyte_secret": true, + "multiline": true, + "order": 1 + }, + "client_certificate": { + "type": "string", + "title": "Client certificate", + "description": "Client certificate (this is not a required field, but if you want to use it, you will need to add the Client key as well)", + "airbyte_secret": true, + "multiline": true, + "order": 2, + "always_show": true + }, + "client_key": { + "type": "string", + "title": "Client key", + "description": "Client key (this is not a required field, but if you want to use it, you will need to add the Client certificate as well)", + "airbyte_secret": true, + "multiline": true, + "order": 3, + "always_show": true + }, + "client_key_password": { + "type": "string", + "title": "Client key password", + "description": "Password for keystorage. This field is optional. If you do not add it - the password will be generated automatically.", + "airbyte_secret": true, + "order": 4 + } + } + } + ] + }, + "replication_method": { + "type": "object", + "title": "Replication Method", + "description": "Replication method to use for extracting data from the database.", + "order": 8, + "oneOf": [ + { + "title": "Standard", + "description": "Standard replication requires no setup on the DB side but will not be able to represent deletions incrementally.", + "required": ["method"], + "properties": { + "method": { + "type": "string", + "const": "STANDARD", + "order": 0 + } + } + }, + { + "title": "Logical Replication (CDC)", + "description": "CDC uses the Binlog to detect inserts, updates, and deletes. This needs to be configured on the source database itself.", + "required": ["method"], + "properties": { + "method": { + "type": "string", + "const": "CDC", + "order": 0 + }, + "initial_waiting_seconds": { + "type": "integer", + "title": "Initial Waiting Time in Seconds (Advanced)", + "description": "The amount of time the connector will wait when it launches to determine if there is new data to sync or not. Defaults to 300 seconds. Valid range: 120 seconds to 1200 seconds. Read about initial waiting time.", + "default": 300, + "min": 120, + "max": 1200, + "order": 1 + }, + "server_time_zone": { + "type": "string", + "title": "Configured server timezone for the MySQL source (Advanced)", + "description": "Enter the configured MySQL server timezone. This should only be done if the configured timezone in your MySQL instance does not conform to IANNA standard.", + "order": 2 + } + } + } + ] + }, + "tunnel_method": { + "type": "object", + "title": "SSH Tunnel Method", + "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", + "oneOf": [ + { + "title": "No Tunnel", + "required": ["tunnel_method"], + "properties": { + "tunnel_method": { + "description": "No ssh tunnel needed to connect to database", + "type": "string", + "const": "NO_TUNNEL", + "order": 0 + } + } + }, + { + "title": "SSH Key Authentication", + "required": [ + "tunnel_method", + "tunnel_host", + "tunnel_port", + "tunnel_user", + "ssh_key" + ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": ["22"], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host.", + "type": "string", + "order": 3 + }, + "ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + }, + { + "title": "Password Authentication", + "required": [ + "tunnel_method", + "tunnel_host", + "tunnel_port", + "tunnel_user", + "tunnel_user_password" + ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": ["22"], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host", + "type": "string", + "order": 3 + }, + "tunnel_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 4 + } + } + } + ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": ["${host}", "${tunnel_method.tunnel_host}"] + } + }, + { + "sourceDefinitionId": "4a961f66-5e99-4430-8320-a73afe52f7a2", + "name": "n8n", + "dockerRepository": "airbyte/source-n8n", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/n8n", + "icon": "n8n.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/n8n", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "N8n Spec", + "type": "object", + "required": ["host", "api_key"], + "additionalProperties": true, + "properties": { + "host": { + "type": "string", + "description": "Hostname of the n8n instance" + }, + "api_key": { + "type": "string", + "description": "Your API KEY. See here" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "1a8667d7-7978-43cd-ba4d-d32cbd478971", + "name": "NASA", + "dockerRepository": "airbyte/source-nasa", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/nasa", + "icon": "nasa.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/nasa-apod", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "NASA spec", + "type": "object", + "required": ["api_key"], + "properties": { + "api_key": { + "type": "string", + "description": "API access key used to retrieve data from the NASA APOD API.", + "airbyte_secret": true + }, + "concept_tags": { + "type": "boolean", + "default": false, + "description": "Indicates whether concept tags should be returned with the rest of the response. The concept tags are not necessarily included in the explanation, but rather derived from common search tags that are associated with the description text. (Better than just pure text search.) Defaults to False." + }, + "count": { + "type": "integer", + "minimum": 1, + "maximum": 100, + "description": "A positive integer, no greater than 100. If this is specified then `count` randomly chosen images will be returned in a JSON array. Cannot be used in conjunction with `date` or `start_date` and `end_date`." + }, + "start_date": { + "type": "string", + "description": "Indicates the start of a date range. All images in the range from `start_date` to `end_date` will be returned in a JSON array. Must be after 1995-06-16, the first day an APOD picture was posted. There are no images for tomorrow available through this API.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": ["2022-10-20"], + "format": "date" + }, + "end_date": { + "type": "string", + "description": "Indicates that end of a date range. If `start_date` is specified without an `end_date` then `end_date` defaults to the current date.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": ["2022-10-20"], + "format": "date" + }, + "thumbs": { + "type": "boolean", + "default": false, + "description": "Indicates whether the API should return a thumbnail image URL for video files. If set to True, the API returns URL of video thumbnail. If an APOD is not a video, this parameter is ignored." + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": ["api.nasa.gov"] + } + }, + { + "sourceDefinitionId": "4f2f093d-ce44-4121-8118-9d13b7bfccd0", + "name": "Netsuite", + "dockerRepository": "airbyte/source-netsuite", + "dockerImageTag": "0.1.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/netsuite", + "icon": "netsuite.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Netsuite Spec", + "type": "object", + "required": [ + "realm", + "consumer_key", + "consumer_secret", + "token_key", + "token_secret", + "start_datetime" + ], + "additionalProperties": true, + "properties": { + "realm": { + "type": "string", + "title": "Realm (Account Id)", + "description": "Netsuite realm e.g. 2344535, as for `production` or 2344535_SB1, as for the `sandbox`", + "order": 0, + "airbyte_secret": true + }, + "consumer_key": { + "type": "string", + "title": "Consumer Key", + "description": "Consumer key associated with your integration", + "order": 1, + "airbyte_secret": true + }, + "consumer_secret": { + "type": "string", + "title": "Consumer Secret", + "description": "Consumer secret associated with your integration", + "order": 2, + "airbyte_secret": true + }, + "token_key": { + "type": "string", + "title": "Token Key (Token Id)", + "description": "Access token key", + "order": 3, + "airbyte_secret": true + }, + "token_secret": { + "type": "string", + "title": "Token Secret", + "description": "Access token secret", + "order": 4, + "airbyte_secret": true + }, + "object_types": { + "type": "array", + "title": "Object Types", + "items": { + "type": "string" + }, + "description": "The API names of the Netsuite objects you want to sync. Setting this speeds up the connection setup process by limiting the number of schemas that need to be retrieved from Netsuite.", + "order": 5, + "examples": ["customer", "salesorder", "etc"], + "default": [] + }, + "start_datetime": { + "type": "string", + "title": "Start Date", + "description": "Starting point for your data replication, in format of \"YYYY-MM-DDTHH:mm:ssZ\"", + "order": 6, + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": ["2017-01-25T00:00:00Z"] + }, + "window_in_days": { + "type": "integer", + "title": "Window in Days", + "description": "The amount of days used to query the data with date chunks. Set smaller value, if you have lots of data.", + "order": 7, + "default": 30 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "df38991e-f35b-4af2-996d-36817f614587", + "name": "News API", + "dockerRepository": "airbyte/source-news-api", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/news-api", + "icon": "newsapi.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/news-api", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "News Api Spec", + "type": "object", + "required": ["api_key", "country", "category", "sort_by"], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "description": "API Key", + "airbyte_secret": true, + "order": 0 + }, + "search_query": { + "type": "string", + "description": "Search query. See https://newsapi.org/docs/endpoints/everything for \ninformation.\n", + "examples": [ + "+bitcoin OR +crypto", + "sunak AND (truss OR johnson)" + ], + "order": 1 + }, + "search_in": { + "type": "array", + "description": "Where to apply search query. Possible values are: title, description,\ncontent.\n", + "items": { + "type": "string", + "enum": ["title", "description", "content"] + }, + "order": 2 + }, + "sources": { + "type": "array", + "description": "Identifiers (maximum 20) for the news sources or blogs you want\nheadlines from. Use the `/sources` endpoint to locate these\nprogrammatically or look at the sources index:\nhttps://newsapi.com/sources. Will override both country and category.\n", + "items": { + "type": "string" + }, + "order": 3 + }, + "domains": { + "type": "array", + "description": "A comma-seperated string of domains (eg bbc.co.uk, techcrunch.com,\nengadget.com) to restrict the search to.\n", + "items": { + "type": "string" + }, + "order": 4 + }, + "exclude_domains": { + "type": "array", + "description": "A comma-seperated string of domains (eg bbc.co.uk, techcrunch.com,\nengadget.com) to remove from the results.\n", + "items": { + "type": "string" + }, + "order": 5 + }, + "start_date": { + "type": "string", + "description": "A date and optional time for the oldest article allowed. This should\nbe in ISO 8601 format (e.g. 2021-01-01 or 2021-01-01T12:00:00).\n", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}(T[0-9]{2}:[0-9]{2}:[0-9]{2})?$", + "order": 6 + }, + "end_date": { + "type": "string", + "description": "A date and optional time for the newest article allowed. This should\nbe in ISO 8601 format (e.g. 2021-01-01 or 2021-01-01T12:00:00).\n", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}(T[0-9]{2}:[0-9]{2}:[0-9]{2})?$", + "order": 7 + }, + "language": { + "type": "string", + "description": "The 2-letter ISO-639-1 code of the language you want to get headlines\nfor. Possible options: ar de en es fr he it nl no pt ru se ud zh.\n", + "enum": [ + "ar", + "de", + "en", + "es", + "fr", + "he", + "it", + "nl", + false, + "pt", + "ru", + "se", + "ud", + "zh" + ], + "order": 8 + }, + "country": { + "type": "string", + "description": "The 2-letter ISO 3166-1 code of the country you want to get headlines\nfor. You can't mix this with the sources parameter.\n", + "enum": [ + "ae", + "ar", + "at", + "au", + "be", + "bg", + "br", + "ca", + "ch", + "cn", + "co", + "cu", + "cz", + "de", + "eg", + "fr", + "gb", + "gr", + "hk", + "hu", + "id", + "ie", + "il", + "in", + "it", + "jp", + "kr", + "lt", + "lv", + "ma", + "mx", + "my", + "ng", + "nl", + false, + "nz", + "ph", + "pl", + "pt", + "ro", + "rs", + "ru", + "sa", + "se", + "sg", + "si", + "sk", + "th", + "tr", + "tw", + "ua", + "us", + "ve", + "za" + ], + "default": "us", + "order": 9 + }, + "category": { + "type": "string", + "description": "The category you want to get top headlines for.", + "enum": [ + "business", + "entertainment", + "general", + "health", + "science", + "sports", + "technology" + ], + "default": "business", + "order": 10 + }, + "sort_by": { + "type": "string", + "description": "The order to sort the articles in. Possible options: relevancy,\npopularity, publishedAt.\n", + "enum": ["relevancy", "popularity", "publishedAt"], + "default": "publishedAt", + "order": 11 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "60bd11d8-2632-4daa-a688-b47336d32093", + "name": "Newsdata", + "dockerRepository": "airbyte/source-newsdata", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/newsdata", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/newsdata", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Newsdata Spec", + "type": "object", + "required": ["api_key"], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "description": "API Key", + "airbyte_secret": true, + "order": 0 + }, + "OneOf": { + "query": { + "type": "string", + "description": "Keywords or phrases to search for in the news title and content. Advanced Search options:\n - Search `Social`: query = \"social\"\n - Search `Social Pizza`: query = \"social pizza\"\n - Search `Social` but not with `pizza`: query = \"social -pizza\"\n - Search `Social` but not with `pizza` and `wildfire`: query = \"social -pizza -wildfire\"\n - Search `Social` and `pizza`: query = \"social AND pizza\"\n - Search `Social` and `pizza` and `pasta`: query = \"social AND pizza AND pasta\"\n - Search `Social` or `pizza`: query = \"social OR pizza\"\n - Search `Social` or `pizza` but not `pasta`: query = \"social OR pizza -pasta\"\n - Search `Social` or `pizza` or `pasta`: query = \"social OR pizza OR pasta\"\nNote: You can't use AND and OR in the same query.", + "order": 1 + }, + "query_in_title": { + "type": "string", + "description": "Same as `query`, but restricting the search to only the news title. It cannot be used along with `query`.", + "order": 1 + } + }, + "domain": { + "type": "array", + "description": "Domains (maximum 5) to restrict the search to. Use the sources stream to find top sources id.", + "maxitems": 5, + "items": { + "type": "string" + }, + "order": 2 + }, + "country": { + "type": "array", + "description": "2-letter ISO 3166-1 countries (maximum 5) to restrict the search to.", + "maxitems": 5, + "order": 3, + "items": { + "type": "string", + "enum": [ + "ar", + "au", + "at", + "bd", + "by", + "be", + "br", + "bg", + "ca", + "cl", + "cn", + "co", + "cr", + "cu", + "cz", + "dk", + "do", + "ec", + "eg", + "ee", + "et", + "fi", + "fr", + "de", + "gr", + "hk", + "hu", + "in", + "id", + "iq", + "ie", + "il", + "it", + "jp", + "kz", + "kw", + "lv", + "lb", + "lt", + "my", + "mx", + "ma", + "mm", + "nl", + "nz", + "ng", + "kp", + "no", + "pk", + "pe", + "ph", + "pl", + "pt", + "pr", + "ro", + "ru", + "sa", + "rs", + "sg", + "sk", + "si", + "za", + "kr", + "es", + "se", + "ch", + "tw", + "tz", + "th", + "tr", + "ua", + "ae", + "gb", + "us", + "ve", + "vi" + ] + } + }, + "category": { + "type": "array", + "description": "Categories (maximum 5) to restrict the search to.", + "maxitems": 5, + "order": 4, + "items": { + "type": "string", + "enum": [ + "business", + "entertainment", + "environment", + "food", + "health", + "politics", + "science", + "sports", + "technology", + "top", + "world" + ] + } + }, + "language": { + "type": "array", + "description": "Languages (maximum 5) to restrict the search to.", + "maxitems": 5, + "order": 5, + "items": { + "type": "string", + "enum": [ + "be", + "am", + "ar", + "bn", + "bs", + "bg", + "my", + "ckb", + "zh", + "hr", + "cs", + "da", + "nl", + "en", + "et", + "fi", + "fr", + "de", + "el", + "he", + "hi", + "hu", + "in", + "it", + "jp", + "ko", + "lv", + "lt", + "ms", + "no", + "pl", + "pt", + "ro", + "ru", + "sr", + "sk", + "sl", + "es", + "sw", + "sv", + "th", + "tr", + "uk", + "ur", + "vi" + ] + } + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "6e00b415-b02e-4160-bf02-58176a0ae687", + "name": "Notion", + "dockerRepository": "airbyte/source-notion", + "dockerImageTag": "1.0.4", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/notion", + "icon": "notion.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/notion", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Notion Source Spec", + "type": "object", + "required": ["start_date"], + "properties": { + "start_date": { + "title": "Start Date", + "description": "UTC date and time in the format 2017-01-25T00:00:00.000Z. Any data before this date will not be replicated.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}Z$", + "examples": ["2020-11-16T00:00:00.000Z"], + "type": "string", + "format": "date-time" + }, + "credentials": { + "title": "Authenticate using", + "description": "Pick an authentication method.", + "type": "object", + "order": 1, + "oneOf": [ + { + "type": "object", + "title": "OAuth2.0", + "required": [ + "auth_type", + "client_id", + "client_secret", + "access_token" + ], + "properties": { + "auth_type": { + "type": "string", + "const": "OAuth2.0" + }, + "client_id": { + "title": "Client ID", + "type": "string", + "description": "The ClientID of your Notion integration.", + "airbyte_secret": true + }, + "client_secret": { + "title": "Client Secret", + "type": "string", + "description": "The ClientSecret of your Notion integration.", + "airbyte_secret": true + }, + "access_token": { + "title": "Access Token", + "type": "string", + "description": "Access Token is a token you received by complete the OauthWebFlow of Notion.", + "airbyte_secret": true + } + } + }, + { + "type": "object", + "title": "Access Token", + "required": ["auth_type", "token"], + "properties": { + "auth_type": { + "type": "string", + "const": "token" + }, + "token": { + "title": "Access Token", + "description": "Notion API access token, see the docs for more information on how to obtain this token.", + "type": "string", + "airbyte_secret": true + } + } + } + ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": ["credentials", "0"], + "oauthFlowInitParameters": [["client_id"], ["client_secret"]], + "oauthFlowOutputParameters": [["access_token"]] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["api.notion.com"] + } + }, + { + "sourceDefinitionId": "0fae6a9a-04eb-44d4-96e1-e02d3dbc1d83", + "name": "New York Times", + "dockerRepository": "airbyte/source-nytimes", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/nytimes", + "icon": "nytimes.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/nytimes", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Nytimes Spec", + "type": "object", + "required": ["api_key", "start_date", "period"], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "title": "API Key", + "description": "API Key", + "airbyte_secret": true, + "order": 0 + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "Start date to begin the article retrieval (format YYYY-MM)", + "pattern": "^[0-9]{4}-[0-9]{2}$", + "examples": ["2022-08", "1851-01"], + "format": "date", + "order": 1 + }, + "end_date": { + "type": "string", + "title": "End Date", + "description": "End date to stop the article retrieval (format YYYY-MM)", + "pattern": "^[0-9]{4}-[0-9]{2}$", + "examples": ["2022-08", "1851-01"], + "format": "date", + "order": 2 + }, + "period": { + "type": "integer", + "title": "Period (used for Most Popular streams)", + "description": "Period of time (in days)", + "order": 3, + "enum": [1, 7, 30] + }, + "share_type": { + "type": "string", + "title": "Share Type (used for Most Popular Shared stream)", + "description": "Share Type", + "order": 4, + "enum": ["facebook"] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "1d4fdb25-64fc-4569-92da-fcdca79a8372", + "name": "Okta", + "dockerRepository": "airbyte/source-okta", + "dockerImageTag": "0.1.14", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/okta", + "icon": "okta.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/okta", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Okta Spec", + "type": "object", + "required": [], + "additionalProperties": true, + "properties": { + "domain": { + "type": "string", + "title": "Okta domain", + "description": "The Okta domain. See the docs for instructions on how to find it.", + "airbyte_secret": false + }, + "start_date": { + "type": "string", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "description": "UTC date and time in the format YYYY-MM-DDTHH:MM:SSZ. Any data before this date will not be replicated.", + "examples": ["2022-07-22T00:00:00Z"], + "title": "Start Date" + }, + "credentials": { + "title": "Authorization Method", + "type": "object", + "oneOf": [ + { + "type": "object", + "title": "OAuth2.0", + "required": [ + "auth_type", + "client_id", + "client_secret", + "refresh_token" + ], + "properties": { + "auth_type": { + "type": "string", + "const": "oauth2.0", + "order": 0 + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "The Client ID of your OAuth application.", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "The Client Secret of your OAuth application.", + "airbyte_secret": true + }, + "refresh_token": { + "type": "string", + "title": "Refresh Token", + "description": "Refresh Token to obtain new Access Token, when it's expired.", + "airbyte_secret": true + } + } + }, + { + "type": "object", + "title": "API Token", + "required": ["auth_type", "api_token"], + "properties": { + "auth_type": { + "type": "string", + "const": "api_token", + "order": 0 + }, + "api_token": { + "type": "string", + "title": "Personal API Token", + "description": "An Okta token. See the docs for instructions on how to generate it.", + "airbyte_secret": true + } + } + } + ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "e7f0c5e2-4815-48c4-90cf-f47124209835", + "name": "Omnisend", + "dockerRepository": "airbyte/source-omnisend", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/omnisend", + "icon": "omnisend.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/omnisend", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Omnisend Spec", + "type": "object", + "required": ["api_key"], + "additionalProperties": true, + "properties": { + "api_key": { + "title": "API Key", + "type": "string", + "description": "API Key", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "bb6afd81-87d5-47e3-97c4-e2c2901b1cf8", + "name": "OneSignal", + "dockerRepository": "airbyte/source-onesignal", + "dockerImageTag": "1.0.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/onesignal", + "icon": "onesignal.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/onesignal", + "connectionSpecification": { + "$schema": "https://json-schema.org/draft-07/schema#", + "title": "OneSignal Source Spec", + "type": "object", + "required": [ + "user_auth_key", + "start_date", + "outcome_names", + "applications" + ], + "additionalProperties": true, + "properties": { + "user_auth_key": { + "type": "string", + "title": "User Auth Key", + "description": "OneSignal User Auth Key, see the docs for more information on how to obtain this key.", + "airbyte_secret": true, + "order": 0 + }, + "applications": { + "type": "array", + "title": "Applications", + "description": "Applications keys, see the docs for more information on how to obtain this data", + "items": { + "type": "object", + "properties": { + "app_name": { + "type": "string", + "title": "OneSignal App Name", + "order": 0 + }, + "app_id": { + "type": "string", + "title": "OneSignal App ID", + "order": 1, + "airbyte_secret": true + }, + "app_api_key": { + "type": "string", + "title": "REST API Key", + "order": 2, + "airbyte_secret": true + } + }, + "required": ["app_id", "app_api_key"] + }, + "order": 1 + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "The date from which you'd like to replicate data for OneSignal API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", + "examples": ["2020-11-16T00:00:00Z"], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "format": "date-time", + "order": 2 + }, + "outcome_names": { + "type": "string", + "title": "Outcome Names", + "description": "Comma-separated list of names and the value (sum/count) for the returned outcome data. See the docs for more details", + "examples": [ + "os__session_duration.count,os__click.count,CustomOutcomeName.sum" + ], + "order": 3 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "77d5ca6b-d345-4dce-ba1e-1935a75778b8", + "name": "Open Exchange Rates", + "dockerRepository": "airbyte/source-open-exchange-rates", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/open-exchange-rates", + "icon": "airbyte.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/openexchangesrates", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Open Exchange Rates Spec", + "type": "object", + "required": ["app_id", "start_date"], + "properties": { + "app_id": { + "type": "string", + "description": "App ID provided by Open Exchange Rates", + "airbyte_secret": true + }, + "start_date": { + "type": "string", + "description": "Start getting data from that date.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": ["YYYY-MM-DD"] + }, + "base": { + "type": "string", + "description": "Change base currency (3-letter code, default is USD - only modifiable in paid plans)", + "examples": ["EUR", "USD"], + "default": "USD" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "d8540a80-6120-485d-b7d6-272bca477d9b", + "name": "OpenWeather", + "dockerRepository": "airbyte/source-openweather", + "dockerImageTag": "0.1.6", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/openweather", + "icon": "openweather.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Open Weather Spec", + "type": "object", + "required": ["appid", "lat", "lon"], + "additionalProperties": true, + "properties": { + "lat": { + "title": "Latitude", + "type": "string", + "pattern": "^[-]?\\d{1,2}(\\.\\d+)?$", + "examples": ["45.7603", "-21.249107858038816"], + "description": "Latitude for which you want to get weather condition from. (min -90, max 90)" + }, + "lon": { + "title": "Longitude", + "type": "string", + "pattern": "^[-]?\\d{1,3}(\\.\\d+)?$", + "examples": ["4.835659", "-70.39482074115321"], + "description": "Longitude for which you want to get weather condition from. (min -180, max 180)" + }, + "appid": { + "title": "App ID", + "type": "string", + "description": "Your OpenWeather API Key. See here. The key is case sensitive.", + "airbyte_secret": true + }, + "units": { + "title": "Units", + "type": "string", + "description": "Units of measurement. standard, metric and imperial units are available. If you do not use the units parameter, standard units will be applied by default.", + "enum": ["standard", "metric", "imperial"], + "examples": ["standard", "metric", "imperial"] + }, + "lang": { + "title": "Language", + "type": "string", + "description": "You can use lang parameter to get the output in your language. The contents of the description field will be translated. See here for the list of supported languages.", + "enum": [ + "af", + "al", + "ar", + "az", + "bg", + "ca", + "cz", + "da", + "de", + "el", + "en", + "eu", + "fa", + "fi", + "fr", + "gl", + "he", + "hi", + "hr", + "hu", + "id", + "it", + "ja", + "kr", + "la", + "lt", + "mk", + "no", + "nl", + "pl", + "pt", + "pt_br", + "ro", + "ru", + "sv", + "se", + "sk", + "sl", + "sp", + "es", + "sr", + "th", + "tr", + "ua", + "uk", + "vi", + "zh_cn", + "zh_tw", + "zu" + ], + "examples": ["en", "fr", "pt_br", "uk", "zh_cn", "zh_tw"] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "06bdb480-2598-40b8-8b0f-fc2e2d2abdda", + "name": "Opsgenie", + "dockerRepository": "airbyte/source-opsgenie", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/opsgenie", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Opsgenie Spec", + "type": "object", + "required": ["api_token", "endpoint"], + "additionalProperties": true, + "properties": { + "api_token": { + "type": "string", + "description": "API token used to access the Opsgenie platform", + "airbyte_secret": true + }, + "endpoint": { + "type": "string", + "description": "Service endpoint to use for API calls.", + "examples": ["api.opsgenie.com", "api.eu.opsgenie.com"], + "default": "api.opsgenie.com" + }, + "start_date": { + "type": "string", + "description": "The date from which you'd like to replicate data from Opsgenie in the format of YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated. Note that it will be used only in the following incremental streams: issues.", + "examples": ["2022-07-01T00:00:00Z"], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "b39a7370-74c3-45a6-ac3a-380d48520a83", + "name": "Oracle DB", + "dockerRepository": "airbyte/source-oracle", + "dockerImageTag": "0.3.24", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/oracle", + "icon": "oracle.svg", + "sourceType": "database", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/oracle", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Oracle Source Spec", + "type": "object", + "required": ["host", "port", "username"], + "properties": { + "host": { + "title": "Host", + "description": "Hostname of the database.", + "type": "string", + "order": 1 + }, + "port": { + "title": "Port", + "description": "Port of the database.\nOracle Corporations recommends the following port numbers:\n1521 - Default listening port for client connections to the listener. \n2484 - Recommended and officially registered listening port for client connections to the listener using TCP/IP with SSL", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 1521, + "order": 2 + }, + "connection_data": { + "title": "Connect by", + "type": "object", + "description": "Connect data that will be used for DB connection", + "order": 3, + "oneOf": [ + { + "title": "Service name", + "description": "Use service name", + "required": ["service_name"], + "properties": { + "connection_type": { + "type": "string", + "const": "service_name", + "order": 0 + }, + "service_name": { + "title": "Service name", + "type": "string", + "order": 1 + } + } + }, + { + "title": "System ID (SID)", + "description": "Use SID (Oracle System Identifier)", + "required": ["sid"], + "properties": { + "connection_type": { + "type": "string", + "const": "sid", + "order": 0 + }, + "sid": { + "title": "System ID (SID)", + "type": "string", + "order": 1 + } + } + } + ] + }, + "username": { + "title": "User", + "description": "The username which is used to access the database.", + "type": "string", + "order": 4 + }, + "password": { + "title": "Password", + "description": "The password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 5 + }, + "schemas": { + "title": "Schemas", + "description": "The list of schemas to sync from. Defaults to user. Case sensitive.", + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1, + "uniqueItems": true, + "order": 6 + }, + "jdbc_url_params": { + "title": "JDBC URL Params", + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", + "type": "string", + "order": 7 + }, + "encryption": { + "title": "Encryption", + "type": "object", + "description": "The encryption method with is used when communicating with the database.", + "order": 8, + "oneOf": [ + { + "title": "Unencrypted", + "description": "Data transfer will not be encrypted.", + "required": ["encryption_method"], + "properties": { + "encryption_method": { + "type": "string", + "const": "unencrypted" + } + } + }, + { + "title": "Native Network Encryption (NNE)", + "description": "The native network encryption gives you the ability to encrypt database connections, without the configuration overhead of TCP/IP and SSL/TLS and without the need to open and listen on different ports.", + "required": ["encryption_method"], + "properties": { + "encryption_method": { + "type": "string", + "const": "client_nne" + }, + "encryption_algorithm": { + "type": "string", + "description": "This parameter defines what encryption algorithm is used.", + "title": "Encryption Algorithm", + "default": "AES256", + "enum": ["AES256", "RC4_56", "3DES168"] + } + } + }, + { + "title": "TLS Encrypted (verify certificate)", + "description": "Verify and use the certificate provided by the server.", + "required": ["encryption_method", "ssl_certificate"], + "properties": { + "encryption_method": { + "type": "string", + "const": "encrypted_verify_certificate" + }, + "ssl_certificate": { + "title": "SSL PEM File", + "description": "Privacy Enhanced Mail (PEM) files are concatenated certificate containers frequently used in certificate installations.", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + } + ] + }, + "tunnel_method": { + "type": "object", + "title": "SSH Tunnel Method", + "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", + "oneOf": [ + { + "title": "No Tunnel", + "required": ["tunnel_method"], + "properties": { + "tunnel_method": { + "description": "No ssh tunnel needed to connect to database", + "type": "string", + "const": "NO_TUNNEL", + "order": 0 + } + } + }, + { + "title": "SSH Key Authentication", + "required": [ + "tunnel_method", + "tunnel_host", + "tunnel_port", + "tunnel_user", + "ssh_key" + ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": ["22"], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host.", + "type": "string", + "order": 3 + }, + "ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + }, + { + "title": "Password Authentication", + "required": [ + "tunnel_method", + "tunnel_host", + "tunnel_port", + "tunnel_user", + "tunnel_user_password" + ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": ["22"], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host", + "type": "string", + "order": 3 + }, + "tunnel_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 4 + } + } + } + ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": ["${host}", "${tunnel_method.tunnel_host}"] + } + }, + { + "sourceDefinitionId": "7f0455fb-4518-4ec0-b7a3-d808bf8081cc", + "name": "Orb", + "dockerRepository": "airbyte/source-orb", + "dockerImageTag": "1.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/orb", + "icon": "orb.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.withorb.com/", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Orb Spec", + "type": "object", + "required": ["api_key", "start_date"], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "title": "Orb API Key", + "description": "Orb API Key, issued from the Orb admin console.", + "airbyte_secret": true, + "order": 1 + }, + "start_date": { + "type": "string", + "title": "Start Date", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "description": "UTC date and time in the format 2022-03-01T00:00:00Z. Any data with created_at before this data will not be synced. For Subscription Usage, this becomes the `timeframe_start` API parameter.", + "examples": ["2022-03-01T00:00:00Z"], + "order": 2 + }, + "lookback_window_days": { + "type": "integer", + "title": "Lookback Window (in days)", + "default": 0, + "minimum": 0, + "description": "When set to N, the connector will always refresh resources created within the past N days. By default, updated objects that are not newly created are not incrementally synced.", + "order": 3 + }, + "string_event_properties_keys": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Event properties keys (string values)", + "description": "Property key names to extract from all events, in order to enrich ledger entries corresponding to an event deduction.", + "order": 4 + }, + "numeric_event_properties_keys": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Event properties keys (numeric values)", + "description": "Property key names to extract from all events, in order to enrich ledger entries corresponding to an event deduction.", + "order": 5 + }, + "subscription_usage_grouping_key": { + "type": "string", + "title": "Subscription usage grouping key (string value)", + "description": "Property key name to group subscription usage by." + }, + "plan_id": { + "type": "string", + "title": "Orb Plan ID for Subscription Usage (string value)", + "description": "Orb Plan ID to filter subscriptions that should have usage fetched." + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "95bcc041-1d1a-4c2e-8802-0ca5b1bfa36a", + "name": "Orbit", + "dockerRepository": "airbyte/source-orbit", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/orbit", + "icon": "orbit.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/orbit", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Orbit Source Spec", + "type": "object", + "required": ["api_token", "workspace"], + "additionalProperties": false, + "properties": { + "api_token": { + "type": "string", + "airbyte_secret": true, + "title": "API Token", + "description": "Authorizes you to work with Orbit workspaces associated with the token.", + "order": 0 + }, + "workspace": { + "type": "string", + "title": "Workspace", + "description": "The unique name of the workspace that your API token is associated with.", + "order": 1 + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "Date in the format 2022-06-26. Only load members whose last activities are after this date.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "order": 2 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "2bf6c581-bec5-4e32-891d-de33036bd631", + "name": "Oura", + "dockerRepository": "airbyte/source-oura", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/oura", + "icon": "oura.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Oura Spec", + "type": "object", + "required": ["api_key"], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "description": "API Key", + "airbyte_secret": true, + "order": 0 + }, + "start_datetime": { + "type": "string", + "description": "Start datetime to sync from. Default is current UTC datetime minus 1\nday.\n", + "pattern": "^(-?(?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(Z|[+-](?:2[0-3]|[01][0-9]):[0-5][0-9])?$", + "order": 1 + }, + "end_datetime": { + "type": "string", + "description": "End datetime to sync until. Default is current UTC datetime.", + "pattern": "^(-?(?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(Z|[+-](?:2[0-3]|[01][0-9]):[0-5][0-9])?$", + "order": 2 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "3490c201-5d95-4783-b600-eaf07a4c7787", + "name": "Outreach", + "dockerRepository": "airbyte/source-outreach", + "dockerImageTag": "0.2.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/outreach", + "icon": "outreach.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/outreach", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Source Outreach Spec", + "type": "object", + "required": [ + "client_id", + "client_secret", + "refresh_token", + "redirect_uri", + "start_date" + ], + "additionalProperties": true, + "properties": { + "client_id": { + "type": "string", + "title": "Client ID", + "description": "The Client ID of your Outreach developer application." + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "The Client Secret of your Outreach developer application.", + "airbyte_secret": true + }, + "refresh_token": { + "type": "string", + "title": "Refresh Token", + "description": "The token for obtaining the new access token.", + "airbyte_secret": true + }, + "redirect_uri": { + "type": "string", + "title": "Redirect URI", + "description": "A Redirect URI is the location where the authorization server sends the user once the app has been successfully authorized and granted an authorization code or access token." + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "The date from which you'd like to replicate data for Outreach API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", + "examples": ["2020-11-16T00:00:00Z"], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "ad15c7ba-72a7-440b-af15-b9a963dc1a8a", + "name": "Pardot", + "dockerRepository": "airbyte/source-pardot", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/pardot", + "icon": "salesforcepardot.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/pardot", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Pardot Spec", + "type": "object", + "required": [ + "pardot_business_unit_id", + "client_id", + "client_secret", + "refresh_token" + ], + "additionalProperties": false, + "properties": { + "pardot_business_unit_id": { + "description": "Pardot Business ID, can be found at Setup > Pardot > Pardot Account Setup", + "type": "string" + }, + "client_id": { + "description": "The Consumer Key that can be found when viewing your app in Salesforce", + "type": "string", + "airbyte_secret": true + }, + "client_secret": { + "description": "The Consumer Secret that can be found when viewing your app in Salesforce", + "type": "string", + "airbyte_secret": true + }, + "refresh_token": { + "description": "Salesforce Refresh Token used for Airbyte to access your Salesforce account. If you don't know what this is, follow this guide to retrieve it.", + "type": "string", + "airbyte_secret": true + }, + "start_date": { + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated. Leave blank to skip this filter", + "type": "string", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "default": null, + "examples": ["2021-07-25T00:00:00Z"] + }, + "is_sandbox": { + "description": "Whether or not the the app is in a Salesforce sandbox. If you do not know what this, assume it is false.", + "type": "boolean", + "default": false + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "2817b3f0-04e4-4c7a-9f32-7a5e8a83db95", + "name": "PagerDuty", + "dockerRepository": "farosai/airbyte-pagerduty-source", + "dockerImageTag": "0.1.23", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/pagerduty", + "icon": "pagerduty.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.faros.ai", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "PagerDuty Spec", + "type": "object", + "required": ["token"], + "additionalProperties": false, + "properties": { + "token": { + "type": "string", + "title": "PagerDuty API key", + "airbyte_secret": true + }, + "pageSize": { + "type": "number", + "minimum": 1, + "maximum": 25, + "default": 25, + "title": "Page Size", + "description": "page size to use when querying PagerDuty API" + }, + "cutoffDays": { + "type": "number", + "minimum": 1, + "default": 90, + "title": "Cutoff Days", + "description": "fetch pipelines updated in the last number of days" + }, + "incidentLogEntriesOverview": { + "type": "boolean", + "title": "Incident Log Entries Overview", + "description": "If true, will return a subset of log entries that show only the most important changes to the incident.", + "default": true + }, + "defaultSeverity": { + "type": "string", + "title": "Severity category", + "description": "A default severity category if not present", + "examples": ["Sev1", "Sev2", "Sev3", "Sev4", "Sev5", "Custom"], + "pattern": "^(Sev[0-5])?(Custom)?$" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "d30fb809-6456-484d-8e2c-ee12e0f6888d", + "name": "PartnerStack", + "dockerRepository": "airbyte/source-partnerstack", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/partnerstack", + "icon": "partnerstack.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/partnerstack", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Partnerstack Spec", + "type": "object", + "required": ["public_key", "private_key"], + "additionalProperties": true, + "properties": { + "public_key": { + "type": "string", + "title": "Partnerstack Public key", + "description": "The Live Public Key for a Partnerstack account.", + "airbyte_secret": true + }, + "private_key": { + "type": "string", + "title": "Partnerstack Private key", + "description": "The Live Private Key for a Partnerstack account.", + "airbyte_secret": true + }, + "start_date": { + "type": "string", + "title": "Start date", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", + "examples": ["2017-01-25T00:00:00Z"] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "d913b0f2-cc51-4e55-a44c-8ba1697b9239", + "name": "Paypal Transaction", + "dockerRepository": "airbyte/source-paypal-transaction", + "dockerImageTag": "0.1.12", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/paypal-transaction", + "icon": "paypal.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/paypal-transactions", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Paypal Transaction Search", + "type": "object", + "required": ["start_date", "is_sandbox"], + "additionalProperties": true, + "properties": { + "client_id": { + "type": "string", + "title": "Client ID", + "description": "The Client ID of your Paypal developer application.", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "title": "Client secret", + "description": "The Client Secret of your Paypal developer application.", + "airbyte_secret": true + }, + "refresh_token": { + "type": "string", + "title": "Refresh token", + "description": "The key to refresh the expired access token.", + "airbyte_secret": true + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "Start Date for data extraction in ISO format. Date must be in range from 3 years till 12 hrs before present time.", + "examples": ["2021-06-11T23:59:59-00:00"], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}[+-][0-9]{2}:[0-9]{2}$" + }, + "is_sandbox": { + "title": "Sandbox", + "description": "Determines whether to use the sandbox or production environment.", + "type": "boolean", + "default": false + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["api-m.paypal.com", "api-m.sandbox.paypal.com"] + } + }, + { + "sourceDefinitionId": "193bdcb8-1dd9-48d1-aade-91cadfd74f9b", + "name": "Paystack", + "dockerRepository": "airbyte/source-paystack", + "dockerImageTag": "0.1.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/paystack", + "icon": "paystack.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/paystack", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Paystack Source Spec", + "type": "object", + "required": ["secret_key", "start_date"], + "additionalProperties": true, + "properties": { + "secret_key": { + "type": "string", + "title": "Secret Key", + "pattern": "^(s|r)k_(live|test)_[a-zA-Z0-9]+$", + "description": "The Paystack API key (usually starts with 'sk_live_'; find yours here).", + "airbyte_secret": true + }, + "start_date": { + "type": "string", + "title": "Start Date", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", + "examples": ["2017-01-25T00:00:00Z"], + "format": "date-time" + }, + "lookback_window_days": { + "type": "integer", + "title": "Lookback Window (in days)", + "default": 0, + "minimum": 0, + "description": "When set, the connector will always reload data from the past N days, where N is the value set here. This is useful if your data is updated after creation." + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": ["api.paystack.co"] + } + }, + { + "sourceDefinitionId": "b1ccb590-e84f-46c0-83a0-2048ccfffdae", + "name": "Pendo", + "dockerRepository": "airbyte/source-pendo", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/pendo", + "icon": "pendo.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/pendo", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "required": ["api_key"], + "properties": { + "api_key": { + "type": "string", + "title": "API Key", + "airbyte_secret": true + } + }, + "additionalProperties": true + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "3052c77e-8b91-47e2-97a0-a29a22794b4b", + "name": "PersistIq", + "dockerRepository": "airbyte/source-persistiq", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/persistiq", + "icon": "persistiq.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/persistiq", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Persistiq Spec", + "type": "object", + "required": ["api_key"], + "additionalProperties": false, + "properties": { + "api_key": { + "type": "string", + "description": "PersistIq API Key. See the docs for more information on where to find that key.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "69d9eb65-8026-47dc-baf1-e4bf67901fd6", + "name": "Pexels API", + "dockerRepository": "airbyte/source-pexels-api", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/pexels-api", + "icon": "pexels.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/pexels-api", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Pexel API Spec", + "type": "object", + "required": ["api_key", "query"], + "additionalProperties": true, + "properties": { + "api_key": { + "title": "API Key from the pexels website", + "type": "string", + "description": "API key is required to access pexels api, For getting your's goto https://www.pexels.com/api/documentation and create account for free.", + "airbyte_secret": true + }, + "query": { + "title": "Specific query for the search", + "type": "string", + "description": "Optional, the search query, Example Ocean, Tigers, Pears, etc.", + "examples": ["people", "oceans"] + }, + "orientation": { + "title": "Specific orientation for the search", + "type": "string", + "description": "Optional, Desired photo orientation. The current supported orientations are landscape, portrait or square", + "examples": ["square", "landscape"] + }, + "size": { + "title": "Specific size for the search", + "type": "string", + "description": "Optional, Minimum photo size. The current supported sizes are large(24MP), medium(12MP) or small(4MP).", + "examples": ["large", "small"] + }, + "color": { + "title": "Specific color for the search", + "type": "string", + "description": "Optional, Desired photo color. Supported colors red, orange, yellow, green, turquoise, blue, violet, pink, brown, black, gray, white or any hexidecimal color code.", + "examples": ["red", "orange"] + }, + "locale": { + "title": "Specific locale for the search", + "type": "string", + "description": "Optional, The locale of the search you are performing. The current supported locales are 'en-US' 'pt-BR' 'es-ES' 'ca-ES' 'de-DE' 'it-IT' 'fr-FR' 'sv-SE' 'id-ID' 'pl-PL' 'ja-JP' 'zh-TW' 'zh-CN' 'ko-KR' 'th-TH' 'nl-NL' 'hu-HU' 'vi-VN' 'cs-CZ' 'da-DK' 'fi-FI' 'uk-UA' 'el-GR' 'ro-RO' 'nb-NO' 'sk-SK' 'tr-TR' 'ru-RU'.", + "examples": ["en-US", "pt-BR"] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "5cb7e5fe-38c2-11ec-8d3d-0242ac130003", + "name": "Pinterest", + "dockerRepository": "airbyte/source-pinterest", + "dockerImageTag": "0.2.5", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/pinterest", + "icon": "pinterest.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/pinterest", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Pinterest Spec", + "type": "object", + "required": ["start_date"], + "additionalProperties": true, + "properties": { + "start_date": { + "type": "string", + "title": "Start Date", + "description": "A date in the format YYYY-MM-DD. If you have not set a date, it would be defaulted to latest allowed date by api (89 days from today).", + "examples": ["2022-07-28"] + }, + "status": { + "title": "Status", + "description": "Entity statuses based off of campaigns, ad_groups, and ads. If you do not have a status set, it will be ignored completely.", + "type": ["array", "null"], + "items": { + "type": "string", + "enum": ["ACTIVE", "PAUSED", "ARCHIVED"] + }, + "uniqueItems": true + }, + "credentials": { + "title": "Authorization Method", + "type": "object", + "oneOf": [ + { + "type": "object", + "title": "OAuth2.0", + "required": ["auth_method", "refresh_token"], + "properties": { + "auth_method": { + "type": "string", + "const": "oauth2.0", + "order": 0 + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "The Client ID of your OAuth application", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "The Client Secret of your OAuth application.", + "airbyte_secret": true + }, + "refresh_token": { + "type": "string", + "title": "Refresh Token", + "description": "Refresh Token to obtain new Access Token, when it's expired.", + "airbyte_secret": true + } + } + }, + { + "type": "object", + "title": "Access Token", + "required": ["auth_method", "access_token"], + "properties": { + "auth_method": { + "type": "string", + "const": "access_token", + "order": 0 + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "The Access Token to make authenticated requests.", + "airbyte_secret": true + } + } + } + ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": ["credentials", "auth_method"], + "predicate_value": "oauth2.0", + "oauth_config_specification": { + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "refresh_token": { + "type": "string", + "path_in_connector_config": ["credentials", "refresh_token"] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": ["credentials", "client_id"] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": ["credentials", "client_secret"] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["api.pinterest.com"] + } + }, + { + "sourceDefinitionId": "d8286229-c680-4063-8c59-23b9b391c700", + "name": "Pipedrive", + "dockerRepository": "airbyte/source-pipedrive", + "dockerImageTag": "0.1.17", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/pipedrive", + "icon": "pipedrive.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/pipedrive", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Pipedrive Spec", + "type": "object", + "required": ["replication_start_date"], + "additionalProperties": true, + "properties": { + "authorization": { + "type": "object", + "title": "API Key Authentication", + "required": ["auth_type", "api_token"], + "properties": { + "auth_type": { + "type": "string", + "const": "Token", + "order": 0 + }, + "api_token": { + "title": "API Token", + "type": "string", + "description": "The Pipedrive API Token.", + "airbyte_secret": true + } + } + }, + "replication_start_date": { + "title": "Start Date", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated. When specified and not None, then stream will behave as incremental", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": ["2017-01-25T00:00:00Z"], + "type": "string", + "format": "date-time" + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": ["api.pipedrive.com"] + } + }, + { + "sourceDefinitionId": "d60f5393-f99e-4310-8d05-b1876820f40e", + "name": "Pivotal Tracker", + "dockerRepository": "airbyte/source-pivotal-tracker", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/pivotal-tracker", + "icon": "pivotal-tracker.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Pivotal Tracker Spec", + "type": "object", + "required": ["api_token"], + "additionalProperties": false, + "properties": { + "api_token": { + "type": "string", + "description": "Pivotal Tracker API token", + "examples": ["5c054d0de3440452190fdc5d5a04d871"] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "ed799e2b-2158-4c66-8da4-b40fe63bc72a", + "name": "Plaid", + "dockerRepository": "airbyte/source-plaid", + "dockerImageTag": "0.3.2", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/plaid", + "icon": "plaid.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://plaid.com/docs/api/", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "required": ["access_token", "api_key", "client_id", "plaid_env"], + "additionalProperties": true, + "properties": { + "access_token": { + "type": "string", + "title": "Access Token", + "description": "The end-user's Link access token." + }, + "api_key": { + "title": "API Key", + "type": "string", + "description": "The Plaid API key to use to hit the API.", + "airbyte_secret": true + }, + "client_id": { + "title": "Client ID", + "type": "string", + "description": "The Plaid client id" + }, + "plaid_env": { + "title": "Plaid Environment", + "type": "string", + "enum": ["sandbox", "development", "production"], + "description": "The Plaid environment" + }, + "start_date": { + "title": "Start Date", + "type": "string", + "description": "The date from which you'd like to replicate data for Plaid in the format YYYY-MM-DD. All data generated after this date will be replicated.", + "examples": ["2021-03-01"], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "603ba446-3d75-41d7-92f3-aba901f8b897", + "name": "Plausible", + "dockerRepository": "airbyte/source-plausible", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/plausible", + "icon": "plausible.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/plausible", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Plausible Spec", + "type": "object", + "required": ["api_key", "site_id"], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "title": "Plausible API key", + "description": "Plausible API Key. See the docs for information on how to generate this key.", + "airbyte_secret": true + }, + "site_id": { + "type": "string", + "title": "Target website domain", + "description": "The domain of the site you want to retrieve data for. Enter the name of your site as configured on Plausible, i.e., excluding \"https://\" and \"www\". Can be retrieved from the 'domain' field in your Plausible site settings.", + "pattern": "^[A-Za-z0-9-.]+\\.[A-Z-a-z0-9-.]+", + "examples": ["airbyte.com", "docs.airbyte.com"] + }, + "start_date": { + "type": "string", + "title": "Data start date", + "description": "Start date for data to retrieve, in ISO-8601 format.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": ["YYYY-MM-DD"] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "b0dd65f1-081f-4731-9c51-38e9e6aa0ebf", + "name": "Pocket", + "dockerRepository": "airbyte/source-pocket", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/pocket", + "icon": "pocket.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/pocket", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Pocket Spec", + "type": "object", + "required": ["consumer_key", "access_token"], + "additionalProperties": true, + "properties": { + "consumer_key": { + "type": "string", + "title": "Consumer Key", + "description": "Your application's Consumer Key.", + "airbyte_secret": true, + "order": 0 + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "The user's Pocket access token.", + "airbyte_secret": true, + "order": 1 + }, + "state": { + "type": "string", + "title": "State", + "description": "Select the state of the items to retrieve.", + "order": 2, + "enum": ["unread", "archive", "all"] + }, + "favorite": { + "type": "boolean", + "title": "Is Favorite?", + "description": "Retrieve only favorited items.", + "default": false, + "order": 3 + }, + "tag": { + "type": "string", + "title": "Tag Name", + "description": "Return only items tagged with this tag name. Use _untagged_ for retrieving only untagged items.", + "order": 4 + }, + "content_type": { + "type": "string", + "title": "Content Type", + "description": "Select the content type of the items to retrieve.", + "order": 5, + "enum": ["article", "video", "image"] + }, + "sort": { + "type": "string", + "title": "Sort By", + "description": "Sort retrieved items by the given criteria.", + "order": 6, + "enum": ["newest", "oldest", "title", "site"] + }, + "detail_type": { + "type": "string", + "title": "Detail Type", + "description": "Select the granularity of the information about each item.", + "order": 7, + "enum": ["simple", "complete"] + }, + "search": { + "type": "string", + "title": "Search Query", + "description": "Only return items whose title or url contain the `search` string.", + "order": 8 + }, + "domain": { + "type": "string", + "title": "Domain", + "description": "Only return items from a particular `domain`.", + "order": 9 + }, + "since": { + "type": "string", + "title": "Since", + "description": "Only return items modified since the given timestamp.", + "pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}", + "examples": ["2022-10-20 14:14:14"], + "order": 10 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "6371b14b-bc68-4236-bfbd-468e8df8e968", + "name": "PokeAPI", + "dockerRepository": "airbyte/source-pokeapi", + "dockerImageTag": "0.1.5", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/pokeapi", + "icon": "pokeapi.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/pokeapi", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Pokeapi Spec", + "type": "object", + "required": ["pokemon_name"], + "additionalProperties": false, + "properties": { + "pokemon_name": { + "type": "string", + "title": "Pokemon Name", + "description": "Pokemon requested from the API.", + "pattern": "^[a-z0-9_\\-]+$", + "examples": ["ditto", "luxray", "snorlax"] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "5807d72f-0abc-49f9-8fa5-ae820007032b", + "name": "Polygon Stock API", + "dockerRepository": "airbyte/source-polygon-stock-api", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/polygon-stock-api", + "icon": "polygon.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/airtable", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Weather API Spec", + "type": "object", + "required": [ + "apiKey", + "stocksTicker", + "multiplier", + "timespan", + "start_date", + "end_date" + ], + "additionalProperties": true, + "properties": { + "apiKey": { + "title": "API Key", + "type": "string", + "description": "Your API ACCESS Key", + "airbyte_secret": true + }, + "stocksTicker": { + "title": "Stock Ticker", + "type": "string", + "description": "The exchange symbol that this item is traded under.", + "examples": ["IBM", "MSFT"] + }, + "multiplier": { + "title": "Multiplier", + "type": "integer", + "description": "The size of the timespan multiplier.", + "examples": [1, 2] + }, + "timespan": { + "title": "Timespan", + "type": "string", + "description": "The size of the time window.", + "examples": ["day"] + }, + "start_date": { + "title": "Start Date", + "type": "string", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "description": "The beginning date for the aggregate window.", + "examples": ["2020-10-14"], + "format": "date" + }, + "end_date": { + "title": "End Date", + "type": "string", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "description": "The target date for the aggregate window.", + "examples": ["2020-10-14"], + "format": "date" + }, + "adjusted": { + "title": "Adjusted", + "type": "string", + "description": "Determines whether or not the results are adjusted for splits. By default, results are adjusted and set to true. Set this to false to get results that are NOT adjusted for splits.", + "examples": ["true", "false"] + }, + "sort": { + "title": "Sort", + "type": "string", + "description": "Sort the results by timestamp. asc will return results in ascending order (oldest at the top), desc will return results in descending order (newest at the top).", + "examples": ["asc", "desc"] + }, + "limit": { + "title": "Limit", + "type": "integer", + "description": "The target date for the aggregate window.", + "examples": [100, 120] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": ["api.polygon.io"] + } + }, + { + "sourceDefinitionId": "af6d50ee-dddf-4126-a8ee-7faee990774f", + "name": "PostHog", + "dockerRepository": "airbyte/source-posthog", + "dockerImageTag": "0.1.9", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/posthog", + "icon": "posthog.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/posthog", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "PostHog Spec", + "type": "object", + "required": ["api_key", "start_date"], + "properties": { + "start_date": { + "title": "Start Date", + "type": "string", + "description": "The date from which you'd like to replicate the data. Any data before this date will not be replicated.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": ["2021-01-01T00:00:00Z"], + "format": "date-time" + }, + "api_key": { + "type": "string", + "airbyte_secret": true, + "title": "API Key", + "description": "API Key. See the docs for information on how to generate this key." + }, + "base_url": { + "type": "string", + "default": "https://app.posthog.com", + "title": "Base URL", + "description": "Base PostHog url. Defaults to PostHog Cloud (https://app.posthog.com).", + "examples": ["https://posthog.example.com"] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": ["${base_url}", "app.posthog.com"] + } + }, + { + "sourceDefinitionId": "decd338e-5647-4c0b-adf4-da0e75f5a750", + "name": "Postgres", + "dockerRepository": "airbyte/source-postgres", + "dockerImageTag": "2.0.25", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/postgres", + "icon": "postgresql.svg", + "sourceType": "database", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/postgres", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Postgres Source Spec", + "type": "object", + "required": ["host", "port", "database", "username"], + "properties": { + "host": { + "title": "Host", + "description": "Hostname of the database.", + "type": "string", + "order": 0, + "group": "db" + }, + "port": { + "title": "Port", + "description": "Port of the database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 5432, + "examples": ["5432"], + "order": 1, + "group": "db" + }, + "database": { + "title": "Database Name", + "description": "Name of the database.", + "type": "string", + "order": 2, + "group": "db" + }, + "schemas": { + "title": "Schemas", + "description": "The list of schemas (case sensitive) to sync from. Defaults to public.", + "type": "array", + "items": { + "type": "string" + }, + "minItems": 0, + "uniqueItems": true, + "default": ["public"], + "order": 3, + "group": "db" + }, + "username": { + "title": "Username", + "description": "Username to access the database.", + "type": "string", + "order": 4, + "group": "auth" + }, + "password": { + "title": "Password", + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 5, + "group": "auth", + "always_show": true + }, + "jdbc_url_params": { + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (Eg. key1=value1&key2=value2&key3=value3). For more information read about JDBC URL parameters.", + "title": "JDBC URL Parameters (Advanced)", + "type": "string", + "order": 6, + "group": "advanced", + "pattern_descriptor": "key1=value1&key2=value2" + }, + "ssl_mode": { + "title": "SSL Modes", + "description": "SSL connection modes. \n Read more in the docs.", + "type": "object", + "order": 8, + "group": "security", + "oneOf": [ + { + "title": "disable", + "additionalProperties": true, + "description": "Disables encryption of communication between Airbyte and source database.", + "required": ["mode"], + "properties": { + "mode": { + "type": "string", + "const": "disable", + "order": 0 + } + } + }, + { + "title": "allow", + "additionalProperties": true, + "description": "Enables encryption only when required by the source database.", + "required": ["mode"], + "properties": { + "mode": { + "type": "string", + "const": "allow", + "order": 0 + } + } + }, + { + "title": "prefer", + "additionalProperties": true, + "description": "Allows unencrypted connection only if the source database does not support encryption.", + "required": ["mode"], + "properties": { + "mode": { + "type": "string", + "const": "prefer", + "order": 0 + } + } + }, + { + "title": "require", + "additionalProperties": true, + "description": "Always require encryption. If the source database server does not support encryption, connection will fail.", + "required": ["mode"], + "properties": { + "mode": { + "type": "string", + "const": "require", + "order": 0 + } + } + }, + { + "title": "verify-ca", + "additionalProperties": true, + "description": "Always require encryption and verifies that the source database server has a valid SSL certificate.", + "required": ["mode", "ca_certificate"], + "properties": { + "mode": { + "type": "string", + "const": "verify-ca", + "order": 0 + }, + "ca_certificate": { + "type": "string", + "title": "CA Certificate", + "description": "CA certificate", + "airbyte_secret": true, + "multiline": true, + "order": 1 + }, + "client_certificate": { + "type": "string", + "title": "Client Certificate", + "description": "Client certificate", + "airbyte_secret": true, + "multiline": true, + "order": 2, + "always_show": true + }, + "client_key": { + "type": "string", + "title": "Client Key", + "description": "Client key", + "airbyte_secret": true, + "multiline": true, + "order": 3, + "always_show": true + }, + "client_key_password": { + "type": "string", + "title": "Client key password", + "description": "Password for keystorage. If you do not add it - the password will be generated automatically.", + "airbyte_secret": true, + "order": 4 + } + } + }, + { + "title": "verify-full", + "additionalProperties": true, + "description": "This is the most secure mode. Always require encryption and verifies the identity of the source database server.", + "required": ["mode", "ca_certificate"], + "properties": { + "mode": { + "type": "string", + "const": "verify-full", + "order": 0 + }, + "ca_certificate": { + "type": "string", + "title": "CA Certificate", + "description": "CA certificate", + "airbyte_secret": true, + "multiline": true, + "order": 1 + }, + "client_certificate": { + "type": "string", + "title": "Client Certificate", + "description": "Client certificate", + "airbyte_secret": true, + "multiline": true, + "order": 2, + "always_show": true + }, + "client_key": { + "type": "string", + "title": "Client Key", + "description": "Client key", + "airbyte_secret": true, + "multiline": true, + "order": 3, + "always_show": true + }, + "client_key_password": { + "type": "string", + "title": "Client key password", + "description": "Password for keystorage. If you do not add it - the password will be generated automatically.", + "airbyte_secret": true, + "order": 4 + } + } + } + ] + }, + "replication_method": { + "type": "object", + "title": "Replication Method", + "description": "Replication method for extracting data from the database.", + "order": 9, + "group": "advanced", + "oneOf": [ + { + "title": "Standard", + "description": "Standard replication requires no setup on the DB side but will not be able to represent deletions incrementally.", + "required": ["method"], + "properties": { + "method": { + "type": "string", + "const": "Standard", + "order": 0 + } + } + }, + { + "title": "Logical Replication (CDC)", + "description": "Logical replication uses the Postgres write-ahead log (WAL) to detect inserts, updates, and deletes. This needs to be configured on the source database itself. Only available on Postgres 10 and above. Read the docs.", + "required": ["method", "replication_slot", "publication"], + "additionalProperties": true, + "properties": { + "method": { + "type": "string", + "const": "CDC", + "order": 1 + }, + "plugin": { + "type": "string", + "title": "Plugin", + "description": "A logical decoding plugin installed on the PostgreSQL server.", + "enum": ["pgoutput"], + "default": "pgoutput", + "order": 2 + }, + "replication_slot": { + "type": "string", + "title": "Replication Slot", + "description": "A plugin logical replication slot. Read about replication slots.", + "order": 3 + }, + "publication": { + "type": "string", + "title": "Publication", + "description": "A Postgres publication used for consuming changes. Read about publications and replication identities.", + "order": 4 + }, + "initial_waiting_seconds": { + "type": "integer", + "title": "Initial Waiting Time in Seconds (Advanced)", + "description": "The amount of time the connector will wait when it launches to determine if there is new data to sync or not. Defaults to 300 seconds. Valid range: 120 seconds to 1200 seconds. Read about initial waiting time.", + "default": 300, + "order": 5, + "min": 120, + "max": 1200 + }, + "lsn_commit_behaviour": { + "type": "string", + "title": "LSN commit behaviour", + "description": "Determines when Airbtye should flush the LSN of processed WAL logs in the source database. `After loading Data in the destination` is default. If `While reading Data` is selected, in case of a downstream failure (while loading data into the destination), next sync would result in a full sync.", + "enum": [ + "While reading Data", + "After loading Data in the destination" + ], + "default": "After loading Data in the destination", + "order": 6 + } + } + } + ] + }, + "tunnel_method": { + "type": "object", + "title": "SSH Tunnel Method", + "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", + "oneOf": [ + { + "title": "No Tunnel", + "required": ["tunnel_method"], + "properties": { + "tunnel_method": { + "description": "No ssh tunnel needed to connect to database", + "type": "string", + "const": "NO_TUNNEL", + "order": 0 + } + } + }, + { + "title": "SSH Key Authentication", + "required": [ + "tunnel_method", + "tunnel_host", + "tunnel_port", + "tunnel_user", + "ssh_key" + ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": ["22"], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host.", + "type": "string", + "order": 3 + }, + "ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + }, + { + "title": "Password Authentication", + "required": [ + "tunnel_method", + "tunnel_host", + "tunnel_port", + "tunnel_user", + "tunnel_user_password" + ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": ["22"], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host", + "type": "string", + "order": 3 + }, + "tunnel_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 4 + } + } + } + ], + "group": "security" + } + }, + "groups": [ + { + "id": "db" + }, + { + "id": "auth" + }, + { + "id": "security", + "title": "Security" + }, + { + "id": "advanced", + "title": "Advanced" + } + ] + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["${host}", "${tunnel_method.tunnel_host}"] + }, + "maxSecondsBetweenMessages": 7200 + }, + { + "sourceDefinitionId": "cde75ca1-1e28-4a0f-85bb-90c546de9f1f", + "name": "Postmark App", + "dockerRepository": "airbyte/source-postmarkapp", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/postmarkapp", + "icon": "postmark.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Postmarkapp Spec", + "type": "object", + "required": ["X-Postmark-Server-Token", "X-Postmark-Account-Token"], + "additionalProperties": true, + "properties": { + "X-Postmark-Server-Token": { + "title": "X-Postmark-Server-Token", + "type": "string", + "description": "API Key for server", + "airbyte_secret": true + }, + "X-Postmark-Account-Token": { + "title": "X-Postmark-Account-Token", + "type": "string", + "description": "API Key for account", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "d60a46d4-709f-4092-a6b7-2457f7d455f5", + "name": "PrestaShop", + "dockerRepository": "airbyte/source-prestashop", + "dockerImageTag": "0.3.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/prestashop", + "icon": "prestashop.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/prestashop", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "PrestaShop Spec", + "type": "object", + "required": ["access_key", "url", "start_date"], + "properties": { + "access_key": { + "type": "string", + "title": "Access Key", + "description": "Your PrestaShop access key. See the docs for info on how to obtain this.", + "order": 0, + "airbyte_secret": true + }, + "url": { + "type": "string", + "title": "Shop URL", + "description": "Shop URL without trailing slash.", + "order": 1 + }, + "start_date": { + "type": "string", + "title": "Start date", + "description": "The Start date in the format YYYY-MM-DD.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": ["2022-01-01"], + "format": "date", + "order": 2 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": ["${domain}"] + } + }, + { + "sourceDefinitionId": "f636c3c6-4077-45ac-b109-19fc62a283c1", + "name": "Primetric", + "dockerRepository": "airbyte/source-primetric", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/primetric", + "icon": "primetric.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Primetric Spec", + "type": "object", + "required": ["client_id", "client_secret"], + "properties": { + "client_id": { + "type": "string", + "title": "Client ID", + "description": "The Client ID of your Primetric developer application. The Client ID is visible here.", + "pattern": "^[a-zA-Z0-9]+$", + "airbyte_secret": true, + "examples": ["1234aBcD5678EFGh9045Neq79sdDlA15082VMYcj"], + "order": 0 + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "The Client Secret of your Primetric developer application. You can manage your client's credentials here.", + "pattern": "^[a-zA-Z0-9]+$", + "airbyte_secret": true, + "order": 1 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "a4617b39-3c14-44cd-a2eb-6e720f269235", + "name": "Public APIs", + "dockerRepository": "airbyte/source-public-apis", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/public-apis", + "icon": "publicapi.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/public-apis", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Public Apis Spec", + "type": "object", + "required": [], + "properties": {} + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "dbe9b7ae-7b46-4e44-a507-02a343cf7230", + "name": "Punk API", + "dockerRepository": "airbyte/source-punk-api", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/punk-api", + "icon": "punkapi.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/punk-api", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Punk Api Spec", + "type": "object", + "required": ["brewed_before", "brewed_after"], + "additionalProperties": true, + "properties": { + "id": { + "title": "Beers with specific ID", + "type": "string", + "description": "To extract specific data with Unique ID", + "examples": [1, 22] + }, + "brewed_before": { + "title": "Brewed before data to get incremental reads", + "type": "string", + "description": "To extract specific data with Unique ID", + "pattern": "^[0-9]{2}-[0-9]{4}$", + "examples": ["MM-YYYY"] + }, + "brewed_after": { + "title": "Brewed after data to get incremental reads", + "type": "string", + "description": "To extract specific data with Unique ID", + "pattern": "^[0-9]{2}-[0-9]{4}$", + "examples": ["MM-YYYY"] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "88ecd3a8-5f5b-11ed-9b6a-0242ac120002", + "name": "PyPI", + "dockerRepository": "airbyte/source-pypi", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/pypi", + "icon": "pypi.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/pypi", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Pypi Spec", + "type": "object", + "required": ["project_name"], + "additionalProperties": true, + "properties": { + "project_name": { + "type": "string", + "title": "PyPI Package", + "description": "Name of the project/package. Can only be in lowercase with hyphen. This is the name used using pip command for installing the package.", + "examples": ["sampleproject"] + }, + "version": { + "title": "Package Version", + "type": "string", + "description": "Version of the project/package. Use it to find a particular release instead of all releases.", + "examples": ["1.2.0"] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "f7c0b910-5f66-11ed-9b6a-0242ac120002", + "name": "Qonto", + "dockerRepository": "airbyte/source-qonto", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/public-qonto", + "icon": "qonto.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Qonto Spec", + "type": "object", + "required": ["endpoint", "organization_slug", "secret_key", "iban"], + "properties": { + "endpoint": { + "title": "Endpoint", + "type": "string", + "description": "Please choose the right endpoint to use in this connection", + "enum": ["Production", "Test Mocked API Server"] + }, + "organization_slug": { + "title": "Organization slug", + "type": "string", + "description": "Organization slug used in Qonto" + }, + "secret_key": { + "title": "Secret Key", + "type": "string", + "description": "Secret key of the Qonto account", + "airbyte_secret": true + }, + "iban": { + "title": "IBAN", + "type": "string", + "description": "International Bank Account Number linked used with your Qonto Account", + "pattern": "^[A-Z0-9]*$" + }, + "start_date": { + "title": "Start date", + "type": "string", + "description": "Start getting data from that date.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": ["YYYY-MM-DD"] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "b08e4776-d1de-4e80-ab5c-1e51dad934a2", + "name": "Qualaroo", + "dockerRepository": "airbyte/source-qualaroo", + "dockerImageTag": "0.1.2", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/qualaroo", + "icon": "qualaroo.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/qualaroo", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Qualaroo Spec", + "type": "object", + "required": ["token", "key", "start_date"], + "additionalProperties": true, + "properties": { + "token": { + "type": "string", + "title": "API token", + "description": "A Qualaroo token. See the docs for instructions on how to generate it.", + "airbyte_secret": true + }, + "key": { + "type": "string", + "title": "API key", + "description": "A Qualaroo token. See the docs for instructions on how to generate it.", + "airbyte_secret": true + }, + "start_date": { + "type": "string", + "title": "Start Date", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}Z$", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", + "examples": ["2021-03-01T00:00:00.000Z"] + }, + "survey_ids": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[0-9]{1,8}$" + }, + "title": "Qualaroo survey IDs", + "description": "IDs of the surveys from which you'd like to replicate data. If left empty, data from all surveys to which you have access will be replicated." + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": [], + "oauthFlowInitParameters": [], + "oauthFlowOutputParameters": [["token"], ["key"]] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "cf9c4355-b171-4477-8f2d-6c5cc5fc8b7e", + "name": "QuickBooks", + "dockerRepository": "airbyte/source-quickbooks", + "dockerImageTag": "2.0.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/quickbooks", + "icon": "quickbooks.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/quickbooks", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Source QuickBooks Spec", + "type": "object", + "required": ["credentials", "start_date", "sandbox"], + "additionalProperties": true, + "properties": { + "credentials": { + "title": "Authorization Method", + "type": "object", + "order": 0, + "oneOf": [ + { + "type": "object", + "title": "OAuth2.0", + "required": [ + "client_id", + "client_secret", + "refresh_token", + "access_token", + "token_expiry_date", + "realm_id" + ], + "properties": { + "auth_type": { + "type": "string", + "const": "oauth2.0" + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "Identifies which app is making the request. Obtain this value from the Keys tab on the app profile via My Apps on the developer site. There are two versions of this key: development and production." + }, + "client_secret": { + "description": " Obtain this value from the Keys tab on the app profile via My Apps on the developer site. There are two versions of this key: development and production.", + "title": "Client Secret", + "type": "string", + "airbyte_secret": true + }, + "refresh_token": { + "description": "A token used when refreshing the access token.", + "title": "Refresh Token", + "type": "string", + "airbyte_secret": true + }, + "access_token": { + "description": "Access token fot making authenticated requests.", + "title": "Access Token", + "type": "string", + "airbyte_secret": true + }, + "token_expiry_date": { + "type": "string", + "title": "Token Expiry Date", + "description": "The date-time when the access token should be refreshed.", + "format": "date-time" + }, + "realm_id": { + "description": "Labeled Company ID. The Make API Calls panel is populated with the realm id and the current access token.", + "title": "Realm ID", + "type": "string", + "airbyte_secret": true + } + } + } + ] + }, + "start_date": { + "order": 1, + "description": "The default value to use if no bookmark exists for an endpoint (rfc3339 date string). E.g, 2021-03-20T00:00:00+00:00. Any data before this date will not be replicated.", + "title": "Start Date", + "type": "string", + "format": "date-time", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": ["2021-03-20T00:00:00+00:00"] + }, + "sandbox": { + "order": 2, + "description": "Determines whether to use the sandbox or production environment.", + "title": "Sandbox", + "type": "boolean", + "default": false + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": [ + "sandbox-quickbooks.api.intuit.com", + "quickbooks.api.intuit.com", + "oauth.platform.intuit.com" + ] + } + }, + { + "sourceDefinitionId": "9b6cc0c0-da81-4103-bbfd-5279e18a849a", + "name": "Railz", + "dockerRepository": "airbyte/source-railz", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/railz", + "icon": "railz.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Railz Spec", + "type": "object", + "required": ["client_id", "secret_key", "start_date"], + "properties": { + "client_id": { + "type": "string", + "title": "Client ID", + "description": "Client ID (client_id)", + "order": 0 + }, + "secret_key": { + "type": "string", + "title": "Secret key", + "description": "Secret key (secret_key)", + "order": 1, + "airbyte_secret": true + }, + "start_date": { + "type": "string", + "title": "Start date", + "description": "Start date", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "order": 2 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "45d2e135-2ede-49e1-939f-3e3ec357a65e", + "name": "Recharge", + "dockerRepository": "airbyte/source-recharge", + "dockerImageTag": "0.2.9", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/recharge", + "icon": "recharge.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/recharge", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Recharge Spec", + "type": "object", + "required": ["start_date", "access_token"], + "additionalProperties": true, + "properties": { + "start_date": { + "type": "string", + "title": "Start Date", + "description": "The date from which you'd like to replicate data for Recharge API, in the format YYYY-MM-DDT00:00:00Z. Any data before this date will not be replicated.", + "examples": ["2021-05-14T00:00:00Z"], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "format": "date-time" + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "The value of the Access Token generated. See the docs for more information.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["api.rechargeapps.com"] + } + }, + { + "sourceDefinitionId": "25d7535d-91e0-466a-aa7f-af81578be277", + "name": "Recreation", + "dockerRepository": "airbyte/source-recreation", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/recreation", + "icon": "recreation.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/recreation", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Recreation Spec", + "type": "object", + "required": ["apikey"], + "additionalProperties": true, + "properties": { + "apikey": { + "title": "API Key", + "type": "string", + "description": "API Key", + "airbyte_secret": true + }, + "query_campsites": { + "title": "Query Campsite", + "type": "string" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "3b046ac7-d8d3-4eb3-b122-f96b2a16d8a8", + "name": "Recruitee", + "dockerRepository": "airbyte/source-recruitee", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/recruitee", + "icon": "recruitee.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/recruitee", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Recruitee Spec", + "type": "object", + "required": ["api_key", "company_id"], + "additionalProperties": true, + "properties": { + "api_key": { + "title": "API Key", + "type": "string", + "description": "Recruitee API Key. See here.", + "airbyte_secret": true + }, + "company_id": { + "title": "Company ID", + "type": "integer", + "description": "Recruitee Company ID. You can also find this ID on the Recruitee API tokens page." + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "cd42861b-01fc-4658-a8ab-5d11d0510f01", + "name": "Recurly", + "dockerRepository": "airbyte/source-recurly", + "dockerImageTag": "0.4.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/recurly", + "icon": "recurly.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/recurly", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Recurly Source Spec", + "type": "object", + "required": ["api_key"], + "additionalProperties": false, + "properties": { + "api_key": { + "type": "string", + "title": "API Key", + "airbyte_secret": true, + "description": "Recurly API Key. See the docs for more information on how to generate this key.", + "order": 1 + }, + "begin_time": { + "type": "string", + "description": "ISO8601 timestamp from which the replication from Recurly API will start from.", + "examples": ["2021-12-01T00:00:00"], + "pattern": "^$|^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}$", + "order": 2 + }, + "end_time": { + "type": "string", + "description": "ISO8601 timestamp to which the replication from Recurly API will stop. Records after that date won't be imported.", + "examples": ["2021-12-01T00:00:00"], + "pattern": "^$|^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}$", + "order": 3 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "e87ffa8e-a3b5-f69c-9076-6011339de1f6", + "name": "Redshift", + "dockerRepository": "airbyte/source-redshift", + "dockerImageTag": "0.3.16", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/redshift", + "icon": "redshift.svg", + "sourceType": "database", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/destinations/redshift", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Redshift Source Spec", + "type": "object", + "required": ["host", "port", "database", "username", "password"], + "properties": { + "host": { + "title": "Host", + "description": "Host Endpoint of the Redshift Cluster (must include the cluster-id, region and end with .redshift.amazonaws.com).", + "type": "string", + "order": 1 + }, + "port": { + "title": "Port", + "description": "Port of the database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 5439, + "examples": ["5439"], + "order": 2 + }, + "database": { + "title": "Database", + "description": "Name of the database.", + "type": "string", + "examples": ["master"], + "order": 3 + }, + "schemas": { + "title": "Schemas", + "description": "The list of schemas to sync from. Specify one or more explicitly or keep empty to process all schemas. Schema names are case sensitive.", + "type": "array", + "items": { + "type": "string" + }, + "minItems": 0, + "uniqueItems": true, + "examples": ["public"], + "order": 4 + }, + "username": { + "title": "Username", + "description": "Username to use to access the database.", + "type": "string", + "order": 5 + }, + "password": { + "title": "Password", + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 6 + }, + "jdbc_url_params": { + "title": "JDBC URL Params", + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", + "type": "string", + "order": 7 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "8cc6537e-f8a6-423c-b960-e927af76116e", + "name": "Reply.io", + "dockerRepository": "airbyte/source-reply-io", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/reply-io", + "icon": "reply-io.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/reply-io", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Reply Io Spec", + "type": "object", + "required": ["api_key"], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "title": "API Token", + "description": "The API Token for Reply", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "db04ecd1-42e7-4115-9cec-95812905c626", + "name": "Retently", + "dockerRepository": "airbyte/source-retently", + "dockerImageTag": "0.1.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/retently", + "icon": "retently.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Retently Api Spec", + "type": "object", + "additionalProperties": true, + "properties": { + "credentials": { + "title": "Authentication Mechanism", + "description": "Choose how to authenticate to Retently", + "type": "object", + "oneOf": [ + { + "type": "object", + "title": "Authenticate via Retently (OAuth)", + "required": ["client_id", "client_secret", "refresh_token"], + "additionalProperties": true, + "properties": { + "auth_type": { + "type": "string", + "const": "Client", + "order": 0 + }, + "client_id": { + "title": "Client ID", + "type": "string", + "description": "The Client ID of your Retently developer application." + }, + "client_secret": { + "title": "Client Secret", + "type": "string", + "description": "The Client Secret of your Retently developer application.", + "airbyte_secret": true + }, + "refresh_token": { + "title": "Refresh Token", + "type": "string", + "description": "Retently Refresh Token which can be used to fetch new Bearer Tokens when the current one expires.", + "airbyte_secret": true + } + } + }, + { + "type": "object", + "title": "Authenticate with API Token", + "required": ["api_key"], + "additionalProperties": true, + "properties": { + "auth_type": { + "type": "string", + "const": "Token", + "order": 0 + }, + "api_key": { + "title": "API Token", + "description": "Retently API Token. See the docs for more information on how to obtain this key.", + "type": "string", + "airbyte_secret": true + } + } + } + ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": ["credentials", "auth_type"], + "predicate_value": "Client", + "oauth_config_specification": { + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": true, + "properties": { + "refresh_token": { + "type": "string", + "path_in_connector_config": ["credentials", "refresh_token"] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": true, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": true, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": ["credentials", "client_id"] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": ["credentials", "client_secret"] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "fb141f29-be2a-450b-a4f2-2cd203a00f84", + "name": "RD Station Marketing", + "dockerRepository": "airbyte/source-rd-station-marketing", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/rd-station-marketing", + "icon": "rdstation.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/rd-station-marketing", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "RD Station Marketing Spec", + "type": "object", + "required": ["start_date"], + "additionalProperties": true, + "properties": { + "authorization": { + "type": "object", + "title": "Authentication Type", + "description": "Choose one of the possible authorization method", + "oneOf": [ + { + "title": "Sign in via RD Station (OAuth)", + "type": "object", + "required": ["auth_type"], + "properties": { + "auth_type": { + "type": "string", + "const": "Client", + "order": 0 + }, + "client_id": { + "title": "Client ID", + "type": "string", + "description": "The Client ID of your RD Station developer application.", + "airbyte_secret": true + }, + "client_secret": { + "title": "Client Secret", + "type": "string", + "description": "The Client Secret of your RD Station developer application", + "airbyte_secret": true + }, + "refresh_token": { + "title": "Refresh Token", + "type": "string", + "description": "The token for obtaining the new access token.", + "airbyte_secret": true + } + } + } + ] + }, + "start_date": { + "title": "Start Date", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated. When specified and not None, then stream will behave as incremental", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": ["2017-01-25T00:00:00Z"], + "type": "string" + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": ["authorization", "0"], + "oauthFlowInitParameters": [["client_id"], ["client_secret"]], + "oauthFlowOutputParameters": [["refresh_token"]] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "d78e5de0-aa44-4744-aa4f-74c818ccfe19", + "name": "RKI Covid", + "dockerRepository": "airbyte/source-rki-covid", + "dockerImageTag": "0.1.2", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/rki-covid", + "icon": "rki.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/rki-covid", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "RKI Covid Spec", + "type": "object", + "required": ["start_date"], + "additionalProperties": true, + "properties": { + "start_date": { + "type": "string", + "title": "Start Date", + "description": "UTC date in the format 2017-01-25. Any data before this date will not be replicated.", + "order": 1 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "0efee448-6948-49e2-b786-17db50647908", + "name": "RSS", + "dockerRepository": "airbyte/source-rss", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/rss", + "icon": "rss.svg", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/rss", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "RSS Spec", + "type": "object", + "required": ["url"], + "properties": { + "url": { + "type": "string", + "description": "RSS Feed URL" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false + }, + { + "sourceDefinitionId": "921d9608-3915-450b-8078-0af18801ea1b", + "name": "Rocket.chat", + "dockerRepository": "airbyte/source-rocket-chat", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/rocket-chat", + "icon": "rocket-chat.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/rocket-chat", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Rocket Chat Spec", + "type": "object", + "required": ["token", "user_id", "endpoint"], + "additionalProperties": true, + "properties": { + "endpoint": { + "title": "Endpoint", + "type": "string", + "description": "Your rocket.chat instance URL.", + "examples": [ + "https://airbyte-connector-poc.rocket.chat", + "https://hey.yoursite.com" + ] + }, + "token": { + "title": "Token", + "type": "string", + "description": "Your API Token. See here. The token is case sensitive.", + "airbyte_secret": true + }, + "user_id": { + "title": "User ID.", + "type": "string", + "description": "Your User Id." + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "69589781-7828-43c5-9f63-8925b1c1ccc2", + "name": "S3", + "dockerRepository": "airbyte/source-s3", + "dockerImageTag": "2.1.2", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/s3", + "icon": "s3.svg", + "sourceType": "file", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/s3", + "changelogUrl": "https://docs.airbyte.com/integrations/sources/s3", + "connectionSpecification": { + "title": "S3 Source Spec", + "type": "object", + "properties": { + "dataset": { + "title": "Output Stream Name", + "description": "The name of the stream you would like this source to output. Can contain letters, numbers, or underscores.", + "pattern": "^([A-Za-z0-9-_]+)$", + "order": 0, + "type": "string" + }, + "path_pattern": { + "title": "Pattern of files to replicate", + "description": "A regular expression which tells the connector which files to replicate. All files which match this pattern will be replicated. Use | to separate multiple patterns. See this page to understand pattern syntax (GLOBSTAR and SPLIT flags are enabled). Use pattern ** to pick up all files.", + "examples": [ + "**", + "myFolder/myTableFiles/*.csv|myFolder/myOtherTableFiles/*.csv" + ], + "order": 10, + "type": "string" + }, + "format": { + "title": "File Format", + "description": "The format of the files you'd like to replicate", + "default": "csv", + "order": 20, + "type": "object", + "oneOf": [ + { + "title": "CSV", + "description": "This connector utilises PyArrow (Apache Arrow) for CSV parsing.", + "type": "object", + "properties": { + "filetype": { + "title": "Filetype", + "const": "csv", + "type": "string" + }, + "delimiter": { + "title": "Delimiter", + "description": "The character delimiting individual cells in the CSV data. This may only be a 1-character string. For tab-delimited data enter '\\t'.", + "default": ",", + "minLength": 1, + "order": 0, + "type": "string" + }, + "infer_datatypes": { + "title": "Infer Datatypes", + "description": "Configures whether a schema for the source should be inferred from the current data or not. If set to false and a custom schema is set, then the manually enforced schema is used. If a schema is not manually set, and this is set to false, then all fields will be read as strings", + "default": true, + "order": 1, + "type": "boolean" + }, + "quote_char": { + "title": "Quote Character", + "description": "The character used for quoting CSV values. To disallow quoting, make this field blank.", + "default": "\"", + "order": 2, + "type": "string" + }, + "escape_char": { + "title": "Escape Character", + "description": "The character used for escaping special characters. To disallow escaping, leave this field blank.", + "order": 3, + "type": "string" + }, + "encoding": { + "title": "Encoding", + "description": "The character encoding of the CSV data. Leave blank to default to UTF8. See list of python encodings for allowable options.", + "default": "utf8", + "order": 4, + "type": "string" + }, + "double_quote": { + "title": "Double Quote", + "description": "Whether two quotes in a quoted CSV value denote a single quote in the data.", + "default": true, + "order": 5, + "type": "boolean" + }, + "newlines_in_values": { + "title": "Allow newlines in values", + "description": "Whether newline characters are allowed in CSV values. Turning this on may affect performance. Leave blank to default to False.", + "default": false, + "order": 6, + "type": "boolean" + }, + "additional_reader_options": { + "title": "Additional Reader Options", + "description": "Optionally add a valid JSON string here to provide additional options to the csv reader. Mappings must correspond to options detailed here. 'column_types' is used internally to handle schema so overriding that would likely cause problems.", + "examples": [ + "{\"timestamp_parsers\": [\"%m/%d/%Y %H:%M\", \"%Y/%m/%d %H:%M\"], \"strings_can_be_null\": true, \"null_values\": [\"NA\", \"NULL\"]}" + ], + "order": 7, + "type": "string" + }, + "advanced_options": { + "title": "Advanced Options", + "description": "Optionally add a valid JSON string here to provide additional Pyarrow ReadOptions. Specify 'column_names' here if your CSV doesn't have header, or if you want to use custom column names. 'block_size' and 'encoding' are already used above, specify them again here will override the values above.", + "examples": [ + "{\"column_names\": [\"column1\", \"column2\"]}" + ], + "order": 8, + "type": "string" + }, + "block_size": { + "title": "Block Size", + "description": "The chunk size in bytes to process at a time in memory from each file. If your data is particularly wide and failing during schema detection, increasing this should solve it. Beware of raising this too high as you could hit OOM errors.", + "default": 10000, + "minimum": 1, + "maximum": 2147483647, + "order": 9, + "type": "integer" + } + } + }, + { + "title": "Parquet", + "description": "This connector utilises PyArrow (Apache Arrow) for Parquet parsing.", + "type": "object", + "properties": { + "filetype": { + "title": "Filetype", + "const": "parquet", + "type": "string" + }, + "columns": { + "title": "Selected Columns", + "description": "If you only want to sync a subset of the columns from the file(s), add the columns you want here as a comma-delimited list. Leave it empty to sync all columns.", + "order": 0, + "type": "array", + "items": { + "type": "string" + } + }, + "batch_size": { + "title": "Record batch size", + "description": "Maximum number of records per batch read from the input files. Batches may be smaller if there aren’t enough rows in the file. This option can help avoid out-of-memory errors if your data is particularly wide.", + "default": 65536, + "order": 1, + "type": "integer" + }, + "buffer_size": { + "title": "Buffer Size", + "description": "Perform read buffering when deserializing individual column chunks. By default every group column will be loaded fully to memory. This option can help avoid out-of-memory errors if your data is particularly wide.", + "default": 2, + "type": "integer" + } + } + }, + { + "title": "Avro", + "description": "This connector utilises fastavro for Avro parsing.", + "type": "object", + "properties": { + "filetype": { + "title": "Filetype", + "const": "avro", + "type": "string" + } + } + }, + { + "title": "Jsonl", + "description": "This connector uses PyArrow for JSON Lines (jsonl) file parsing.", + "type": "object", + "properties": { + "filetype": { + "title": "Filetype", + "const": "jsonl", + "type": "string" + }, + "newlines_in_values": { + "title": "Allow newlines in values", + "description": "Whether newline characters are allowed in JSON values. Turning this on may affect performance. Leave blank to default to False.", + "default": false, + "order": 0, + "type": "boolean" + }, + "unexpected_field_behavior": { + "title": "Unexpected field behavior", + "description": "How JSON fields outside of explicit_schema (if given) are treated. Check PyArrow documentation for details", + "default": "infer", + "examples": ["ignore", "infer", "error"], + "order": 1, + "enum": ["ignore", "infer", "error"] + }, + "block_size": { + "title": "Block Size", + "description": "The chunk size in bytes to process at a time in memory from each file. If your data is particularly wide and failing during schema detection, increasing this should solve it. Beware of raising this too high as you could hit OOM errors.", + "default": 0, + "order": 2, + "type": "integer" + } + } + } + ] + }, + "schema": { + "title": "Manually enforced data schema", + "description": "Optionally provide a schema to enforce, as a valid JSON string. Ensure this is a mapping of { \"column\" : \"type\" }, where types are valid JSON Schema datatypes. Leave as {} to auto-infer the schema.", + "default": "{}", + "examples": [ + "{\"column_1\": \"number\", \"column_2\": \"string\", \"column_3\": \"array\", \"column_4\": \"object\", \"column_5\": \"boolean\"}" + ], + "order": 30, + "type": "string" + }, + "provider": { + "title": "S3: Amazon Web Services", + "type": "object", + "properties": { + "bucket": { + "title": "Bucket", + "description": "Name of the S3 bucket where the file(s) exist.", + "order": 0, + "type": "string" + }, + "aws_access_key_id": { + "title": "AWS Access Key ID", + "description": "In order to access private Buckets stored on AWS S3, this connector requires credentials with the proper permissions. If accessing publicly available data, this field is not necessary.", + "airbyte_secret": true, + "order": 1, + "type": "string" + }, + "aws_secret_access_key": { + "title": "AWS Secret Access Key", + "description": "In order to access private Buckets stored on AWS S3, this connector requires credentials with the proper permissions. If accessing publicly available data, this field is not necessary.", + "airbyte_secret": true, + "order": 2, + "type": "string" + }, + "path_prefix": { + "title": "Path Prefix", + "description": "By providing a path-like prefix (e.g. myFolder/thisTable/) under which all the relevant files sit, we can optimize finding these in S3. This is optional but recommended if your bucket contains many folders/files which you don't need to replicate.", + "default": "", + "order": 3, + "type": "string" + }, + "endpoint": { + "title": "Endpoint", + "description": "Endpoint to an S3 compatible service. Leave empty to use AWS.", + "default": "", + "order": 4, + "type": "string" + }, + "start_date": { + "title": "Start Date", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any file modified before this date will not be replicated.", + "examples": ["2021-01-01T00:00:00Z"], + "format": "date-time", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "order": 5, + "type": "string" + } + }, + "required": ["bucket"], + "order": 11, + "description": "Use this to load files from S3 or S3-compatible services" + } + }, + "required": ["dataset", "path_pattern", "provider"] + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ + "overwrite", + "append", + "append_dedup" + ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["*.s3.amazonaws.com"] + } + }, + { + "sourceDefinitionId": "41991d12-d4b5-439e-afd0-260a31d4c53f", + "name": "SalesLoft", + "dockerRepository": "airbyte/source-salesloft", + "dockerImageTag": "1.0.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/salesloft", + "icon": "salesloft.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/salesloft", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Source Salesloft Spec", + "type": "object", + "required": ["credentials", "start_date"], + "additionalProperties": true, + "properties": { + "credentials": { + "order": 0, + "type": "object", + "title": "Credentials", + "oneOf": [ + { + "title": "Authenticate via OAuth", + "type": "object", + "required": [ + "client_id", + "client_secret", + "refresh_token", + "access_token", + "token_expiry_date", + "auth_type" + ], + "properties": { + "auth_type": { + "type": "string", + "const": "oauth2.0" + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "The Client ID of your Salesloft developer application." + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "The Client Secret of your Salesloft developer application.", + "airbyte_secret": true + }, + "access_token": { + "type": "string", + "description": "Access Token for making authenticated requests.", + "airbyte_secret": true + }, + "token_expiry_date": { + "type": "string", + "description": "The date-time when the access token should be refreshed.", + "format": "date-time" + }, + "refresh_token": { + "type": "string", + "title": "Refresh Token", + "description": "The token for obtaining a new access token.", + "airbyte_secret": true + } + } + }, + { + "title": "Authenticate via API Key", + "type": "object", + "required": ["api_key", "auth_type"], + "properties": { + "auth_type": { + "type": "string", + "const": "api_key" + }, + "api_key": { + "type": "string", + "airbyte_secret": true, + "title": "API Key", + "description": "API Key for making authenticated requests. More instruction on how to find this value in our docs" + } + } + } + ] + }, + "start_date": { + "order": 1, + "type": "string", + "title": "Start Date", + "description": "The date from which you'd like to replicate data for Salesloft API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", + "examples": ["2020-11-16T00:00:00Z"], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "format": "date-time" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": ["api.salesloft.com"] + } + }, + { + "sourceDefinitionId": "b117307c-14b6-41aa-9422-947e34922962", + "name": "Salesforce", + "dockerRepository": "airbyte/source-salesforce", + "dockerImageTag": "2.0.11", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/salesforce", + "icon": "salesforce.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/salesforce", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Salesforce Source Spec", + "type": "object", + "required": ["client_id", "client_secret", "refresh_token"], + "additionalProperties": true, + "properties": { + "is_sandbox": { + "title": "Sandbox", + "description": "Toggle if you're using a Salesforce Sandbox", + "type": "boolean", + "default": false, + "order": 1 + }, + "auth_type": { + "type": "string", + "const": "Client" + }, + "client_id": { + "title": "Client ID", + "description": "Enter your Salesforce developer application's Client ID", + "type": "string", + "order": 2 + }, + "client_secret": { + "title": "Client Secret", + "description": "Enter your Salesforce developer application's Client secret", + "type": "string", + "airbyte_secret": true, + "order": 3 + }, + "refresh_token": { + "title": "Refresh Token", + "description": "Enter your application's Salesforce Refresh Token used for Airbyte to access your Salesforce account.", + "type": "string", + "airbyte_secret": true, + "order": 4 + }, + "start_date": { + "title": "Start Date", + "description": "Enter the date in the YYYY-MM-DD format. Airbyte will replicate the data added on and after this date. If this field is blank, Airbyte will replicate the data for last two years.", + "type": "string", + "pattern": "^([0-9]{4}-[0-9]{2}-[0-9]{2}(T[0-9]{2}:[0-9]{2}:[0-9]{2}Z)?)$", + "examples": ["2021-07-25", "2021-07-25T00:00:00Z"], + "format": "date-time", + "order": 5 + }, + "streams_criteria": { + "type": "array", + "order": 6, + "items": { + "type": "object", + "required": ["criteria", "value"], + "properties": { + "criteria": { + "type": "string", + "title": "Search criteria", + "enum": [ + "starts with", + "ends with", + "contains", + "exacts", + "starts not with", + "ends not with", + "not contains", + "not exacts" + ], + "order": 1, + "default": "contains" + }, + "value": { + "type": "string", + "title": "Search value", + "order": 2 + } + } + }, + "title": "Filter Salesforce Objects", + "description": "Filter streams relevant to you" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": ["auth_type"], + "predicate_value": "Client", + "oauth_config_specification": { + "oauth_user_input_from_connector_config_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "is_sandbox": { + "type": "boolean", + "path_in_connector_config": ["is_sandbox"] + } + } + }, + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "refresh_token": { + "type": "string", + "path_in_connector_config": ["refresh_token"] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": ["client_id"] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": ["client_secret"] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["*.salesforce.com"] + } + }, + { + "sourceDefinitionId": "ec5f3102-fb31-4916-99ae-864faf8e7e25", + "name": "SAP Fieldglass", + "dockerRepository": "airbyte/source-sap-fieldglass", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/sap-fieldglass", + "icon": "sapfieldglass.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/sap-fieldglass", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Sap Fieldglass Spec", + "type": "object", + "required": ["api_key"], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "description": "API Key", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "8d7ef552-2c0f-11ec-8d3d-0242ac130003", + "name": "SearchMetrics", + "dockerRepository": "airbyte/source-search-metrics", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/search-metrics", + "icon": "searchmetrics.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/seacrh-metrics", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Source Search Metrics Spec", + "type": "object", + "required": [ + "api_key", + "client_secret", + "country_code", + "start_date" + ], + "additionalProperties": true, + "properties": { + "api_key": { + "title": "API Key", + "type": "string", + "description": "", + "airbyte_secret": true + }, + "client_secret": { + "title": "Client Secret", + "type": "string", + "description": "", + "airbyte_secret": true + }, + "country_code": { + "title": "Country Code", + "type": "string", + "default": "", + "description": "The region of the S3 staging bucket to use if utilising a copy strategy.", + "enum": [ + "", + "AR", + "AU", + "AT", + "BE", + "BR", + "CA", + "CN", + "CO", + "DK", + "FI", + "FR", + "DE", + "HK", + "IN", + "IE", + "IT", + "JP", + "MX", + "NL", + "NO", + "PL", + "RU", + "SG", + "ZA", + "ES", + "SE", + "CH", + "TR", + "US", + "GB" + ], + "order": 2 + }, + "start_date": { + "title": "Start Date", + "type": "string", + "description": "Data generated in SearchMetrics after this date will be replicated. This date must be specified in the format YYYY-MM-DDT00:00:00Z.", + "examples": ["20200925"], + "pattern": "^[0-9]{4}[0-9]{2}[0-9]{2}$" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "da9fc6b9-8059-4be0-b204-f56e22e4d52d", + "name": "Secoda", + "dockerRepository": "airbyte/source-secoda", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/secoda", + "icon": "secoda.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/secoda", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Secoda Spec", + "type": "object", + "required": ["api_key"], + "additionalProperties": true, + "properties": { + "api_key": { + "title": "Api Key", + "type": "string", + "description": "Your API Access Key. See here. The key is case sensitive.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "fbb5fbe2-16ad-4cf4-af7d-ff9d9c316c87", + "name": "Sendgrid", + "dockerRepository": "airbyte/source-sendgrid", + "dockerImageTag": "0.3.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/sendgrid", + "icon": "sendgrid.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/sendgrid", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Sendgrid Spec", + "type": "object", + "required": ["apikey"], + "additionalProperties": true, + "properties": { + "apikey": { + "title": "Sendgrid API key", + "airbyte_secret": true, + "type": "string", + "description": "API Key, use admin to generate this key.", + "order": 0 + }, + "start_time": { + "title": "Start time", + "type": "string", + "format": "date-time", + "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(.\\d+)?Z$", + "description": "Start time in ISO8601 format. Any data before this time point will not be replicated.", + "examples": [ + "2020-01-01T01:01:01Z", + "2020-01-01T01:01:01.000001Z" + ], + "order": 1 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["api.sendgrid.com"] + } + }, + { + "sourceDefinitionId": "39de93cb-1511-473e-a673-5cbedb9436af", + "name": "Senseforce", + "dockerRepository": "airbyte/source-senseforce", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/senseforce", + "icon": "senseforce.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/senseforce", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Senseforce Source Spec", + "type": "object", + "required": [ + "access_token", + "backend_url", + "dataset_id", + "start_date" + ], + "additionalProperties": true, + "properties": { + "access_token": { + "type": "string", + "title": "API Access Token", + "description": "Your API access token. See here. The toke is case sensitive.", + "airbyte_secret": true + }, + "backend_url": { + "type": "string", + "title": "Senseforce backend URL", + "examples": ["https://galaxyapi.senseforce.io"], + "description": "Your Senseforce API backend URL. This is the URL shown during the Login screen. See here for more details. (Note: Most Senseforce backend APIs have the term 'galaxy' in their ULR)" + }, + "dataset_id": { + "type": "string", + "title": "Dataset ID", + "examples": ["8f418098-ca28-4df5-9498-0df9fe78eda7"], + "description": "The ID of the dataset you want to synchronize. The ID can be found in the URL when opening the dataset. See here for more details. (Note: As the Senseforce API only allows to synchronize a specific dataset, each dataset you want to synchronize needs to be implemented as a separate airbyte source)." + }, + "start_date": { + "type": "string", + "title": "The first day (in UTC) when to read data from.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "description": "UTC date and time in the format 2017-01-25. Only data with \"Timestamp\" after this date will be replicated. Important note: This start date must be set to the first day of where your dataset provides data. If your dataset has data from 2020-10-10 10:21:10, set the start_date to 2020-10-10 or later", + "examples": ["2017-01-25"], + "format": "date" + }, + "slice_range": { + "type": "integer", + "title": "Data request time increment in days", + "default": 10, + "minimum": 1, + "maximum": 365, + "examples": [1, 3, 10, 30, 180, 360], + "airbyte_hidden": true, + "description": "The time increment used by the connector when requesting data from the Senseforce API. The bigger the value is, the less requests will be made and faster the sync will be. On the other hand, the more seldom the state is persisted and the more likely one could run into rate limites. Furthermore, consider that large chunks of time might take a long time for the Senseforce query to return data - meaning it could take in effect longer than with more smaller time slices. If there are a lot of data per day, set this setting to 1. If there is only very little data per day, you might change the setting to 10 or more." + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": ["galaxyapi.senseforce.io", "senseforce.io"] + } + }, + { + "sourceDefinitionId": "2e88fa20-a2f6-43cc-bba6-98a0a3f244fb", + "name": "Sendinblue", + "dockerRepository": "airbyte/source-sendinblue", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/sendinblue", + "icon": "sendinblue.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/sendinblue", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Sendinblue Spec", + "type": "object", + "required": ["api_key"], + "additionalProperties": true, + "properties": { + "api_key": { + "title": "API Key", + "type": "string", + "description": "Your API Key. See here.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "9da77001-af33-4bcd-be46-6252bf9342b9", + "name": "Shopify", + "dockerRepository": "airbyte/source-shopify", + "dockerImageTag": "0.3.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/shopify", + "icon": "shopify.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/shopify", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Shopify Source CDK Specifications", + "type": "object", + "required": ["shop", "start_date"], + "additionalProperties": true, + "properties": { + "shop": { + "type": "string", + "title": "Shopify Store", + "description": "The name of your Shopify store found in the URL. For example, if your URL was https://NAME.myshopify.com, then the name would be 'NAME'.", + "order": 1 + }, + "credentials": { + "title": "Shopify Authorization Method", + "description": "The authorization method to use to retrieve data from Shopify", + "type": "object", + "order": 2, + "oneOf": [ + { + "title": "API Password", + "description": "API Password Auth", + "type": "object", + "required": ["auth_method", "api_password"], + "properties": { + "auth_method": { + "type": "string", + "const": "api_password", + "order": 0 + }, + "api_password": { + "type": "string", + "title": "API Password", + "description": "The API Password for your private application in the `Shopify` store.", + "airbyte_secret": true, + "order": 1 + } + } + }, + { + "type": "object", + "title": "OAuth2.0", + "description": "OAuth2.0", + "required": ["auth_method"], + "properties": { + "auth_method": { + "type": "string", + "const": "oauth2.0", + "order": 0 + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "The Client ID of the Shopify developer application.", + "airbyte_secret": true, + "order": 1 + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "The Client Secret of the Shopify developer application.", + "airbyte_secret": true, + "order": 2 + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "The Access Token for making authenticated requests.", + "airbyte_secret": true, + "order": 3 + } + } + } + ] + }, + "start_date": { + "type": "string", + "title": "Replication Start Date", + "description": "The date you would like to replicate data from. Format: YYYY-MM-DD. Any data before this date will not be replicated.", + "examples": ["2021-01-01"], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "format": "date", + "order": 3 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": ["credentials", "auth_method"], + "predicate_value": "oauth2.0", + "oauth_config_specification": { + "oauth_user_input_from_connector_config_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "shop": { + "type": "string", + "path_in_connector_config": ["shop"] + } + } + }, + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "access_token": { + "type": "string", + "path_in_connector_config": ["credentials", "access_token"] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": ["credentials", "client_id"] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": ["credentials", "client_secret"] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "2fed2292-5586-480c-af92-9944e39fe12d", + "name": "Short.io", + "dockerRepository": "airbyte/source-shortio", + "dockerImageTag": "0.1.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/shortio", + "icon": "short.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://developers.short.io/reference", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Shortio Spec", + "type": "object", + "required": ["domain_id", "secret_key", "start_date"], + "properties": { + "domain_id": { + "type": "string", + "desciprtion": "Short.io Domain ID", + "title": "Domain ID", + "airbyte_secret": false + }, + "secret_key": { + "type": "string", + "title": "Secret Key", + "description": "Short.io Secret Key", + "airbyte_secret": true + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", + "airbyte_secret": false + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "c2281cee-86f9-4a86-bb48-d23286b4c7bd", + "name": "Slack", + "dockerRepository": "airbyte/source-slack", + "dockerImageTag": "0.1.25", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/slack", + "icon": "slack.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/slack", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Slack Spec", + "type": "object", + "required": ["start_date", "lookback_window", "join_channels"], + "additionalProperties": true, + "properties": { + "start_date": { + "type": "string", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", + "examples": ["2017-01-25T00:00:00Z"], + "title": "Start Date", + "format": "date-time" + }, + "lookback_window": { + "type": "integer", + "title": "Threads Lookback window (Days)", + "description": "How far into the past to look for messages in threads.", + "examples": [7, 14] + }, + "join_channels": { + "type": "boolean", + "default": true, + "title": "Join all channels", + "description": "Whether to join all channels or to sync data only from channels the bot is already in. If false, you'll need to manually add the bot to all the channels from which you'd like to sync messages. " + }, + "channel_filter": { + "type": "array", + "default": [], + "items": { + "type": "string", + "minLength": 0 + }, + "title": "Channel name filter", + "description": "A channel name list (without leading '#' char) which limit the channels from which you'd like to sync. Empty list means no filter.", + "examples": ["channel_one", "channel_two"] + }, + "credentials": { + "title": "Authentication mechanism", + "description": "Choose how to authenticate into Slack", + "type": "object", + "oneOf": [ + { + "type": "object", + "title": "Sign in via Slack (OAuth)", + "required": [ + "option_title", + "client_id", + "client_secret", + "access_token" + ], + "properties": { + "option_title": { + "type": "string", + "const": "Default OAuth2.0 authorization" + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "Slack client_id. See our docs if you need help finding this id." + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "Slack client_secret. See our docs if you need help finding this secret.", + "airbyte_secret": true + }, + "access_token": { + "type": "string", + "title": "Access token", + "description": "Slack access_token. See our docs if you need help generating the token.", + "airbyte_secret": true + } + }, + "order": 0 + }, + { + "type": "object", + "title": "API Token", + "required": ["option_title", "api_token"], + "properties": { + "option_title": { + "type": "string", + "const": "API Token Credentials" + }, + "api_token": { + "type": "string", + "title": "API Token", + "description": "A Slack bot token. See the docs for instructions on how to generate it.", + "airbyte_secret": true + } + }, + "order": 1 + } + ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": ["credentials", "option_title"], + "predicate_value": "Default OAuth2.0 authorization", + "oauth_config_specification": { + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "access_token": { + "type": "string", + "path_in_connector_config": ["credentials", "access_token"] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": ["credentials", "client_id"] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": ["credentials", "client_secret"] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["slack.com"] + } + }, + { + "sourceDefinitionId": "781f8b1d-4e20-4842-a2c3-cd9b119d65fa", + "name": "Smaily", + "dockerRepository": "airbyte/source-smaily", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/smaily", + "icon": "smaily.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/smaily", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Smaily Spec", + "type": "object", + "required": ["api_subdomain", "api_username", "api_password"], + "additionalProperties": true, + "properties": { + "api_subdomain": { + "type": "string", + "title": "API Subdomain", + "description": "API Subdomain. See https://smaily.com/help/api/general/create-api-user/" + }, + "api_username": { + "type": "string", + "title": "API User Username", + "description": "API user username. See https://smaily.com/help/api/general/create-api-user/" + }, + "api_password": { + "type": "string", + "title": "API User Password", + "description": "API user password. See https://smaily.com/help/api/general/create-api-user/", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "21cc4a17-a011-4485-8a3e-e2341a91ab9f", + "name": "SmartEngage", + "dockerRepository": "airbyte/source-smartengage", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/smartengage", + "icon": "smartengage.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/smartengage", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "SmartEngage Spec", + "type": "object", + "required": ["api_key"], + "additionalProperties": true, + "properties": { + "api_key": { + "title": "API Key", + "type": "string", + "description": "API Key", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "374ebc65-6636-4ea0-925c-7d35999a8ffc", + "name": "Smartsheets", + "dockerRepository": "airbyte/source-smartsheets", + "dockerImageTag": "1.0.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/smartsheets", + "icon": "smartsheet.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/smartsheets", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Smartsheets Source Spec", + "type": "object", + "required": ["credentials", "spreadsheet_id"], + "additionalProperties": true, + "properties": { + "credentials": { + "title": "Authorization Method", + "type": "object", + "order": 0, + "oneOf": [ + { + "type": "object", + "title": "OAuth2.0", + "required": [ + "client_id", + "client_secret", + "refresh_token", + "access_token", + "token_expiry_date" + ], + "properties": { + "auth_type": { + "type": "string", + "const": "oauth2.0" + }, + "client_id": { + "type": "string", + "description": "The API ID of the SmartSheets developer application.", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "description": "The API Secret the SmartSheets developer application.", + "airbyte_secret": true + }, + "access_token": { + "type": "string", + "description": "Access Token for making authenticated requests.", + "airbyte_secret": true + }, + "token_expiry_date": { + "type": "string", + "description": "The date-time when the access token should be refreshed.", + "format": "date-time" + }, + "refresh_token": { + "type": "string", + "description": "The key to refresh the expired access_token.", + "airbyte_secret": true + } + } + }, + { + "title": "API Access Token", + "type": "object", + "required": ["access_token"], + "properties": { + "auth_type": { + "type": "string", + "const": "access_token" + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "The access token to use for accessing your data from Smartsheets. This access token must be generated by a user with at least read access to the data you'd like to replicate. Generate an access token in the Smartsheets main menu by clicking Account > Apps & Integrations > API Access. See the setup guide for information on how to obtain this token.", + "airbyte_secret": true + } + } + } + ] + }, + "spreadsheet_id": { + "title": "Sheet ID", + "description": "The spreadsheet ID. Find it by opening the spreadsheet then navigating to File > Properties", + "type": "string", + "order": 1 + }, + "start_datetime": { + "title": "Start Datetime", + "type": "string", + "examples": ["2000-01-01T13:00:00", "2000-01-01T13:00:00-07:00"], + "description": "Only rows modified after this date/time will be replicated. This should be an ISO 8601 string, for instance: `2000-01-01T13:00:00`", + "format": "date-time", + "default": "2020-01-01T00:00:00+00:00", + "order": 2, + "airbyte_hidden": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": ["credentials", "auth_type"], + "predicate_value": "oauth2.0", + "oauth_config_specification": { + "complete_oauth_output_specification": { + "type": "object", + "properties": { + "access_token": { + "type": "string", + "path_in_connector_config": ["credentials", "access_token"] + }, + "refresh_token": { + "type": "string", + "path_in_connector_config": ["credentials", "refresh_token"] + }, + "token_expiry_date": { + "type": "string", + "format": "date-time", + "path_in_connector_config": [ + "credentials", + "token_expiry_date" + ] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": ["credentials", "client_id"] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": ["credentials", "client_secret"] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": ["app.smartsheet.com", "api.smartsheet.com"] + } + }, + { + "sourceDefinitionId": "200330b2-ea62-4d11-ac6d-cfe3e3f8ab2b", + "name": "Snapchat Marketing", + "dockerRepository": "airbyte/source-snapchat-marketing", + "dockerImageTag": "0.1.16", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/snapchat-marketing", + "icon": "snapchat.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/snapchat-marketing", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Snapchat Marketing Spec", + "type": "object", + "required": ["client_id", "client_secret", "refresh_token"], + "properties": { + "client_id": { + "title": "Client ID", + "type": "string", + "description": "The Client ID of your Snapchat developer application.", + "airbyte_secret": true, + "order": 0 + }, + "client_secret": { + "title": "Client Secret", + "type": "string", + "description": "The Client Secret of your Snapchat developer application.", + "airbyte_secret": true, + "order": 1 + }, + "refresh_token": { + "title": "Refresh Token", + "type": "string", + "description": "Refresh Token to renew the expired Access Token.", + "airbyte_secret": true, + "order": 2 + }, + "start_date": { + "title": "Start Date", + "type": "string", + "description": "Date in the format 2022-01-01. Any data before this date will not be replicated.", + "examples": ["2022-01-01"], + "default": "2022-01-01", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "order": 3, + "format": "date" + }, + "end_date": { + "type": "string", + "title": "End Date", + "description": "Date in the format 2017-01-25. Any data after this date will not be replicated.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": ["2022-01-30"], + "order": 4, + "format": "date" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": [], + "oauthFlowInitParameters": [["client_id"], ["client_secret"]], + "oauthFlowOutputParameters": [["refresh_token"]] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["accounts.snapchat.com", "adsapi.snapchat.com"] + } + }, + { + "sourceDefinitionId": "e2d65910-8c8b-40a1-ae7d-ee2416b2bfa2", + "name": "Snowflake", + "dockerRepository": "airbyte/source-snowflake", + "dockerImageTag": "0.1.34", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/snowflake", + "icon": "snowflake.svg", + "sourceType": "database", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/snowflake", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Snowflake Source Spec", + "type": "object", + "required": ["host", "role", "warehouse", "database"], + "properties": { + "credentials": { + "title": "Authorization Method", + "type": "object", + "oneOf": [ + { + "type": "object", + "title": "OAuth2.0", + "order": 0, + "required": ["client_id", "client_secret", "auth_type"], + "properties": { + "auth_type": { + "type": "string", + "const": "OAuth", + "order": 0 + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "The Client ID of your Snowflake developer application.", + "airbyte_secret": true, + "order": 1 + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "The Client Secret of your Snowflake developer application.", + "airbyte_secret": true, + "order": 2 + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "Access Token for making authenticated requests.", + "airbyte_secret": true, + "order": 3 + }, + "refresh_token": { + "type": "string", + "title": "Refresh Token", + "description": "Refresh Token for making authenticated requests.", + "airbyte_secret": true, + "order": 4 + } + } + }, + { + "title": "Username and Password", + "type": "object", + "required": ["username", "password", "auth_type"], + "order": 1, + "properties": { + "auth_type": { + "type": "string", + "const": "username/password", + "order": 0 + }, + "username": { + "description": "The username you created to allow Airbyte to access the database.", + "examples": ["AIRBYTE_USER"], + "type": "string", + "title": "Username", + "order": 1 + }, + "password": { + "description": "The password associated with the username.", + "type": "string", + "airbyte_secret": true, + "title": "Password", + "order": 2 + } + } + } + ], + "order": 0 + }, + "host": { + "description": "The host domain of the snowflake instance (must include the account, region, cloud environment, and end with snowflakecomputing.com).", + "examples": ["accountname.us-east-2.aws.snowflakecomputing.com"], + "type": "string", + "title": "Account Name", + "order": 1 + }, + "role": { + "description": "The role you created for Airbyte to access Snowflake.", + "examples": ["AIRBYTE_ROLE"], + "type": "string", + "title": "Role", + "order": 2 + }, + "warehouse": { + "description": "The warehouse you created for Airbyte to access data.", + "examples": ["AIRBYTE_WAREHOUSE"], + "type": "string", + "title": "Warehouse", + "order": 3 + }, + "database": { + "description": "The database you created for Airbyte to access data.", + "examples": ["AIRBYTE_DATABASE"], + "type": "string", + "title": "Database", + "order": 4 + }, + "schema": { + "description": "The source Snowflake schema tables. Leave empty to access tables from multiple schemas.", + "examples": ["AIRBYTE_SCHEMA"], + "type": "string", + "title": "Schema", + "order": 5 + }, + "jdbc_url_params": { + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3).", + "title": "JDBC URL Params", + "type": "string", + "order": 6 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": ["credentials", "auth_type"], + "predicate_value": "OAuth", + "oauth_config_specification": { + "oauth_user_input_from_connector_config_specification": { + "type": "object", + "properties": { + "host": { + "type": "string", + "path_in_connector_config": ["host"] + }, + "role": { + "type": "string", + "path_in_connector_config": ["role"] + } + } + }, + "complete_oauth_output_specification": { + "type": "object", + "properties": { + "access_token": { + "type": "string", + "path_in_connector_config": ["credentials", "access_token"] + }, + "refresh_token": { + "type": "string", + "path_in_connector_config": ["credentials", "refresh_token"] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": ["credentials", "client_id"] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": ["credentials", "client_secret"] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": ["${host}"] + } + }, + { + "sourceDefinitionId": "3ab1d7d0-1577-4ab9-bcc4-1ff6a4c2c9f2", + "name": "Sonar Cloud", + "dockerRepository": "airbyte/source-sonar-cloud", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/sonar-cloud", + "icon": "sonarcloud.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/sonar-cloud", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Sonar Cloud Spec", + "type": "object", + "required": ["user_token", "organization", "component_keys"], + "additionalProperties": true, + "properties": { + "user_token": { + "title": "User Token", + "type": "string", + "description": "Your User Token. See here. The token is case sensitive.", + "airbyte_secret": true + }, + "organization": { + "title": "Organization", + "type": "string", + "description": "Organization key. See here.", + "examples": ["airbyte"] + }, + "component_keys": { + "title": "Component Keys", + "type": "array", + "description": "Comma-separated list of component keys.", + "examples": ["airbyte-ws-order", "airbyte-ws-checkout"] + }, + "start_date": { + "title": "Start date", + "type": "string", + "description": "To retrieve issues created after the given date (inclusive).", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": ["YYYY-MM-DD"], + "format": "date" + }, + "end_date": { + "title": "End date", + "type": "string", + "description": "To retrieve issues created before the given date (inclusive).", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": ["YYYY-MM-DD"], + "format": "date" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": ["sonarcloud.io"] + } + }, + { + "sourceDefinitionId": "62235e65-af7a-4138-9130-0bda954eb6a8", + "name": "SpaceX API", + "dockerRepository": "airbyte/source-spacex-api", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/spacex-api", + "icon": "spacex.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/spacex-api", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Spacex Api Spec", + "type": "object", + "additionalProperties": true, + "properties": { + "id": { + "title": "Unique ID for specific source target", + "type": "string", + "desciption": "Optional, For a specific ID" + }, + "options": { + "title": "Configuration options for endpoints", + "type": "string", + "desciption": "Optional, Possible values for an endpoint. Example values for launches-latest, upcoming, past" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "77225a51-cd15-4a13-af02-65816bd0ecf4", + "name": "Square", + "dockerRepository": "airbyte/source-square", + "dockerImageTag": "0.2.2", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/square", + "icon": "square.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/square", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Square Spec", + "type": "object", + "required": ["is_sandbox"], + "additionalProperties": true, + "properties": { + "credentials": { + "title": "Authentication", + "description": "Choose how to authenticate to Square.", + "type": "object", + "order": 0, + "oneOf": [ + { + "title": "Oauth authentication", + "type": "object", + "required": [ + "auth_type", + "client_id", + "client_secret", + "refresh_token" + ], + "properties": { + "credentials_title": { + "type": "string", + "const": "OAuth Credentials", + "order": 0 + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "The Square-issued ID of your application", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "The Square-issued application secret for your application", + "airbyte_secret": true + }, + "refresh_token": { + "title": "Refresh Token", + "type": "string", + "description": "A refresh token generated using the above client ID and secret", + "airbyte_secret": true + } + } + }, + { + "title": "API key", + "type": "object", + "required": ["auth_type", "api_key"], + "properties": { + "credentials_title": { + "type": "string", + "const": "API Key", + "order": 0 + }, + "api_key": { + "type": "string", + "title": "API key token", + "description": "The API key for a Square application", + "airbyte_secret": true + } + } + } + ] + }, + "is_sandbox": { + "type": "boolean", + "description": "Determines whether to use the sandbox or production environment.", + "title": "Sandbox", + "default": false, + "order": 1 + }, + "start_date": { + "type": "string", + "description": "UTC date in the format YYYY-MM-DD. Any data before this date will not be replicated. If not set, all data will be replicated.", + "title": "Start Date", + "default": "2021-01-01", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "order": "2,", + "format": "date" + }, + "include_deleted_objects": { + "type": "boolean", + "description": "In some streams there is an option to include deleted objects (Items, Categories, Discounts, Taxes)", + "title": "Include Deleted Objects", + "default": false, + "order": 3 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": ["credentials", "0"], + "oauthFlowInitParameters": [["client_id"], ["client_secret"]], + "oauthFlowOutputParameters": [["refresh_token"]] + } + }, + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": ["credentials", "auth_type"], + "predicate_value": "Oauth", + "oauth_config_specification": { + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "refresh_token": { + "type": "string", + "path_in_connector_config": ["credentials", "refresh_token"] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": ["credentials", "client_id"] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": ["credentials", "client_secret"] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": ["connect.squareupsandbox.com", "connect.squareup.com"] + } + }, + { + "sourceDefinitionId": "7a4327c4-315a-11ec-8d3d-0242ac130003", + "name": "Strava", + "dockerRepository": "airbyte/source-strava", + "dockerImageTag": "0.1.4", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/strava", + "icon": "strava.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/strava", + "connectionSpecification": { + "$schema": "https://json-schema.org/draft-07/schema#", + "title": "Strava Spec", + "type": "object", + "required": [ + "client_id", + "client_secret", + "refresh_token", + "athlete_id", + "start_date" + ], + "additionalProperties": true, + "properties": { + "auth_type": { + "type": "string", + "const": "Client", + "enum": ["Client"], + "default": "Client" + }, + "client_id": { + "type": "string", + "description": "The Client ID of your Strava developer application.", + "title": "Client ID", + "pattern": "^[0-9_\\-]+$", + "examples": ["12345"], + "order": 0 + }, + "client_secret": { + "type": "string", + "description": "The Client Secret of your Strava developer application.", + "title": "Client Secret", + "pattern": "^[0-9a-fA-F]+$", + "examples": ["fc6243f283e51f6ca989aab298b17da125496f50"], + "airbyte_secret": true, + "order": 1 + }, + "refresh_token": { + "type": "string", + "description": "The Refresh Token with the activity: read_all permissions.", + "title": "Refresh Token", + "pattern": "^[0-9a-fA-F]+$", + "examples": ["fc6243f283e51f6ca989aab298b17da125496f50"], + "airbyte_secret": true, + "order": 2 + }, + "athlete_id": { + "type": "integer", + "description": "The Athlete ID of your Strava developer application.", + "title": "Athlete ID", + "pattern": "^[0-9_\\-]+$", + "examples": ["17831421"], + "order": 3 + }, + "start_date": { + "type": "string", + "description": "UTC date and time. Any data before this date will not be replicated.", + "title": "Start Date", + "examples": ["2021-03-01T00:00:00Z"], + "format": "date-time", + "order": 4 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": ["auth_type"], + "predicate_value": "Client", + "oauth_config_specification": { + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": true, + "properties": { + "refresh_token": { + "type": "string", + "path_in_connector_config": ["refresh_token"] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": true, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": ["client_id"] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": ["client_secret"] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": ["strava.com"] + } + }, + { + "sourceDefinitionId": "74cbd708-46c3-4512-9c93-abd5c3e9a94d", + "name": "Statuspage", + "dockerRepository": "airbyte/source-statuspage", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/statuspage", + "icon": "statuspage.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/statuspage", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Statuspage Spec", + "type": "object", + "required": ["api_key"], + "additionalProperties": true, + "properties": { + "api_key": { + "title": "API Key", + "type": "string", + "description": "Your API Key. See here.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "e094cb9a-26de-4645-8761-65c0c425d1de", + "name": "Stripe", + "dockerRepository": "airbyte/source-stripe", + "dockerImageTag": "3.4.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/stripe", + "icon": "stripe.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/stripe", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Stripe Source Spec", + "type": "object", + "required": ["client_secret", "account_id", "start_date"], + "properties": { + "account_id": { + "type": "string", + "title": "Account ID", + "description": "Your Stripe account ID (starts with 'acct_', find yours here).", + "order": 0 + }, + "client_secret": { + "type": "string", + "title": "Secret Key", + "description": "Stripe API key (usually starts with 'sk_live_'; find yours here).", + "airbyte_secret": true, + "order": 1 + }, + "start_date": { + "type": "string", + "title": "Replication start date", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Only data generated after this date will be replicated.", + "examples": ["2017-01-25T00:00:00Z"], + "format": "date-time", + "order": 2 + }, + "lookback_window_days": { + "type": "integer", + "title": "Lookback Window in days", + "default": 0, + "minimum": 0, + "description": "When set, the connector will always re-export data from the past N days, where N is the value set here. This is useful if your data is frequently updated after creation. More info here", + "order": 3 + }, + "slice_range": { + "type": "integer", + "title": "Data request time increment in days", + "default": 365, + "minimum": 1, + "examples": [1, 3, 10, 30, 180, 360], + "description": "The time increment used by the connector when requesting data from the Stripe API. The bigger the value is, the less requests will be made and faster the sync will be. On the other hand, the more seldom the state is persisted.", + "order": 4 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["api.stripe.com"] + } + }, + { + "sourceDefinitionId": "dd4632f4-15e0-4649-9b71-41719fb1fdee", + "name": "SurveyCTO", + "dockerRepository": "airbyte/source-surveycto", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/surveycto", + "icon": "surveycto.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/surveycto", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Surveycto Spec", + "type": "object", + "required": ["server_name", "username", "password", "form_id"], + "properties": { + "server_name": { + "type": "string", + "title": "Server Name", + "description": "The name of the SurveryCTO server", + "order": 0 + }, + "username": { + "type": "string", + "title": "Username", + "description": "Username to authenticate into the SurveyCTO server", + "order": 1 + }, + "password": { + "type": "string", + "title": "Password", + "description": "Password to authenticate into the SurveyCTO server", + "airbyte_secret": true, + "order": 2 + }, + "form_id": { + "type": "array", + "title": "Form's Id", + "description": "Unique identifier for one of your forms", + "order": 3 + }, + "start_date": { + "type": "string", + "description": "initial date for survey cto", + "title": "Start Date", + "examples": ["Jan 09, 2022 00:00:00 AM"], + "default": "Jan 09, 2022 00:00:00 AM", + "order": 4, + "pattern": "^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{2}, [0-9]{4} [0-9]{2}:[0-9]{2}:[0-9]{2} (AM|PM)$" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "badc5925-0485-42be-8caa-b34096cb71b5", + "name": "SurveyMonkey", + "dockerRepository": "airbyte/source-surveymonkey", + "dockerImageTag": "0.1.16", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/surveymonkey", + "icon": "surveymonkey.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/surveymonkey", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "SurveyMonkey Spec", + "type": "object", + "required": ["start_date"], + "additionalProperties": true, + "properties": { + "origin": { + "type": "string", + "order": 1, + "enum": ["USA", "Europe", "Canada"], + "default": "USA", + "title": "Origin datacenter of the SurveyMonkey account", + "description": "Depending on the originating datacenter of the SurveyMonkey account, the API access URL may be different." + }, + "credentials": { + "title": "SurveyMonkey Authorization Method", + "description": "The authorization method to use to retrieve data from SurveyMonkey", + "type": "object", + "required": ["auth_method", "access_token"], + "order": 2, + "properties": { + "auth_method": { + "type": "string", + "const": "oauth2.0", + "order": 0 + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "The Client ID of the SurveyMonkey developer application.", + "airbyte_secret": true, + "order": 1 + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "The Client Secret of the SurveyMonkey developer application.", + "airbyte_secret": true, + "order": 2 + }, + "access_token": { + "title": "Access Token", + "order": 3, + "type": "string", + "airbyte_secret": true, + "description": "Access Token for making authenticated requests. See the docs for information on how to generate this key." + } + } + }, + "start_date": { + "title": "Start Date", + "order": 3, + "type": "string", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z?$", + "examples": ["2021-01-01T00:00:00Z"], + "format": "date-time" + }, + "survey_ids": { + "type": "array", + "order": 4, + "items": { + "type": "string", + "pattern": "^[0-9]{8,9}$" + }, + "title": "Survey Monkey survey IDs", + "description": "IDs of the surveys from which you'd like to replicate data. If left empty, data from all boards to which you have access will be replicated." + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": ["credentials", "auth_method"], + "predicate_value": "oauth2.0", + "oauth_config_specification": { + "oauth_user_input_from_connector_config_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "origin": { + "type": "string", + "path_in_connector_config": ["origin"] + } + } + }, + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "access_token": { + "type": "string", + "path_in_connector_config": ["credentials", "access_token"] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": ["credentials", "client_id"] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": ["credentials", "client_secret"] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["api.surveymonkey.com"] + } + }, + { + "sourceDefinitionId": "4a4d887b-0f2d-4b33-ab7f-9b01b9072804", + "name": "SurveySparrow", + "dockerRepository": "airbyte/source-survey-sparrow", + "dockerImageTag": "0.2.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/survey-sparrow", + "icon": "surveysparrow.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/surveysparrow", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Survey Sparrow Spec", + "type": "object", + "required": ["access_token"], + "additionalProperties": true, + "properties": { + "access_token": { + "type": "string", + "description": "Your access token. See here. The key is case sensitive.", + "airbyte_secret": true, + "order": 0 + }, + "survey_id": { + "type": "array", + "description": "A List of your survey ids for survey-specific stream", + "order": 2 + }, + "region": { + "title": "Base URL", + "type": "object", + "description": "Is your account location is EU based? If yes, the base url to retrieve data will be different.", + "oneOf": [ + { + "title": "EU-based account", + "type": "object", + "properties": { + "url_base": { + "type": "string", + "const": "https://eu-api.surveysparrow.com/v3" + } + } + }, + { + "title": "Global account", + "type": "object", + "properties": { + "url_base": { + "type": "string", + "const": "https://api.surveysparrow.com/v3" + } + } + } + ], + "default": { + "title": "Global account", + "type": "object", + "properties": { + "url_base": { + "type": "string", + "const": "https://api.surveysparrow.com/v3" + } + } + }, + "order": 1 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "f00d2cf4-3c28-499a-ba93-b50b6f26359e", + "name": "TalkDesk Explore", + "dockerRepository": "airbyte/source-talkdesk-explore", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/talkdesk-explore", + "icon": "talkdesk-explore.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Talkdesk Explore API Spec", + "type": "object", + "required": ["start_date", "auth_url", "api_key"], + "additionalProperties": false, + "properties": { + "start_date": { + "type": "string", + "title": "START DATE", + "description": "The date from which you'd like to replicate data for Talkdesk Explore API, in the format YYYY-MM-DDT00:00:00. All data generated after this date will be replicated.", + "examples": ["2020-10-15T00:00:00"], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}$", + "order": 0 + }, + "timezone": { + "type": "string", + "title": "TIMEZONE", + "description": "Timezone to use when generating reports. Only IANA timezones are supported (https://nodatime.org/TimeZones)", + "examples": ["Europe/London", "America/Los_Angeles"], + "default": "UTC", + "order": 1 + }, + "auth_url": { + "title": "AUTH URL", + "type": "string", + "description": "Talkdesk Auth URL. Only 'client_credentials' auth type supported at the moment.", + "examples": [ + "https://xxxxxx.talkdeskid.com/oauth/token?grant_type=client_credentials" + ], + "order": 2 + }, + "api_key": { + "title": "API KEY", + "type": "string", + "description": "Talkdesk API key.", + "order": 3 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "d1aa448b-7c54-498e-ad95-263cbebcd2db", + "name": "Tempo", + "dockerRepository": "airbyte/source-tempo", + "dockerImageTag": "0.3.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/tempo", + "icon": "tempo.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Tempo Spec", + "type": "object", + "required": ["api_token"], + "properties": { + "api_token": { + "type": "string", + "title": "API token", + "description": "Tempo API Token. Go to Tempo>Settings, scroll down to Data Access and select API integration.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": ["api.tempo.io"] + } + }, + { + "sourceDefinitionId": "aa8ba6fd-4875-d94e-fc8d-4e1e09aa2503", + "name": "Teradata", + "dockerRepository": "airbyte/source-teradata", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/teradata", + "icon": "teradata.svg", + "sourceType": "database", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/teradata", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Teradata Source Spec", + "type": "object", + "required": ["host", "database", "username"], + "properties": { + "host": { + "title": "Host", + "description": "Hostname of the database.", + "type": "string", + "order": 0 + }, + "port": { + "title": "Port", + "description": "Port of the database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 3306, + "examples": ["3306"], + "order": 1 + }, + "database": { + "title": "Database", + "description": "Name of the database.", + "type": "string", + "order": 2 + }, + "username": { + "title": "Username", + "description": "Username to use to access the database.", + "type": "string", + "order": 3 + }, + "password": { + "title": "Password", + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 4 + }, + "jdbc_url_params": { + "title": "JDBC URL params", + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3)", + "type": "string", + "order": 5 + }, + "replication_method": { + "title": "Replication method", + "description": "Replication method to use for extracting data from the database. STANDARD replication requires no setup on the DB side but will not be able to represent deletions incrementally. CDC uses the Binlog to detect inserts, updates, and deletes. This needs to be configured on the source database itself.", + "type": "string", + "order": 6, + "default": "STANDARD", + "enum": ["STANDARD", "CDC"] + }, + "ssl": { + "title": "SSL Connection", + "description": "Encrypt data using SSL. When activating SSL, please select one of the connection modes.", + "type": "boolean", + "default": false, + "order": 7 + }, + "ssl_mode": { + "title": "SSL Modes", + "description": "SSL connection modes. \n disable - Chose this mode to disable encryption of communication between Airbyte and destination database\n allow - Chose this mode to enable encryption only when required by the destination database\n prefer - Chose this mode to allow unencrypted connection only if the destination database does not support encryption\n require - Chose this mode to always require encryption. If the destination database server does not support encryption, connection will fail\n verify-ca - Chose this mode to always require encryption and to verify that the destination database server has a valid SSL certificate\n verify-full - This is the most secure mode. Chose this mode to always require encryption and to verify the identity of the destination database server\n See more information - in the docs.", + "type": "object", + "order": 8, + "oneOf": [ + { + "title": "disable", + "additionalProperties": true, + "description": "Disable SSL.", + "required": ["mode"], + "properties": { + "mode": { + "type": "string", + "const": "disable", + "order": 0 + } + } + }, + { + "title": "allow", + "additionalProperties": true, + "description": "Allow SSL mode.", + "required": ["mode"], + "properties": { + "mode": { + "type": "string", + "const": "allow", + "order": 0 + } + } + }, + { + "title": "prefer", + "additionalProperties": true, + "description": "Prefer SSL mode.", + "required": ["mode"], + "properties": { + "mode": { + "type": "string", + "const": "prefer", + "order": 0 + } + } + }, + { + "title": "require", + "additionalProperties": true, + "description": "Require SSL mode.", + "required": ["mode"], + "properties": { + "mode": { + "type": "string", + "const": "require", + "order": 0 + } + } + }, + { + "title": "verify-ca", + "additionalProperties": true, + "description": "Verify-ca SSL mode.", + "required": ["mode", "ssl_ca_certificate"], + "properties": { + "mode": { + "type": "string", + "const": "verify-ca", + "order": 0 + }, + "ssl_ca_certificate": { + "type": "string", + "title": "CA certificate", + "description": "Specifies the file name of a PEM file that contains Certificate Authority (CA) certificates for use with SSLMODE=verify-ca.\n See more information - in the docs.", + "airbyte_secret": true, + "multiline": true, + "order": 1 + } + } + }, + { + "title": "verify-full", + "additionalProperties": true, + "description": "Verify-full SSL mode.", + "required": ["mode", "ssl_ca_certificate"], + "properties": { + "mode": { + "type": "string", + "const": "verify-full", + "order": 0 + }, + "ssl_ca_certificate": { + "type": "string", + "title": "CA certificate", + "description": "Specifies the file name of a PEM file that contains Certificate Authority (CA) certificates for use with SSLMODE=verify-full.\n See more information - in the docs.", + "airbyte_secret": true, + "multiline": true, + "order": 1 + } + } + } + ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": ["${host}"] + } + }, + { + "sourceDefinitionId": "0dad1a35-ccf8-4d03-b73e-6788c00b13ae", + "name": "TiDB", + "dockerRepository": "airbyte/source-tidb", + "dockerImageTag": "0.2.4", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/tidb", + "icon": "tidb.svg", + "sourceType": "database", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/tidb", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "TiDB Source Spec", + "type": "object", + "required": ["host", "port", "database", "username"], + "properties": { + "host": { + "description": "Hostname of the database.", + "title": "Host", + "type": "string", + "order": 0 + }, + "port": { + "description": "Port of the database.", + "title": "Port", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 4000, + "examples": ["4000"], + "order": 1 + }, + "database": { + "description": "Name of the database.", + "title": "Database", + "type": "string", + "order": 2 + }, + "username": { + "description": "Username to use to access the database.", + "title": "Username", + "type": "string", + "order": 3 + }, + "password": { + "description": "Password associated with the username.", + "title": "Password", + "type": "string", + "airbyte_secret": true, + "order": 4 + }, + "jdbc_url_params": { + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3)", + "title": "JDBC URL Params", + "type": "string", + "order": 5 + }, + "ssl": { + "title": "SSL Connection", + "description": "Encrypt data using SSL.", + "type": "boolean", + "default": false, + "order": 6 + }, + "tunnel_method": { + "type": "object", + "title": "SSH Tunnel Method", + "description": "Whether to initiate an SSH tunnel before connecting to the database, and if so, which kind of authentication to use.", + "oneOf": [ + { + "title": "No Tunnel", + "required": ["tunnel_method"], + "properties": { + "tunnel_method": { + "description": "No ssh tunnel needed to connect to database", + "type": "string", + "const": "NO_TUNNEL", + "order": 0 + } + } + }, + { + "title": "SSH Key Authentication", + "required": [ + "tunnel_method", + "tunnel_host", + "tunnel_port", + "tunnel_user", + "ssh_key" + ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": ["22"], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host.", + "type": "string", + "order": 3 + }, + "ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 4 + } + } + }, + { + "title": "Password Authentication", + "required": [ + "tunnel_method", + "tunnel_host", + "tunnel_port", + "tunnel_user", + "tunnel_user_password" + ], + "properties": { + "tunnel_method": { + "description": "Connect through a jump server tunnel host using username and password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "tunnel_host": { + "title": "SSH Tunnel Jump Server Host", + "description": "Hostname of the jump server host that allows inbound ssh tunnel.", + "type": "string", + "order": 1 + }, + "tunnel_port": { + "title": "SSH Connection Port", + "description": "Port on the proxy/jump server that accepts inbound ssh connections.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 22, + "examples": ["22"], + "order": 2 + }, + "tunnel_user": { + "title": "SSH Login Username", + "description": "OS-level username for logging into the jump server host", + "type": "string", + "order": 3 + }, + "tunnel_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 4 + } + } + } + ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": ["${host}", "${tunnel_method.tunnel_host}"] + } + }, + { + "sourceDefinitionId": "4bfac00d-ce15-44ff-95b9-9e3c3e8fbd35", + "name": "TikTok Marketing", + "dockerRepository": "airbyte/source-tiktok-marketing", + "dockerImageTag": "3.0.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/tiktok-marketing", + "icon": "tiktok.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/tiktok-marketing", + "changelogUrl": "https://docs.airbyte.com/integrations/sources/tiktok-marketing", + "connectionSpecification": { + "title": "TikTok Marketing Source Spec", + "type": "object", + "properties": { + "credentials": { + "title": "Authentication Method", + "description": "Authentication method", + "default": {}, + "order": 0, + "type": "object", + "oneOf": [ + { + "title": "OAuth2.0", + "type": "object", + "properties": { + "auth_type": { + "title": "Auth Type", + "const": "oauth2.0", + "order": 0, + "type": "string" + }, + "app_id": { + "title": "App ID", + "description": "The Developer Application App ID.", + "airbyte_secret": true, + "type": "string" + }, + "secret": { + "title": "Secret", + "description": "The Developer Application Secret.", + "airbyte_secret": true, + "type": "string" + }, + "access_token": { + "title": "Access Token", + "description": "Long-term Authorized Access Token.", + "airbyte_secret": true, + "type": "string" + }, + "advertiser_id": { + "title": "Advertiser ID", + "description": "The Advertiser ID to filter reports and streams. Let this empty to retrieve all.", + "type": "string" + } + }, + "required": ["app_id", "secret", "access_token"] + }, + { + "title": "Sandbox Access Token", + "type": "object", + "properties": { + "auth_type": { + "title": "Auth Type", + "const": "sandbox_access_token", + "order": 0, + "type": "string" + }, + "advertiser_id": { + "title": "Advertiser ID", + "description": "The Advertiser ID which generated for the developer's Sandbox application.", + "type": "string" + }, + "access_token": { + "title": "Access Token", + "description": "The long-term authorized access token.", + "airbyte_secret": true, + "type": "string" + } + }, + "required": ["advertiser_id", "access_token"] + } + ] + }, + "start_date": { + "title": "Replication Start Date", + "description": "The Start Date in format: YYYY-MM-DD. Any data before this date will not be replicated. If this parameter is not set, all data will be replicated.", + "default": "2016-09-01", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "order": 1, + "type": "string", + "format": "date" + }, + "end_date": { + "title": "End Date", + "description": "The date until which you'd like to replicate data for all incremental streams, in the format YYYY-MM-DD. All data generated between start_date and this date will be replicated. Not setting this option will result in always syncing the data till the current date.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "order": 2, + "type": "string", + "format": "date" + }, + "attribution_window": { + "title": "Attribution Window", + "description": "The attribution window in days.", + "default": 0, + "order": 3, + "type": "integer" + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ + "overwrite", + "append", + "append_dedup" + ], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": ["credentials", "auth_type"], + "predicate_value": "oauth2.0", + "oauth_config_specification": { + "complete_oauth_output_specification": { + "title": "CompleteOauthOutputSpecification", + "type": "object", + "properties": { + "access_token": { + "title": "Access Token", + "path_in_connector_config": ["credentials", "access_token"], + "type": "string" + } + }, + "required": ["access_token"] + }, + "complete_oauth_server_input_specification": { + "title": "CompleteOauthServerInputSpecification", + "type": "object", + "properties": { + "app_id": { + "title": "App Id", + "type": "string" + }, + "secret": { + "title": "Secret", + "type": "string" + } + }, + "required": ["app_id", "secret"] + }, + "complete_oauth_server_output_specification": { + "title": "CompleteOauthServerOutputSpecification", + "type": "object", + "properties": { + "app_id": { + "title": "App Id", + "path_in_connector_config": ["credentials", "app_id"], + "type": "string" + }, + "secret": { + "title": "Secret", + "path_in_connector_config": ["credentials", "secret"], + "type": "string" + } + }, + "required": ["app_id", "secret"] + } + } + }, + "additionalProperties": true + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["sandbox-ads.tiktok.com", "business-api.tiktok.com"] + } + }, + { + "sourceDefinitionId": "bc617b5f-1b9e-4a2d-bebe-782fd454a771", + "name": "Timely", + "dockerRepository": "airbyte/source-timely", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/timely", + "icon": "timely.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Timely Integration Spec", + "type": "object", + "required": ["account_id", "start_date", "bearer_token"], + "additionalProperties": false, + "properties": { + "account_id": { + "title": "account_id", + "type": "string", + "description": "Timely account id" + }, + "start_date": { + "title": "startDate", + "type": "string", + "description": "start date", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "example": "2022-05-06" + }, + "bearer_token": { + "title": "Bearer token", + "type": "string", + "description": "Timely bearer token" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "6240848f-f795-45eb-8f5e-c7542822fc03", + "name": "TMDb", + "dockerRepository": "airbyte/source-tmdb", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/tmdb", + "icon": "tmdb.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/tmdb", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Tmdb Spec", + "type": "object", + "required": ["api_key", "movie_id", "query", "language"], + "additionalProperties": true, + "properties": { + "api_key": { + "title": "Unique key for establishing connection", + "type": "string", + "description": "API Key from tmdb account", + "airbyte_secret": true + }, + "movie_id": { + "title": "Movie ID for targeting movies", + "type": "string", + "description": "Target movie ID, Mandate for movie streams (Example is 550)", + "examples": [550, 560] + }, + "query": { + "title": "Query for search streams", + "type": "string", + "description": "Target movie ID, Mandate for search streams", + "examples": ["Marvel", "DC"] + }, + "language": { + "title": "Language for filtering", + "type": "string", + "description": "Language expressed in ISO 639-1 scheme, Mandate for required streams (Example en-US)", + "examples": ["en-US", "en-UK"] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "7d272065-c316-4c04-a433-cd4ee143f83e", + "name": "Todoist", + "dockerRepository": "airbyte/source-todoist", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/todoist", + "icon": "todoist.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/todoist", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Todoist Spec", + "type": "object", + "required": ["token"], + "properties": { + "token": { + "type": "string", + "description": "Your API Token. See here. The token is case sensitive.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "7e7c844f-2300-4342-b7d3-6dd7992593cd", + "name": "Toggl", + "dockerRepository": "airbyte/source-toggl", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/toggl", + "icon": "toggl.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/toggl", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Toggl Spec", + "type": "object", + "required": [ + "api_token", + "organization_id", + "workspace_id", + "start_date", + "end_date" + ], + "additionalProperties": true, + "properties": { + "api_token": { + "title": "API token", + "type": "string", + "description": "Your API Token. See here. The token is case sensitive.", + "airbyte_secret": true + }, + "organization_id": { + "title": "Organization ID", + "type": "integer", + "description": "Your organization id. See here." + }, + "workspace_id": { + "title": "Workspace ID", + "type": "integer", + "description": "Your workspace id. See here." + }, + "start_date": { + "title": "Start date", + "type": "string", + "description": "To retrieve time entries created after the given date (inclusive).", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": ["YYYY-MM-DD"] + }, + "end_date": { + "title": "End date", + "type": "string", + "description": "To retrieve time entries created before the given date (inclusive).", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": ["YYYY-MM-DD"] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "d42bd69f-6bf0-4d0b-9209-16231af07a92", + "name": "The Guardian API", + "dockerRepository": "airbyte/source-the-guardian-api", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/the-guardian-api", + "icon": "theguardian.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/the-guardian-api", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "The Guardian Api Spec", + "type": "object", + "required": ["api_key", "start_date"], + "additionalProperties": true, + "properties": { + "api_key": { + "title": "API Key", + "type": "string", + "description": "Your API Key. See here. The key is case sensitive.", + "airbyte_secret": true + }, + "start_date": { + "title": "Start Date", + "type": "string", + "description": "Use this to set the minimum date (YYYY-MM-DD) of the results. Results older than the start_date will not be shown.", + "pattern": "^([1-9][0-9]{3})\\-(0?[1-9]|1[012])\\-(0?[1-9]|[12][0-9]|3[01])$", + "examples": ["YYYY-MM-DD"] + }, + "query": { + "title": "Query", + "type": "string", + "description": "(Optional) The query (q) parameter filters the results to only those that include that search term. The q parameter supports AND, OR and NOT operators.", + "examples": [ + "environment AND NOT water", + "environment AND political", + "amusement park", + "political" + ] + }, + "tag": { + "title": "Tag", + "type": "string", + "description": "(Optional) A tag is a piece of data that is used by The Guardian to categorise content. Use this parameter to filter results by showing only the ones matching the entered tag. See here for a list of all tags, and here for the tags endpoint documentation.", + "examples": [ + "environment/recycling", + "environment/plasticbags", + "environment/energyefficiency" + ] + }, + "section": { + "title": "Section", + "type": "string", + "description": "(Optional) Use this to filter the results by a particular section. See here for a list of all sections, and here for the sections endpoint documentation.", + "examples": ["media", "technology", "housing-network"] + }, + "end_date": { + "title": "End Date", + "type": "string", + "description": "(Optional) Use this to set the maximum date (YYYY-MM-DD) of the results. Results newer than the end_date will not be shown. Default is set to the current date (today) for incremental syncs.", + "pattern": "^([1-9][0-9]{3})\\-(0?[1-9]|1[012])\\-(0?[1-9]|[12][0-9]|3[01])$", + "examples": ["YYYY-MM-DD"] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "f9b6c538-ee12-42fe-8d4b-0c10f5955417", + "name": "TPLcentral", + "dockerRepository": "airbyte/source-tplcentral", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/tplcentral", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/tplcentral", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Tplcentral Spec", + "type": "object", + "required": ["url_base", "client_id", "client_secret"], + "additionalProperties": false, + "properties": { + "url_base": { + "title": "URL base", + "type": "string", + "format": "uri", + "default": "https://secure-wms.com/", + "pattern": "^https://" + }, + "client_id": { + "title": "Client ID", + "type": "string" + }, + "client_secret": { + "title": "Client secret", + "type": "string", + "airbyte_secret": true + }, + "user_login_id": { + "title": "User login ID", + "description": "User login ID and/or name is required", + "type": "integer" + }, + "user_login": { + "title": "User login name", + "description": "User login ID and/or name is required", + "type": "string" + }, + "tpl_key": { + "title": "3PL GUID", + "type": "string" + }, + "customer_id": { + "title": "Customer ID", + "type": "integer" + }, + "facility_id": { + "title": "Facility ID", + "type": "integer" + }, + "start_date": { + "title": "Start date", + "description": "Date and time together in RFC 3339 format, for example, 2018-11-13T20:20:39+00:00.", + "type": "string", + "format": "date-time" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "8da67652-004c-11ec-9a03-0242ac130003", + "name": "Trello", + "dockerRepository": "airbyte/source-trello", + "dockerImageTag": "0.3.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/trello", + "icon": "trello.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/trello", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Trello Spec", + "type": "object", + "required": ["key", "token", "start_date"], + "additionalProperties": true, + "properties": { + "key": { + "type": "string", + "title": "API key", + "description": "Trello API key. See the docs for instructions on how to generate it.", + "airbyte_secret": true, + "order": 0 + }, + "token": { + "type": "string", + "title": "API token", + "description": "Trello API token. See the docs for instructions on how to generate it.", + "airbyte_secret": true, + "order": 1 + }, + "start_date": { + "type": "string", + "title": "Start Date", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any data before this date will not be replicated.", + "examples": ["2021-03-01T00:00:00Z"], + "format": "date-time", + "order": 2 + }, + "board_ids": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[0-9a-fA-F]{24}$" + }, + "title": "Trello Board IDs", + "description": "IDs of the boards to replicate data from. If left empty, data from all boards to which you have access will be replicated.", + "order": 3 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": [], + "oauth_config_specification": { + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "token": { + "type": "string", + "path_in_connector_config": ["token"] + }, + "key": { + "type": "string", + "path_in_connector_config": ["key"] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": ["client_id"] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": ["client_secret"] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": ["api.trello.com"] + } + }, + { + "sourceDefinitionId": "d7e23ea6-d741-4314-9209-a33c91a2e945", + "name": "TrustPilot", + "dockerRepository": "airbyte/source-trustpilot", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/trustpilot", + "icon": "trustpilot.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Trustpilot Spec", + "type": "object", + "required": ["credentials", "business_units", "start_date"], + "properties": { + "credentials": { + "title": "Authorization Method", + "type": "object", + "order": 0, + "oneOf": [ + { + "type": "object", + "title": "OAuth 2.0", + "required": [ + "client_id", + "client_secret", + "refresh_token", + "access_token", + "token_expiry_date" + ], + "properties": { + "auth_type": { + "type": "string", + "const": "oauth2.0" + }, + "client_id": { + "type": "string", + "title": "API key", + "description": "The API key of the Trustpilot API application. (represents the OAuth Client ID)", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "title": "Secret", + "description": "The Secret of the Trustpilot API application. (represents the OAuth Client Secret)", + "airbyte_secret": true + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "Access Token for making authenticated requests.", + "airbyte_secret": true + }, + "token_expiry_date": { + "type": "string", + "title": "Token expiry date time", + "description": "The date-time when the access token should be refreshed.", + "format": "date-time" + }, + "refresh_token": { + "type": "string", + "title": "Refresh token", + "description": "The key to refresh the expired access_token.", + "airbyte_secret": true + } + } + }, + { + "type": "object", + "title": "API Key", + "description": "The API key authentication method gives you access to only the streams which are part of the Public API. When you want to get streams available via the Consumer API (e.g. the private reviews) you need to use authentication method OAuth 2.0.", + "required": ["client_id"], + "properties": { + "auth_type": { + "type": "string", + "const": "apikey" + }, + "client_id": { + "type": "string", + "title": "API key", + "description": "The API key of the Trustpilot API application.", + "airbyte_secret": true + } + } + } + ] + }, + "business_units": { + "type": "array", + "items": { + "type": "string" + }, + "title": "Business Unit names", + "description": "The names of business units which shall be synchronized. Some streams e.g. configured_business_units or private_reviews use this configuration.", + "examples": ["mydomain.com", "www.mydomain.com"] + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "For streams with sync. method incremental the start date time to be used", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": ["%Y-%m-%dT%H:%M:%S"] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "bd14b08f-9f43-400f-b2b6-7248b5c72561", + "name": "TVMaze Schedule", + "dockerRepository": "airbyte/source-tvmaze-schedule", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/tvmaze-schedule", + "icon": "tvmazeschedule.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/tvmaze-schedule", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "TVMaze Schedule Spec", + "type": "object", + "required": ["start_date", "domestic_schedule_country_code"], + "additionalProperties": true, + "properties": { + "start_date": { + "type": "string", + "description": "Start date for TV schedule retrieval. May be in the future.", + "order": 0, + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" + }, + "end_date": { + "type": "string", + "description": "End date for TV schedule retrieval. May be in the future. Optional.\n", + "order": 1, + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" + }, + "domestic_schedule_country_code": { + "type": "string", + "description": "Country code for domestic TV schedule retrieval.", + "examples": ["US", "GB"] + }, + "web_schedule_country_code": { + "type": "string", + "description": "ISO 3166-1 country code for web TV schedule retrieval. Leave blank for\nall countries plus global web channels (e.g. Netflix). Alternatively,\nset to 'global' for just global web channels.\n", + "examples": ["US", "GB", "global"] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "b9dc6155-672e-42ea-b10d-9f1f1fb95ab1", + "name": "Twilio", + "dockerRepository": "airbyte/source-twilio", + "dockerImageTag": "0.5.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/twilio", + "icon": "twilio.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/twilio", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Twilio Spec", + "type": "object", + "required": ["account_sid", "auth_token", "start_date"], + "additionalProperties": true, + "properties": { + "account_sid": { + "title": "Account ID", + "description": "Twilio account SID", + "airbyte_secret": true, + "type": "string", + "order": 1 + }, + "auth_token": { + "title": "Auth Token", + "description": "Twilio Auth Token.", + "airbyte_secret": true, + "type": "string", + "order": 2 + }, + "start_date": { + "title": "Replication Start Date", + "description": "UTC date and time in the format 2020-10-01T00:00:00Z. Any data before this date will not be replicated.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": ["2020-10-01T00:00:00Z"], + "type": "string", + "order": 3, + "format": "date-time" + }, + "lookback_window": { + "title": "Lookback window", + "description": "How far into the past to look for records. (in minutes)", + "examples": [60], + "default": 0, + "minimum": 0, + "maximum": 576000, + "type": "integer", + "order": 4 + } + } + }, + "supportsIncremental": true, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": ["append"] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["api.twilio.com", "monitor.twilio.com"] + } + }, + { + "sourceDefinitionId": "2446953b-b794-429b-a9b3-c821ba992a48", + "name": "Twilio Taskrouter", + "dockerRepository": "airbyte/source-twilio-taskrouter", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/twilio-taskrouter", + "icon": "twilio.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/twilio-taskrouter", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Twilio Taskrouter Spec", + "type": "object", + "required": ["account_sid", "auth_token"], + "additionalProperties": true, + "properties": { + "account_sid": { + "title": "Account SID", + "type": "string", + "description": "Twilio Account ID", + "airbyte_secret": true + }, + "auth_token": { + "type": "string", + "description": "Twilio Auth Token", + "airbyte_secret": true, + "title": "Auth Token" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "d7fd4f40-5e5a-4b8b-918f-a73077f8c131", + "name": "Twitter", + "dockerRepository": "airbyte/source-twitter", + "dockerImageTag": "0.1.2", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/twitter", + "icon": "twitter.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/twitter", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Twitter Spec", + "type": "object", + "required": ["api_key", "query"], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "title": "Access Token", + "description": "App only Bearer Token. See the docs for more information on how to obtain this token.", + "airbyte_secret": true, + "order": 0 + }, + "query": { + "type": "string", + "title": "Search Query", + "description": "Query for matching Tweets. You can learn how to build this query by reading build a query guide .", + "order": 1 + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "The start date for retrieving tweets cannot be more than 7 days in the past.", + "format": "date-time", + "order": 2 + }, + "end_date": { + "type": "string", + "title": "End Date", + "description": "The end date for retrieving tweets must be a minimum of 10 seconds prior to the request time.", + "format": "date-time", + "order": 3 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": ["api.twitter.com"] + } + }, + { + "sourceDefinitionId": "3c0c3cd1-b3e0-464a-9090-d3ceb5f92346", + "name": "Tyntec SMS", + "dockerRepository": "airbyte/source-tyntec-sms", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/tyntec-sms", + "icon": "tyntec.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/tyntec-sms", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Tyntec Sms Spec", + "type": "object", + "required": ["api_key", "to", "from"], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "title": "Tyntec API Key", + "description": "Your Tyntec API Key. See here", + "order": 0, + "airbyte_secret": true + }, + "to": { + "type": "string", + "title": "SMS Message Recipient Phone", + "description": "The phone number of the SMS message recipient (international).", + "order": 1 + }, + "from": { + "type": "string", + "title": "SMS Message Sender Phone", + "description": "The phone number of the SMS message sender (international).", + "order": 2 + }, + "message": { + "type": "string", + "title": "SMS Message Body", + "description": "The content of the SMS message to be sent.", + "order": 3 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "e7eff203-90bf-43e5-a240-19ea3056c474", + "name": "Typeform", + "dockerRepository": "airbyte/source-typeform", + "dockerImageTag": "0.1.12", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/typeform", + "icon": "typeform.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/typeform", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Typeform Spec", + "type": "object", + "required": ["token", "start_date"], + "additionalProperties": true, + "properties": { + "token": { + "type": "string", + "description": "The API Token for a Typeform account.", + "title": "API Token", + "airbyte_secret": true, + "order": 0 + }, + "start_date": { + "type": "string", + "description": "UTC date and time in the format: YYYY-MM-DDTHH:mm:ss[Z]. Any data before this date will not be replicated.", + "title": "Start Date", + "examples": ["2020-01-01T00:00:00Z"], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "order": 1, + "format": "date-time" + }, + "form_ids": { + "title": "Form IDs to replicate", + "description": "When this parameter is set, the connector will replicate data only from the input forms. Otherwise, all forms in your Typeform account will be replicated. You can find form IDs in your form URLs. For example, in the URL \"https://mysite.typeform.com/to/u6nXL7\" the form_id is u6nXL7. You can find form URLs on Share panel", + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true, + "order": 2 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": ["api.typeform.com"] + } + }, + { + "sourceDefinitionId": "f77914a1-442b-4195-9355-8810a1f4ed3f", + "name": "Unleash", + "dockerRepository": "airbyte/source-unleash", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/unleash", + "icon": "unleash.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/unleash", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Unleash Source Spec", + "type": "object", + "required": ["api_token", "api_url"], + "additionalProperties": true, + "properties": { + "api_token": { + "title": "API Token Client", + "type": "string", + "description": "Your API Token (Server-Side SDK [Client]). See here. The token is case sensitive.", + "airbyte_secret": true, + "examples": [ + "project:environment.be44368985f7fb3237c584ef86f3d6bdada42ddbd63a019d26955178", + "*:environment.be44368985f7fb3237c584ef86f3d6bdada42ddbd63a019d26955178", + "be44368985f7fb3237c584ef86f3d6bdada42ddbd63a019d26955178" + ] + }, + "api_url": { + "title": "API URL", + "type": "string", + "description": "Your API URL. No trailing slash. ex: http://unleash.host.com/api" + }, + "project_name": { + "title": "Project Name", + "type": "string", + "description": "Use this if you want to filter the API call for only one given project (can be used in addition to the \"Feature Name Prefix\" field). See here" + }, + "nameprefix": { + "title": "Feature Name Prefix", + "type": "string", + "description": "Use this if you want to filter the API call for only one given project (can be used in addition to the \"Feature Name Prefix\" field). See here" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "c4cfaeda-c757-489a-8aba-859fb08b6970", + "name": "US Census", + "dockerRepository": "airbyte/source-us-census", + "dockerImageTag": "0.1.2", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/us-census", + "icon": "uscensus.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/us-census", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "https://api.census.gov/ Source Spec", + "type": "object", + "required": ["api_key", "query_path"], + "additionalProperties": false, + "properties": { + "query_params": { + "type": "string", + "description": "The query parameters portion of the GET request, without the api key", + "pattern": "^\\w+=[\\w,:*]+(&(?!key)\\w+=[\\w,:*]+)*$", + "examples": [ + "get=NAME,NAICS2017_LABEL,LFO_LABEL,EMPSZES_LABEL,ESTAB,PAYANN,PAYQTR1,EMP&for=us:*&NAICS2017=72&LFO=001&EMPSZES=001", + "get=MOVEDIN,GEOID1,GEOID2,MOVEDOUT,FULL1_NAME,FULL2_NAME,MOVEDNET&for=county:*" + ] + }, + "query_path": { + "type": "string", + "description": "The path portion of the GET request", + "pattern": "^data(\\/[\\w\\d]+)+$", + "examples": [ + "data/2019/cbp", + "data/2018/acs", + "data/timeseries/healthins/sahie" + ] + }, + "api_key": { + "type": "string", + "description": "Your API Key. Get your key here.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "afa734e4-3571-11ec-991a-1e0031268139", + "name": "YouTube Analytics", + "dockerRepository": "airbyte/source-youtube-analytics", + "dockerImageTag": "0.1.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/youtube-analytics", + "icon": "youtube-analytics.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/youtube-analytics", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "YouTube Analytics Spec", + "type": "object", + "required": ["credentials"], + "additionalProperties": true, + "properties": { + "credentials": { + "title": "Authenticate via OAuth 2.0", + "type": "object", + "required": ["client_id", "client_secret", "refresh_token"], + "additionalProperties": true, + "properties": { + "client_id": { + "title": "Client ID", + "type": "string", + "description": "The Client ID of your developer application", + "airbyte_secret": true + }, + "client_secret": { + "title": "Client Secret", + "type": "string", + "description": "The client secret of your developer application", + "airbyte_secret": true + }, + "refresh_token": { + "title": "Refresh Token", + "type": "string", + "description": "A refresh token generated using the above client ID and secret", + "airbyte_secret": true + } + } + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "authSpecification": { + "auth_type": "oauth2.0", + "oauth2Specification": { + "rootObject": ["credentials"], + "oauthFlowInitParameters": [["client_id"], ["client_secret"]], + "oauthFlowOutputParameters": [["refresh_token"]] + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": ["*.googleapis.com"] + } + }, + { + "sourceDefinitionId": "28ce1fbd-1e15-453f-aa9f-da6c4d928e92", + "name": "Vantage", + "dockerRepository": "airbyte/source-vantage", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/vantage", + "icon": "vantage.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/vantage", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Vantage Spec", + "type": "object", + "required": ["access_token"], + "additionalProperties": true, + "properties": { + "access_token": { + "title": "API Access Token", + "type": "string", + "description": "Your API Access token. See here.", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "7e20ce3e-d820-4327-ad7a-88f3927fd97a", + "name": "VictorOps", + "dockerRepository": "farosai/airbyte-victorops-source", + "dockerImageTag": "0.1.23", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/victorops", + "icon": "victorops.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.faros.ai", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "VictorOps Spec", + "type": "object", + "required": ["apiId", "apiKey"], + "additionalProperties": true, + "properties": { + "apiId": { + "type": "string", + "title": "VictorOps API ID", + "airbyte_secret": true + }, + "apiKey": { + "type": "string", + "title": "VictorOps API key", + "airbyte_secret": true + }, + "maxContentLength": { + "type": "number", + "title": "VictorOps Content Length", + "description": "VictorOps API response content length limit, try increasing if 'RequestError' is encountered.", + "default": 500000 + }, + "pageLimit": { + "type": "number", + "title": "VictorOps Page Limit", + "default": 100 + }, + "currentPhase": { + "type": "string", + "title": "VictorOps Current Phase", + "default": "triggered,acknowledged,resolved" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "42495935-95de-4f5c-ae08-8fac00f6b308", + "name": "Visma E-conomic", + "dockerRepository": "airbyte/source-visma-economic", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/visma-economic", + "icon": "visma-e-conomic.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/visma-economic", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Visma E-conomic Spec", + "type": "object", + "required": ["app_secret_token", "agreement_grant_token"], + "properties": { + "app_secret_token": { + "title": "App Secret Token", + "type": "string", + "description": "Identification token for app accessing data", + "airbyte_secret": true + }, + "agreement_grant_token": { + "title": "Agreement Grant Token", + "type": "string", + "description": "Identifier for the grant issued by an agreement", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "6c6d8b0c-db35-4cd1-a7de-0ca8b080f5ac", + "name": "Vitally", + "dockerRepository": "airbyte/source-vitally", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/vitally", + "icon": "vitally.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/vitally", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Vitally Spec", + "type": "object", + "required": ["api_key", "status"], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "title": "API Token", + "description": "The API Token for a Vitally account.", + "airbyte_secret": true + }, + "status": { + "type": "string", + "title": "Status", + "description": "Status of the Vitally accounts. One of the following values; active, churned, activeOrChurned.", + "enum": ["active", "churned", "activeOrChurned"] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "6fd1e833-dd6e-45ec-a727-ab917c5be892", + "name": "Xero", + "dockerRepository": "airbyte/source-xero", + "dockerImageTag": "0.2.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/xero", + "icon": "xero.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/xero", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Xero Spec", + "type": "object", + "required": ["authentication", "tenant_id", "start_date"], + "additionalProperties": true, + "properties": { + "authentication": { + "type": "object", + "title": "Authenticate via Xero (OAuth)", + "required": [ + "client_id", + "client_secret", + "refresh_token", + "access_token", + "token_expiry_date" + ], + "properties": { + "client_id": { + "type": "string", + "title": "Client ID", + "description": "Enter your Xero application's Client ID" + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "Enter your Xero application's Client Secret", + "airbyte_secret": true + }, + "refresh_token": { + "type": "string", + "title": "Refresh Token", + "description": "Enter your Xero application's refresh token", + "airbyte_secret": true + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "Enter your Xero application's access token", + "airbyte_secret": true + }, + "token_expiry_date": { + "type": "string", + "description": "The date-time when the access token should be refreshed" + } + }, + "order": 0 + }, + "tenant_id": { + "title": "Tenant ID", + "type": "string", + "description": "Enter your Xero organization's Tenant ID", + "airbyte_secret": true, + "order": 1 + }, + "start_date": { + "type": "string", + "title": "Start Date", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "description": "UTC date and time in the format YYYY-MM-DDTHH:mm:ssZ. Any data with created_at before this data will not be synced.", + "examples": ["2022-03-01T00:00:00Z"], + "format": "date-time", + "order": 2 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": [], + "oauth_config_specification": { + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "refresh_token": { + "type": "string", + "path_in_connector_config": [ + "authentication", + "refresh_token" + ] + }, + "access_token": { + "type": "string", + "path_in_connector_config": ["authentication", "access_token"] + }, + "token_expiry_date": { + "type": "string", + "path_in_connector_config": [ + "authentication", + "token_expiry_date" + ], + "format": "date-time" + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": ["authentication", "client_id"] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": [ + "authentication", + "client_secret" + ] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": ["api.xero.com"] + } + }, + { + "sourceDefinitionId": "80fddd16-17bd-4c0c-bf4a-80df7863fc9d", + "name": "xkcd", + "dockerRepository": "airbyte/source-xkcd", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/xkcd", + "icon": "xkcd.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/xkcd", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Xkcd Spec", + "type": "object", + "properties": {} + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "5db8292c-5f5a-11ed-9b6a-0242ac120002", + "name": "Weatherstack", + "dockerRepository": "airbyte/source-weatherstack", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/weatherstack", + "icon": "weatherstack.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/weatherstack", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Weatherstack Spec", + "type": "object", + "required": ["access_key", "query", "historical_date"], + "properties": { + "is_paid_account": { + "order": 0, + "title": "Is Paid Account", + "description": "Toggle if you're using a Paid subscription", + "type": "boolean", + "default": false + }, + "access_key": { + "order": 1, + "type": "string", + "description": "API access key used to retrieve data from the Weatherstack API.(https://weatherstack.com/product)", + "airbyte_secret": true + }, + "query": { + "order": 2, + "type": "string", + "description": "A location to query such as city, IP, latitudeLongitude, or zipcode. Multiple locations with semicolon seperated if using a professional plan or higher. For more info- (https://weatherstack.com/documentation#query_parameter)", + "examples": ["New York", "London", "98101"] + }, + "historical_date": { + "order": 3, + "type": "string", + "description": "This is required for enabling the Historical date API with format- (YYYY-MM-DD). * Note, only supported by paid accounts", + "examples": ["2015-01-21"], + "default\"": "2000-01-01", + "pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2}" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "ef580275-d9a9-48bb-af5e-db0f5855be04", + "name": "Webflow", + "dockerRepository": "airbyte/source-webflow", + "dockerImageTag": "0.1.2", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/webflow", + "icon": "webflow.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/webflow", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Webflow Spec", + "type": "object", + "required": ["api_key", "site_id"], + "additionalProperties": false, + "properties": { + "site_id": { + "title": "Site id", + "type": "string", + "description": "The id of the Webflow site you are requesting data from. See https://developers.webflow.com/#sites", + "example": "a relatively long hex sequence", + "order": 0 + }, + "api_key": { + "title": "API token", + "type": "string", + "description": "The API token for authenticating to Webflow. See https://university.webflow.com/lesson/intro-to-the-webflow-api", + "example": "a very long hex sequence", + "order": 1, + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "e65f84c0-7598-458a-bfac-f770c381ff5d", + "name": "Whisky Hunter", + "dockerRepository": "airbyte/source-whisky-hunter", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/whisky-hunter", + "icon": "whiskyhunter.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/whisky-hunter", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Whisky Hunter Spec", + "type": "object", + "additionalProperties": true, + "properties": {} + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "2a2552ca-9f78-4c1c-9eb7-4d0dc66d72df", + "name": "WooCommerce", + "dockerRepository": "airbyte/source-woocommerce", + "dockerImageTag": "0.2.2", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/woocommerce", + "icon": "woocommerce.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/woocommerce", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Woocommerce Spec", + "type": "object", + "required": ["api_key", "api_secret", "shop", "start_date"], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "title": "Customer Key", + "description": "Customer Key for API in WooCommerce shop", + "airbyte_secret": true, + "order": 0 + }, + "api_secret": { + "type": "string", + "title": "Customer Secret", + "description": "Customer Secret for API in WooCommerce shop", + "airbyte_secret": true, + "order": 1 + }, + "shop": { + "type": "string", + "title": "Shop Name", + "description": "The name of the store. For https://EXAMPLE.com, the shop name is 'EXAMPLE.com'.", + "order": 2 + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "The date you would like to replicate data from. Format: YYYY-MM-DD", + "examples": ["2021-01-01"], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "format": "date", + "order": 3 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": ["${domain}"] + } + }, + { + "sourceDefinitionId": "ef3c99c6-9e90-43c8-9517-926cfd978517", + "name": "Workable", + "dockerRepository": "airbyte/source-workable", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/workable", + "icon": "workable.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/workable", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Workable API Spec", + "type": "object", + "required": ["api_key", "account_subdomain", "start_date"], + "additionalProperties": true, + "properties": { + "api_key": { + "title": "API Key", + "type": "string", + "description": "Your Workable API Key. See here.", + "airbyte_secret": true + }, + "account_subdomain": { + "title": "Account Subdomain", + "type": "string", + "description": "Your Workable account subdomain, e.g. https://your_account_subdomain.workable.com." + }, + "start_date": { + "title": "Start Date", + "type": "string", + "description": "Get data that was created since this date (format: YYYYMMDDTHHMMSSZ).", + "pattern": "^[0-9]{8}T[0-9]{6}Z$", + "examples": ["20150708T115616Z", "20221115T225616Z"] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "9c13f986-a13b-4988-b808-4705badf71c2", + "name": "Wrike", + "dockerRepository": "airbyte/source-wrike", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/wrike", + "icon": "wrike.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Wrike Spec", + "type": "object", + "required": ["access_token", "wrike_instance"], + "properties": { + "access_token": { + "type": "string", + "title": "Permanent Access Token", + "description": "Permanent access token. You can find documentation on how to acquire a permanent access token here", + "airbyte_secret": true, + "order": 0 + }, + "wrike_instance": { + "type": "string", + "title": "Wrike Instance (hostname)", + "description": "Wrike's instance such as `app-us2.wrike.com`", + "default": "app-us2.wrike.com", + "order": 1 + }, + "start_date": { + "type": "string", + "title": "Start date for comments", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Only comments after this date will be replicated.", + "examples": ["2017-01-25T00:00:00Z"], + "order": 2 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "b8c917bc-7d1b-4828-995f-6726820266d0", + "name": "Zapier Supported Storage", + "dockerRepository": "airbyte/source-zapier-supported-storage", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-supported-storage", + "icon": "zapiersupportedstorage.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zapier-supported-storage", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Zapier Supported Storage Spec", + "type": "object", + "required": ["secret"], + "additionalProperties": true, + "properties": { + "secret": { + "title": "Secret Key", + "type": "string", + "description": "Secret key supplied by zapier", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "40d24d0f-b8f9-4fe0-9e6c-b06c0f3f45e4", + "name": "Zendesk Chat", + "dockerRepository": "airbyte/source-zendesk-chat", + "dockerImageTag": "0.1.14", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-chat", + "icon": "zendesk-chat.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-chat", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Zendesk Chat Spec", + "type": "object", + "required": ["start_date"], + "additionalProperties": true, + "properties": { + "start_date": { + "type": "string", + "title": "Start Date", + "description": "The date from which you'd like to replicate data for Zendesk Chat API, in the format YYYY-MM-DDT00:00:00Z.", + "examples": ["2021-02-01T00:00:00Z"], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "format": "date-time" + }, + "subdomain": { + "type": "string", + "title": "Subdomain", + "description": "Required if you access Zendesk Chat from a Zendesk Support subdomain.", + "default": "" + }, + "credentials": { + "title": "Authorization Method", + "type": "object", + "oneOf": [ + { + "type": "object", + "title": "OAuth2.0", + "required": ["credentials"], + "properties": { + "credentials": { + "type": "string", + "const": "oauth2.0", + "order": 0 + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "The Client ID of your OAuth application", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "The Client Secret of your OAuth application.", + "airbyte_secret": true + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "Access Token for making authenticated requests.", + "airbyte_secret": true + }, + "refresh_token": { + "type": "string", + "title": "Refresh Token", + "description": "Refresh Token to obtain new Access Token, when it's expired.", + "airbyte_secret": true + } + } + }, + { + "type": "object", + "title": "Access Token", + "required": ["credentials", "access_token"], + "properties": { + "credentials": { + "type": "string", + "const": "access_token", + "order": 0 + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "The Access Token to make authenticated requests.", + "airbyte_secret": true + } + } + } + ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": ["credentials", "credentials"], + "predicate_value": "oauth2.0", + "oauth_config_specification": { + "oauth_user_input_from_connector_config_specification": { + "type": "object", + "properties": { + "subdomain": { + "type": "string", + "path_in_connector_config": ["subdomain"] + } + } + }, + "complete_oauth_output_specification": { + "type": "object", + "properties": { + "access_token": { + "type": "string", + "path_in_connector_config": ["credentials", "access_token"] + }, + "refresh_token": { + "type": "string", + "path_in_connector_config": ["credentials", "refresh_token"] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": ["credentials", "client_id"] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": ["credentials", "client_secret"] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["zopim.com"] + } + }, + { + "sourceDefinitionId": "982eaa4c-bba1-4cce-a971-06a41f700b8c", + "name": "Zendesk Sell", + "dockerRepository": "airbyte/source-zendesk-sell", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-sell", + "icon": "zendesk.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-sell", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Source Zendesk Sell Spec", + "type": "object", + "required": ["api_token"], + "properties": { + "api_token": { + "title": "API token", + "type": "string", + "description": "The API token for authenticating to Zendesk Sell", + "examples": [ + "f23yhd630otl94y85a8bf384958473pto95847fd006da49382716or937ruw059" + ], + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "325e0640-e7b3-4e24-b823-3361008f603f", + "name": "Zendesk Sunshine", + "dockerRepository": "airbyte/source-zendesk-sunshine", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-sunshine", + "icon": "zendesk-sunshine.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk_sunshine", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Zendesk Sunshine Spec", + "type": "object", + "required": ["start_date", "subdomain"], + "additionalProperties": true, + "properties": { + "subdomain": { + "title": "Subdomain", + "type": "string", + "description": "The subdomain for your Zendesk Account." + }, + "start_date": { + "title": "Start Date", + "type": "string", + "description": "The date from which you'd like to replicate data for Zendesk Sunshine API, in the format YYYY-MM-DDT00:00:00Z.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": ["2021-01-01T00:00:00Z"] + }, + "credentials": { + "title": "Authorization Method", + "type": "object", + "oneOf": [ + { + "type": "object", + "title": "OAuth2.0", + "required": [ + "auth_method", + "client_id", + "client_secret", + "access_token" + ], + "properties": { + "auth_method": { + "type": "string", + "const": "oauth2.0", + "enum": ["oauth2.0"], + "default": "oauth2.0", + "order": 0 + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "The Client ID of your OAuth application.", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "The Client Secret of your OAuth application.", + "airbyte_secret": true + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "Long-term access Token for making authenticated requests.", + "airbyte_secret": true + } + } + }, + { + "type": "object", + "title": "API Token", + "required": ["auth_method", "api_token", "email"], + "properties": { + "auth_method": { + "type": "string", + "const": "api_token", + "enum": ["api_token"], + "default": "api_token", + "order": 1 + }, + "api_token": { + "type": "string", + "title": "API Token", + "description": "API Token. See the docs for information on how to generate this key.", + "airbyte_secret": true + }, + "email": { + "type": "string", + "title": "Email", + "description": "The user email for your Zendesk account" + } + } + } + ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": ["credentials", "auth_method"], + "predicate_value": "oauth2.0", + "oauth_config_specification": { + "oauth_user_input_from_connector_config_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "subdomain": { + "type": "string", + "path_in_connector_config": ["subdomain"] + } + } + }, + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "access_token": { + "type": "string", + "path_in_connector_config": ["credentials", "access_token"] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": ["credentials", "client_id"] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": ["credentials", "client_secret"] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "79c1aa37-dae3-42ae-b333-d1c105477715", + "name": "Zendesk Support", + "dockerRepository": "airbyte/source-zendesk-support", + "dockerImageTag": "0.2.27", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-support", + "icon": "zendesk-support.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-support", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Source Zendesk Support Spec", + "type": "object", + "required": ["start_date", "subdomain"], + "additionalProperties": true, + "properties": { + "start_date": { + "type": "string", + "title": "Start Date", + "description": "The date from which you'd like to replicate data for Zendesk Support API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", + "examples": ["2020-10-15T00:00:00Z"], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "format": "date-time" + }, + "subdomain": { + "type": "string", + "title": "Subdomain", + "description": "This is your Zendesk subdomain that can be found in your account URL. For example, in https://{MY_SUBDOMAIN}.zendesk.com/, where MY_SUBDOMAIN is the value of your subdomain." + }, + "credentials": { + "title": "Authentication", + "type": "object", + "description": "Zendesk service provides two authentication methods. Choose between: `OAuth2.0` or `API token`.", + "oneOf": [ + { + "title": "OAuth2.0", + "type": "object", + "required": ["access_token"], + "additionalProperties": true, + "properties": { + "credentials": { + "type": "string", + "const": "oauth2.0", + "order": 0 + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "The value of the API token generated. See the docs for more information.", + "airbyte_secret": true + } + } + }, + { + "title": "API Token", + "type": "object", + "required": ["email", "api_token"], + "additionalProperties": true, + "properties": { + "credentials": { + "type": "string", + "const": "api_token", + "order": 0 + }, + "email": { + "title": "Email", + "type": "string", + "description": "The user email for your Zendesk account." + }, + "api_token": { + "title": "API Token", + "type": "string", + "description": "The value of the API token generated. See the docs for more information.", + "airbyte_secret": true + } + } + } + ] + }, + "ignore_pagination": { + "type": "boolean", + "default": false, + "description": "Makes each stream read a single page of data.", + "title": "Should the connector read the second and further pages of data.", + "airbyte_hidden": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": ["credentials", "credentials"], + "predicate_value": "oauth2.0", + "oauth_config_specification": { + "oauth_user_input_from_connector_config_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "subdomain": { + "type": "string", + "path_in_connector_config": ["subdomain"] + } + } + }, + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "access_token": { + "type": "string", + "path_in_connector_config": ["credentials", "access_token"] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": ["credentials", "client_id"] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": ["credentials", "client_secret"] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["${subdomain}.zendesk.com", "zendesk.com"] + }, + "maxSecondsBetweenMessages": 10800 + }, + { + "sourceDefinitionId": "c8630570-086d-4a40-99ae-ea5b18673071", + "name": "Zendesk Talk", + "dockerRepository": "airbyte/source-zendesk-talk", + "dockerImageTag": "0.1.7", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-talk", + "icon": "zendesk-talk.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zendesk-talk", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Source Zendesk Talk Spec", + "type": "object", + "required": ["start_date", "subdomain"], + "properties": { + "subdomain": { + "type": "string", + "title": "Subdomain", + "order": 0, + "description": "This is your Zendesk subdomain that can be found in your account URL. For example, in https://{MY_SUBDOMAIN}.zendesk.com/, where MY_SUBDOMAIN is the value of your subdomain." + }, + "credentials": { + "title": "Authentication", + "type": "object", + "order": 1, + "description": "Zendesk service provides two authentication methods. Choose between: `OAuth2.0` or `API token`.", + "oneOf": [ + { + "title": "API Token", + "type": "object", + "required": ["email", "api_token"], + "additionalProperties": true, + "properties": { + "auth_type": { + "type": "string", + "const": "api_token" + }, + "email": { + "title": "Email", + "type": "string", + "description": "The user email for your Zendesk account." + }, + "api_token": { + "title": "API Token", + "type": "string", + "description": "The value of the API token generated. See the docs for more information.", + "airbyte_secret": true + } + } + }, + { + "title": "OAuth2.0", + "type": "object", + "required": ["access_token"], + "additionalProperties": true, + "properties": { + "auth_type": { + "type": "string", + "const": "oauth2.0", + "order": 0 + }, + "access_token": { + "type": "string", + "title": "Access Token", + "description": "The value of the API token generated. See the docs for more information.", + "airbyte_secret": true + } + } + } + ] + }, + "start_date": { + "type": "string", + "title": "Start Date", + "order": 2, + "description": "The date from which you'd like to replicate data for Zendesk Talk API, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", + "examples": ["2020-10-15T00:00:00Z"], + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "format": "date-time" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [], + "advanced_auth": { + "auth_flow_type": "oauth2.0", + "predicate_key": ["credentials", "auth_type"], + "predicate_value": "oauth2.0", + "oauth_config_specification": { + "oauth_user_input_from_connector_config_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "subdomain": { + "type": "string", + "path_in_connector_config": ["subdomain"] + } + } + }, + "complete_oauth_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "access_token": { + "type": "string", + "path_in_connector_config": ["credentials", "access_token"] + } + } + }, + "complete_oauth_server_input_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string" + }, + "client_secret": { + "type": "string" + } + } + }, + "complete_oauth_server_output_specification": { + "type": "object", + "additionalProperties": false, + "properties": { + "client_id": { + "type": "string", + "path_in_connector_config": ["credentials", "client_id"] + }, + "client_secret": { + "type": "string", + "path_in_connector_config": ["credentials", "client_secret"] + } + } + } + } + } + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["${subdomain}.zendesk.com", "zendesk.com"] + } + }, + { + "sourceDefinitionId": "8baba53d-2fe3-4e33-bc85-210d0eb62884", + "name": "Zenefits", + "dockerRepository": "airbyte/source-zenefits", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zenefits", + "icon": "zenefits.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Zenefits Integration Spec", + "type": "object", + "required": ["token"], + "additionalProperties": false, + "properties": { + "token": { + "title": "token", + "type": "string", + "description": "Use Sync with Zenefits button on the link given on the readme file, and get the token to access the api" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "f1e4c7f6-db5c-4035-981f-d35ab4998794", + "name": "Zenloop", + "dockerRepository": "airbyte/source-zenloop", + "dockerImageTag": "0.1.6", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zenloop", + "icon": "zenloop.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zenloop", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Zenloop Spec", + "type": "object", + "required": ["api_token"], + "properties": { + "api_token": { + "type": "string", + "description": "Zenloop API Token. You can get the API token in settings page here ", + "airbyte_secret": true + }, + "date_from": { + "type": "string", + "description": "Zenloop date_from. Format: 2021-10-24T03:30:30Z or 2021-10-24. Leave empty if only data from current data should be synced", + "examples": ["2021-10-24T03:30:30Z"] + }, + "survey_id": { + "type": "string", + "description": "Zenloop Survey ID. Can be found here. Leave empty to pull answers from all surveys", + "airbyte_secret": true + }, + "survey_group_id": { + "type": "string", + "description": "Zenloop Survey Group ID. Can be found by pulling All Survey Groups via SurveyGroups stream. Leave empty to pull answers from all survey groups", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": ["api.zenloop.com"] + } + }, + { + "sourceDefinitionId": "cdaf146a-9b75-49fd-9dd2-9d64a0bb4781", + "name": "Sentry", + "dockerRepository": "airbyte/source-sentry", + "dockerImageTag": "0.2.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/sentry", + "icon": "sentry.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/sentry", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Sentry Spec", + "type": "object", + "required": ["auth_token", "organization", "project"], + "additionalProperties": true, + "properties": { + "auth_token": { + "type": "string", + "title": "Authentication Tokens", + "description": "Log into Sentry and then create authentication tokens.For self-hosted, you can find or create authentication tokens by visiting \"{instance_url_prefix}/settings/account/api/auth-tokens/\"", + "airbyte_secret": true + }, + "hostname": { + "type": "string", + "title": "Host Name", + "description": "Host name of Sentry API server.For self-hosted, specify your host name here. Otherwise, leave it empty.", + "default": "sentry.io" + }, + "organization": { + "type": "string", + "title": "Organization", + "description": "The slug of the organization the groups belong to." + }, + "project": { + "type": "string", + "title": "Project", + "description": "The name (slug) of the Project you want to sync." + }, + "discover_fields": { + "type": "array", + "item": "string", + "title": "Discover Event Fields", + "description": "Fields to retrieve when fetching discover events" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "generally_available", + "allowedHosts": { + "hosts": ["*"] + }, + "maxSecondsBetweenMessages": 64800 + }, + { + "sourceDefinitionId": "3dc3037c-5ce8-4661-adc2-f7a9e3c5ece5", + "name": "Zuora", + "dockerRepository": "airbyte/source-zuora", + "dockerImageTag": "0.1.3", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zuora", + "icon": "zuora.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zuora", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Zuora Connector Configuration", + "type": "object", + "required": [ + "start_date", + "tenant_endpoint", + "data_query", + "client_id", + "client_secret" + ], + "properties": { + "start_date": { + "type": "string", + "title": "Start Date", + "description": "Start Date in format: YYYY-MM-DD", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" + }, + "window_in_days": { + "type": "string", + "title": "Query Window (in days)", + "description": "The amount of days for each data-chunk begining from start_date. Bigger the value - faster the fetch. (0.1 - as for couple of hours, 1 - as for a Day; 364 - as for a Year).", + "examples": ["0.5", "1", "30", "60", "90", "120", "200", "364"], + "pattern": "^(0|[1-9]\\d*)(\\.\\d+)?$", + "default": "90" + }, + "tenant_endpoint": { + "title": "Tenant Endpoint Location", + "type": "string", + "description": "Please choose the right endpoint where your Tenant is located. More info by this Link", + "enum": [ + "US Production", + "US Cloud Production", + "US API Sandbox", + "US Cloud API Sandbox", + "US Central Sandbox", + "US Performance Test", + "EU Production", + "EU API Sandbox", + "EU Central Sandbox" + ] + }, + "data_query": { + "title": "Data Query Type", + "type": "string", + "description": "Choose between `Live`, or `Unlimited` - the optimized, replicated database at 12 hours freshness for high volume extraction Link", + "enum": ["Live", "Unlimited"], + "default": "Live" + }, + "client_id": { + "type": "string", + "title": "Client ID", + "description": "Your OAuth user Client ID", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "Your OAuth user Client Secret", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "cd06e646-31bf-4dc8-af48-cbc6530fcad3", + "name": "Kustomer", + "dockerRepository": "airbyte/source-kustomer-singer", + "dockerImageTag": "0.1.2", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/kustomer", + "icon": "kustomer.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/kustomer", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Source Kustomer Singer Spec", + "type": "object", + "required": ["api_token", "start_date"], + "additionalProperties": true, + "properties": { + "api_token": { + "title": "API Token", + "type": "string", + "description": "Kustomer API Token. See the docs on how to obtain this", + "airbyte_secret": true + }, + "start_date": { + "title": "Start Date", + "type": "string", + "description": "The date from which you'd like to replicate the data", + "examples": ["2019-01-01T00:00:00Z"] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "4942d392-c7b5-4271-91f9-3b4f4e51eb3e", + "name": "ZohoCRM", + "dockerRepository": "airbyte/source-zoho-crm", + "dockerImageTag": "0.1.2", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zoho-crm", + "icon": "zohocrm.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zoho-crm", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Zoho Crm Configuration", + "type": "object", + "required": [ + "client_id", + "client_secret", + "refresh_token", + "environment", + "dc_region", + "edition" + ], + "additionalProperties": true, + "properties": { + "client_id": { + "type": "string", + "title": "Client ID", + "description": "OAuth2.0 Client ID", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "OAuth2.0 Client Secret", + "airbyte_secret": true + }, + "refresh_token": { + "type": "string", + "title": "Refresh Token", + "description": "OAuth2.0 Refresh Token", + "airbyte_secret": true + }, + "dc_region": { + "title": "Data Center Location", + "type": "string", + "description": "Please choose the region of your Data Center location. More info by this Link", + "enum": ["US", "AU", "EU", "IN", "CN", "JP"] + }, + "environment": { + "title": "Environment", + "type": "string", + "description": "Please choose the environment", + "enum": ["Production", "Developer", "Sandbox"] + }, + "start_datetime": { + "title": "Start Date", + "type": ["string", "null"], + "examples": [ + "2000-01-01", + "2000-01-01 13:00", + "2000-01-01 13:00:00", + "2000-01-01T13:00+00:00", + "2000-01-01T13:00:00-07:00" + ], + "description": "ISO 8601, for instance: `YYYY-MM-DD`, `YYYY-MM-DD HH:MM:SS+HH:MM`", + "format": "date-time" + }, + "edition": { + "title": "Zoho CRM Edition", + "type": "string", + "description": "Choose your Edition of Zoho CRM to determine API Concurrency Limits", + "enum": [ + "Free", + "Standard", + "Professional", + "Enterprise", + "Ultimate" + ], + "default": "Free" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "a827c52e-791c-4135-a245-e233c5255199", + "name": "SFTP", + "dockerRepository": "airbyte/source-sftp", + "dockerImageTag": "0.1.2", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/sftp", + "icon": "sftp.svg", + "sourceType": "file", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/source/sftp", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "SFTP Source Spec", + "type": "object", + "required": ["user", "host", "port"], + "additionalProperties": true, + "properties": { + "user": { + "title": "User Name", + "description": "The server user", + "type": "string", + "order": 0 + }, + "host": { + "title": "Host Address", + "description": "The server host address", + "type": "string", + "examples": ["www.host.com", "192.0.2.1"], + "order": 1 + }, + "port": { + "title": "Port", + "description": "The server port", + "type": "integer", + "default": 22, + "examples": ["22"], + "order": 2 + }, + "credentials": { + "type": "object", + "title": "Authentication", + "description": "The server authentication method", + "order": 3, + "oneOf": [ + { + "title": "Password Authentication", + "required": ["auth_method", "auth_user_password"], + "properties": { + "auth_method": { + "description": "Connect through password authentication", + "type": "string", + "const": "SSH_PASSWORD_AUTH", + "order": 0 + }, + "auth_user_password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 1 + } + } + }, + { + "title": "SSH Key Authentication", + "required": ["auth_method", "auth_ssh_key"], + "properties": { + "auth_method": { + "description": "Connect through ssh key", + "type": "string", + "const": "SSH_KEY_AUTH", + "order": 0 + }, + "auth_ssh_key": { + "title": "SSH Private Key", + "description": "OS-level user account ssh key credentials in RSA PEM format ( created with ssh-keygen -t rsa -m PEM -f myuser_rsa )", + "type": "string", + "airbyte_secret": true, + "multiline": true, + "order": 1 + } + } + } + ] + }, + "file_types": { + "title": "File types", + "description": "Coma separated file types. Currently only 'csv' and 'json' types are supported.", + "type": "string", + "default": "csv,json", + "order": 4, + "examples": ["csv,json", "csv"] + }, + "folder_path": { + "title": "Folder Path", + "description": "The directory to search files for sync", + "type": "string", + "default": "", + "examples": ["/logs/2022"], + "order": 5 + }, + "file_pattern": { + "title": "File Pattern", + "description": "The regular expression to specify files for sync in a chosen Folder Path", + "type": "string", + "default": "", + "examples": [ + "log-([0-9]{4})([0-9]{2})([0-9]{2}) - This will filter files which `log-yearmmdd`" + ], + "order": 6 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "31e3242f-dee7-4cdc-a4b8-8e06c5458517", + "name": "SFTP Bulk", + "dockerRepository": "airbyte/source-sftp-bulk", + "dockerImageTag": "0.1.2", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/sftp-bulk", + "icon": "sftp.svg", + "sourceType": "file", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/source/ftp", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "FTP Source Spec", + "type": "object", + "required": [ + "username", + "host", + "port", + "stream_name", + "start_date", + "folder_path" + ], + "additionalProperties": true, + "properties": { + "username": { + "title": "User Name", + "description": "The server user", + "type": "string", + "order": 0 + }, + "password": { + "title": "Password", + "description": "OS-level password for logging into the jump server host", + "type": "string", + "airbyte_secret": true, + "order": 1 + }, + "private_key": { + "title": "Private key", + "description": "The private key", + "type": "string", + "multiline": true, + "order": 2 + }, + "host": { + "title": "Host Address", + "description": "The server host address", + "type": "string", + "examples": ["www.host.com", "192.0.2.1"], + "order": 3 + }, + "port": { + "title": "Port", + "description": "The server port", + "type": "integer", + "default": 22, + "examples": ["22"], + "order": 4 + }, + "stream_name": { + "title": "Stream name", + "description": "The name of the stream or table you want to create", + "type": "string", + "examples": ["ftp_contacts"], + "order": 5 + }, + "file_type": { + "title": "File type", + "description": "The file type you want to sync. Currently only 'csv' and 'json' files are supported.", + "type": "string", + "default": "csv", + "enum": ["csv", "json"], + "order": 6, + "examples": ["csv", "json"] + }, + "separator": { + "title": "CSV Separator (Optional)", + "description": "The separator used in the CSV files. Define None if you want to use the Sniffer functionality", + "type": "string", + "default": ",", + "examples": [","], + "order": 7 + }, + "folder_path": { + "title": "Folder Path (Optional)", + "description": "The directory to search files for sync", + "type": "string", + "default": "", + "examples": ["/logs/2022"], + "order": 8 + }, + "file_pattern": { + "title": "File Pattern (Optional)", + "description": "The regular expression to specify files for sync in a chosen Folder Path", + "type": "string", + "default": "", + "examples": [ + "log-([0-9]{4})([0-9]{2})([0-9]{2}) - This will filter files which `log-yearmmdd`" + ], + "order": 9 + }, + "file_most_recent": { + "title": "Most recent file (Optional)", + "description": "Sync only the most recent file for the configured folder path and file pattern", + "type": "boolean", + "default": false, + "order": 10 + }, + "start_date": { + "type": "string", + "title": "Start Date", + "format": "date-time", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "examples": ["2017-01-25T00:00:00Z"], + "description": "The date from which you'd like to replicate data for all incremental streams, in the format YYYY-MM-DDT00:00:00Z. All data generated after this date will be replicated.", + "order": 11 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "6f2ac653-8623-43c4-8950-19218c7caf3d", + "name": "Firebolt", + "dockerRepository": "airbyte/source-firebolt", + "dockerImageTag": "0.2.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/firebolt", + "icon": "firebolt.svg", + "sourceType": "database", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/firebolt", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Firebolt Spec", + "type": "object", + "required": ["username", "password", "database"], + "additionalProperties": true, + "properties": { + "username": { + "type": "string", + "title": "Username", + "description": "Firebolt email address you use to login.", + "examples": ["username@email.com"] + }, + "password": { + "type": "string", + "title": "Password", + "description": "Firebolt password.", + "airbyte_secret": true + }, + "account": { + "type": "string", + "title": "Account", + "description": "Firebolt account to login." + }, + "host": { + "type": "string", + "title": "Host", + "description": "The host name of your Firebolt database.", + "examples": ["api.app.firebolt.io"] + }, + "database": { + "type": "string", + "title": "Database", + "description": "The database to connect to." + }, + "engine": { + "type": "string", + "title": "Engine", + "description": "Engine name or url to connect to." + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "7cf88806-25f5-4e1a-b422-b2fa9e1b0090", + "name": "Elasticsearch", + "dockerRepository": "airbyte/source-elasticsearch", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/elasticsearch", + "icon": "elasticsearch.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/source/elasticsearch", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Elasticsearch Connection Configuration", + "type": "object", + "required": ["endpoint"], + "additionalProperties": true, + "properties": { + "endpoint": { + "title": "Server Endpoint", + "type": "string", + "description": "The full url of the Elasticsearch server" + }, + "authenticationMethod": { + "title": "Authentication Method", + "type": "object", + "description": "The type of authentication to be used", + "oneOf": [ + { + "title": "None", + "additionalProperties": true, + "description": "No authentication will be used", + "required": ["method"], + "properties": { + "method": { + "type": "string", + "const": "none" + } + } + }, + { + "title": "Api Key/Secret", + "additionalProperties": true, + "description": "Use a api key and secret combination to authenticate", + "required": ["method", "apiKeyId", "apiKeySecret"], + "properties": { + "method": { + "type": "string", + "const": "secret" + }, + "apiKeyId": { + "title": "API Key ID", + "description": "The Key ID to used when accessing an enterprise Elasticsearch instance.", + "type": "string" + }, + "apiKeySecret": { + "title": "API Key Secret", + "description": "The secret associated with the API Key ID.", + "type": "string", + "airbyte_secret": true + } + } + }, + { + "title": "Username/Password", + "additionalProperties": true, + "description": "Basic auth header with a username and password", + "required": ["method", "username", "password"], + "properties": { + "method": { + "type": "string", + "const": "basic" + }, + "username": { + "title": "Username", + "description": "Basic auth username to access a secure Elasticsearch server", + "type": "string" + }, + "password": { + "title": "Password", + "description": "Basic auth password to access a secure Elasticsearch server", + "type": "string", + "airbyte_secret": true + } + } + } + ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "03a53b13-794a-4d6b-8544-3b36ed8f3ce4", + "name": "Waiteraid", + "dockerRepository": "airbyte/source-waiteraid", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/waiteraid", + "icon": "waiteraid.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Waiteraid Spec", + "type": "object", + "required": ["start_date", "auth_hash", "restid"], + "additionalProperties": true, + "properties": { + "start_date": { + "title": "Start Date", + "type": "string", + "description": "Start getting data from that date.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": ["YYYY-MM-DD"] + }, + "auth_hash": { + "title": "Authentication Hash", + "type": "string", + "description": "Your WaiterAid API key, obtained from API request with Username and Password", + "airbyte_secret": true + }, + "restid": { + "title": "Restaurant ID", + "type": "string", + "description": "Your WaiterAid restaurant id from API request to getRestaurants", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "87c58f70-6f7a-4f70-aba5-bab1a458f5ba", + "name": "Wikipedia Pageviews", + "dockerRepository": "airbyte/source-wikipedia-pageviews", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/wikipedia-pageviews", + "icon": "wikipediapageviews.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docsurl.com", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Wikipedia Pageviews Spec", + "type": "object", + "required": [ + "project", + "access", + "agent", + "article", + "start", + "end", + "country" + ], + "additionalProperties": true, + "properties": { + "project": { + "type": "string", + "title": "Project", + "description": "If you want to filter by project, use the domain of any Wikimedia project.", + "examples": [ + "en.wikipedia.org", + "www.mediawiki.org", + "commons.wikimedia.org" + ] + }, + "access": { + "type": "string", + "title": "Access", + "description": "If you want to filter by access method, use one of desktop, mobile-app or mobile-web. If you are interested in pageviews regardless of access method, use all-access.", + "examples": ["all-access", "desktop", "mobile-app", "mobile-web"] + }, + "agent": { + "type": "string", + "title": "Agent", + "description": "If you want to filter by agent type, use one of user, automated or spider. If you are interested in pageviews regardless of agent type, use all-agents.", + "examples": ["all-agents", "user", "spider", "automated"] + }, + "article": { + "type": "string", + "title": "Article", + "description": "The title of any article in the specified project. Any spaces should be replaced with underscores. It also should be URI-encoded, so that non-URI-safe characters like %, / or ? are accepted.", + "examples": ["Are_You_the_One%3F"] + }, + "start": { + "type": "string", + "title": "Start", + "description": "The date of the first day to include, in YYYYMMDD or YYYYMMDDHH format." + }, + "end": { + "type": "string", + "title": "End", + "description": "The date of the last day to include, in YYYYMMDD or YYYYMMDDHH format." + }, + "country": { + "type": "string", + "title": "Country", + "description": "The ISO 3166-1 alpha-2 code of a country for which to retrieve top articles.", + "examples": ["FR", "IN"] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "05b0bce2-4ec4-4534-bb1a-5d0127bd91b7", + "name": "WorkRamp", + "dockerRepository": "airbyte/source-workramp", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/workramp", + "icon": "workramp.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/workramp", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Workramp Spec", + "type": "object", + "required": ["api_key", "academy_id"], + "additionalProperties": true, + "properties": { + "api_key": { + "type": "string", + "title": "API Token", + "description": "The API Token for Workramp", + "airbyte_secret": true + }, + "academy_id": { + "type": "string", + "title": "Academy ID", + "description": "The id of the Academy" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "7865dce4-2211-4f6a-88e5-9d0fe161afe7", + "name": "Yandex Metrica", + "dockerRepository": "airbyte/source-yandex-metrica", + "dockerImageTag": "1.0.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/yandex-metrica", + "icon": "yandexmetrica.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/yandex-metrica", + "connectionSpecification": { + "$schema": "https://json-schema.org/draft-07/schema#", + "title": "Yandex Metrica Spec", + "type": "object", + "required": ["auth_token", "counter_id", "start_date"], + "additionalProperties": true, + "properties": { + "auth_token": { + "type": "string", + "title": "Authentication Token", + "description": "Your Yandex Metrica API access token", + "airbyte_secret": true, + "order": 0 + }, + "counter_id": { + "type": "string", + "title": "Counter ID", + "description": "Counter ID", + "pattern": "^[0-9]+$", + "order": 1 + }, + "start_date": { + "title": "Start Date", + "type": "string", + "description": "Starting point for your data replication, in format of \"YYYY-MM-DD\".", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "format": "date", + "examples": ["2022-01-01"], + "order": 2 + }, + "end_date": { + "title": "End Date", + "type": "string", + "description": "Starting point for your data replication, in format of \"YYYY-MM-DD\". If not provided will sync till most recent date.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "format": "date", + "examples": ["2022-01-01"], + "order": 3 + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "beta", + "allowedHosts": { + "hosts": ["api-metrica.yandex.net"] + } + }, + { + "sourceDefinitionId": "9c74c2d7-531a-4ebf-b6d8-6181f805ecdc", + "name": "Younium", + "dockerRepository": "airbyte/source-younium", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/younium", + "icon": "younium.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/younium", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Younium Spec", + "type": "object", + "required": ["username", "password", "legal_entity"], + "properties": { + "username": { + "title": "Username", + "type": "string", + "description": "Username for Younium account" + }, + "password": { + "title": "Password", + "type": "string", + "description": "Account password for younium account API key", + "airbyte_secret": true + }, + "legal_entity": { + "title": "Legal Entity", + "type": "string", + "description": "Legal Entity that data should be pulled from" + }, + "playground": { + "title": "Playground environment", + "type": "boolean", + "description": "Property defining if connector is used against playground or production environment", + "default": false + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "cbfd9856-1322-44fb-bcf1-0b39b7a8e92e", + "name": "Zoom", + "dockerRepository": "airbyte/source-zoom", + "dockerImageTag": "0.1.1", + "documentationUrl": "https://docs.airbyte.io/integrations/sources/zoom", + "icon": "zoom.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/zoom", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Zoom Spec", + "type": "object", + "required": ["jwt_token"], + "additionalProperties": true, + "properties": { + "jwt_token": { + "type": "string", + "description": "JWT Token", + "airbyte_secret": true + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, + { + "sourceDefinitionId": "68b9c98e-0747-4c84-b05b-d30b47686725", + "name": "Braze", + "dockerRepository": "airbyte/source-braze", + "dockerImageTag": "0.1.3", + "documentationUrl": "https://docs.airbyte.io/integrations/sources/braze", + "icon": "braze.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/braze", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Braze Spec", + "type": "object", + "additionalProperties": true, + "required": ["url", "api_key", "start_date"], + "properties": { + "url": { + "type": "string", + "title": "URL", + "description": "Braze REST API endpoint" + }, + "api_key": { + "type": "string", + "title": "Rest API Key", + "airbyte_secret": true, + "description": "Braze REST API key" + }, + "start_date": { + "type": "string", + "format": "date", + "title": "Start date", + "description": "Rows after this date will be synced" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" + }, { + "sourceDefinitionId": "", + "name": "Yotpo", + "dockerRepository": "airbyte/source-yotpo", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/yotpo", + "icon": "yotpo.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/yotpo", + "connectionSpecification": { + "$schema": "https://json-schema.org/draft-07/schema#", + "title": "Yotpo Spec", + "type": "object", + "required": [ "access_token", "app_key", "start_date", "email" ], + "additionalProperties": true, + "properties": { + "access_token": { + "title": "Access Token", + "type": "string", + "description": "Access token recieved as a result of API call to https://api.yotpo.com/oauth/token (Ref- https://apidocs.yotpo.com/reference/yotpo-authentication)", + "airbyte_secret": true + }, + "app_key": { + "title": "App Key", + "type": "string", + "description": "App key found at settings (Ref- https://settings.yotpo.com/#/general_settings)" + }, + "start_date": { + "title": "Date-From Filter", + "type": "string", + "description": "Date time filter for incremental filter, Specify which date to extract from.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}Z$", + "examples": [ + "2022-03-01T00:00:00.000Z" + ], + "format": "date-time" + }, + "email": { + "title": "Registered email address", + "type": "string", + "description": "Email address registered with yotpo.", + "default": "example@gmail.com" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": [ "api.yotpo.com" ] + } + } + ] +} From f2bdcaa97a888376435760298f5ada62e66641fd Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Thu, 13 Apr 2023 11:40:57 +0530 Subject: [PATCH 026/187] Add stream top_reviews --- .../integration_tests/configured_catalog.json | 9 +++++++ .../source-yotpo/source_yotpo/manifest.yaml | 27 ++++++++++++++++++- .../source_yotpo/schemas/top_reviews.json | 26 ++++++++++++++++++ docs/integrations/sources/yotpo.md | 1 + 4 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json index ec576442f20d..423461ec8b2a 100644 --- a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json @@ -9,6 +9,15 @@ "sync_mode": "incremental", "destination_sync_mode": "append" }, + { + "stream": { + "name": "top_reviews", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, { "stream": { "name": "webhooks", diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml index d7cac7413daa..85845d0848d0 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml @@ -61,6 +61,30 @@ definitions: $parameters: path: "/apps/{{ config['app_key'] }}/reviews" + top_reviews_stream: + type: DeclarativeStream + retriever: + type: SimpleRetriever + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: ["reviews"] + paginator: + type: NoPagination + requester: + type: HttpRequester + url_base: "https://api.yotpo.com/" + http_method: "GET" + request_parameters: + utoken: "{{ config['access_token'] }}" + authenticator: + type: BearerAuthenticator + api_token: "{{ config['access_token'] }}" + name: "top_reviews" + $parameters: + path: "/apps/{{ config['app_key'] }}/top_reviews" + webhooks_stream: type: DeclarativeStream retriever: @@ -87,11 +111,12 @@ definitions: streams: - "#/definitions/reviews_stream" + - "#/definitions/top_reviews_stream" - "#/definitions/webhooks_stream" check: type: CheckStream stream_names: - "reviews" + - "top_reviews" - "webhooks" - diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json new file mode 100644 index 000000000000..a5021d309b7a --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json @@ -0,0 +1,26 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Top Reviews Schema", + "type": "object", + "properties": { + "image_url": { + "type": ["null", "string"] + }, + "score": { + "type": ["null", "number"] + }, + "title": { + "type": ["null", "string"] + }, + "content": { + "type": ["null", "string"] + }, + "product_url": { + "type": ["null", "string"] + }, + "created_at": { + "type": ["null", "string"], + "format": "date-time" + } + } +} diff --git a/docs/integrations/sources/yotpo.md b/docs/integrations/sources/yotpo.md index fe305d6b75a9..9aadc32279f8 100644 --- a/docs/integrations/sources/yotpo.md +++ b/docs/integrations/sources/yotpo.md @@ -48,6 +48,7 @@ The Yotpo source connector supports the following [sync modes](https://docs.airb ## Supported Streams - reviews +- top_reviews - webhooks ## API method example From 5a5b80a6035927c95ee322829ef15cc8f78bd714 Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Thu, 13 Apr 2023 13:28:36 +0530 Subject: [PATCH 027/187] Add new stream: privacy_data --- .../integration_tests/configured_catalog.json | 9 +++++++ .../source-yotpo/source_yotpo/manifest.yaml | 27 +++++++++++++++++++ .../source_yotpo/schemas/privacy_data.json | 10 +++++++ .../source-yotpo/source_yotpo/spec.yaml | 8 +++++- docs/integrations/sources/yotpo.md | 1 + 5 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_data.json diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json index 423461ec8b2a..72b72de37f63 100644 --- a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json @@ -1,5 +1,14 @@ { "streams": [ + { + "stream": { + "name": "privacy_data", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, { "stream": { "name": "reviews", diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml index 85845d0848d0..ef21492e6054 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml @@ -23,6 +23,31 @@ definitions: requester: $ref: "#/definitions/requester" + privacy_data_stream: + type: DeclarativeStream + retriever: + type: SimpleRetriever + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: ["response"] + paginator: + type: NoPagination + requester: + type: HttpRequester + url_base: "https://api.yotpo.com/privacy" + http_method: "GET" + request_parameters: + utoken: "{{ config['access_token'] }}" + email: "{{ config['email'] }}" + authenticator: + type: BearerAuthenticator + api_token: "{{ config['access_token'] }}" + name: "privacy_data" + $parameters: + path: "/data/exists" + reviews_stream: type: DeclarativeStream retriever: @@ -110,6 +135,7 @@ definitions: path: "/apps/{{ config['app_key'] }}/webhooks" streams: + - "#/definitions/privacy_data_stream" - "#/definitions/reviews_stream" - "#/definitions/top_reviews_stream" - "#/definitions/webhooks_stream" @@ -117,6 +143,7 @@ streams: check: type: CheckStream stream_names: + - "privacy_data" - "reviews" - "top_reviews" - "webhooks" diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_data.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_data.json new file mode 100644 index 000000000000..552feb4e7ef6 --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_data.json @@ -0,0 +1,10 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Privacy Data", + "type": "object", + "properties": { + "has_data": { + "type": ["null", "boolean"] + } + } +} diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml index 1d31374cde73..046e27710579 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml @@ -7,6 +7,7 @@ connectionSpecification: - access_token - app_key - date_from + - email additionalProperties: true properties: access_token: @@ -21,4 +22,9 @@ connectionSpecification: date_from: title: Date From Filter type: string - description: Date time filter for incremental filter, Specify which date to extract from. \ No newline at end of file + description: Date time filter for incremental filter, Specify which date to extract from. + email: + title: Registered email address + type: string + description: Email address registered with yotpo. + default: example@gmail.com \ No newline at end of file diff --git a/docs/integrations/sources/yotpo.md b/docs/integrations/sources/yotpo.md index 9aadc32279f8..73fe4aa5f641 100644 --- a/docs/integrations/sources/yotpo.md +++ b/docs/integrations/sources/yotpo.md @@ -47,6 +47,7 @@ The Yotpo source connector supports the following [sync modes](https://docs.airb ## Supported Streams +- privacy_data - reviews - top_reviews - webhooks From eab3d5ae833a15ff9c1998432e4a820f593e3819 Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Thu, 13 Apr 2023 14:00:51 +0530 Subject: [PATCH 028/187] add new stream: privacy user, refactor --- .../integration_tests/configured_catalog.json | 9 ++++ .../source-yotpo/source_yotpo/manifest.yaml | 44 ++++++++----------- .../source_yotpo/schemas/privacy_user.json | 13 ++++++ 3 files changed, 41 insertions(+), 25 deletions(-) create mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_user.json diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json index 72b72de37f63..a52846939dd6 100644 --- a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json @@ -9,6 +9,15 @@ "sync_mode": "full_refresh", "destination_sync_mode": "overwrite" }, + { + "stream": { + "name": "privacy_user", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, { "stream": { "name": "reviews", diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml index ef21492e6054..cbd11470f2b3 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml @@ -1,15 +1,15 @@ version: "0.29.0" definitions: - requester: + privacy_stream_requester: type: HttpRequester - url_base: "https://api.yotpo.com/v1" + url_base: "https://api.yotpo.com/privacy" http_method: "GET" - authenticator: - type: BearerAuthenticator - api_token: "{{ config['access_token'] }}" + request_parameters: + utoken: "{{ config['access_token'] }}" + email: "{{ config['email'] }}" - base_stream: + privacy_data_stream: type: DeclarativeStream retriever: type: SimpleRetriever @@ -17,13 +17,16 @@ definitions: type: RecordSelector extractor: type: DpathExtractor - field_path: [] + field_path: ["response"] paginator: type: NoPagination requester: - $ref: "#/definitions/requester" - - privacy_data_stream: + $ref: "#/definitions/privacy_stream_requester" + name: "privacy_data" + $parameters: + path: "/data/exists" + + privacy_user_stream: type: DeclarativeStream retriever: type: SimpleRetriever @@ -31,22 +34,14 @@ definitions: type: RecordSelector extractor: type: DpathExtractor - field_path: ["response"] + field_path: ["status"] paginator: type: NoPagination requester: - type: HttpRequester - url_base: "https://api.yotpo.com/privacy" - http_method: "GET" - request_parameters: - utoken: "{{ config['access_token'] }}" - email: "{{ config['email'] }}" - authenticator: - type: BearerAuthenticator - api_token: "{{ config['access_token'] }}" - name: "privacy_data" + $ref: "#/definitions/privacy_stream_requester" + name: "privacy_user" $parameters: - path: "/data/exists" + path: "/data" reviews_stream: type: DeclarativeStream @@ -127,15 +122,13 @@ definitions: http_method: "GET" request_parameters: utoken: "{{ config['access_token'] }}" - authenticator: - type: BearerAuthenticator - api_token: "{{ config['access_token'] }}" name: "webhooks" $parameters: path: "/apps/{{ config['app_key'] }}/webhooks" streams: - "#/definitions/privacy_data_stream" + - "#/definitions/privacy_user_stream" - "#/definitions/reviews_stream" - "#/definitions/top_reviews_stream" - "#/definitions/webhooks_stream" @@ -144,6 +137,7 @@ check: type: CheckStream stream_names: - "privacy_data" + - "privacy_user" - "reviews" - "top_reviews" - "webhooks" diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_user.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_user.json new file mode 100644 index 000000000000..7e2817c09be2 --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_user.json @@ -0,0 +1,13 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Privacy User", + "type": "object", + "properties": { + "code": { + "type": ["null", "number"] + }, + "message": { + "type": ["null", "string"] + } + } +} From d40445c133d07c92ae59d4d63617af50ef1a61cd Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Thu, 13 Apr 2023 14:30:03 +0530 Subject: [PATCH 029/187] Add new streams, update docs, update definitions --- .../src/main/resources/seed/oss_catalog.json | 32 +++++++++++++++---- .../src/main/resources/seed/source_specs.yaml | 12 ++++++- .../integration_tests/configured_catalog.json | 9 ++++++ .../source-yotpo/source_yotpo/manifest.yaml | 27 ++++++++++++++++ .../schemas/reviews_bottomline.json | 18 +++++++++++ .../source-yotpo/source_yotpo/spec.yaml | 6 +++- docs/integrations/sources/yotpo.md | 8 +++-- 7 files changed, 102 insertions(+), 10 deletions(-) create mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json index c88672b1c49f..ff8a38a89362 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json @@ -28416,15 +28416,35 @@ "$schema": "https://json-schema.org/draft-07/schema#", "title": "Yotpo Spec", "type": "object", - "required": [ "auth_token", "counter_id", "start_date" ], + "required": [ "access_token", "app_key", "date_from", "email" ], "additionalProperties": true, "properties": { - "auth_token": { + "access_token": { + "title": "Access Token", "type": "string", - "title": "Authentication Token", - "description": "Your Yandex Metrica API access token", - "airbyte_secret": true, - "order": 0 + "description": "Access token recieved as a result of API call to https://api.yotpo.com/oauth/token (Ref- https://apidocs.yotpo.com/reference/yotpo-authentication)", + "airbyte_secret": true + }, + "app_key": { + "title": "App Key", + "type": "string", + "description": "App key found at settings (Ref- https://settings.yotpo.com/#/general_settings)" + }, + "date_from": { + "title": "Date-From Filter", + "type": "string", + "description": "Date time filter for incremental filter, Specify which date to extract from.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}Z$", + "examples": [ + "2022-03-01T00:00:00.000Z" + ], + "format": "date-time" + }, + "email": { + "title": "Registered email address", + "type": "string", + "description": "Email address registered with yotpo.", + "default": "example@gmail.com" } } }, diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml index 81893445a2bd..6ad04de392d8 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml @@ -18350,6 +18350,7 @@ - access_token - app_key - date_from + - email additionalProperties: true properties: access_token: @@ -18362,9 +18363,18 @@ type: string description: App key found at settings (Ref- https://settings.yotpo.com/#/general_settings) date_from: - title: Date From Filter + title: Date-From Filter type: string description: Date time filter for incremental filter, Specify which date to extract from. + pattern: "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}Z$" + examples: + - "2022-03-01T00:00:00.000Z" + format: "date-time" + email: + title: Registered email address + type: string + description: Email address registered with yotpo. + default: example@gmail.com supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json index a52846939dd6..2d7be78bcee3 100644 --- a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json @@ -27,6 +27,15 @@ "sync_mode": "incremental", "destination_sync_mode": "append" }, + { + "stream": { + "name": "reviews_bottomline", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, { "stream": { "name": "top_reviews", diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml index cbd11470f2b3..251fef833a58 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml @@ -81,6 +81,31 @@ definitions: $parameters: path: "/apps/{{ config['app_key'] }}/reviews" + reviews_bottomline_stream: + type: DeclarativeStream + retriever: + type: SimpleRetriever + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: ["response"] + paginator: + type: NoPagination + requester: + type: HttpRequester + url_base: "https://api.yotpo.com" + http_method: "GET" + request_parameters: + utoken: "{{ config['access_token'] }}" + authenticator: + type: BearerAuthenticator + api_token: "{{ config['access_token'] }}" + name: "reviews_bottomline" + $parameters: + path: "/products/{{ config['app_key'] }}/yotpo_site_reviews/bottomline" + + top_reviews_stream: type: DeclarativeStream retriever: @@ -130,6 +155,7 @@ streams: - "#/definitions/privacy_data_stream" - "#/definitions/privacy_user_stream" - "#/definitions/reviews_stream" + - "#/definitions/reviews_bottomline_stream" - "#/definitions/top_reviews_stream" - "#/definitions/webhooks_stream" @@ -139,5 +165,6 @@ check: - "privacy_data" - "privacy_user" - "reviews" + - "reviews_bottomline" - "top_reviews" - "webhooks" diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json new file mode 100644 index 000000000000..8188f59bb5ae --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json @@ -0,0 +1,18 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Reviews Bottomline", + "type": "object", + "properties": { + "bottomline": { + "type": "object", + "properties": { + "average_score": { + "type": ["null", "number"] + }, + "total_reviews": { + "type": ["null", "number"] + } + } + } + } +} diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml index 046e27710579..c17a1ef8afc2 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml @@ -20,9 +20,13 @@ connectionSpecification: type: string description: App key found at settings (Ref- https://settings.yotpo.com/#/general_settings) date_from: - title: Date From Filter + title: Date-From Filter type: string description: Date time filter for incremental filter, Specify which date to extract from. + pattern: "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}Z$" + examples: + - "2022-03-01T00:00:00.000Z" + format: "date-time" email: title: Registered email address type: string diff --git a/docs/integrations/sources/yotpo.md b/docs/integrations/sources/yotpo.md index 73fe4aa5f641..63e6448c2f14 100644 --- a/docs/integrations/sources/yotpo.md +++ b/docs/integrations/sources/yotpo.md @@ -15,6 +15,8 @@ Access Token (which acts as bearer token) is mandate for this connector to work, - Available params - access_token: The generated access token - app_key: Seen at the yotpo settings (ref - https://settings.yotpo.com/#/general_settings) + - date_from: Date filter for eligible streams, enter + - email ## Step 2: Set up the Yotpo connector in Airbyte @@ -23,14 +25,14 @@ Access Token (which acts as bearer token) is mandate for this connector to work, 1. [Log into your Airbyte Cloud](https://cloud.airbyte.io/workspaces) account. 2. In the left navigation bar, click **Sources**. In the top-right corner, click **+new source**. 3. On the Set up the source page, enter the name for the Yotpo connector and select **Yotpo** from the Source type dropdown. -4. Enter your `api_key`. +4. Enter your `access_token`. 5. Click **Set up source**. ### For Airbyte OSS: 1. Navigate to the Airbyte Open Source dashboard. 2. Set the name for your source. -3. Enter your `api_key`. +3. Enter your `access_token`. 5. Click **Set up source**. ## Supported sync modes @@ -48,7 +50,9 @@ The Yotpo source connector supports the following [sync modes](https://docs.airb ## Supported Streams - privacy_data +- privacy_user - reviews +- reviews_bottomline - top_reviews - webhooks From 1cab6575a7f693914ab7cab00457193ff1a30783 Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Thu, 13 Apr 2023 14:42:31 +0530 Subject: [PATCH 030/187] EOF --- .../connectors/source-yotpo/source_yotpo/spec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml index c17a1ef8afc2..8408215c011d 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml @@ -31,4 +31,4 @@ connectionSpecification: title: Registered email address type: string description: Email address registered with yotpo. - default: example@gmail.com \ No newline at end of file + default: example@gmail.com From dbf309a5d68b69db84a52dc299a5fc08fc0b3ae6 Mon Sep 17 00:00:00 2001 From: Visnu Pitiyanuvath Date: Wed, 12 Apr 2023 08:26:02 -0700 Subject: [PATCH 031/187] Source Stripe: expand tiers when syncing plans (#19906) * Expand tiers when syncing plans * Update Plans stream schema * Re-bump * Bump * Remove string as a plan schema * bump * Update changelog --------- Co-authored-by: Sherif A. Nada Co-authored-by: sh4sh <6833405+sh4sh@users.noreply.github.com> Co-authored-by: Marcos Marx --- airbyte-integrations/connectors/source-stripe/Dockerfile | 2 +- .../source-stripe/source_stripe/schemas/plans.json | 8 +++++++- .../connectors/source-stripe/source_stripe/streams.py | 4 ++++ docs/integrations/sources/stripe.md | 3 ++- 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/airbyte-integrations/connectors/source-stripe/Dockerfile b/airbyte-integrations/connectors/source-stripe/Dockerfile index 520d0dea76f4..e40ccfaa4ac4 100644 --- a/airbyte-integrations/connectors/source-stripe/Dockerfile +++ b/airbyte-integrations/connectors/source-stripe/Dockerfile @@ -13,5 +13,5 @@ ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=3.0.5 +LABEL io.airbyte.version=3.1.0 LABEL io.airbyte.name=airbyte/source-stripe diff --git a/airbyte-integrations/connectors/source-stripe/source_stripe/schemas/plans.json b/airbyte-integrations/connectors/source-stripe/source_stripe/schemas/plans.json index 099b518427bc..3af88a962ca0 100644 --- a/airbyte-integrations/connectors/source-stripe/source_stripe/schemas/plans.json +++ b/airbyte-integrations/connectors/source-stripe/source_stripe/schemas/plans.json @@ -1,5 +1,5 @@ { - "type": ["null", "object", "string"], + "type": ["null", "object"], "properties": { "nickname": { "type": ["null", "string"] @@ -12,9 +12,15 @@ "flat_amount": { "type": ["null", "integer"] }, + "flat_amount_decimal": { + "type": ["null", "string"] + }, "unit_amount": { "type": ["null", "integer"] }, + "unit_amount_decimal": { + "type": ["null", "string"] + }, "up_to": { "type": ["null", "integer"] } diff --git a/airbyte-integrations/connectors/source-stripe/source_stripe/streams.py b/airbyte-integrations/connectors/source-stripe/source_stripe/streams.py index b39e4ad8a037..21209a0b15b4 100644 --- a/airbyte-integrations/connectors/source-stripe/source_stripe/streams.py +++ b/airbyte-integrations/connectors/source-stripe/source_stripe/streams.py @@ -422,6 +422,10 @@ class Plans(IncrementalStripeStream): def path(self, **kwargs): return "plans" + def request_params(self, stream_slice: Mapping[str, Any] = None, **kwargs): + params = super().request_params(stream_slice=stream_slice, **kwargs) + params["expand[]"] = ["data.tiers"] + return params class Products(IncrementalStripeStream): """ diff --git a/docs/integrations/sources/stripe.md b/docs/integrations/sources/stripe.md index 8f29c88dfadd..1c742210ac87 100644 --- a/docs/integrations/sources/stripe.md +++ b/docs/integrations/sources/stripe.md @@ -81,7 +81,8 @@ The Stripe connector should not run into Stripe API limitations under normal usa ## Changelog | Version | Date | Pull Request | Subject | -|:--------|:-----------|:---------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------| +| :------ | :--------- | :------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------- | +| 3.1.0 | 2023-03-10 | [19906](https://github.com/airbytehq/airbyte/pull/19906) | Expand `tiers` when syncing `Plans` streams | | 3.0.5 | 2023-03-25 | [22866](https://github.com/airbytehq/airbyte/pull/22866) | Specified date formatting in specification | | 3.0.4 | 2023-03-24 | [24471](https://github.com/airbytehq/airbyte/pull/24471) | Fix stream slices for single sliced streams | | 3.0.3 | 2023-03-17 | [24179](https://github.com/airbytehq/airbyte/pull/24179) | Get customer's attributes safely | From 1ffe136993a3ceea60c9a28681d8cebc4a24d988 Mon Sep 17 00:00:00 2001 From: Augustin Date: Wed, 12 Apr 2023 17:48:52 +0200 Subject: [PATCH 032/187] airbyte-ci: improve metadata validation perfs (#25107) --- .../pipelines/actions/environments.py | 36 +-------- .../pipelines/pipelines/metadata.py | 76 +++++++------------ 2 files changed, 28 insertions(+), 84 deletions(-) diff --git a/tools/ci_connector_ops/ci_connector_ops/pipelines/actions/environments.py b/tools/ci_connector_ops/ci_connector_ops/pipelines/actions/environments.py index 4df55349b6a8..e0d83d353b0f 100644 --- a/tools/ci_connector_ops/ci_connector_ops/pipelines/actions/environments.py +++ b/tools/ci_connector_ops/ci_connector_ops/pipelines/actions/environments.py @@ -55,7 +55,7 @@ def with_python_base(context: PipelineContext, python_image_name: str = "python: context.dagger_client.container() .from_(python_image_name) .with_mounted_cache("/root/.cache/pip", pip_cache, sharing=CacheSharingMode.LOCKED) - .with_mounted_directory("/tools", context.get_repo_dir("tools", include=["ci_credentials", "ci_common_utils"], exclude=[".venv"])) + .with_mounted_directory("/tools", context.get_repo_dir("tools", include=["ci_credentials", "ci_common_utils"])) .with_exec(["pip", "install", "--upgrade", "pip"]) ) @@ -452,25 +452,11 @@ def with_poetry(context: PipelineContext) -> Container: python_with_poetry = with_pip_packages(python_with_git, ["poetry"]) poetry_cache: CacheVolume = context.dagger_client.cache_volume("poetry_cache") - poetry_with_cache = python_with_poetry.with_mounted_cache("/root/.cache/pypoetry", poetry_cache, sharing=CacheSharingMode.PRIVATE) + poetry_with_cache = python_with_poetry.with_mounted_cache("/root/.cache/pypoetry", poetry_cache, sharing=CacheSharingMode.SHARED) return poetry_with_cache -def with_pipx(base_python_container: Container) -> Container: - """Installs pipx in a python container. - - Args: - base_python_container (Container): The container to install pipx on. - - Returns: - Container: A python environment with pipx installed. - """ - python_with_pipx = with_pip_packages(base_python_container, ["pipx"]).with_env_variable("PIPX_BIN_DIR", "/usr/local/bin") - - return python_with_pipx - - def with_poetry_module(context: PipelineContext, parent_dir: Directory, module_path: str) -> Container: """Sets up a Poetry module. @@ -489,24 +475,6 @@ def with_poetry_module(context: PipelineContext, parent_dir: Directory, module_p ) -def with_pipx_module(context: PipelineContext, parent_dir_path: str, module_path: str, include: List[str]) -> Container: - """Installs a pipx module - - Args: - context (PipelineContext): The current pipeline context - Returns: - Container: A python environment with dependencies installed using pipx. - """ - pipx_include = [module_path] + include - pipx_install_dependencies_cmd = ["pipx", "install", module_path] - src = context.get_repo_dir(parent_dir_path, exclude=DEFAULT_PYTHON_EXCLUDE, include=pipx_include) - - python_base_environment = with_python_base(context, "python:3.9") - python_with_pipx = with_pipx(python_base_environment) - - return python_with_pipx.with_mounted_directory("/src", src).with_workdir("/src").with_exec(pipx_install_dependencies_cmd) - - def with_integration_base(context: PipelineContext, jdk_version: str = "17.0.4") -> Container: """Create an integration base container. diff --git a/tools/ci_connector_ops/ci_connector_ops/pipelines/pipelines/metadata.py b/tools/ci_connector_ops/ci_connector_ops/pipelines/pipelines/metadata.py index ef93eaa192e2..e1caa509d8c7 100644 --- a/tools/ci_connector_ops/ci_connector_ops/pipelines/pipelines/metadata.py +++ b/tools/ci_connector_ops/ci_connector_ops/pipelines/pipelines/metadata.py @@ -1,54 +1,41 @@ -import dagger -from typing import Optional, Set, List +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# from pathlib import Path +from typing import Optional, Set +import dagger +from ci_connector_ops.pipelines.actions.environments import with_poetry_module from ci_connector_ops.pipelines.bases import Step, StepStatus, TestReport -from ci_connector_ops.pipelines.actions.environments import with_poetry_module, with_pipx_module, DEFAULT_PYTHON_EXCLUDE from ci_connector_ops.pipelines.contexts import PipelineContext -from ci_connector_ops.pipelines.utils import ( - DAGGER_CONFIG, - execute_concurrently, -) +from ci_connector_ops.pipelines.utils import DAGGER_CONFIG, execute_concurrently METADATA_DIR = "airbyte-ci/connectors/metadata_service" METADATA_LIB_MODULE_PATH = "lib" METADATA_ORCHESTRATOR_MODULE_PATH = "orchestrator" -class TestPoetryModule(Step): +class PoetryRun(Step): def __init__(self, context: PipelineContext, title: str, parent_dir_path: str, module_path: str): self.title = title - self.parent_dir_path = parent_dir_path - self.module_path = module_path super().__init__(context) + self.parent_dir = self.context.get_repo_dir(parent_dir_path) + self.module_path = module_path + self.poetry_run_container = with_poetry_module(self.context, self.parent_dir, self.module_path).with_entrypoint(["poetry", "run"]) - async def _run(self) -> StepStatus: - # TODO (ben): Use the GlobalExclusion when merged (https://github.com/airbytehq/airbyte/pull/24225/files#diff-c86417158894333350d986efd59ffada645270c1c65b4eec7645a0b63ac2d915R46) - parent_dir = self.context.get_repo_dir(self.parent_dir_path, exclude=DEFAULT_PYTHON_EXCLUDE) - metadata_lib_module = with_poetry_module(self.context, parent_dir, self.module_path) - run_test = metadata_lib_module.with_exec(["poetry", "run", "pytest"]) - return await self.get_step_result(run_test) + async def _run(self, poetry_run_args: list) -> StepStatus: + poetry_run_exec = self.poetry_run_container.with_exec(poetry_run_args) + return await self.get_step_result(poetry_run_exec) -class SimpleExecStep(Step): - def __init__(self, context: PipelineContext, title: str, args: List[str], parent_container: dagger.Container): - self.title = title - self.args = args - self.parent_container = parent_container - super().__init__(context) +class MetadataValidation(PoetryRun): + def __init__(self, context: PipelineContext, metadata_file_path: Path): + super().__init__(context, f"Validate {metadata_file_path}", METADATA_DIR, METADATA_LIB_MODULE_PATH) + self.metadata_file = self.context.get_repo_dir(str(metadata_file_path), include=["metadata.yaml"]).file("metadata.yaml") + self.poetry_run_container = self.poetry_run_container.with_mounted_file("metadata.yaml", self.metadata_file) async def _run(self) -> StepStatus: - run_command = self.parent_container.with_exec(self.args) - return await self.get_step_result(run_command) - - -def metadata_validation_step(metadata_pipeline_context: PipelineContext, metadata_path: Path, parent_container: dagger.Container) -> Step: - return SimpleExecStep( - context=metadata_pipeline_context, - title=f"Validate Connector Metadata Manifest: {metadata_path}", - args=["metadata_service", "validate", str(metadata_path)], - parent_container=parent_container, - ) + return await super()._run(["metadata_service", "validate", "metadata.yaml"]) async def run_metadata_validation_pipeline( @@ -72,21 +59,10 @@ async def run_metadata_validation_pipeline( async with dagger.Connection(DAGGER_CONFIG) as dagger_client: metadata_pipeline_context.dagger_client = dagger_client.pipeline(metadata_pipeline_context.pipeline_name) - async with metadata_pipeline_context: - parent_container = with_pipx_module( - metadata_pipeline_context, - ".", - f"{METADATA_DIR}/{METADATA_LIB_MODULE_PATH}", - include=["airbyte-integrations/connectors/*"], - ) - - validation_steps = [ - metadata_validation_step(metadata_pipeline_context, metadata_path, parent_container).run - for metadata_path in metadata_source_paths - ] + validation_steps = [MetadataValidation(metadata_pipeline_context, metadata_path).run for metadata_path in metadata_source_paths] - results = await execute_concurrently(validation_steps) + results = await execute_concurrently(validation_steps, concurrency=len(validation_steps)) metadata_pipeline_context.test_report = TestReport(pipeline_context=metadata_pipeline_context, steps_results=results) return metadata_pipeline_context.test_report.success @@ -113,13 +89,13 @@ async def run_metadata_lib_test_pipeline( async with dagger.Connection(DAGGER_CONFIG) as dagger_client: metadata_pipeline_context.dagger_client = dagger_client.pipeline(metadata_pipeline_context.pipeline_name) async with metadata_pipeline_context: - test_lib_step = TestPoetryModule( + test_lib_step = PoetryRun( context=metadata_pipeline_context, title="Test Metadata Service Lib", parent_dir_path=METADATA_DIR, module_path=METADATA_LIB_MODULE_PATH, ) - result = await test_lib_step.run() + result = await test_lib_step.run(["pytest"]) metadata_pipeline_context.test_report = TestReport(pipeline_context=metadata_pipeline_context, steps_results=[result]) return metadata_pipeline_context.test_report.success @@ -146,13 +122,13 @@ async def run_metadata_orchestrator_test_pipeline( async with dagger.Connection(DAGGER_CONFIG) as dagger_client: metadata_pipeline_context.dagger_client = dagger_client.pipeline(metadata_pipeline_context.pipeline_name) async with metadata_pipeline_context: - test_orch_step = TestPoetryModule( + test_orch_step = PoetryRun( context=metadata_pipeline_context, title="Test Metadata Service Orchestrator", parent_dir_path=METADATA_DIR, module_path=METADATA_ORCHESTRATOR_MODULE_PATH, ) - result = await test_orch_step.run() + result = await test_orch_step.run(["pytest"]) metadata_pipeline_context.test_report = TestReport(pipeline_context=metadata_pipeline_context, steps_results=[result]) return metadata_pipeline_context.test_report.success From 941b5d9312a744bb5a1fba04af6a3f2c227285ba Mon Sep 17 00:00:00 2001 From: Augustin Date: Wed, 12 Apr 2023 18:37:46 +0200 Subject: [PATCH 033/187] metadata service: upload metadata files to gcs (#25115) --- .../lib/metadata_service/commands.py | 28 +- .../lib/metadata_service/gcs_upload.py | 41 ++ .../metadata_service/lib/poetry.lock | 558 +++++++++++++++++- .../metadata_service/lib/pyproject.toml | 3 + .../lib/tests/test_commands.py | 73 +++ .../lib/tests/test_gcs_upload.py | 89 +++ .../lib/tests/test_metadata_validator.py | 28 - 7 files changed, 782 insertions(+), 38 deletions(-) create mode 100644 airbyte-ci/connectors/metadata_service/lib/metadata_service/gcs_upload.py create mode 100644 airbyte-ci/connectors/metadata_service/lib/tests/test_commands.py create mode 100644 airbyte-ci/connectors/metadata_service/lib/tests/test_gcs_upload.py delete mode 100644 airbyte-ci/connectors/metadata_service/lib/tests/test_metadata_validator.py diff --git a/airbyte-ci/connectors/metadata_service/lib/metadata_service/commands.py b/airbyte-ci/connectors/metadata_service/lib/metadata_service/commands.py index 79afa721d1df..7ecdfcad9928 100644 --- a/airbyte-ci/connectors/metadata_service/lib/metadata_service/commands.py +++ b/airbyte-ci/connectors/metadata_service/lib/metadata_service/commands.py @@ -1,7 +1,12 @@ -import click +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# import pathlib +import click +from metadata_service.gcs_upload import upload_metadata_to_gcs from metadata_service.validators.metadata_validator import validate_metadata_file +from pydantic import ValidationError @click.group(help="Airbyte Metadata Service top-level command group.") @@ -12,7 +17,7 @@ def metadata_service(): @metadata_service.command(help="Validate a given metadata YAML file.") @click.argument("file_path", type=click.Path(exists=True, path_type=pathlib.Path)) def validate(file_path: pathlib.Path): - file_path = file_path if not file_path.is_dir() else file_path / "metadata.yml" + file_path = file_path if not file_path.is_dir() else file_path / "metadata.yaml" click.echo(f"Validating {file_path}...") @@ -23,3 +28,22 @@ def validate(file_path: pathlib.Path): click.echo(f"{file_path} is not a valid ConnectorMetadataDefinitionV1 YAML file.") click.echo(str(error)) exit(1) + + +@metadata_service.command(help="Upload a metadata YAML file to a GCS bucket.") +@click.argument("metadata-file-path", type=click.Path(exists=True, path_type=pathlib.Path)) +@click.argument("bucket-name", type=click.STRING) +@click.option( + "--service-account-file-path", "-sa", type=click.Path(exists=True, path_type=pathlib.Path), envvar="GOOGLE_APPLICATION_CREDENTIALS" +) +def upload(metadata_file_path: pathlib.Path, bucket_name: str, service_account_file_path: pathlib.Path): + metadata_file_path = metadata_file_path if not metadata_file_path.is_dir() else metadata_file_path / "metadata.yaml" + try: + uploaded, blob_id = upload_metadata_to_gcs(bucket_name, metadata_file_path, service_account_file_path) + except (ValidationError, FileNotFoundError) as e: + click.secho(f"The metadata file could not be uploaded: {str(e)}", color="red") + exit(1) + if uploaded: + click.secho(f"The metadata file {metadata_file_path} was uploaded to {blob_id}.", color="green") + else: + click.secho(f"The metadata file {metadata_file_path} was not uploaded.", color="yellow") diff --git a/airbyte-ci/connectors/metadata_service/lib/metadata_service/gcs_upload.py b/airbyte-ci/connectors/metadata_service/lib/metadata_service/gcs_upload.py new file mode 100644 index 000000000000..909ccd28f0cb --- /dev/null +++ b/airbyte-ci/connectors/metadata_service/lib/metadata_service/gcs_upload.py @@ -0,0 +1,41 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# +from pathlib import Path +from typing import Tuple + +import yaml +from google.cloud import storage +from google.oauth2 import service_account +from metadata_service.models.generated.ConnectorMetadataDefinitionV1 import ConnectorMetadataDefinitionV1 + + +def upload_metadata_to_gcs(bucket_name: str, metadata_file_path: Path, service_account_file_path: Path) -> Tuple[bool, str]: + """Upload a metadata file to a GCS bucket. + + If the per 'version' key already exists it won't be overwritten. + Also updates the 'latest' key on each new version. + + Args: + bucket_name (str): Name of the GCS bucket to which the metadata file will be uploade. + metadata_file_path (Path): Path to the metadata file. + service_account_file_path (Path): Path to the JSON file with the service account allowed to read and write on the bucket. + Returns: + Tuple[bool, str]: Whether the metadata file was uploaded and its blob id. + """ + uploaded = False + raw_metadata = yaml.safe_load(metadata_file_path.read_text()) + metadata = ConnectorMetadataDefinitionV1.parse_obj(raw_metadata) + + credentials = service_account.Credentials.from_service_account_file(service_account_file_path) + storage_client = storage.Client(credentials=credentials) + bucket = storage_client.bucket(bucket_name) + + version_blob = bucket.blob(f"metadata/{metadata.data.dockerRepository}/{metadata.data.dockerImageTag}/metadata.yaml") + latest_blob = bucket.blob(f"metadata/{metadata.data.dockerRepository}/latest/metadata.yaml") + if not version_blob.exists(): + version_blob.upload_from_filename(str(metadata_file_path)) + uploaded = True + if version_blob.etag != latest_blob.etag: + latest_blob.upload_from_filename(str(metadata_file_path)) + return uploaded, version_blob.id diff --git a/airbyte-ci/connectors/metadata_service/lib/poetry.lock b/airbyte-ci/connectors/metadata_service/lib/poetry.lock index 47aadc95d5f5..a4530e55f5f2 100644 --- a/airbyte-ci/connectors/metadata_service/lib/poetry.lock +++ b/airbyte-ci/connectors/metadata_service/lib/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry and should not be changed by hand. +# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand. [[package]] name = "argcomplete" @@ -104,11 +104,23 @@ d = ["aiohttp (>=3.7.4)"] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] uvloop = ["uvloop (>=0.15.2)"] +[[package]] +name = "cachetools" +version = "5.3.0" +description = "Extensible memoizing collections and decorators" +category = "main" +optional = false +python-versions = "~=3.7" +files = [ + {file = "cachetools-5.3.0-py3-none-any.whl", hash = "sha256:429e1a1e845c008ea6c85aa35d4b98b65d6a9763eeef3e37e92728a12d1de9d4"}, + {file = "cachetools-5.3.0.tar.gz", hash = "sha256:13dfddc7b8df938c21a940dfa6557ce6e94a2f1cdfa58eb90c805721d58f2c14"}, +] + [[package]] name = "certifi" version = "2022.12.7" description = "Python package for providing Mozilla's CA Bundle." -category = "dev" +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -132,7 +144,7 @@ files = [ name = "charset-normalizer" version = "3.1.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "dev" +category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -329,6 +341,78 @@ files = [ [package.extras] test = ["pytest (>=6)"] +[[package]] +name = "future" +version = "0.18.3" +description = "Clean single-source support for Python 3 and 2" +category = "main" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "future-0.18.3.tar.gz", hash = "sha256:34a17436ed1e96697a86f9de3d15a3b0be01d8bc8de9c1dffd59fb8234ed5307"}, +] + +[[package]] +name = "gax-google-logging-v2" +version = "0.8.3" +description = "GAX library for the Google Logging API" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "gax-google-logging-v2-0.8.3.tar.gz", hash = "sha256:c36cbb93e070b3b535e9fffff6879efe447e525dff75b62eb4564def515e1a18"}, +] + +[package.dependencies] +google-gax = ">=0.12.5,<0.13.0" +googleapis-common-protos = ">=1.1.0" +grpc-google-logging-v2 = ">=0.8.1,<0.9.0" +oauth2client = ">=1.4.11" + +[[package]] +name = "gax-google-pubsub-v1" +version = "0.8.3" +description = "DEPRECATED" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "gax-google-pubsub-v1-0.8.3.tar.gz", hash = "sha256:943df4aa05cf0302fa1616197d05e29adb62be2c0f55f80d8345439d72471526"}, +] + +[package.dependencies] +google-gax = ">=0.12.5,<0.13.0" +googleapis-common-protos = ">=1.1.0" +grpc-google-pubsub-v1 = ">=0.8.1,<0.9.0" +oauth2client = ">=1.4.11" + +[[package]] +name = "gcloud" +version = "0.18.3" +description = "API Client library for Google Cloud" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "gcloud-0.18.3.tar.gz", hash = "sha256:0af2dec59fce20561752f86e42d981c6a255e306a6c5e5d1fa3d358a8857e4fb"}, +] + +[package.dependencies] +gax-google-logging-v2 = ">=0.8.0,<0.9dev" +gax-google-pubsub-v1 = ">=0.8.0,<0.9dev" +google-gax = ">=0.12.3,<0.13dev" +googleapis-common-protos = "*" +grpc-google-logging-v2 = ">=0.8.0,<0.9dev" +grpc-google-pubsub-v1 = ">=0.8.0,<0.9dev" +grpcio = ">=1.0rc1" +httplib2 = ">=0.9.1" +oauth2client = ">=2.0.1" +protobuf = ">=3.0.0b2,<3.0.0.b2.post1 || >3.0.0.b2.post1" +six = "*" + +[package.extras] +grpc = ["gax-google-logging-v2 (>=0.8.0,<0.9dev)", "gax-google-pubsub-v1 (>=0.8.0,<0.9dev)", "google-gax (>=0.12.3,<0.13dev)", "grpc-google-logging-v2 (>=0.8.0,<0.9dev)", "grpc-google-pubsub-v1 (>=0.8.0,<0.9dev)", "grpcio (>=1.0rc1)"] + [[package]] name = "genson" version = "1.2.2" @@ -355,11 +439,341 @@ files = [ [package.dependencies] beautifulsoup4 = "*" +[[package]] +name = "google-api-core" +version = "2.11.0" +description = "Google API client core library" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-api-core-2.11.0.tar.gz", hash = "sha256:4b9bb5d5a380a0befa0573b302651b8a9a89262c1730e37bf423cec511804c22"}, + {file = "google_api_core-2.11.0-py3-none-any.whl", hash = "sha256:ce222e27b0de0d7bc63eb043b956996d6dccab14cc3b690aaea91c9cc99dc16e"}, +] + +[package.dependencies] +google-auth = ">=2.14.1,<3.0dev" +googleapis-common-protos = ">=1.56.2,<2.0dev" +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" +requests = ">=2.18.0,<3.0.0dev" + +[package.extras] +grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "grpcio-status (>=1.33.2,<2.0dev)", "grpcio-status (>=1.49.1,<2.0dev)"] +grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0dev)"] +grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0dev)"] + +[[package]] +name = "google-auth" +version = "2.17.2" +description = "Google Authentication Library" +category = "main" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*" +files = [ + {file = "google-auth-2.17.2.tar.gz", hash = "sha256:295c80ebb95eac74003c07a696cf3ef6b414e9230ae8894f3843f8215fd2aa56"}, + {file = "google_auth-2.17.2-py2.py3-none-any.whl", hash = "sha256:544536a43d44dff0f64222e4d027d124989fcb9c10979687e589e1694fba9c94"}, +] + +[package.dependencies] +cachetools = ">=2.0.0,<6.0" +pyasn1-modules = ">=0.2.1" +rsa = {version = ">=3.1.4,<5", markers = "python_version >= \"3.6\""} +six = ">=1.9.0" + +[package.extras] +aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)", "requests (>=2.20.0,<3.0.0dev)"] +enterprise-cert = ["cryptography (==36.0.2)", "pyopenssl (==22.0.0)"] +pyopenssl = ["cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] +reauth = ["pyu2f (>=0.1.5)"] +requests = ["requests (>=2.20.0,<3.0.0dev)"] + +[[package]] +name = "google-cloud-core" +version = "2.3.2" +description = "Google Cloud API client core library" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-cloud-core-2.3.2.tar.gz", hash = "sha256:b9529ee7047fd8d4bf4a2182de619154240df17fbe60ead399078c1ae152af9a"}, + {file = "google_cloud_core-2.3.2-py2.py3-none-any.whl", hash = "sha256:8417acf6466be2fa85123441696c4badda48db314c607cf1e5d543fa8bdc22fe"}, +] + +[package.dependencies] +google-api-core = ">=1.31.6,<2.0.0 || >2.3.0,<3.0.0dev" +google-auth = ">=1.25.0,<3.0dev" + +[package.extras] +grpc = ["grpcio (>=1.38.0,<2.0dev)"] + +[[package]] +name = "google-cloud-storage" +version = "2.8.0" +description = "Google Cloud Storage API client library" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-cloud-storage-2.8.0.tar.gz", hash = "sha256:4388da1ff5bda6d729f26dbcaf1bfa020a2a52a7b91f0a8123edbda51660802c"}, + {file = "google_cloud_storage-2.8.0-py2.py3-none-any.whl", hash = "sha256:248e210c13bc109909160248af546a91cb2dabaf3d7ebbf04def9dd49f02dbb6"}, +] + +[package.dependencies] +google-api-core = ">=1.31.5,<2.0.0 || >2.3.0,<3.0.0dev" +google-auth = ">=1.25.0,<3.0dev" +google-cloud-core = ">=2.3.0,<3.0dev" +google-resumable-media = ">=2.3.2" +requests = ">=2.18.0,<3.0.0dev" + +[package.extras] +protobuf = ["protobuf (<5.0.0dev)"] + +[[package]] +name = "google-crc32c" +version = "1.5.0" +description = "A python wrapper of the C library 'Google CRC32C'" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "google-crc32c-1.5.0.tar.gz", hash = "sha256:89284716bc6a5a415d4eaa11b1726d2d60a0cd12aadf5439828353662ede9dd7"}, + {file = "google_crc32c-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:596d1f98fc70232fcb6590c439f43b350cb762fb5d61ce7b0e9db4539654cc13"}, + {file = "google_crc32c-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:be82c3c8cfb15b30f36768797a640e800513793d6ae1724aaaafe5bf86f8f346"}, + {file = "google_crc32c-1.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:461665ff58895f508e2866824a47bdee72497b091c730071f2b7575d5762ab65"}, + {file = "google_crc32c-1.5.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2096eddb4e7c7bdae4bd69ad364e55e07b8316653234a56552d9c988bd2d61b"}, + {file = "google_crc32c-1.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:116a7c3c616dd14a3de8c64a965828b197e5f2d121fedd2f8c5585c547e87b02"}, + {file = "google_crc32c-1.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5829b792bf5822fd0a6f6eb34c5f81dd074f01d570ed7f36aa101d6fc7a0a6e4"}, + {file = "google_crc32c-1.5.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:64e52e2b3970bd891309c113b54cf0e4384762c934d5ae56e283f9a0afcd953e"}, + {file = "google_crc32c-1.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:02ebb8bf46c13e36998aeaad1de9b48f4caf545e91d14041270d9dca767b780c"}, + {file = "google_crc32c-1.5.0-cp310-cp310-win32.whl", hash = "sha256:2e920d506ec85eb4ba50cd4228c2bec05642894d4c73c59b3a2fe20346bd00ee"}, + {file = "google_crc32c-1.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:07eb3c611ce363c51a933bf6bd7f8e3878a51d124acfc89452a75120bc436289"}, + {file = "google_crc32c-1.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cae0274952c079886567f3f4f685bcaf5708f0a23a5f5216fdab71f81a6c0273"}, + {file = "google_crc32c-1.5.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1034d91442ead5a95b5aaef90dbfaca8633b0247d1e41621d1e9f9db88c36298"}, + {file = "google_crc32c-1.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c42c70cd1d362284289c6273adda4c6af8039a8ae12dc451dcd61cdabb8ab57"}, + {file = "google_crc32c-1.5.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8485b340a6a9e76c62a7dce3c98e5f102c9219f4cfbf896a00cf48caf078d438"}, + {file = "google_crc32c-1.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77e2fd3057c9d78e225fa0a2160f96b64a824de17840351b26825b0848022906"}, + {file = "google_crc32c-1.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f583edb943cf2e09c60441b910d6a20b4d9d626c75a36c8fcac01a6c96c01183"}, + {file = "google_crc32c-1.5.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:a1fd716e7a01f8e717490fbe2e431d2905ab8aa598b9b12f8d10abebb36b04dd"}, + {file = "google_crc32c-1.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:72218785ce41b9cfd2fc1d6a017dc1ff7acfc4c17d01053265c41a2c0cc39b8c"}, + {file = "google_crc32c-1.5.0-cp311-cp311-win32.whl", hash = "sha256:66741ef4ee08ea0b2cc3c86916ab66b6aef03768525627fd6a1b34968b4e3709"}, + {file = "google_crc32c-1.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:ba1eb1843304b1e5537e1fca632fa894d6f6deca8d6389636ee5b4797affb968"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:98cb4d057f285bd80d8778ebc4fde6b4d509ac3f331758fb1528b733215443ae"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd8536e902db7e365f49e7d9029283403974ccf29b13fc7028b97e2295b33556"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19e0a019d2c4dcc5e598cd4a4bc7b008546b0358bd322537c74ad47a5386884f"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02c65b9817512edc6a4ae7c7e987fea799d2e0ee40c53ec573a692bee24de876"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6ac08d24c1f16bd2bf5eca8eaf8304812f44af5cfe5062006ec676e7e1d50afc"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3359fc442a743e870f4588fcf5dcbc1bf929df1fad8fb9905cd94e5edb02e84c"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e986b206dae4476f41bcec1faa057851f3889503a70e1bdb2378d406223994a"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:de06adc872bcd8c2a4e0dc51250e9e65ef2ca91be023b9d13ebd67c2ba552e1e"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-win32.whl", hash = "sha256:d3515f198eaa2f0ed49f8819d5732d70698c3fa37384146079b3799b97667a94"}, + {file = "google_crc32c-1.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:67b741654b851abafb7bc625b6d1cdd520a379074e64b6a128e3b688c3c04740"}, + {file = "google_crc32c-1.5.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:c02ec1c5856179f171e032a31d6f8bf84e5a75c45c33b2e20a3de353b266ebd8"}, + {file = "google_crc32c-1.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:edfedb64740750e1a3b16152620220f51d58ff1b4abceb339ca92e934775c27a"}, + {file = "google_crc32c-1.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84e6e8cd997930fc66d5bb4fde61e2b62ba19d62b7abd7a69920406f9ecca946"}, + {file = "google_crc32c-1.5.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:024894d9d3cfbc5943f8f230e23950cd4906b2fe004c72e29b209420a1e6b05a"}, + {file = "google_crc32c-1.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:998679bf62b7fb599d2878aa3ed06b9ce688b8974893e7223c60db155f26bd8d"}, + {file = "google_crc32c-1.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:83c681c526a3439b5cf94f7420471705bbf96262f49a6fe546a6db5f687a3d4a"}, + {file = "google_crc32c-1.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4c6fdd4fccbec90cc8a01fc00773fcd5fa28db683c116ee3cb35cd5da9ef6c37"}, + {file = "google_crc32c-1.5.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5ae44e10a8e3407dbe138984f21e536583f2bba1be9491239f942c2464ac0894"}, + {file = "google_crc32c-1.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:37933ec6e693e51a5b07505bd05de57eee12f3e8c32b07da7e73669398e6630a"}, + {file = "google_crc32c-1.5.0-cp38-cp38-win32.whl", hash = "sha256:fe70e325aa68fa4b5edf7d1a4b6f691eb04bbccac0ace68e34820d283b5f80d4"}, + {file = "google_crc32c-1.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:74dea7751d98034887dbd821b7aae3e1d36eda111d6ca36c206c44478035709c"}, + {file = "google_crc32c-1.5.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c6c777a480337ac14f38564ac88ae82d4cd238bf293f0a22295b66eb89ffced7"}, + {file = "google_crc32c-1.5.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:759ce4851a4bb15ecabae28f4d2e18983c244eddd767f560165563bf9aefbc8d"}, + {file = "google_crc32c-1.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f13cae8cc389a440def0c8c52057f37359014ccbc9dc1f0827936bcd367c6100"}, + {file = "google_crc32c-1.5.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e560628513ed34759456a416bf86b54b2476c59144a9138165c9a1575801d0d9"}, + {file = "google_crc32c-1.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1674e4307fa3024fc897ca774e9c7562c957af85df55efe2988ed9056dc4e57"}, + {file = "google_crc32c-1.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:278d2ed7c16cfc075c91378c4f47924c0625f5fc84b2d50d921b18b7975bd210"}, + {file = "google_crc32c-1.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d5280312b9af0976231f9e317c20e4a61cd2f9629b7bfea6a693d1878a264ebd"}, + {file = "google_crc32c-1.5.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:8b87e1a59c38f275c0e3676fc2ab6d59eccecfd460be267ac360cc31f7bcde96"}, + {file = "google_crc32c-1.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7c074fece789b5034b9b1404a1f8208fc2d4c6ce9decdd16e8220c5a793e6f61"}, + {file = "google_crc32c-1.5.0-cp39-cp39-win32.whl", hash = "sha256:7f57f14606cd1dd0f0de396e1e53824c371e9544a822648cd76c034d209b559c"}, + {file = "google_crc32c-1.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:a2355cba1f4ad8b6988a4ca3feed5bff33f6af2d7f134852cf279c2aebfde541"}, + {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f314013e7dcd5cf45ab1945d92e713eec788166262ae8deb2cfacd53def27325"}, + {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b747a674c20a67343cb61d43fdd9207ce5da6a99f629c6e2541aa0e89215bcd"}, + {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8f24ed114432de109aa9fd317278518a5af2d31ac2ea6b952b2f7782b43da091"}, + {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8667b48e7a7ef66afba2c81e1094ef526388d35b873966d8a9a447974ed9178"}, + {file = "google_crc32c-1.5.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:1c7abdac90433b09bad6c43a43af253e688c9cfc1c86d332aed13f9a7c7f65e2"}, + {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6f998db4e71b645350b9ac28a2167e6632c239963ca9da411523bb439c5c514d"}, + {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c99616c853bb585301df6de07ca2cadad344fd1ada6d62bb30aec05219c45d2"}, + {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ad40e31093a4af319dadf503b2467ccdc8f67c72e4bcba97f8c10cb078207b5"}, + {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd67cf24a553339d5062eff51013780a00d6f97a39ca062781d06b3a73b15462"}, + {file = "google_crc32c-1.5.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:398af5e3ba9cf768787eef45c803ff9614cc3e22a5b2f7d7ae116df8b11e3314"}, + {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b1f8133c9a275df5613a451e73f36c2aea4fe13c5c8997e22cf355ebd7bd0728"}, + {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9ba053c5f50430a3fcfd36f75aff9caeba0440b2d076afdb79a318d6ca245f88"}, + {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:272d3892a1e1a2dbc39cc5cde96834c236d5327e2122d3aaa19f6614531bb6eb"}, + {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:635f5d4dd18758a1fbd1049a8e8d2fee4ffed124462d837d1a02a0e009c3ab31"}, + {file = "google_crc32c-1.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c672d99a345849301784604bfeaeba4db0c7aae50b95be04dd651fd2a7310b93"}, +] + +[package.extras] +testing = ["pytest"] + +[[package]] +name = "google-gax" +version = "0.12.5" +description = "Google API Extensions" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "google-gax-0.12.5.tar.gz", hash = "sha256:63312a04cb87ca50e857245f05c582b2171807a30e61cef85006b983bf659cb9"}, +] + +[package.dependencies] +future = ">=0.15.2" +grpcio = ">=1.0rc1" +oauth2client = ">=1.5.2" +ply = "3.8" +protobuf = ">=3.0.0b3" + +[[package]] +name = "google-resumable-media" +version = "2.4.1" +description = "Utilities for Google Media Downloads and Resumable Uploads" +category = "main" +optional = false +python-versions = ">= 3.7" +files = [ + {file = "google-resumable-media-2.4.1.tar.gz", hash = "sha256:15b8a2e75df42dc6502d1306db0bce2647ba6013f9cd03b6e17368c0886ee90a"}, + {file = "google_resumable_media-2.4.1-py2.py3-none-any.whl", hash = "sha256:831e86fd78d302c1a034730a0c6e5369dd11d37bad73fa69ca8998460d5bae8d"}, +] + +[package.dependencies] +google-crc32c = ">=1.0,<2.0dev" + +[package.extras] +aiohttp = ["aiohttp (>=3.6.2,<4.0.0dev)"] +requests = ["requests (>=2.18.0,<3.0.0dev)"] + +[[package]] +name = "googleapis-common-protos" +version = "1.59.0" +description = "Common protobufs used in Google APIs" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "googleapis-common-protos-1.59.0.tar.gz", hash = "sha256:4168fcb568a826a52f23510412da405abd93f4d23ba544bb68d943b14ba3cb44"}, + {file = "googleapis_common_protos-1.59.0-py2.py3-none-any.whl", hash = "sha256:b287dc48449d1d41af0c69f4ea26242b5ae4c3d7249a38b0984c86a4caffff1f"}, +] + +[package.dependencies] +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" + +[package.extras] +grpc = ["grpcio (>=1.44.0,<2.0.0dev)"] + +[[package]] +name = "grpc-google-logging-v2" +version = "0.8.1" +description = "GRPC library for the google-logging-v2 service" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "grpc-google-logging-v2-0.8.1.tar.gz", hash = "sha256:4b6b4e603860b134b2cb8732bb4d1f2cec963d553497dcf70b3f5ecc99d7fb4f"}, +] + +[package.dependencies] +googleapis-common-protos = ">=1.1.0" +grpcio = ">=1.0rc1" +oauth2client = ">=1.4.11" + +[[package]] +name = "grpc-google-pubsub-v1" +version = "0.8.1" +description = "GRPC library for the google-pubsub-v1 service" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "grpc-google-pubsub-v1-0.8.1.tar.gz", hash = "sha256:ab5a3a239a9678012cdc00a9b9a8fe8c75fca9a0035da41da3078145e9d967b9"}, +] + +[package.dependencies] +googleapis-common-protos = ">=1.1.0" +grpcio = ">=1.0rc1" +oauth2client = ">=1.4.11" + +[[package]] +name = "grpcio" +version = "1.53.0" +description = "HTTP/2-based RPC framework" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "grpcio-1.53.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:752d2949b40e12e6ad3ed8cc552a65b54d226504f6b1fb67cab2ccee502cc06f"}, + {file = "grpcio-1.53.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:8a48fd3a7222be226bb86b7b413ad248f17f3101a524018cdc4562eeae1eb2a3"}, + {file = "grpcio-1.53.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:f3e837d29f0e1b9d6e7b29d569e2e9b0da61889e41879832ea15569c251c303a"}, + {file = "grpcio-1.53.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aef7d30242409c3aa5839b501e877e453a2c8d3759ca8230dd5a21cda029f046"}, + {file = "grpcio-1.53.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e6f90698b5d1c5dd7b3236cd1fa959d7b80e17923f918d5be020b65f1c78b173"}, + {file = "grpcio-1.53.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a96c3c7f564b263c5d7c0e49a337166c8611e89c4c919f66dba7b9a84abad137"}, + {file = "grpcio-1.53.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ee81349411648d1abc94095c68cd25e3c2812e4e0367f9a9355be1e804a5135c"}, + {file = "grpcio-1.53.0-cp310-cp310-win32.whl", hash = "sha256:fdc6191587de410a184550d4143e2b24a14df495c86ca15e59508710681690ac"}, + {file = "grpcio-1.53.0-cp310-cp310-win_amd64.whl", hash = "sha256:658ffe1e39171be00490db5bd3b966f79634ac4215a1eb9a85c6cd6783bf7f6e"}, + {file = "grpcio-1.53.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:1b172e6d497191940c4b8d75b53de82dc252e15b61de2951d577ec5b43316b29"}, + {file = "grpcio-1.53.0-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:82434ba3a5935e47908bc861ce1ebc43c2edfc1001d235d6e31e5d3ed55815f7"}, + {file = "grpcio-1.53.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:1c734a2d4843e4e14ececf5600c3c4750990ec319e1299db7e4f0d02c25c1467"}, + {file = "grpcio-1.53.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b6a2ead3de3b2d53119d473aa2f224030257ef33af1e4ddabd4afee1dea5f04c"}, + {file = "grpcio-1.53.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a34d6e905f071f9b945cabbcc776e2055de1fdb59cd13683d9aa0a8f265b5bf9"}, + {file = "grpcio-1.53.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eaf8e3b97caaf9415227a3c6ca5aa8d800fecadd526538d2bf8f11af783f1550"}, + {file = "grpcio-1.53.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:da95778d37be8e4e9afca771a83424f892296f5dfb2a100eda2571a1d8bbc0dc"}, + {file = "grpcio-1.53.0-cp311-cp311-win32.whl", hash = "sha256:e4f513d63df6336fd84b74b701f17d1bb3b64e9d78a6ed5b5e8a198bbbe8bbfa"}, + {file = "grpcio-1.53.0-cp311-cp311-win_amd64.whl", hash = "sha256:ddb2511fbbb440ed9e5c9a4b9b870f2ed649b7715859fd6f2ebc585ee85c0364"}, + {file = "grpcio-1.53.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:2a912397eb8d23c177d6d64e3c8bc46b8a1c7680b090d9f13a640b104aaec77c"}, + {file = "grpcio-1.53.0-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:55930c56b8f5b347d6c8c609cc341949a97e176c90f5cbb01d148d778f3bbd23"}, + {file = "grpcio-1.53.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:6601d812105583948ab9c6e403a7e2dba6e387cc678c010e74f2d6d589d1d1b3"}, + {file = "grpcio-1.53.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c705e0c21acb0e8478a00e7e773ad0ecdb34bd0e4adc282d3d2f51ba3961aac7"}, + {file = "grpcio-1.53.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba074af9ca268ad7b05d3fc2b920b5fb3c083da94ab63637aaf67f4f71ecb755"}, + {file = "grpcio-1.53.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:14817de09317dd7d3fbc8272864288320739973ef0f4b56bf2c0032349da8cdf"}, + {file = "grpcio-1.53.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c7ad9fbedb93f331c2e9054e202e95cf825b885811f1bcbbdfdc301e451442db"}, + {file = "grpcio-1.53.0-cp37-cp37m-win_amd64.whl", hash = "sha256:dad5b302a4c21c604d88a5d441973f320134e6ff6a84ecef9c1139e5ffd466f6"}, + {file = "grpcio-1.53.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:fa8eaac75d3107e3f5465f2c9e3bbd13db21790c6e45b7de1756eba16b050aca"}, + {file = "grpcio-1.53.0-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:104a2210edd3776c38448b4f76c2f16e527adafbde171fc72a8a32976c20abc7"}, + {file = "grpcio-1.53.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:dbc1ba968639c1d23476f75c356e549e7bbf2d8d6688717dcab5290e88e8482b"}, + {file = "grpcio-1.53.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:95952d3fe795b06af29bb8ec7bbf3342cdd867fc17b77cc25e6733d23fa6c519"}, + {file = "grpcio-1.53.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f144a790f14c51b8a8e591eb5af40507ffee45ea6b818c2482f0457fec2e1a2e"}, + {file = "grpcio-1.53.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0698c094688a2dd4c7c2f2c0e3e142cac439a64d1cef6904c97f6cde38ba422f"}, + {file = "grpcio-1.53.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6b6d60b0958be711bab047e9f4df5dbbc40367955f8651232bfdcdd21450b9ab"}, + {file = "grpcio-1.53.0-cp38-cp38-win32.whl", hash = "sha256:1948539ce78805d4e6256ab0e048ec793956d54787dc9d6777df71c1d19c7f81"}, + {file = "grpcio-1.53.0-cp38-cp38-win_amd64.whl", hash = "sha256:df9ba1183b3f649210788cf80c239041dddcb375d6142d8bccafcfdf549522cd"}, + {file = "grpcio-1.53.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:19caa5b7282a89b799e63776ff602bb39604f7ca98db6df27e2de06756ae86c3"}, + {file = "grpcio-1.53.0-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:b5bd026ac928c96cc23149e6ef79183125542062eb6d1ccec34c0a37e02255e7"}, + {file = "grpcio-1.53.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:7dc8584ca6c015ad82e186e82f4c0fe977394588f66b8ecfc4ec873285314619"}, + {file = "grpcio-1.53.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2eddaae8af625e45b5c8500dcca1043264d751a6872cde2eda5022df8a336959"}, + {file = "grpcio-1.53.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5fb6f3d7824696c1c9f2ad36ddb080ba5a86f2d929ef712d511b4d9972d3d27"}, + {file = "grpcio-1.53.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:8270d1dc2c98ab57e6dbf36fa187db8df4c036f04a398e5d5e25b4e01a766d70"}, + {file = "grpcio-1.53.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:976a7f24eb213e8429cab78d5e120500dfcdeb01041f1f5a77b17b9101902615"}, + {file = "grpcio-1.53.0-cp39-cp39-win32.whl", hash = "sha256:9c84a481451e7174f3a764a44150f93b041ab51045aa33d7b5b68b6979114e48"}, + {file = "grpcio-1.53.0-cp39-cp39-win_amd64.whl", hash = "sha256:6beb84f83360ff29a3654f43f251ec11b809dcb5524b698d711550243debd289"}, + {file = "grpcio-1.53.0.tar.gz", hash = "sha256:a4952899b4931a6ba12951f9a141ef3e74ff8a6ec9aa2dc602afa40f63595e33"}, +] + +[package.extras] +protobuf = ["grpcio-tools (>=1.53.0)"] + +[[package]] +name = "httplib2" +version = "0.22.0" +description = "A comprehensive HTTP client library." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "httplib2-0.22.0-py3-none-any.whl", hash = "sha256:14ae0a53c1ba8f3d37e9e27cf37eabb0fb9980f435ba405d546948b009dd64dc"}, + {file = "httplib2-0.22.0.tar.gz", hash = "sha256:d7a10bc5ef5ab08322488bde8c726eeee5c8618723fdb399597ec58f3d82df81"}, +] + +[package.dependencies] +pyparsing = {version = ">=2.4.2,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.0.2 || >3.0.2,<3.0.3 || >3.0.3,<4", markers = "python_version > \"3.0\""} + [[package]] name = "idna" version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" -category = "dev" +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -606,6 +1020,25 @@ files = [ {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, ] +[[package]] +name = "oauth2client" +version = "4.1.3" +description = "OAuth 2.0 client library" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "oauth2client-4.1.3-py2.py3-none-any.whl", hash = "sha256:b8a81cc5d60e2d364f0b1b98f958dbd472887acaf1a5b05e21c28c31a2d6d3ac"}, + {file = "oauth2client-4.1.3.tar.gz", hash = "sha256:d486741e451287f69568a4d26d70d9acd73a2bbfa275746c535b4209891cccc6"}, +] + +[package.dependencies] +httplib2 = ">=0.9.1" +pyasn1 = ">=0.1.7" +pyasn1-modules = ">=0.0.5" +rsa = ">=3.1.4" +six = ">=1.6.1" + [[package]] name = "openapi-schema-validator" version = "0.3.4" @@ -718,6 +1151,17 @@ files = [ dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] +[[package]] +name = "ply" +version = "3.8" +description = "Python Lex & Yacc" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "ply-3.8.tar.gz", hash = "sha256:e7d1bdff026beb159c9942f7a17e102c375638d9478a7ecd4cc0c76afd8de0b8"}, +] + [[package]] name = "prance" version = "0.22.2.22.0" @@ -745,6 +1189,56 @@ icu = ["PyICU (>=2.4,<3.0)"] osv = ["openapi-spec-validator (>=0.5.1,<0.6.0)"] ssv = ["swagger-spec-validator (>=2.4,<3.0)"] +[[package]] +name = "protobuf" +version = "4.22.1" +description = "" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "protobuf-4.22.1-cp310-abi3-win32.whl", hash = "sha256:85aa9acc5a777adc0c21b449dafbc40d9a0b6413ff3a4f77ef9df194be7f975b"}, + {file = "protobuf-4.22.1-cp310-abi3-win_amd64.whl", hash = "sha256:8bc971d76c03f1dd49f18115b002254f2ddb2d4b143c583bb860b796bb0d399e"}, + {file = "protobuf-4.22.1-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:5917412347e1da08ce2939eb5cd60650dfb1a9ab4606a415b9278a1041fb4d19"}, + {file = "protobuf-4.22.1-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:9e12e2810e7d297dbce3c129ae5e912ffd94240b050d33f9ecf023f35563b14f"}, + {file = "protobuf-4.22.1-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:953fc7904ef46900262a26374b28c2864610b60cdc8b272f864e22143f8373c4"}, + {file = "protobuf-4.22.1-cp37-cp37m-win32.whl", hash = "sha256:6e100f7bc787cd0a0ae58dbf0ab8bbf1ee7953f862b89148b6cf5436d5e9eaa1"}, + {file = "protobuf-4.22.1-cp37-cp37m-win_amd64.whl", hash = "sha256:87a6393fa634f294bf24d1cfe9fdd6bb605cbc247af81b9b10c4c0f12dfce4b3"}, + {file = "protobuf-4.22.1-cp38-cp38-win32.whl", hash = "sha256:e3fb58076bdb550e75db06ace2a8b3879d4c4f7ec9dd86e4254656118f4a78d7"}, + {file = "protobuf-4.22.1-cp38-cp38-win_amd64.whl", hash = "sha256:651113695bc2e5678b799ee5d906b5d3613f4ccfa61b12252cfceb6404558af0"}, + {file = "protobuf-4.22.1-cp39-cp39-win32.whl", hash = "sha256:67b7d19da0fda2733702c2299fd1ef6cb4b3d99f09263eacaf1aa151d9d05f02"}, + {file = "protobuf-4.22.1-cp39-cp39-win_amd64.whl", hash = "sha256:b8700792f88e59ccecfa246fa48f689d6eee6900eddd486cdae908ff706c482b"}, + {file = "protobuf-4.22.1-py3-none-any.whl", hash = "sha256:3e19dcf4adbf608924d3486ece469dd4f4f2cf7d2649900f0efcd1a84e8fd3ba"}, + {file = "protobuf-4.22.1.tar.gz", hash = "sha256:dce7a55d501c31ecf688adb2f6c3f763cf11bc0be815d1946a84d74772ab07a7"}, +] + +[[package]] +name = "pyasn1" +version = "0.4.8" +description = "ASN.1 types and codecs" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "pyasn1-0.4.8-py2.py3-none-any.whl", hash = "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d"}, + {file = "pyasn1-0.4.8.tar.gz", hash = "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba"}, +] + +[[package]] +name = "pyasn1-modules" +version = "0.2.8" +description = "A collection of ASN.1-based protocols modules." +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "pyasn1-modules-0.2.8.tar.gz", hash = "sha256:905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e"}, + {file = "pyasn1_modules-0.2.8-py2.py3-none-any.whl", hash = "sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74"}, +] + +[package.dependencies] +pyasn1 = ">=0.4.6,<0.5.0" + [[package]] name = "pydantic" version = "1.10.6" @@ -799,6 +1293,21 @@ typing-extensions = ">=4.2.0" dotenv = ["python-dotenv (>=0.10.4)"] email = ["email-validator (>=1.0.3)"] +[[package]] +name = "pyparsing" +version = "3.0.9" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +category = "main" +optional = false +python-versions = ">=3.6.8" +files = [ + {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, + {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, +] + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + [[package]] name = "pyrsistent" version = "0.19.3" @@ -875,6 +1384,24 @@ tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} [package.extras] testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] +[[package]] +name = "pytest-mock" +version = "3.10.0" +description = "Thin-wrapper around the mock package for easier use with pytest" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-mock-3.10.0.tar.gz", hash = "sha256:fbbdb085ef7c252a326fd8cdcac0aa3b1333d8811f131bdcc701002e1be7ed4f"}, + {file = "pytest_mock-3.10.0-py3-none-any.whl", hash = "sha256:f4c973eeae0282963eb293eb173ce91b091a79c1334455acfac9ddee8a1c784b"}, +] + +[package.dependencies] +pytest = ">=5.0" + +[package.extras] +dev = ["pre-commit", "pytest-asyncio", "tox"] + [[package]] name = "pyyaml" version = "6.0" @@ -929,7 +1456,7 @@ files = [ name = "requests" version = "2.28.2" description = "Python HTTP for Humans." -category = "dev" +category = "main" optional = false python-versions = ">=3.7, <4" files = [ @@ -947,6 +1474,21 @@ urllib3 = ">=1.21.1,<1.27" socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] +[[package]] +name = "rsa" +version = "4.9" +description = "Pure-Python RSA implementation" +category = "main" +optional = false +python-versions = ">=3.6,<4" +files = [ + {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"}, + {file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"}, +] + +[package.dependencies] +pyasn1 = ">=0.1.3" + [[package]] name = "ruamel-yaml" version = "0.17.21" @@ -1016,7 +1558,7 @@ files = [ name = "six" version = "1.16.0" description = "Python 2 and 3 compatibility utilities" -category = "dev" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -1110,7 +1652,7 @@ files = [ name = "urllib3" version = "1.26.15" description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "dev" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ @@ -1142,4 +1684,4 @@ testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "5dc476982554a3de710f06cb9ce2399764bf0398e85b6347563b1a79420d0bc8" +content-hash = "f1bf172c1612339ff9c900073e1dc7d8b5cae2936b7ca9c2fa43b39c8ecb0eb0" diff --git a/airbyte-ci/connectors/metadata_service/lib/pyproject.toml b/airbyte-ci/connectors/metadata_service/lib/pyproject.toml index 0c325092c576..e3c433c2d241 100644 --- a/airbyte-ci/connectors/metadata_service/lib/pyproject.toml +++ b/airbyte-ci/connectors/metadata_service/lib/pyproject.toml @@ -12,6 +12,8 @@ pydantic = "^1.10.6" click = "^8.1.3" google = "^3.0.0" pyyaml = "^6.0" +gcloud = "^0.18.3" +google-cloud-storage = "^2.8.0" [tool.poetry.group.test.dependencies] @@ -20,6 +22,7 @@ pytest = "^7.2.2" [tool.poetry.group.dev.dependencies] datamodel-code-generator = "^0.17.1" +pytest-mock = "^3.10.0" [tool.poetry.scripts] metadata_service = "metadata_service.commands:metadata_service" diff --git a/airbyte-ci/connectors/metadata_service/lib/tests/test_commands.py b/airbyte-ci/connectors/metadata_service/lib/tests/test_commands.py new file mode 100644 index 000000000000..ee6036ebafb9 --- /dev/null +++ b/airbyte-ci/connectors/metadata_service/lib/tests/test_commands.py @@ -0,0 +1,73 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# +import pytest +from click.testing import CliRunner +from metadata_service import commands +from pydantic import BaseModel, ValidationError, error_wrappers + + +# TEST VALIDATE COMMAND +def test_valid_metadata_yaml_files(valid_metadata_yaml_files): + runner = CliRunner() + + assert len(valid_metadata_yaml_files) > 0, "No files found" + + for file_path in valid_metadata_yaml_files: + result = runner.invoke(commands.validate, [file_path]) + assert result.exit_code == 0, f"Validation failed for {file_path} with error: {result.output}" + + +def test_invalid_metadata_yaml_files(invalid_metadata_yaml_files): + runner = CliRunner() + + assert len(invalid_metadata_yaml_files) > 0, "No files found" + + for file_path in invalid_metadata_yaml_files: + result = runner.invoke(commands.validate, [file_path]) + assert result.exit_code != 0, f"Validation succeeded (when it shouldve failed) for {file_path}" + + +def test_file_not_found_fails(): + runner = CliRunner() + result = runner.invoke(commands.validate, ["non_existent_file.yaml"]) + assert result.exit_code != 0, "Validation succeeded (when it shouldve failed) for non_existent_file.yaml" + + +# TEST UPLOAD COMMAND +@pytest.mark.parametrize("uploaded", [True, False]) +def test_upload(mocker, valid_metadata_yaml_files, uploaded): + runner = CliRunner() + mocker.patch.object(commands.click, "secho") + mocker.patch.object(commands, "upload_metadata_to_gcs") + commands.upload_metadata_to_gcs.return_value = uploaded, "blob_id" + metadata_file_path = valid_metadata_yaml_files[0] + result = runner.invoke( + commands.upload, [metadata_file_path, "my-bucket", "-sa", metadata_file_path] + ) # Using valid_metadata_yaml_files[0] as SA because it exists... + assert result.exit_code == 0 + if uploaded: + commands.click.secho.assert_called_with(f"The metadata file {metadata_file_path} was uploaded to blob_id.", color="green") + else: + commands.click.secho.assert_called_with(f"The metadata file {metadata_file_path} was not uploaded.", color="yellow") + + +@pytest.mark.parametrize( + "error, handled", + [ + (ValidationError([error_wrappers.ErrorWrapper(Exception("Boom!"), "foo")], BaseModel), True), + (FileNotFoundError("Boom!"), True), + (ValueError("Boom!"), False), + ], +) +def test_upload_with_errors(mocker, valid_metadata_yaml_files, error, handled): + runner = CliRunner() + mocker.patch.object(commands.click, "secho") + mocker.patch.object(commands, "upload_metadata_to_gcs") + commands.upload_metadata_to_gcs.side_effect = error + result = runner.invoke( + commands.upload, [valid_metadata_yaml_files[0], "my-bucket", "-sa", valid_metadata_yaml_files[0]] + ) # Using valid_metadata_yaml_files[0] as SA because it exists... + assert result.exit_code == 1 + if handled: + commands.click.secho.assert_called_with(f"The metadata file could not be uploaded: {str(error)}", color="red") diff --git a/airbyte-ci/connectors/metadata_service/lib/tests/test_gcs_upload.py b/airbyte-ci/connectors/metadata_service/lib/tests/test_gcs_upload.py new file mode 100644 index 000000000000..4fca47178292 --- /dev/null +++ b/airbyte-ci/connectors/metadata_service/lib/tests/test_gcs_upload.py @@ -0,0 +1,89 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# +import pathlib + +import pytest +import yaml +from metadata_service import gcs_upload +from metadata_service.models.generated.ConnectorMetadataDefinitionV1 import ConnectorMetadataDefinitionV1 +from pydantic import ValidationError + + +@pytest.mark.parametrize( + "version_blob_exists, version_blob_etag, latest_blob_etag", + [ + pytest.param(False, "same_etag", "different_etag", id="Version blob does not exists: Version and latest blob should be uploaded."), + pytest.param( + False, + "same_etag", + "same_etag", + id="Version blob does not exists but etags are equal: Version blob should be uploaded but latest should not.", + ), + pytest.param(True, "same_etag", "same_etag", id="Version exists and etags are equal: no upload should happen."), + pytest.param( + True, "same_etag", "different_etag", id="Version exists but latest etag is different: latest blob should be uploaded." + ), + ], +) +def test_upload_metadata_to_gcs_valid_metadata(mocker, valid_metadata_yaml_files, version_blob_exists, version_blob_etag, latest_blob_etag): + metadata_file_path = pathlib.Path(valid_metadata_yaml_files[0]) + metadata = ConnectorMetadataDefinitionV1.parse_obj(yaml.safe_load(metadata_file_path.read_text())) + expected_version_key = f"metadata/{metadata.data.dockerRepository}/{metadata.data.dockerImageTag}/metadata.yaml" + expected_latest_key = f"metadata/{metadata.data.dockerRepository}/latest/metadata.yaml" + + mock_credentials = mocker.Mock() + mock_storage_client = mocker.Mock() + + mock_version_blob = mocker.Mock(exists=mocker.Mock(return_value=version_blob_exists), etag=version_blob_etag) + mock_latest_blob = mocker.Mock(etag=latest_blob_etag) + mock_bucket = mock_storage_client.bucket.return_value + mock_bucket.blob.side_effect = [mock_version_blob, mock_latest_blob] + + mocker.patch.object(gcs_upload.service_account.Credentials, "from_service_account_file", mocker.Mock(return_value=mock_credentials)) + mocker.patch.object(gcs_upload.storage, "Client", mocker.Mock(return_value=mock_storage_client)) + + # Call function under tests + + uploaded, blob_id = gcs_upload.upload_metadata_to_gcs( + "my_bucket", + metadata_file_path, + "my_service_account_path", + ) + + # Assertions + + gcs_upload.service_account.Credentials.from_service_account_file.assert_called_with("my_service_account_path") + mock_storage_client.bucket.assert_called_with("my_bucket") + mock_bucket.blob.assert_has_calls([mocker.call(expected_version_key), mocker.call(expected_latest_key)]) + assert blob_id == mock_version_blob.id + + if not version_blob_exists: + mock_version_blob.upload_from_filename.assert_called_with(str(metadata_file_path)) + assert uploaded + else: + mock_version_blob.upload_from_filename.assert_not_called() + assert not uploaded + + if version_blob_etag != latest_blob_etag: + mock_latest_blob.upload_from_filename.assert_called_with(str(metadata_file_path)) + + +def test_upload_metadata_to_gcs_invalid_metadata(invalid_metadata_yaml_files): + metadata_file_path = pathlib.Path(invalid_metadata_yaml_files[0]) + with pytest.raises(ValidationError): + gcs_upload.upload_metadata_to_gcs( + "my_bucket", + metadata_file_path, + "my_service_account_path", + ) + + +def test_upload_metadata_to_gcs_non_existent_metadata_file(): + metadata_file_path = pathlib.Path("./i_dont_exist.yaml") + with pytest.raises(FileNotFoundError): + gcs_upload.upload_metadata_to_gcs( + "my_bucket", + metadata_file_path, + "my_service_account_path", + ) diff --git a/airbyte-ci/connectors/metadata_service/lib/tests/test_metadata_validator.py b/airbyte-ci/connectors/metadata_service/lib/tests/test_metadata_validator.py deleted file mode 100644 index 654317b15e20..000000000000 --- a/airbyte-ci/connectors/metadata_service/lib/tests/test_metadata_validator.py +++ /dev/null @@ -1,28 +0,0 @@ -from click.testing import CliRunner -from metadata_service.commands import validate - - -def test_valid_metadata_yaml_files(valid_metadata_yaml_files): - runner = CliRunner() - - assert len(valid_metadata_yaml_files) > 0, "No files found" - - for file_path in valid_metadata_yaml_files: - result = runner.invoke(validate, [file_path]) - assert result.exit_code == 0, f"Validation failed for {file_path} with error: {result.output}" - - -def test_invalid_metadata_yaml_files(invalid_metadata_yaml_files): - runner = CliRunner() - - assert len(invalid_metadata_yaml_files) > 0, "No files found" - - for file_path in invalid_metadata_yaml_files: - result = runner.invoke(validate, [file_path]) - assert result.exit_code != 0, f"Validation succeeded (when it shouldve failed) for {file_path}" - - -def test_file_not_found_fails(): - runner = CliRunner() - result = runner.invoke(validate, ["non_existent_file.yaml"]) - assert result.exit_code != 0, "Validation succeeded (when it shouldve failed) for non_existent_file.yaml" From f8cdd57ab0f090425f8934ba0bc59cb7663297ed Mon Sep 17 00:00:00 2001 From: Augustin Date: Wed, 12 Apr 2023 18:38:51 +0200 Subject: [PATCH 034/187] metadata: cleanup workflows (#25105) --- .../metadata_orchestrator_tests_dagger.yml | 23 ------------------- .../metadata_service_tests_dagger.yml | 21 ++++++++++------- .../metadata_validate_manifest_dagger.yml | 14 +++++------ 3 files changed, 20 insertions(+), 38 deletions(-) delete mode 100644 .github/workflows/metadata_orchestrator_tests_dagger.yml diff --git a/.github/workflows/metadata_orchestrator_tests_dagger.yml b/.github/workflows/metadata_orchestrator_tests_dagger.yml deleted file mode 100644 index 936fb0578672..000000000000 --- a/.github/workflows/metadata_orchestrator_tests_dagger.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: Metadata Service CI - -on: - workflow_dispatch: - pull_request: - paths: - - "airbyte-ci/connectors/metadata_service/**" -jobs: - metadata_service_ci: - name: Metadata Orchestrator CI - timeout-minutes: 240 # 4 hours - runs-on: medium-runner - steps: - - name: Checkout Airbyte - uses: actions/checkout@v2 - - name: Run Metadata unit test pipeline - id: metadata-orchestrator-unit-test-pipeline - uses: ./.github/actions/run-dagger-pipeline - with: - subcommand: "metadata test orchestrator" - context: "pull_request" - env: - CI_GITHUB_ACCESS_TOKEN: ${{ secrets.GH_PAT_MAINTENANCE_OCTAVIA }} diff --git a/.github/workflows/metadata_service_tests_dagger.yml b/.github/workflows/metadata_service_tests_dagger.yml index 7009e9e56e9b..dd296e5dd7db 100644 --- a/.github/workflows/metadata_service_tests_dagger.yml +++ b/.github/workflows/metadata_service_tests_dagger.yml @@ -1,4 +1,4 @@ -name: Metadata Service CI +name: Connector metadata service CI on: workflow_dispatch: @@ -6,18 +6,23 @@ on: paths: - "airbyte-ci/connectors/metadata_service/**" jobs: - metadata_service_ci: - name: Metadata Service CI - timeout-minutes: 240 # 4 hours + connector_metadata_service_ci: + name: Connector metadata service CI runs-on: medium-runner + env: + CI_GITHUB_ACCESS_TOKEN: ${{ secrets.GH_PAT_MAINTENANCE_OCTAVIA }} steps: - name: Checkout Airbyte uses: actions/checkout@v2 - - name: Run Metadata unit test pipeline - id: metadata-lib-unit-test-pipeline + - name: Run test pipeline for the metadata lib + id: metadata-lib-test-pipeline uses: ./.github/actions/run-dagger-pipeline with: subcommand: "metadata test lib" context: "pull_request" - env: - CI_GITHUB_ACCESS_TOKEN: ${{ secrets.GH_PAT_MAINTENANCE_OCTAVIA }} + - name: Run test for the metadata orchestrator + id: metadata-orchestrator-test-pipeline + uses: ./.github/actions/run-dagger-pipeline + with: + subcommand: "metadata test orchestrator" + context: "pull_request" diff --git a/.github/workflows/metadata_validate_manifest_dagger.yml b/.github/workflows/metadata_validate_manifest_dagger.yml index dace42a098d5..bc09f93fbb59 100644 --- a/.github/workflows/metadata_validate_manifest_dagger.yml +++ b/.github/workflows/metadata_validate_manifest_dagger.yml @@ -1,4 +1,4 @@ -name: Metadata Service CI +name: Connectors' metadata.yaml files validation on: workflow_dispatch: @@ -7,18 +7,18 @@ on: paths: - "airbyte-integrations/connectors/**/metadata.yaml" jobs: - metadata_service_ci: - name: Validate Metadata Manifest for Connectors + connectors_metadata_validation: + name: Connectors' metadata.yaml files validation timeout-minutes: 10 # 10 minutes runs-on: medium-runner + env: + CI_GITHUB_ACCESS_TOKEN: ${{ secrets.GH_PAT_MAINTENANCE_OCTAVIA }} steps: - name: Checkout Airbyte uses: actions/checkout@v2 - - name: Run Metadata unit test pipeline - id: metadata-lib-unit-test-pipeline + - name: Connectors' metadata.yaml files validation + id: metadata-validate-pipeline uses: ./.github/actions/run-dagger-pipeline with: subcommand: "metadata validate" context: "pull_request" - env: - CI_GITHUB_ACCESS_TOKEN: ${{ secrets.GH_PAT_MAINTENANCE_OCTAVIA }} From b7a1b72c8f186497c45157ede347244192ae44f7 Mon Sep 17 00:00:00 2001 From: Marcos Marx Date: Wed, 12 Apr 2023 13:55:04 -0300 Subject: [PATCH 035/187] Source Stripe: generate seed source file (#25113) * Expand tiers when syncing plans * Update Plans stream schema * Re-bump * Bump * Remove string as a plan schema * bump * Update changelog * update source spec * Automated Change --------- Co-authored-by: Visnu Pitiyanuvath Co-authored-by: Sherif A. Nada Co-authored-by: sh4sh <6833405+sh4sh@users.noreply.github.com> --- .../init-oss/src/main/resources/seed/oss_catalog.json | 2 +- .../init-oss/src/main/resources/seed/source_definitions.yaml | 2 +- .../init-oss/src/main/resources/seed/source_specs.yaml | 2 +- connectors.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json index ff8a38a89362..66dc718b5496 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json @@ -24452,7 +24452,7 @@ "sourceDefinitionId": "e094cb9a-26de-4645-8761-65c0c425d1de", "name": "Stripe", "dockerRepository": "airbyte/source-stripe", - "dockerImageTag": "3.0.5", + "dockerImageTag": "3.1.0", "documentationUrl": "https://docs.airbyte.com/integrations/sources/stripe", "icon": "stripe.svg", "sourceType": "api", diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml index bb0a0d63ee5e..8df1da73307a 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml @@ -2006,7 +2006,7 @@ - name: Stripe sourceDefinitionId: e094cb9a-26de-4645-8761-65c0c425d1de dockerRepository: airbyte/source-stripe - dockerImageTag: 3.0.5 + dockerImageTag: 3.1.0 documentationUrl: https://docs.airbyte.com/integrations/sources/stripe icon: stripe.svg sourceType: api diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml index 6ad04de392d8..7581bb85df00 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml @@ -15086,7 +15086,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-stripe:3.0.5" +- dockerImage: "airbyte/source-stripe:3.1.0" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/stripe" connectionSpecification: diff --git a/connectors.md b/connectors.md index 06e982113561..1e8c35ffd589 100644 --- a/connectors.md +++ b/connectors.md @@ -229,7 +229,7 @@ | **Square** | Square icon | Source | airbyte/source-square:0.2.2 | beta | [link](https://docs.airbyte.com/integrations/sources/square) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-square) | `77225a51-cd15-4a13-af02-65816bd0ecf4` | | **Statuspage** | Statuspage icon | Source | airbyte/source-statuspage:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/statuspage) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-statuspage) | `74cbd708-46c3-4512-9c93-abd5c3e9a94d` | | **Strava** | Strava icon | Source | airbyte/source-strava:0.1.4 | beta | [link](https://docs.airbyte.com/integrations/sources/strava) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-strava) | `7a4327c4-315a-11ec-8d3d-0242ac130003` | -| **Stripe** | Stripe icon | Source | airbyte/source-stripe:3.0.5 | generally_available | [link](https://docs.airbyte.com/integrations/sources/stripe) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-stripe) | `e094cb9a-26de-4645-8761-65c0c425d1de` | +| **Stripe** | Stripe icon | Source | airbyte/source-stripe:3.1.0 | generally_available | [link](https://docs.airbyte.com/integrations/sources/stripe) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-stripe) | `e094cb9a-26de-4645-8761-65c0c425d1de` | | **SurveyCTO** | SurveyCTO icon | Source | airbyte/source-surveycto:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/surveycto) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-surveycto) | `dd4632f4-15e0-4649-9b71-41719fb1fdee` | | **SurveyMonkey** | SurveyMonkey icon | Source | airbyte/source-surveymonkey:0.1.15 | generally_available | [link](https://docs.airbyte.com/integrations/sources/surveymonkey) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-surveymonkey) | `badc5925-0485-42be-8caa-b34096cb71b5` | | **SurveySparrow** | SurveySparrow icon | Source | airbyte/source-survey-sparrow:0.2.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/survey-sparrow) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-survey-sparrow) | `4a4d887b-0f2d-4b33-ab7f-9b01b9072804` | From c5ff52a4961b999640f3a53fd1633df8cdb4825c Mon Sep 17 00:00:00 2001 From: Alexandre Girard Date: Wed, 12 Apr 2023 14:46:43 -0700 Subject: [PATCH 036/187] Connector builder: set pages and slices limits (#25121) * Set limits * refactor and add unit tests * Update as per comments --- .../connector_builder_handler.py | 42 ++++++++++++--- .../airbyte_cdk/connector_builder/main.py | 26 ++++----- .../test_connector_builder_handler.py | 53 +++++++++++++++++-- 3 files changed, 95 insertions(+), 26 deletions(-) diff --git a/airbyte-cdk/python/airbyte_cdk/connector_builder/connector_builder_handler.py b/airbyte-cdk/python/airbyte_cdk/connector_builder/connector_builder_handler.py index dc7740fac9a8..76909c8ca6d4 100644 --- a/airbyte-cdk/python/airbyte_cdk/connector_builder/connector_builder_handler.py +++ b/airbyte-cdk/python/airbyte_cdk/connector_builder/connector_builder_handler.py @@ -14,23 +14,49 @@ from airbyte_cdk.sources.declarative.declarative_source import DeclarativeSource from airbyte_cdk.sources.declarative.declarative_stream import DeclarativeStream from airbyte_cdk.sources.declarative.manifest_declarative_source import ManifestDeclarativeSource +from airbyte_cdk.sources.declarative.parsers.model_to_component_factory import ModelToComponentFactory from airbyte_cdk.sources.streams.http import HttpStream from airbyte_cdk.utils.traced_exception import AirbyteTracedException DEFAULT_MAXIMUM_NUMBER_OF_PAGES_PER_SLICE = 5 DEFAULT_MAXIMUM_NUMBER_OF_SLICES = 5 -DEFAULT_MAX_RECORDS = 100 +DEFAULT_MAXIMUM_RECORDS = 100 +MAX_PAGES_PER_SLICE_KEY = "max_pages_per_slice" +MAX_SLICES_KEY = "max_slices" +MAX_RECORDS_KEY = "max_records" -def read_stream(source: DeclarativeSource, config: Mapping[str, Any], configured_catalog: ConfiguredAirbyteCatalog) -> AirbyteMessage: + +@dataclasses.dataclass +class TestReadLimits: + max_records: int = dataclasses.field(default=DEFAULT_MAXIMUM_RECORDS) + max_pages_per_slice: int = dataclasses.field(default=DEFAULT_MAXIMUM_NUMBER_OF_PAGES_PER_SLICE) + max_slices: int = dataclasses.field(default=DEFAULT_MAXIMUM_NUMBER_OF_SLICES) + + +def get_limits(config: Mapping[str, Any]) -> TestReadLimits: + command_config = config.get("__test_read_config", {}) + max_pages_per_slice = command_config.get(MAX_PAGES_PER_SLICE_KEY) or DEFAULT_MAXIMUM_NUMBER_OF_PAGES_PER_SLICE + max_slices = command_config.get(MAX_SLICES_KEY) or DEFAULT_MAXIMUM_NUMBER_OF_SLICES + max_records = command_config.get(MAX_RECORDS_KEY) or DEFAULT_MAXIMUM_RECORDS + return TestReadLimits(max_records, max_pages_per_slice, max_slices) + + +def create_source(config: Mapping[str, Any], limits: TestReadLimits) -> ManifestDeclarativeSource: + manifest = config["__injected_declarative_manifest"] + return ManifestDeclarativeSource( + source_config=manifest, component_factory=ModelToComponentFactory( + emit_connector_builder_messages=True, + limit_pages_fetched_per_slice=limits.max_pages_per_slice, + limit_slices_fetched=limits.max_slices) + ) + + +def read_stream(source: DeclarativeSource, config: Mapping[str, Any], configured_catalog: ConfiguredAirbyteCatalog, limits: TestReadLimits) -> AirbyteMessage: try: - command_config = config.get("__test_read_config", {}) - max_pages_per_slice = command_config.get("max_pages_per_slice", DEFAULT_MAXIMUM_NUMBER_OF_PAGES_PER_SLICE) - max_slices = command_config.get("max_slices", DEFAULT_MAXIMUM_NUMBER_OF_SLICES) - max_records = command_config.get("max_records", DEFAULT_MAX_RECORDS) - handler = MessageGrouper(max_pages_per_slice, max_slices) + handler = MessageGrouper(limits.max_pages_per_slice, limits.max_slices) stream_name = configured_catalog.streams[0].stream.name # The connector builder only supports a single stream - stream_read = handler.get_message_groups(source, config, configured_catalog, max_records) + stream_read = handler.get_message_groups(source, config, configured_catalog, limits.max_records) return AirbyteMessage( type=MessageType.RECORD, record=AirbyteRecordMessage(data=dataclasses.asdict(stream_read), stream=stream_name, emitted_at=_emitted_at()), diff --git a/airbyte-cdk/python/airbyte_cdk/connector_builder/main.py b/airbyte-cdk/python/airbyte_cdk/connector_builder/main.py index 3f15ca2ca434..07ffb8f58e21 100644 --- a/airbyte-cdk/python/airbyte_cdk/connector_builder/main.py +++ b/airbyte-cdk/python/airbyte_cdk/connector_builder/main.py @@ -7,21 +7,20 @@ from typing import Any, List, Mapping, Optional, Tuple from airbyte_cdk.connector import BaseConnector -from airbyte_cdk.connector_builder.connector_builder_handler import list_streams, read_stream, resolve_manifest +from airbyte_cdk.connector_builder.connector_builder_handler import ( + TestReadLimits, + create_source, + get_limits, + list_streams, + read_stream, + resolve_manifest, +) from airbyte_cdk.entrypoint import AirbyteEntrypoint from airbyte_cdk.models import ConfiguredAirbyteCatalog from airbyte_cdk.sources.declarative.manifest_declarative_source import ManifestDeclarativeSource -from airbyte_cdk.sources.declarative.parsers.model_to_component_factory import ModelToComponentFactory from airbyte_cdk.utils.traced_exception import AirbyteTracedException -def create_source(config: Mapping[str, Any]) -> ManifestDeclarativeSource: - manifest = config.get("__injected_declarative_manifest") - return ManifestDeclarativeSource( - source_config=manifest, component_factory=ModelToComponentFactory(emit_connector_builder_messages=True) - ) - - def get_config_and_catalog_from_args(args: List[str]) -> Tuple[str, Mapping[str, Any], Optional[ConfiguredAirbyteCatalog]]: parsed_args = AirbyteEntrypoint.parse_args(args) config_path, catalog_path = parsed_args.config, parsed_args.catalog @@ -50,13 +49,13 @@ def get_config_and_catalog_from_args(args: List[str]) -> Tuple[str, Mapping[str, def handle_connector_builder_request( - source: ManifestDeclarativeSource, command: str, config: Mapping[str, Any], catalog: Optional[ConfiguredAirbyteCatalog] + source: ManifestDeclarativeSource, command: str, config: Mapping[str, Any], catalog: Optional[ConfiguredAirbyteCatalog], limits: TestReadLimits ): if command == "resolve_manifest": return resolve_manifest(source) elif command == "test_read": assert catalog is not None, "`test_read` requires a valid `ConfiguredAirbyteCatalog`, got None." - return read_stream(source, config, catalog) + return read_stream(source, config, catalog, limits) elif command == "list_streams": return list_streams(source, config) else: @@ -65,8 +64,9 @@ def handle_connector_builder_request( def handle_request(args: List[str]): command, config, catalog = get_config_and_catalog_from_args(args) - source = create_source(config) - return handle_connector_builder_request(source, command, config, catalog).json(exclude_unset=True) + limits = get_limits(config) + source = create_source(config, limits) + return handle_connector_builder_request(source, command, config, catalog, limits).json(exclude_unset=True) if __name__ == "__main__": diff --git a/airbyte-cdk/python/unit_tests/connector_builder/test_connector_builder_handler.py b/airbyte-cdk/python/unit_tests/connector_builder/test_connector_builder_handler.py index fb0f8f7e325b..0ebadda79485 100644 --- a/airbyte-cdk/python/unit_tests/connector_builder/test_connector_builder_handler.py +++ b/airbyte-cdk/python/unit_tests/connector_builder/test_connector_builder_handler.py @@ -10,7 +10,16 @@ import pytest from airbyte_cdk import connector_builder -from airbyte_cdk.connector_builder.connector_builder_handler import list_streams, resolve_manifest +from airbyte_cdk.connector_builder.connector_builder_handler import ( + DEFAULT_MAXIMUM_NUMBER_OF_PAGES_PER_SLICE, + DEFAULT_MAXIMUM_NUMBER_OF_SLICES, + DEFAULT_MAXIMUM_RECORDS, + TestReadLimits, + create_source, + get_limits, + list_streams, + resolve_manifest, +) from airbyte_cdk.connector_builder.main import handle_connector_builder_request, handle_request, read_stream from airbyte_cdk.connector_builder.models import LogMessage, StreamRead, StreamReadSlicesInner, StreamReadSlicesInnerPagesInner from airbyte_cdk.models import AirbyteMessage, AirbyteRecordMessage, ConfiguredAirbyteCatalog @@ -153,7 +162,8 @@ def test_resolve_manifest(valid_resolve_manifest_config_file): command = "resolve_manifest" config["__command"] = command source = ManifestDeclarativeSource(MANIFEST) - resolved_manifest = handle_connector_builder_request(source, command, config, create_configured_catalog("dummy_stream")) + limits = TestReadLimits() + resolved_manifest = handle_connector_builder_request(source, command, config, create_configured_catalog("dummy_stream"), limits) expected_resolved_manifest = { "type": "DeclarativeSource", @@ -316,9 +326,10 @@ def test_read(): emitted_at=1, ), ) + limits = TestReadLimits() with patch("airbyte_cdk.connector_builder.message_grouper.MessageGrouper.get_message_groups", return_value=stream_read): output_record = handle_connector_builder_request( - source, "test_read", config, ConfiguredAirbyteCatalog.parse_obj(CONFIGURED_CATALOG) + source, "test_read", config, ConfiguredAirbyteCatalog.parse_obj(CONFIGURED_CATALOG), limits ) output_record.record.emitted_at = 1 assert output_record == expected_airbyte_message @@ -334,7 +345,8 @@ def read(self, logger, config, catalog, state): mock_from_exception.return_value = stack_trace source = MockManifestDeclarativeSource() - response = read_stream(source, TEST_READ_CONFIG, ConfiguredAirbyteCatalog.parse_obj(CONFIGURED_CATALOG)) + limits = TestReadLimits() + response = read_stream(source, TEST_READ_CONFIG, ConfiguredAirbyteCatalog.parse_obj(CONFIGURED_CATALOG), limits) expected_stream_read = StreamRead(logs=[LogMessage("error_message - a stack trace", "ERROR")], slices=[StreamReadSlicesInner( @@ -449,8 +461,9 @@ def test_list_streams_integration_test(): command = "list_streams" config["__command"] = command source = ManifestDeclarativeSource(MANIFEST) + limits = TestReadLimits() - list_streams = handle_connector_builder_request(source, command, config, None) + list_streams = handle_connector_builder_request(source, command, config, None, limits) assert list_streams.record.data == { "streams": [{"name": "stream_with_custom_requester", "url": "https://api.sendgrid.com/v3/marketing/lists"}] @@ -469,3 +482,33 @@ def create_mock_declarative_stream(http_stream): declarative_stream = mock.Mock(spec=DeclarativeStream, autospec=True) declarative_stream.retriever = http_stream return declarative_stream + + +@pytest.mark.parametrize( + "test_name, config, expected_max_records, expected_max_slices, expected_max_pages_per_slice", + [ + ("test_no_test_read_config", {}, DEFAULT_MAXIMUM_RECORDS, DEFAULT_MAXIMUM_NUMBER_OF_SLICES, DEFAULT_MAXIMUM_NUMBER_OF_PAGES_PER_SLICE), + ("test_no_values_set", {"__test_read_config": {}}, DEFAULT_MAXIMUM_RECORDS, DEFAULT_MAXIMUM_NUMBER_OF_SLICES, DEFAULT_MAXIMUM_NUMBER_OF_PAGES_PER_SLICE), + ("test_values_are_set", {"__test_read_config": {"max_slices": 1, "max_pages_per_slice": 2, "max_records": 3}}, 3, 1, 2), + ], +) +def test_get_limits(test_name, config, expected_max_records, expected_max_slices, expected_max_pages_per_slice): + limits = get_limits(config) + assert limits.max_records == expected_max_records + assert limits.max_pages_per_slice == expected_max_pages_per_slice + assert limits.max_slices == expected_max_slices + + +def test_create_source(): + max_records = 3 + max_pages_per_slice = 2 + max_slices = 1 + limits = TestReadLimits(max_records, max_pages_per_slice, max_slices) + + config = {"__injected_declarative_manifest": MANIFEST} + + source = create_source(config, limits) + + assert isinstance(source, ManifestDeclarativeSource) + assert source._constructor._limit_pages_fetched_per_slice == limits.max_pages_per_slice + assert source._constructor._limit_slices_fetched == limits.max_slices From b9a3c7cbefacbac13482192c6208d1a7b27f0c26 Mon Sep 17 00:00:00 2001 From: girarda Date: Wed, 12 Apr 2023 21:54:31 +0000 Subject: [PATCH 037/187] =?UTF-8?q?=F0=9F=A4=96=20Bump=20patch=20version?= =?UTF-8?q?=20of=20Airbyte=20CDK?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- airbyte-cdk/python/.bumpversion.cfg | 2 +- airbyte-cdk/python/CHANGELOG.md | 3 +++ airbyte-cdk/python/Dockerfile | 4 ++-- airbyte-cdk/python/setup.py | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/airbyte-cdk/python/.bumpversion.cfg b/airbyte-cdk/python/.bumpversion.cfg index ab2824532d5a..087205a91cf3 100644 --- a/airbyte-cdk/python/.bumpversion.cfg +++ b/airbyte-cdk/python/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.34.0 +current_version = 0.34.1 commit = False [bumpversion:file:setup.py] diff --git a/airbyte-cdk/python/CHANGELOG.md b/airbyte-cdk/python/CHANGELOG.md index 73113f477483..f6d8b13e547d 100644 --- a/airbyte-cdk/python/CHANGELOG.md +++ b/airbyte-cdk/python/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog +## 0.34.1 +set slice and pages limit when reading from the connector builder module + ## 0.34.0 Low-Code CDK: Enable use of SingleUseRefreshTokenAuthenticator diff --git a/airbyte-cdk/python/Dockerfile b/airbyte-cdk/python/Dockerfile index 4eb9c36cfdd0..cd5d7989b6e1 100644 --- a/airbyte-cdk/python/Dockerfile +++ b/airbyte-cdk/python/Dockerfile @@ -10,7 +10,7 @@ RUN apk --no-cache upgrade \ && apk --no-cache add tzdata build-base # install airbyte-cdk -RUN pip install --prefix=/install airbyte-cdk==0.34.0 +RUN pip install --prefix=/install airbyte-cdk==0.34.1 # build a clean environment FROM base @@ -32,5 +32,5 @@ ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] # needs to be the same as CDK -LABEL io.airbyte.version=0.34.0 +LABEL io.airbyte.version=0.34.1 LABEL io.airbyte.name=airbyte/source-declarative-manifest diff --git a/airbyte-cdk/python/setup.py b/airbyte-cdk/python/setup.py index e023fb57a959..40a36d00a372 100644 --- a/airbyte-cdk/python/setup.py +++ b/airbyte-cdk/python/setup.py @@ -17,7 +17,7 @@ name="airbyte-cdk", # The version of the airbyte-cdk package is used at runtime to validate manifests. That validation must be # updated if our semver format changes such as using release candidate versions. - version="0.34.0", + version="0.34.1", description="A framework for writing Airbyte Connectors.", long_description=README, long_description_content_type="text/markdown", From 5c42200379f97d21818e389a4391e10ceffd9750 Mon Sep 17 00:00:00 2001 From: girarda Date: Thu, 13 Apr 2023 02:01:57 +0000 Subject: [PATCH 038/187] Bump Airbyte version from 0.43.1 to 0.43.2 --- .bumpversion.cfg | 2 +- .env | 2 +- docker-compose.yaml | 2 +- docs/operator-guides/upgrading-airbyte.md | 2 +- flags.yml | 2 ++ gradle.properties | 2 +- octavia-cli/Dockerfile | 2 +- octavia-cli/README.md | 2 +- octavia-cli/install.sh | 2 +- octavia-cli/setup.py | 2 +- 10 files changed, 11 insertions(+), 9 deletions(-) diff --git a/.bumpversion.cfg b/.bumpversion.cfg index efb2724047b8..b1c362312671 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.43.1 +current_version = 0.43.2 commit = False tag = False parse = (?P\d+)\.(?P\d+)\.(?P\d+)(\-[a-z]+)? diff --git a/.env b/.env index fab81a948b1e..6e0399555de1 100644 --- a/.env +++ b/.env @@ -10,7 +10,7 @@ ### SHARED ### -VERSION=0.43.1 +VERSION=0.43.2 # When using the airbyte-db via default docker image CONFIG_ROOT=/data diff --git a/docker-compose.yaml b/docker-compose.yaml index d1c132a75fcf..fd0590ffd847 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -84,7 +84,7 @@ services: - MAX_SPEC_WORKERS=${MAX_SPEC_WORKERS} - MAX_SYNC_WORKERS=${MAX_SYNC_WORKERS} - MAX_NOTIFY_WORKERS=${MAX_NOTIFY_WORKERS} - - SHOULD_RUN_NOTIFY_WORKFLOW=${SHOULD_RUN_NOTIFY_WORKFLOW} + - SHOULD_RUN_NOTIFY_WORKFLOWS=${SHOULD_RUN_NOTIFY_WORKFLOWS} - NORMALIZATION_JOB_MAIN_CONTAINER_MEMORY_LIMIT=${NORMALIZATION_JOB_MAIN_CONTAINER_MEMORY_LIMIT} - NORMALIZATION_JOB_MAIN_CONTAINER_MEMORY_REQUEST=${NORMALIZATION_JOB_MAIN_CONTAINER_MEMORY_REQUEST} - NORMALIZATION_JOB_MAIN_CONTAINER_CPU_LIMIT=${NORMALIZATION_JOB_MAIN_CONTAINER_CPU_LIMIT} diff --git a/docs/operator-guides/upgrading-airbyte.md b/docs/operator-guides/upgrading-airbyte.md index 4de51337eb94..446e42a0f3c5 100644 --- a/docs/operator-guides/upgrading-airbyte.md +++ b/docs/operator-guides/upgrading-airbyte.md @@ -109,7 +109,7 @@ If you are upgrading from (i.e. your current version of Airbyte is) Airbyte vers Here's an example of what it might look like with the values filled in. It assumes that the downloaded `airbyte_archive.tar.gz` is in `/tmp`. ```bash - docker run --rm -v /tmp:/config airbyte/migration:0.43.1 --\ + docker run --rm -v /tmp:/config airbyte/migration:0.43.2 --\ --input /config/airbyte_archive.tar.gz\ --output /config/airbyte_archive_migrated.tar.gz ``` diff --git a/flags.yml b/flags.yml index d12aa22c5e52..032f2836bf03 100644 --- a/flags.yml +++ b/flags.yml @@ -7,5 +7,7 @@ flags: serve: true - name: connectors.versionOverridesEnabled serve: true + - name: billing.newTrialPolicy + serve: false - name: heartbeat-max-seconds-between-messages serve: "10800" diff --git a/gradle.properties b/gradle.properties index a5246f694d46..fab9b9655592 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -VERSION=0.43.1 +VERSION=0.43.2 # NOTE: some of these values are overwritten in CI! # NOTE: if you want to override this for your local machine, set overrides in ~/.gradle/gradle.properties diff --git a/octavia-cli/Dockerfile b/octavia-cli/Dockerfile index b2c6cb24cf62..5639fab96511 100644 --- a/octavia-cli/Dockerfile +++ b/octavia-cli/Dockerfile @@ -14,5 +14,5 @@ USER octavia-cli WORKDIR /home/octavia-project ENTRYPOINT ["octavia"] -LABEL io.airbyte.version=0.43.1 +LABEL io.airbyte.version=0.43.2 LABEL io.airbyte.name=airbyte/octavia-cli diff --git a/octavia-cli/README.md b/octavia-cli/README.md index 75e131629c3d..36160940be9f 100644 --- a/octavia-cli/README.md +++ b/octavia-cli/README.md @@ -104,7 +104,7 @@ This script: ```bash touch ~/.octavia # Create a file to store env variables that will be mapped the octavia-cli container mkdir my_octavia_project_directory # Create your octavia project directory where YAML configurations will be stored. -docker run --name octavia-cli -i --rm -v my_octavia_project_directory:/home/octavia-project --network host --user $(id -u):$(id -g) --env-file ~/.octavia airbyte/octavia-cli:0.43.1 +docker run --name octavia-cli -i --rm -v my_octavia_project_directory:/home/octavia-project --network host --user $(id -u):$(id -g) --env-file ~/.octavia airbyte/octavia-cli:0.43.2 ``` ### Using `docker-compose` diff --git a/octavia-cli/install.sh b/octavia-cli/install.sh index 6353ed39d40b..02d99e6d390d 100755 --- a/octavia-cli/install.sh +++ b/octavia-cli/install.sh @@ -3,7 +3,7 @@ # This install scripts currently only works for ZSH and Bash profiles. # It creates an octavia alias in your profile bound to a docker run command and your current user. -VERSION=0.43.1 +VERSION=0.43.2 OCTAVIA_ENV_FILE=${HOME}/.octavia detect_profile() { diff --git a/octavia-cli/setup.py b/octavia-cli/setup.py index 5656d2f063e8..960dcc259191 100644 --- a/octavia-cli/setup.py +++ b/octavia-cli/setup.py @@ -15,7 +15,7 @@ setup( name="octavia-cli", - version="0.43.1", + version="0.43.2", description="A command line interface to manage Airbyte configurations", long_description=README, author="Airbyte", From 5d5efd0d417b79fabe4384118544b6b4967e8baa Mon Sep 17 00:00:00 2001 From: Evan Tahler Date: Wed, 12 Apr 2023 19:35:36 -0700 Subject: [PATCH 039/187] source-postgres works with bigger datasets (#25138) --- docs/integrations/sources/postgres.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/docs/integrations/sources/postgres.md b/docs/integrations/sources/postgres.md index e44c9463b97f..47c206ba3fae 100644 --- a/docs/integrations/sources/postgres.md +++ b/docs/integrations/sources/postgres.md @@ -2,10 +2,6 @@ This page contains the setup guide and reference information for the Postgres source connector for CDC and non-CDC workflows. -:::note -The Postgres source performs best on small databases (under 100GB). -::: - ## When to use Postgres with CDC Configure Postgres with CDC if: From 03572a30293cb1b9361265e0e81b060dc6e4a348 Mon Sep 17 00:00:00 2001 From: Augustin Date: Thu, 13 Apr 2023 07:45:04 +0200 Subject: [PATCH 040/187] create metadata files for all connectors (#24964) --- .../lib/metadata_service/commands.py | 1 + .../ConnectorMetadataDefinitionV1.py | 53 ++++++++++++------- .../src/ConnectorMetadataDefinitionV1.yaml | 1 + .../destination-amazon-sqs/metadata.yaml | 18 +++++++ .../destination-aws-datalake/metadata.yaml | 18 +++++++ .../metadata.yaml | 24 +++++++++ .../metadata.yaml | 24 +++++++++ .../destination-bigquery/metadata.yaml | 29 ++++++++++ .../destination-cassandra/metadata.yaml | 18 +++++++ .../metadata.yaml | 23 ++++++++ .../destination-clickhouse/metadata.yaml | 25 +++++++++ .../destination-convex/metadata.yaml | 18 +++++++ .../connectors/destination-csv/metadata.yaml | 18 +++++++ .../destination-databend/metadata.yaml | 18 +++++++ .../destination-databricks/metadata.yaml | 18 +++++++ .../destination-dev-null/metadata.yaml | 17 ++++++ .../destination-doris/metadata.yaml | 18 +++++++ .../destination-duckdb/metadata.yaml | 18 +++++++ .../destination-dynamodb/metadata.yaml | 18 +++++++ .../destination-e2e-test/metadata.yaml | 18 +++++++ .../metadata.yaml | 18 +++++++ .../destination-elasticsearch/metadata.yaml | 19 +++++++ .../destination-exasol/metadata.yaml | 17 ++++++ .../destination-firebolt/metadata.yaml | 19 +++++++ .../destination-firestore/metadata.yaml | 18 +++++++ .../connectors/destination-gcs/metadata.yaml | 24 +++++++++ .../destination-google-sheets/metadata.yaml | 18 +++++++ .../destination-iceberg/metadata.yaml | 17 ++++++ .../destination-kafka/metadata.yaml | 18 +++++++ .../connectors/destination-keen/metadata.yaml | 18 +++++++ .../destination-kinesis/metadata.yaml | 18 +++++++ .../destination-local-json/metadata.yaml | 18 +++++++ .../metadata.yaml | 18 +++++++ .../destination-meilisearch/metadata.yaml | 18 +++++++ .../metadata.yaml | 18 +++++++ .../destination-mongodb/metadata.yaml | 19 +++++++ .../connectors/destination-mqtt/metadata.yaml | 18 +++++++ .../metadata.yaml | 23 ++++++++ .../destination-mssql/metadata.yaml | 25 +++++++++ .../metadata.yaml | 23 ++++++++ .../destination-mysql/metadata.yaml | 24 +++++++++ .../metadata.yaml | 23 ++++++++ .../destination-oracle/metadata.yaml | 24 +++++++++ .../metadata.yaml | 23 ++++++++ .../destination-postgres/metadata.yaml | 25 +++++++++ .../destination-pubsub/metadata.yaml | 18 +++++++ .../destination-pulsar/metadata.yaml | 18 +++++++ .../connectors/destination-r2/metadata.yaml | 18 +++++++ .../destination-rabbitmq/metadata.yaml | 18 +++++++ .../destination-redis/metadata.yaml | 18 +++++++ .../destination-redpanda/metadata.yaml | 18 +++++++ .../destination-redshift/metadata.yaml | 29 ++++++++++ .../destination-rockset/metadata.yaml | 17 ++++++ .../destination-s3-glue/metadata.yaml | 18 +++++++ .../connectors/destination-s3/metadata.yaml | 24 +++++++++ .../destination-scylla/metadata.yaml | 18 +++++++ .../destination-selectdb/metadata.yaml | 18 +++++++ .../destination-sftp-json/metadata.yaml | 18 +++++++ .../destination-snowflake/metadata.yaml | 29 ++++++++++ .../destination-sqlite/metadata.yaml | 18 +++++++ .../destination-teradata/metadata.yaml | 18 +++++++ .../connectors/destination-tidb/metadata.yaml | 23 ++++++++ .../destination-typesense/metadata.yaml | 18 +++++++ .../destination-weaviate/metadata.yaml | 18 +++++++ .../destination-yugabytedb/metadata.yaml | 18 +++++++ .../source-activecampaign/metadata.yaml | 18 +++++++ .../connectors/source-adjust/metadata.yaml | 18 +++++++ .../connectors/source-aha/metadata.yaml | 18 +++++++ .../connectors/source-airtable/metadata.yaml | 22 ++++++++ .../metadata.yaml | 22 ++++++++ .../connectors/source-alloydb/metadata.yaml | 24 +++++++++ .../source-alpha-vantage/metadata.yaml | 18 +++++++ .../source-amazon-ads/metadata.yaml | 24 +++++++++ .../metadata.yaml | 18 +++++++ .../source-amazon-sqs/metadata.yaml | 18 +++++++ .../connectors/source-amplitude/metadata.yaml | 21 ++++++++ .../source-apify-dataset/metadata.yaml | 18 +++++++ .../connectors/source-appfollow/metadata.yaml | 18 +++++++ .../connectors/source-appsflyer/metadata.yaml | 18 +++++++ .../source-appstore-singer/metadata.yaml | 18 +++++++ .../connectors/source-asana/metadata.yaml | 18 +++++++ .../connectors/source-ashby/metadata.yaml | 18 +++++++ .../connectors/source-auth0/metadata.yaml | 18 +++++++ .../source-aws-cloudtrail/metadata.yaml | 18 +++++++ .../source-azure-blob-storage/metadata.yaml | 18 +++++++ .../source-azure-table/metadata.yaml | 18 +++++++ .../source-babelforce/metadata.yaml | 18 +++++++ .../connectors/source-bamboo-hr/metadata.yaml | 18 +++++++ .../source-bigcommerce/metadata.yaml | 18 +++++++ .../connectors/source-bigquery/metadata.yaml | 18 +++++++ .../connectors/source-bing-ads/metadata.yaml | 26 +++++++++ .../connectors/source-braintree/metadata.yaml | 18 +++++++ .../connectors/source-braze/metadata.yaml | 17 ++++++ .../source-breezometer/metadata.yaml | 18 +++++++ .../connectors/source-callrail/metadata.yaml | 18 +++++++ .../connectors/source-cart/metadata.yaml | 18 +++++++ .../connectors/source-chargebee/metadata.yaml | 21 ++++++++ .../connectors/source-chargify/metadata.yaml | 18 +++++++ .../source-chartmogul/metadata.yaml | 21 ++++++++ .../metadata.yaml | 22 ++++++++ .../source-clickhouse/metadata.yaml | 24 +++++++++ .../source-clickup-api/metadata.yaml | 18 +++++++ .../connectors/source-clockify/metadata.yaml | 18 +++++++ .../connectors/source-close-com/metadata.yaml | 21 ++++++++ .../metadata.yaml | 21 ++++++++ .../source-cockroachdb/metadata.yaml | 21 ++++++++ .../connectors/source-coda/metadata.yaml | 18 +++++++ .../connectors/source-coin-api/metadata.yaml | 18 +++++++ .../source-coingecko-coins/metadata.yaml | 18 +++++++ .../source-coinmarketcap/metadata.yaml | 18 +++++++ .../connectors/source-commcare/metadata.yaml | 17 ++++++ .../source-commercetools/metadata.yaml | 18 +++++++ .../connectors/source-configcat/metadata.yaml | 18 +++++++ .../source-confluence/metadata.yaml | 21 ++++++++ .../source-convertkit/metadata.yaml | 18 +++++++ .../connectors/source-convex/metadata.yaml | 18 +++++++ .../connectors/source-copper/metadata.yaml | 18 +++++++ .../connectors/source-courier/metadata.yaml | 18 +++++++ .../connectors/source-datadog/metadata.yaml | 18 +++++++ .../connectors/source-datascope/metadata.yaml | 18 +++++++ .../connectors/source-db2/metadata.yaml | 21 ++++++++ .../connectors/source-delighted/metadata.yaml | 21 ++++++++ .../connectors/source-dixa/metadata.yaml | 18 +++++++ .../connectors/source-dockerhub/metadata.yaml | 18 +++++++ .../connectors/source-dremio/metadata.yaml | 18 +++++++ .../connectors/source-drift/metadata.yaml | 21 ++++++++ .../connectors/source-dv-360/metadata.yaml | 18 +++++++ .../connectors/source-dynamodb/metadata.yaml | 18 +++++++ .../source-e2e-test-cloud/metadata.yaml | 18 +++++++ .../connectors/source-e2e-test/metadata.yaml | 18 +++++++ .../source-elasticsearch/metadata.yaml | 18 +++++++ .../source-emailoctopus/metadata.yaml | 18 +++++++ .../connectors/source-everhour/metadata.yaml | 21 ++++++++ .../source-exchange-rates/metadata.yaml | 22 ++++++++ .../source-facebook-marketing/metadata.yaml | 21 ++++++++ .../source-facebook-pages/metadata.yaml | 21 ++++++++ .../connectors/source-faker/metadata.yaml | 31 +++++++++++ .../connectors/source-fastbill/metadata.yaml | 18 +++++++ .../connectors/source-fauna/metadata.yaml | 18 +++++++ .../connectors/source-file/metadata.yaml | 22 ++++++++ .../metadata.yaml | 20 +++++++ .../connectors/source-firebolt/metadata.yaml | 18 +++++++ .../connectors/source-flexport/metadata.yaml | 17 ++++++ .../source-freshcaller/metadata.yaml | 18 +++++++ .../connectors/source-freshdesk/metadata.yaml | 21 ++++++++ .../source-freshsales/metadata.yaml | 21 ++++++++ .../source-freshservice/metadata.yaml | 18 +++++++ .../connectors/source-gcs/metadata.yaml | 18 +++++++ .../connectors/source-genesys/metadata.yaml | 18 +++++++ .../connectors/source-getlago/metadata.yaml | 18 +++++++ .../connectors/source-github/metadata.yaml | 33 ++++++++++++ .../connectors/source-gitlab/metadata.yaml | 21 ++++++++ .../connectors/source-glassfrog/metadata.yaml | 18 +++++++ .../connectors/source-gnews/metadata.yaml | 18 +++++++ .../source-gocardless/metadata.yaml | 18 +++++++ .../connectors/source-gong/metadata.yaml | 18 +++++++ .../source-google-ads/metadata.yaml | 22 ++++++++ .../metadata.yaml | 23 ++++++++ .../source-google-analytics-v4/metadata.yaml | 24 +++++++++ .../source-google-directory/metadata.yaml | 19 +++++++ .../metadata.yaml | 18 +++++++ .../metadata.yaml | 21 ++++++++ .../source-google-sheets/metadata.yaml | 22 ++++++++ .../source-google-webfonts/metadata.yaml | 18 +++++++ .../metadata.yaml | 19 +++++++ .../source-greenhouse/metadata.yaml | 21 ++++++++ .../connectors/source-gridly/metadata.yaml | 18 +++++++ .../connectors/source-gutendex/metadata.yaml | 17 ++++++ .../connectors/source-harvest/metadata.yaml | 22 ++++++++ .../source-hellobaton/metadata.yaml | 18 +++++++ .../source-hubplanner/metadata.yaml | 18 +++++++ .../connectors/source-hubspot/metadata.yaml | 21 ++++++++ .../connectors/source-insightly/metadata.yaml | 18 +++++++ .../connectors/source-instagram/metadata.yaml | 21 ++++++++ .../connectors/source-instatus/metadata.yaml | 18 +++++++ .../connectors/source-intercom/metadata.yaml | 21 ++++++++ .../connectors/source-intruder/metadata.yaml | 18 +++++++ .../connectors/source-ip2whois/metadata.yaml | 18 +++++++ .../connectors/source-iterable/metadata.yaml | 21 ++++++++ .../connectors/source-jira/metadata.yaml | 21 ++++++++ .../connectors/source-k6-cloud/metadata.yaml | 18 +++++++ .../connectors/source-kafka/metadata.yaml | 18 +++++++ .../connectors/source-klarna/metadata.yaml | 18 +++++++ .../connectors/source-klaviyo/metadata.yaml | 22 ++++++++ .../source-kustomer-singer/metadata.yaml | 18 +++++++ .../connectors/source-kyriba/metadata.yaml | 18 +++++++ .../source-launchdarkly/metadata.yaml | 18 +++++++ .../connectors/source-lemlist/metadata.yaml | 17 ++++++ .../source-lever-hiring/metadata.yaml | 18 +++++++ .../source-linkedin-ads/metadata.yaml | 21 ++++++++ .../source-linkedin-pages/metadata.yaml | 18 +++++++ .../connectors/source-linnworks/metadata.yaml | 18 +++++++ .../connectors/source-lokalise/metadata.yaml | 18 +++++++ .../connectors/source-looker/metadata.yaml | 18 +++++++ .../connectors/source-mailchimp/metadata.yaml | 21 ++++++++ .../source-mailerlite/metadata.yaml | 18 +++++++ .../source-mailersend/metadata.yaml | 18 +++++++ .../connectors/source-mailgun/metadata.yaml | 18 +++++++ .../source-mailjet-mail/metadata.yaml | 18 +++++++ .../source-mailjet-sms/metadata.yaml | 18 +++++++ .../connectors/source-marketo/metadata.yaml | 21 ++++++++ .../connectors/source-metabase/metadata.yaml | 18 +++++++ .../source-microsoft-dataverse/metadata.yaml | 18 +++++++ .../source-microsoft-teams/metadata.yaml | 18 +++++++ .../connectors/source-mixpanel/metadata.yaml | 23 ++++++++ .../connectors/source-monday/metadata.yaml | 21 ++++++++ .../metadata.yaml | 18 +++++++ .../source-mongodb-v2/metadata.yaml | 20 +++++++ .../source-mssql-strict-encrypt/metadata.yaml | 22 ++++++++ .../connectors/source-mssql/metadata.yaml | 23 ++++++++ .../connectors/source-my-hours/metadata.yaml | 18 +++++++ .../source-mysql-strict-encrypt/metadata.yaml | 22 ++++++++ .../connectors/source-mysql/metadata.yaml | 23 ++++++++ .../connectors/source-n8n/metadata.yaml | 18 +++++++ .../connectors/source-nasa/metadata.yaml | 21 ++++++++ .../connectors/source-netsuite/metadata.yaml | 18 +++++++ .../connectors/source-news-api/metadata.yaml | 18 +++++++ .../connectors/source-newsdata/metadata.yaml | 17 ++++++ .../connectors/source-notion/metadata.yaml | 21 ++++++++ .../connectors/source-nytimes/metadata.yaml | 18 +++++++ .../connectors/source-okta/metadata.yaml | 18 +++++++ .../connectors/source-omnisend/metadata.yaml | 18 +++++++ .../connectors/source-onesignal/metadata.yaml | 18 +++++++ .../source-open-exchange-rates/metadata.yaml | 18 +++++++ .../source-openweather/metadata.yaml | 18 +++++++ .../connectors/source-opsgenie/metadata.yaml | 17 ++++++ .../metadata.yaml | 22 ++++++++ .../connectors/source-oracle/metadata.yaml | 24 +++++++++ .../connectors/source-orb/metadata.yaml | 18 +++++++ .../connectors/source-orbit/metadata.yaml | 18 +++++++ .../connectors/source-oura/metadata.yaml | 18 +++++++ .../connectors/source-outreach/metadata.yaml | 18 +++++++ .../connectors/source-pardot/metadata.yaml | 18 +++++++ .../source-partnerstack/metadata.yaml | 18 +++++++ .../source-paypal-transaction/metadata.yaml | 22 ++++++++ .../connectors/source-paystack/metadata.yaml | 21 ++++++++ .../connectors/source-pendo/metadata.yaml | 18 +++++++ .../connectors/source-persistiq/metadata.yaml | 18 +++++++ .../source-pexels-api/metadata.yaml | 18 +++++++ .../connectors/source-pinterest/metadata.yaml | 21 ++++++++ .../connectors/source-pipedrive/metadata.yaml | 21 ++++++++ .../source-pivotal-tracker/metadata.yaml | 18 +++++++ .../connectors/source-plaid/metadata.yaml | 18 +++++++ .../connectors/source-plausible/metadata.yaml | 18 +++++++ .../connectors/source-pocket/metadata.yaml | 18 +++++++ .../connectors/source-pokeapi/metadata.yaml | 18 +++++++ .../source-polygon-stock-api/metadata.yaml | 21 ++++++++ .../metadata.yaml | 22 ++++++++ .../connectors/source-postgres/metadata.yaml | 24 +++++++++ .../connectors/source-posthog/metadata.yaml | 22 ++++++++ .../source-postmarkapp/metadata.yaml | 18 +++++++ .../source-prestashop/metadata.yaml | 21 ++++++++ .../connectors/source-primetric/metadata.yaml | 18 +++++++ .../source-public-apis/metadata.yaml | 18 +++++++ .../connectors/source-punk-api/metadata.yaml | 18 +++++++ .../connectors/source-pypi/metadata.yaml | 18 +++++++ .../connectors/source-qonto/metadata.yaml | 18 +++++++ .../connectors/source-qualaroo/metadata.yaml | 18 +++++++ .../source-quickbooks-singer/metadata.yaml | 18 +++++++ .../connectors/source-railz/metadata.yaml | 18 +++++++ .../source-rd-station-marketing/metadata.yaml | 18 +++++++ .../connectors/source-recharge/metadata.yaml | 21 ++++++++ .../source-recreation/metadata.yaml | 18 +++++++ .../connectors/source-recruitee/metadata.yaml | 18 +++++++ .../connectors/source-recurly/metadata.yaml | 18 +++++++ .../connectors/source-redshift/metadata.yaml | 18 +++++++ .../connectors/source-reply-io/metadata.yaml | 18 +++++++ .../connectors/source-retently/metadata.yaml | 18 +++++++ .../connectors/source-rki-covid/metadata.yaml | 18 +++++++ .../source-rocket-chat/metadata.yaml | 18 +++++++ .../connectors/source-rss/metadata.yaml | 18 +++++++ .../connectors/source-s3/metadata.yaml | 21 ++++++++ .../source-salesforce-singer/metadata.yaml | 17 ++++++ .../source-salesforce/metadata.yaml | 21 ++++++++ .../connectors/source-salesloft/metadata.yaml | 21 ++++++++ .../source-sap-fieldglass/metadata.yaml | 18 +++++++ .../source-search-metrics/metadata.yaml | 18 +++++++ .../connectors/source-secoda/metadata.yaml | 18 +++++++ .../connectors/source-sendgrid/metadata.yaml | 21 ++++++++ .../source-sendinblue/metadata.yaml | 18 +++++++ .../source-senseforce/metadata.yaml | 22 ++++++++ .../connectors/source-sentry/metadata.yaml | 21 ++++++++ .../connectors/source-sftp-bulk/metadata.yaml | 18 +++++++ .../connectors/source-sftp/metadata.yaml | 18 +++++++ .../connectors/source-shopify/metadata.yaml | 18 +++++++ .../connectors/source-shortio/metadata.yaml | 18 +++++++ .../connectors/source-slack/metadata.yaml | 21 ++++++++ .../connectors/source-smaily/metadata.yaml | 18 +++++++ .../source-smartengage/metadata.yaml | 18 +++++++ .../source-smartsheets/metadata.yaml | 22 ++++++++ .../source-snapchat-marketing/metadata.yaml | 22 ++++++++ .../connectors/source-snowflake/metadata.yaml | 21 ++++++++ .../source-sonar-cloud/metadata.yaml | 21 ++++++++ .../source-spacex-api/metadata.yaml | 18 +++++++ .../connectors/source-square/metadata.yaml | 22 ++++++++ .../source-statuspage/metadata.yaml | 18 +++++++ .../connectors/source-strava/metadata.yaml | 21 ++++++++ .../connectors/source-stripe/metadata.yaml | 21 ++++++++ .../source-survey-sparrow/metadata.yaml | 18 +++++++ .../connectors/source-surveycto/metadata.yaml | 18 +++++++ .../source-surveymonkey/metadata.yaml | 21 ++++++++ .../source-talkdesk-explore/metadata.yaml | 18 +++++++ .../connectors/source-tempo/metadata.yaml | 21 ++++++++ .../source-the-guardian-api/metadata.yaml | 18 +++++++ .../connectors/source-tidb/metadata.yaml | 22 ++++++++ .../source-tiktok-marketing/metadata.yaml | 22 ++++++++ .../connectors/source-timely/metadata.yaml | 18 +++++++ .../connectors/source-tmdb/metadata.yaml | 18 +++++++ .../connectors/source-todoist/metadata.yaml | 18 +++++++ .../connectors/source-toggl/metadata.yaml | 18 +++++++ .../source-tplcentral/metadata.yaml | 17 ++++++ .../connectors/source-trello/metadata.yaml | 21 ++++++++ .../source-trustpilot/metadata.yaml | 18 +++++++ .../source-tvmaze-schedule/metadata.yaml | 18 +++++++ .../source-twilio-taskrouter/metadata.yaml | 18 +++++++ .../connectors/source-twilio/metadata.yaml | 22 ++++++++ .../connectors/source-twitter/metadata.yaml | 21 ++++++++ .../source-tyntec-sms/metadata.yaml | 18 +++++++ .../connectors/source-typeform/metadata.yaml | 21 ++++++++ .../connectors/source-unleash/metadata.yaml | 18 +++++++ .../connectors/source-us-census/metadata.yaml | 18 +++++++ .../connectors/source-vantage/metadata.yaml | 18 +++++++ .../source-visma-economic/metadata.yaml | 18 +++++++ .../connectors/source-vitally/metadata.yaml | 18 +++++++ .../connectors/source-waiteraid/metadata.yaml | 18 +++++++ .../source-weatherstack/metadata.yaml | 18 +++++++ .../connectors/source-webflow/metadata.yaml | 18 +++++++ .../source-whisky-hunter/metadata.yaml | 18 +++++++ .../source-wikipedia-pageviews/metadata.yaml | 18 +++++++ .../source-woocommerce/metadata.yaml | 21 ++++++++ .../connectors/source-workable/metadata.yaml | 18 +++++++ .../connectors/source-workramp/metadata.yaml | 18 +++++++ .../connectors/source-wrike/metadata.yaml | 18 +++++++ .../connectors/source-xero/metadata.yaml | 21 ++++++++ .../connectors/source-xkcd/metadata.yaml | 18 +++++++ .../source-yandex-metrica/metadata.yaml | 21 ++++++++ .../connectors/source-younium/metadata.yaml | 18 +++++++ .../source-youtube-analytics/metadata.yaml | 21 ++++++++ .../metadata.yaml | 18 +++++++ .../source-zendesk-chat/metadata.yaml | 21 ++++++++ .../source-zendesk-sell/metadata.yaml | 18 +++++++ .../source-zendesk-sunshine/metadata.yaml | 18 +++++++ .../source-zendesk-support/metadata.yaml | 22 ++++++++ .../source-zendesk-talk/metadata.yaml | 22 ++++++++ .../connectors/source-zenefits/metadata.yaml | 18 +++++++ .../connectors/source-zenloop/metadata.yaml | 21 ++++++++ .../connectors/source-zoho-crm/metadata.yaml | 18 +++++++ .../connectors/source-zoom/metadata.yaml | 18 +++++++ .../connectors/source-zuora/metadata.yaml | 19 +++++++ .../airbyte-customer-io-source/metadata.yaml | 18 +++++++ .../airbyte-harness-source/metadata.yaml | 18 +++++++ .../airbyte-jenkins-source/metadata.yaml | 18 +++++++ .../airbyte-pagerduty-source/metadata.yaml | 18 +++++++ .../airbyte-victorops-source/metadata.yaml | 18 +++++++ .../streamr-airbyte-connector/metadata.yaml | 18 +++++++ 355 files changed, 6844 insertions(+), 20 deletions(-) create mode 100644 airbyte-integrations/connectors/destination-amazon-sqs/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-aws-datalake/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-azure-blob-storage/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-bigquery-denormalized/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-bigquery/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-cassandra/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-clickhouse-strict-encrypt/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-clickhouse/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-convex/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-csv/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-databend/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-databricks/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-dev-null/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-doris/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-duckdb/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-dynamodb/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-e2e-test/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-elasticsearch-strict-encrypt/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-elasticsearch/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-exasol/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-firebolt/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-firestore/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-gcs/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-google-sheets/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-iceberg/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-kafka/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-keen/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-kinesis/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-local-json/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-mariadb-columnstore/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-meilisearch/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-mongodb-strict-encrypt/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-mongodb/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-mqtt/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-mssql-strict-encrypt/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-mssql/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-mysql-strict-encrypt/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-mysql/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-oracle-strict-encrypt/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-oracle/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-postgres-strict-encrypt/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-postgres/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-pubsub/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-pulsar/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-r2/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-rabbitmq/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-redis/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-redpanda/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-redshift/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-rockset/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-s3-glue/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-s3/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-scylla/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-selectdb/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-sftp-json/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-snowflake/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-sqlite/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-teradata/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-tidb/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-typesense/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-weaviate/metadata.yaml create mode 100644 airbyte-integrations/connectors/destination-yugabytedb/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-activecampaign/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-adjust/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-aha/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-airtable/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-alloydb-strict-encrypt/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-alloydb/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-alpha-vantage/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-amazon-ads/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-amazon-seller-partner/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-amazon-sqs/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-amplitude/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-apify-dataset/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-appfollow/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-appsflyer/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-appstore-singer/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-asana/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-ashby/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-auth0/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-aws-cloudtrail/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-azure-blob-storage/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-azure-table/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-babelforce/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-bamboo-hr/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-bigcommerce/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-bigquery/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-bing-ads/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-braintree/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-braze/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-breezometer/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-callrail/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-cart/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-chargebee/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-chargify/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-chartmogul/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-clickhouse-strict-encrypt/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-clickhouse/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-clickup-api/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-clockify/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-close-com/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-cockroachdb-strict-encrypt/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-cockroachdb/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-coda/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-coin-api/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-coingecko-coins/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-coinmarketcap/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-commcare/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-commercetools/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-configcat/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-confluence/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-convertkit/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-convex/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-copper/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-courier/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-datadog/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-datascope/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-db2/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-delighted/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-dixa/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-dockerhub/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-dremio/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-drift/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-dv-360/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-dynamodb/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-e2e-test-cloud/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-e2e-test/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-elasticsearch/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-emailoctopus/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-everhour/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-exchange-rates/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-facebook-marketing/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-facebook-pages/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-faker/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-fastbill/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-fauna/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-file/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-firebase-realtime-database/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-firebolt/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-flexport/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-freshcaller/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-freshdesk/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-freshsales/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-freshservice/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-gcs/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-genesys/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-getlago/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-github/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-gitlab/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-glassfrog/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-gnews/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-gocardless/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-gong/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-google-ads/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-google-analytics-data-api/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-google-analytics-v4/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-google-directory/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-google-pagespeed-insights/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-google-search-console/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-google-sheets/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-google-webfonts/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-google-workspace-admin-reports/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-greenhouse/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-gridly/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-gutendex/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-harvest/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-hellobaton/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-hubplanner/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-hubspot/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-insightly/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-instagram/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-instatus/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-intercom/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-intruder/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-ip2whois/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-iterable/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-jira/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-k6-cloud/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-kafka/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-klarna/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-klaviyo/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-kustomer-singer/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-kyriba/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-launchdarkly/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-lemlist/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-lever-hiring/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-linkedin-ads/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-linkedin-pages/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-linnworks/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-lokalise/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-looker/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-mailchimp/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-mailerlite/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-mailersend/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-mailgun/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-mailjet-mail/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-mailjet-sms/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-marketo/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-metabase/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-microsoft-dataverse/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-microsoft-teams/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-mixpanel/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-monday/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-mongodb-strict-encrypt/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-mongodb-v2/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-mssql-strict-encrypt/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-mssql/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-my-hours/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-mysql-strict-encrypt/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-mysql/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-n8n/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-nasa/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-netsuite/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-news-api/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-newsdata/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-notion/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-nytimes/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-okta/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-omnisend/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-onesignal/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-open-exchange-rates/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-openweather/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-opsgenie/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-oracle-strict-encrypt/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-oracle/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-orb/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-orbit/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-oura/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-outreach/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-pardot/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-partnerstack/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-paypal-transaction/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-paystack/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-pendo/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-persistiq/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-pexels-api/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-pinterest/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-pipedrive/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-pivotal-tracker/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-plaid/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-plausible/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-pocket/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-pokeapi/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-polygon-stock-api/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-postgres-strict-encrypt/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-postgres/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-posthog/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-postmarkapp/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-prestashop/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-primetric/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-public-apis/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-punk-api/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-pypi/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-qonto/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-qualaroo/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-quickbooks-singer/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-railz/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-rd-station-marketing/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-recharge/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-recreation/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-recruitee/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-recurly/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-redshift/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-reply-io/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-retently/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-rki-covid/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-rocket-chat/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-rss/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-s3/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-salesforce-singer/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-salesforce/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-salesloft/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-sap-fieldglass/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-search-metrics/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-secoda/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-sendgrid/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-sendinblue/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-senseforce/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-sentry/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-sftp-bulk/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-sftp/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-shopify/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-shortio/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-slack/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-smaily/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-smartengage/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-smartsheets/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-snapchat-marketing/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-snowflake/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-sonar-cloud/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-spacex-api/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-square/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-statuspage/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-strava/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-stripe/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-survey-sparrow/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-surveycto/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-surveymonkey/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-talkdesk-explore/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-tempo/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-the-guardian-api/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-tidb/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-tiktok-marketing/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-timely/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-tmdb/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-todoist/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-toggl/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-tplcentral/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-trello/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-trustpilot/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-tvmaze-schedule/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-twilio-taskrouter/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-twilio/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-twitter/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-tyntec-sms/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-typeform/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-unleash/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-us-census/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-vantage/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-visma-economic/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-vitally/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-waiteraid/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-weatherstack/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-webflow/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-whisky-hunter/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-wikipedia-pageviews/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-woocommerce/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-workable/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-workramp/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-wrike/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-xero/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-xkcd/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-yandex-metrica/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-younium/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-youtube-analytics/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-zapier-supported-storage/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-zendesk-chat/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-zendesk-sell/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-zendesk-sunshine/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-zendesk-support/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-zendesk-talk/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-zenefits/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-zenloop/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-zoho-crm/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-zoom/metadata.yaml create mode 100644 airbyte-integrations/connectors/source-zuora/metadata.yaml create mode 100644 airbyte-integrations/connectors/third-party/farosai/airbyte-customer-io-source/metadata.yaml create mode 100644 airbyte-integrations/connectors/third-party/farosai/airbyte-harness-source/metadata.yaml create mode 100644 airbyte-integrations/connectors/third-party/farosai/airbyte-jenkins-source/metadata.yaml create mode 100644 airbyte-integrations/connectors/third-party/farosai/airbyte-pagerduty-source/metadata.yaml create mode 100644 airbyte-integrations/connectors/third-party/farosai/airbyte-victorops-source/metadata.yaml create mode 100644 airbyte-integrations/connectors/third-party/ghcr/streamr-airbyte-connector/metadata.yaml diff --git a/airbyte-ci/connectors/metadata_service/lib/metadata_service/commands.py b/airbyte-ci/connectors/metadata_service/lib/metadata_service/commands.py index 7ecdfcad9928..32668cfc58b5 100644 --- a/airbyte-ci/connectors/metadata_service/lib/metadata_service/commands.py +++ b/airbyte-ci/connectors/metadata_service/lib/metadata_service/commands.py @@ -4,6 +4,7 @@ import pathlib import click + from metadata_service.gcs_upload import upload_metadata_to_gcs from metadata_service.validators.metadata_validator import validate_metadata_file from pydantic import ValidationError diff --git a/airbyte-ci/connectors/metadata_service/lib/metadata_service/models/generated/ConnectorMetadataDefinitionV1.py b/airbyte-ci/connectors/metadata_service/lib/metadata_service/models/generated/ConnectorMetadataDefinitionV1.py index b2a2b61ca475..984814d5b4d3 100644 --- a/airbyte-ci/connectors/metadata_service/lib/metadata_service/models/generated/ConnectorMetadataDefinitionV1.py +++ b/airbyte-ci/connectors/metadata_service/lib/metadata_service/models/generated/ConnectorMetadataDefinitionV1.py @@ -1,3 +1,7 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + # generated by datamodel-codegen: # filename: ConnectorMetadataDefinitionV1.yaml @@ -11,15 +15,24 @@ class ConnectorType(Enum): - destination = 'destination' - source = 'source' + destination = "destination" + source = "source" + + +class ConnectorSubtype(Enum): + api = "api" + database = "database" + file = "file" + custom = "custom" + message_queue = "message_queue" + unknown = "unknown" class ReleaseStage(Enum): - alpha = 'alpha' - beta = 'beta' - generally_available = 'generally_available' - source = 'source' + alpha = "alpha" + beta = "beta" + generally_available = "generally_available" + source = "source" class AllowedHosts(BaseModel): @@ -28,7 +41,7 @@ class Config: hosts: Optional[List[str]] = Field( None, - description='An array of hosts that this connector can connect to. AllowedHosts not being present for the source or destination means that access to all hosts is allowed. An empty list here means that no network access is granted.', + description="An array of hosts that this connector can connect to. AllowedHosts not being present for the source or destination means that access to all hosts is allowed. An empty list here means that no network access is granted.", ) @@ -38,15 +51,15 @@ class Config: normalizationRepository: str = Field( ..., - description='a field indicating the name of the repository to be used for normalization. If the value of the flag is NULL - normalization is not used.', + description="a field indicating the name of the repository to be used for normalization. If the value of the flag is NULL - normalization is not used.", ) normalizationTag: str = Field( ..., - description='a field indicating the tag of the docker repository to be used for normalization.', + description="a field indicating the tag of the docker repository to be used for normalization.", ) normalizationIntegrationType: str = Field( ..., - description='a field indicating the type of integration dialect to use for normalization.', + description="a field indicating the type of integration dialect to use for normalization.", ) @@ -56,7 +69,7 @@ class Config: streams: Optional[List[str]] = Field( None, - description='An array of streams that this connector suggests the average user will want. SuggestedStreams not being present for the source means that all streams are suggested. An empty list here means that no streams are suggested.', + description="An array of streams that this connector suggests the average user will want. SuggestedStreams not being present for the source means that all streams are suggested. An empty list here means that no streams are suggested.", ) @@ -71,13 +84,13 @@ class Config: class JobType(Enum): - get_spec = 'get_spec' - check_connection = 'check_connection' - discover_schema = 'discover_schema' - sync = 'sync' - reset_connection = 'reset_connection' - connection_updater = 'connection_updater' - replicate = 'replicate' + get_spec = "get_spec" + check_connection = "check_connection" + discover_schema = "discover_schema" + sync = "sync" + reset_connection = "reset_connection" + connection_updater = "connection_updater" + replicate = "replicate" class JobTypeResourceLimit(BaseModel): @@ -94,7 +107,7 @@ class Config: default: Optional[ResourceRequirements] = Field( None, - description='if set, these are the requirements that should be set for ALL jobs run for this actor definition.', + description="if set, these are the requirements that should be set for ALL jobs run for this actor definition.", ) jobSpecific: Optional[List[JobTypeResourceLimit]] = None @@ -137,7 +150,7 @@ class Data(BaseModel): license: str supportUrl: AnyUrl githubIssueLabel: str - connectorSubtype: str + connectorSubtype: ConnectorSubtype releaseStage: ReleaseStage catalogs: Optional[Catalog] = None allowedHosts: Optional[AllowedHosts] = None diff --git a/airbyte-ci/connectors/metadata_service/lib/metadata_service/models/src/ConnectorMetadataDefinitionV1.yaml b/airbyte-ci/connectors/metadata_service/lib/metadata_service/models/src/ConnectorMetadataDefinitionV1.yaml index bdded736a0be..d7f27a91a895 100644 --- a/airbyte-ci/connectors/metadata_service/lib/metadata_service/models/src/ConnectorMetadataDefinitionV1.yaml +++ b/airbyte-ci/connectors/metadata_service/lib/metadata_service/models/src/ConnectorMetadataDefinitionV1.yaml @@ -59,6 +59,7 @@ properties: - database - file - custom + - message_queue - unknown releaseStage: type: string diff --git a/airbyte-integrations/connectors/destination-amazon-sqs/metadata.yaml b/airbyte-integrations/connectors/destination-amazon-sqs/metadata.yaml new file mode 100644 index 000000000000..1ad1f92b24b0 --- /dev/null +++ b/airbyte-integrations/connectors/destination-amazon-sqs/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: destination + definitionId: 0eeee7fb-518f-4045-bacc-9619e31c43ea + dockerImageTag: 0.1.0 + dockerRepository: airbyte/destination-amazon-sqs + githubIssueLabel: destination-amazon-sqs + icon: awssqs.svg + license: MIT + name: Amazon SQS + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/amazon-sqs +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-aws-datalake/metadata.yaml b/airbyte-integrations/connectors/destination-aws-datalake/metadata.yaml new file mode 100644 index 000000000000..ba55976c37bb --- /dev/null +++ b/airbyte-integrations/connectors/destination-aws-datalake/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: database + connectorType: destination + definitionId: 99878c90-0fbd-46d3-9d98-ffde879d17fc + dockerImageTag: 0.1.2 + dockerRepository: airbyte/destination-aws-datalake + githubIssueLabel: destination-aws-datalake + icon: awsdatalake.svg + license: MIT + name: AWS Datalake + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/aws-datalake +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-azure-blob-storage/metadata.yaml b/airbyte-integrations/connectors/destination-azure-blob-storage/metadata.yaml new file mode 100644 index 000000000000..8f0d8064c786 --- /dev/null +++ b/airbyte-integrations/connectors/destination-azure-blob-storage/metadata.yaml @@ -0,0 +1,24 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: file + connectorType: destination + definitionId: b4c5d105-31fd-4817-96b6-cb923bfc04cb + dockerImageTag: 0.2.0 + dockerRepository: airbyte/destination-azure-blob-storage + githubIssueLabel: destination-azure-blob-storage + icon: azureblobstorage.svg + license: MIT + name: Azure Blob Storage + releaseStage: alpha + resourceRequirements: + jobSpecific: + - jobType: sync + resourceRequirements: + memory_limit: 1Gi + memory_request: 1Gi + supportUrl: https://docs.airbyte.com/integrations/destinations/azureblobstorage +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-bigquery-denormalized/metadata.yaml b/airbyte-integrations/connectors/destination-bigquery-denormalized/metadata.yaml new file mode 100644 index 000000000000..0c2a921e3440 --- /dev/null +++ b/airbyte-integrations/connectors/destination-bigquery-denormalized/metadata.yaml @@ -0,0 +1,24 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: database + connectorType: destination + definitionId: 079d5540-f236-4294-ba7c-ade8fd918496 + dockerImageTag: 1.2.19 + dockerRepository: airbyte/destination-bigquery-denormalized + githubIssueLabel: destination-bigquery-denormalized + icon: bigquery.svg + license: MIT + name: BigQuery (denormalized typed struct) + releaseStage: beta + resourceRequirements: + jobSpecific: + - jobType: sync + resourceRequirements: + memory_limit: 1Gi + memory_request: 1Gi + supportUrl: https://docs.airbyte.com/integrations/destinations/bigquery +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-bigquery/metadata.yaml b/airbyte-integrations/connectors/destination-bigquery/metadata.yaml new file mode 100644 index 000000000000..3fb9f9a9b81c --- /dev/null +++ b/airbyte-integrations/connectors/destination-bigquery/metadata.yaml @@ -0,0 +1,29 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: database + connectorType: destination + definitionId: 22f6c74f-5699-40ff-833c-4a879ea40133 + dockerImageTag: 1.2.19 + dockerRepository: airbyte/destination-bigquery + githubIssueLabel: destination-bigquery + icon: bigquery.svg + license: MIT + name: BigQuery + normalizationConfig: + normalizationIntegrationType: bigquery + normalizationRepository: airbyte/normalization + normalizationTag: 0.4.0 + releaseStage: generally_available + resourceRequirements: + jobSpecific: + - jobType: sync + resourceRequirements: + memory_limit: 1Gi + memory_request: 1Gi + supportUrl: https://docs.airbyte.com/integrations/destinations/bigquery + supportsDbt: true +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-cassandra/metadata.yaml b/airbyte-integrations/connectors/destination-cassandra/metadata.yaml new file mode 100644 index 000000000000..465935b67f6d --- /dev/null +++ b/airbyte-integrations/connectors/destination-cassandra/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: database + connectorType: destination + definitionId: 707456df-6f4f-4ced-b5c6-03f73bcad1c5 + dockerImageTag: 0.1.4 + dockerRepository: airbyte/destination-cassandra + githubIssueLabel: destination-cassandra + icon: cassandra.svg + license: MIT + name: Cassandra + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/cassandra +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-clickhouse-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/destination-clickhouse-strict-encrypt/metadata.yaml new file mode 100644 index 000000000000..14d527150d6c --- /dev/null +++ b/airbyte-integrations/connectors/destination-clickhouse-strict-encrypt/metadata.yaml @@ -0,0 +1,23 @@ +data: + catalogs: + cloud: + enabled: false # strict encrypt connectors are deployed to Cloud by their non strict encrypt sibling. + oss: + enabled: false # strict encrypt connectors are not used on OSS. + connectorSubtype: database + connectorType: destination + definitionId: ce0d828e-1dc4-496c-b122-2da42e637e48 + dockerImageTag: 0.2.3 + dockerRepository: airbyte/destination-clickhouse + githubIssueLabel: destination-clickhouse + icon: clickhouse.svg + license: MIT + name: Clickhouse + normalizationConfig: + normalizationIntegrationType: clickhouse + normalizationRepository: airbyte/normalization-clickhouse + normalizationTag: 0.4.0 + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/clickhouse + supportsDbt: false +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-clickhouse/metadata.yaml b/airbyte-integrations/connectors/destination-clickhouse/metadata.yaml new file mode 100644 index 000000000000..fd305e5800e9 --- /dev/null +++ b/airbyte-integrations/connectors/destination-clickhouse/metadata.yaml @@ -0,0 +1,25 @@ +data: + catalogs: + cloud: + dockerImageTag: 0.2.2 + dockerRepository: airbyte/destination-clickhouse-strict-encrypt + enabled: true + oss: + enabled: true + connectorSubtype: database + connectorType: destination + definitionId: ce0d828e-1dc4-496c-b122-2da42e637e48 + dockerImageTag: 0.2.3 + dockerRepository: airbyte/destination-clickhouse + githubIssueLabel: destination-clickhouse + icon: clickhouse.svg + license: MIT + name: Clickhouse + normalizationConfig: + normalizationIntegrationType: clickhouse + normalizationRepository: airbyte/normalization-clickhouse + normalizationTag: 0.4.0 + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/clickhouse + supportsDbt: false +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-convex/metadata.yaml b/airbyte-integrations/connectors/destination-convex/metadata.yaml new file mode 100644 index 000000000000..7eb02e375fbf --- /dev/null +++ b/airbyte-integrations/connectors/destination-convex/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorType: destination + definitionId: 3eb4d99c-11fa-4561-a259-fc88e0c2f8f4 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/destination-convex + githubIssueLabel: destination-convex + icon: convex.svg + license: MIT + name: Convex + releaseStage: alpha + connectorSubtype: api + supportUrl: https://docs.airbyte.io/integrations/destinations/convex +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-csv/metadata.yaml b/airbyte-integrations/connectors/destination-csv/metadata.yaml new file mode 100644 index 000000000000..185773871c0e --- /dev/null +++ b/airbyte-integrations/connectors/destination-csv/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: file + connectorType: destination + definitionId: 8be1cf83-fde1-477f-a4ad-318d23c9f3c6 + dockerImageTag: 1.0.0 + dockerRepository: airbyte/destination-csv + githubIssueLabel: destination-csv + icon: file-csv.svg + license: MIT + name: Local CSV + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/local-csv +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-databend/metadata.yaml b/airbyte-integrations/connectors/destination-databend/metadata.yaml new file mode 100644 index 000000000000..509af549bc18 --- /dev/null +++ b/airbyte-integrations/connectors/destination-databend/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: database + connectorType: destination + definitionId: 302e4d8e-08d3-4098-acd4-ac67ca365b88 + dockerImageTag: 0.1.2 + dockerRepository: airbyte/destination-databend + githubIssueLabel: destination-databend + icon: databend.svg + license: MIT + name: Databend + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/databend +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-databricks/metadata.yaml b/airbyte-integrations/connectors/destination-databricks/metadata.yaml new file mode 100644 index 000000000000..ba0e7b5047c3 --- /dev/null +++ b/airbyte-integrations/connectors/destination-databricks/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: database + connectorType: destination + definitionId: 072d5540-f236-4294-ba7c-ade8fd918496 + dockerImageTag: 1.0.0 + dockerRepository: airbyte/destination-databricks + githubIssueLabel: destination-databricks + icon: databricks.svg + license: MIT + name: Databricks Lakehouse + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/databricks +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-dev-null/metadata.yaml b/airbyte-integrations/connectors/destination-dev-null/metadata.yaml new file mode 100644 index 000000000000..dc1e72e4ea08 --- /dev/null +++ b/airbyte-integrations/connectors/destination-dev-null/metadata.yaml @@ -0,0 +1,17 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: false + connectorSubtype: file + connectorType: destination + definitionId: a7bcc9d8-13b3-4e49-b80d-d020b90045e3 + dockerImageTag: 0.2.7 + dockerRepository: airbyte/destination-dev-null + githubIssueLabel: destination-dev-null + license: MIT + name: End-to-End Testing (/dev/null) + releaseStage: alpha + supportUrl: https://docs.airbyte.io/integrations/destinations/e2e-test +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-doris/metadata.yaml b/airbyte-integrations/connectors/destination-doris/metadata.yaml new file mode 100644 index 000000000000..d581c7e2da1c --- /dev/null +++ b/airbyte-integrations/connectors/destination-doris/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: database + connectorType: destination + definitionId: 05c161bf-ca73-4d48-b524-d392be417002 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/destination-doris + githubIssueLabel: destination-doris + icon: apachedoris.svg + license: MIT + name: Apache Doris + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/doris +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-duckdb/metadata.yaml b/airbyte-integrations/connectors/destination-duckdb/metadata.yaml new file mode 100644 index 000000000000..2289b976da18 --- /dev/null +++ b/airbyte-integrations/connectors/destination-duckdb/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: database + connectorType: destination + definitionId: 94bd199c-2ff0-4aa2-b98e-17f0acb72610 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/destination-duckdb + githubIssueLabel: destination-duckdb + icon: duckdb.svg + license: MIT + name: DuckDB + releaseStage: alpha + supportUrl: https://docs.airbyte.io/integrations/destinations/duckdb +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-dynamodb/metadata.yaml b/airbyte-integrations/connectors/destination-dynamodb/metadata.yaml new file mode 100644 index 000000000000..baaa5c5d5082 --- /dev/null +++ b/airbyte-integrations/connectors/destination-dynamodb/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: database + connectorType: destination + definitionId: 8ccd8909-4e99-4141-b48d-4984b70b2d89 + dockerImageTag: 0.1.7 + dockerRepository: airbyte/destination-dynamodb + githubIssueLabel: destination-dynamodb + icon: dynamodb.svg + license: MIT + name: DynamoDB + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/dynamodb +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-e2e-test/metadata.yaml b/airbyte-integrations/connectors/destination-e2e-test/metadata.yaml new file mode 100644 index 000000000000..3d3f225096b6 --- /dev/null +++ b/airbyte-integrations/connectors/destination-e2e-test/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: unknown + connectorType: destination + definitionId: 2eb65e87-983a-4fd7-b3e3-9d9dc6eb8537 + dockerImageTag: 0.2.4 + dockerRepository: airbyte/destination-e2e-test + githubIssueLabel: destination-e2e-test + icon: airbyte.svg + license: MIT + name: E2E Testing + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/e2e-test +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-elasticsearch-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/destination-elasticsearch-strict-encrypt/metadata.yaml new file mode 100644 index 000000000000..90152b955b30 --- /dev/null +++ b/airbyte-integrations/connectors/destination-elasticsearch-strict-encrypt/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false # strict encrypt connectors are deployed to Cloud by their non strict encrypt sibling. + oss: + enabled: false # strict encrypt connectors are not used on OSS. + connectorSubtype: api + connectorType: destination + definitionId: 68f351a7-2745-4bef-ad7f-996b8e51bb8c + dockerImageTag: 0.1.6 + dockerRepository: airbyte/destination-elasticsearch + githubIssueLabel: destination-elasticsearch + icon: elasticsearch.svg + license: MIT + name: ElasticSearch + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/elasticsearch +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-elasticsearch/metadata.yaml b/airbyte-integrations/connectors/destination-elasticsearch/metadata.yaml new file mode 100644 index 000000000000..a74a64308988 --- /dev/null +++ b/airbyte-integrations/connectors/destination-elasticsearch/metadata.yaml @@ -0,0 +1,19 @@ +data: + catalogs: + cloud: + dockerRepository: airbyte/destination-elasticsearch-strict-encrypt + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: destination + definitionId: 68f351a7-2745-4bef-ad7f-996b8e51bb8c + dockerImageTag: 0.1.6 + dockerRepository: airbyte/destination-elasticsearch + githubIssueLabel: destination-elasticsearch + icon: elasticsearch.svg + license: MIT + name: ElasticSearch + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/elasticsearch +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-exasol/metadata.yaml b/airbyte-integrations/connectors/destination-exasol/metadata.yaml new file mode 100644 index 000000000000..81d576607408 --- /dev/null +++ b/airbyte-integrations/connectors/destination-exasol/metadata.yaml @@ -0,0 +1,17 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: database + connectorType: destination + definitionId: bb6071d9-6f34-4766-bec2-d1d4ed81a653 + dockerImageTag: 0.1.1 + dockerRepository: airbyte/destination-exasol + githubIssueLabel: destination-exasol + license: MIT + name: Exasol + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/exasol +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-firebolt/metadata.yaml b/airbyte-integrations/connectors/destination-firebolt/metadata.yaml new file mode 100644 index 000000000000..17b6e9c35bc4 --- /dev/null +++ b/airbyte-integrations/connectors/destination-firebolt/metadata.yaml @@ -0,0 +1,19 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: database + connectorType: destination + definitionId: 18081484-02a5-4662-8dba-b270b582f321 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/destination-firebolt + githubIssueLabel: destination-firebolt + icon: firebolt.svg + license: MIT + name: Firebolt + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/firebolt + supportsDbt: true +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-firestore/metadata.yaml b/airbyte-integrations/connectors/destination-firestore/metadata.yaml new file mode 100644 index 000000000000..bccad2ba608b --- /dev/null +++ b/airbyte-integrations/connectors/destination-firestore/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: database + connectorType: destination + definitionId: 27dc7500-6d1b-40b1-8b07-e2f2aea3c9f4 + dockerImageTag: 0.1.1 + dockerRepository: airbyte/destination-firestore + githubIssueLabel: destination-firestore + icon: firestore.svg + license: MIT + name: Google Firestore + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/firestore +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-gcs/metadata.yaml b/airbyte-integrations/connectors/destination-gcs/metadata.yaml new file mode 100644 index 000000000000..8228ecc57bce --- /dev/null +++ b/airbyte-integrations/connectors/destination-gcs/metadata.yaml @@ -0,0 +1,24 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: file + connectorType: destination + definitionId: ca8f6566-e555-4b40-943a-545bf123117a + dockerImageTag: 0.2.16 + dockerRepository: airbyte/destination-gcs + githubIssueLabel: destination-gcs + icon: googlecloudstorage.svg + license: MIT + name: Google Cloud Storage (GCS) + releaseStage: beta + resourceRequirements: + jobSpecific: + - jobType: sync + resourceRequirements: + memory_limit: 1Gi + memory_request: 1Gi + supportUrl: https://docs.airbyte.com/integrations/destinations/gcs +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-google-sheets/metadata.yaml b/airbyte-integrations/connectors/destination-google-sheets/metadata.yaml new file mode 100644 index 000000000000..9ba715bc3f0f --- /dev/null +++ b/airbyte-integrations/connectors/destination-google-sheets/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: destination + definitionId: a4cbd2d1-8dbe-4818-b8bc-b90ad782d12a + dockerImageTag: 0.1.2 + dockerRepository: airbyte/destination-google-sheets + githubIssueLabel: destination-google-sheets + icon: google-sheets.svg + license: MIT + name: Google Sheets + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/google-sheets +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-iceberg/metadata.yaml b/airbyte-integrations/connectors/destination-iceberg/metadata.yaml new file mode 100644 index 000000000000..869b34ac4bb2 --- /dev/null +++ b/airbyte-integrations/connectors/destination-iceberg/metadata.yaml @@ -0,0 +1,17 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: database + connectorType: destination + definitionId: df65a8f3-9908-451b-aa9b-445462803560 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/destination-iceberg + githubIssueLabel: destination-iceberg + license: MIT + name: Apache Iceberg + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/iceberg +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-kafka/metadata.yaml b/airbyte-integrations/connectors/destination-kafka/metadata.yaml new file mode 100644 index 000000000000..49182965e1aa --- /dev/null +++ b/airbyte-integrations/connectors/destination-kafka/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: database + connectorType: destination + definitionId: 9f760101-60ae-462f-9ee6-b7a9dafd454d + dockerImageTag: 0.1.10 + dockerRepository: airbyte/destination-kafka + githubIssueLabel: destination-kafka + icon: kafka.svg + license: MIT + name: Kafka + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/kafka +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-keen/metadata.yaml b/airbyte-integrations/connectors/destination-keen/metadata.yaml new file mode 100644 index 000000000000..775e01d78474 --- /dev/null +++ b/airbyte-integrations/connectors/destination-keen/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: destination + definitionId: 81740ce8-d764-4ea7-94df-16bb41de36ae + dockerImageTag: 0.2.4 + dockerRepository: airbyte/destination-keen + githubIssueLabel: destination-keen + icon: chargify.svg + license: MIT + name: Chargify (Keen) + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/keen +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-kinesis/metadata.yaml b/airbyte-integrations/connectors/destination-kinesis/metadata.yaml new file mode 100644 index 000000000000..debba8610a92 --- /dev/null +++ b/airbyte-integrations/connectors/destination-kinesis/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: destination + definitionId: 6d1d66d4-26ab-4602-8d32-f85894b04955 + dockerImageTag: 0.1.5 + dockerRepository: airbyte/destination-kinesis + githubIssueLabel: destination-kinesis + icon: kinesis.svg + license: MIT + name: Kinesis + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/kinesis +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-local-json/metadata.yaml b/airbyte-integrations/connectors/destination-local-json/metadata.yaml new file mode 100644 index 000000000000..5bfa36eeea78 --- /dev/null +++ b/airbyte-integrations/connectors/destination-local-json/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: file + connectorType: destination + definitionId: a625d593-bba5-4a1c-a53d-2d246268a816 + dockerImageTag: 0.2.11 + dockerRepository: airbyte/destination-local-json + githubIssueLabel: destination-local-json + icon: file-json.svg + license: MIT + name: Local JSON + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/local-json +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-mariadb-columnstore/metadata.yaml b/airbyte-integrations/connectors/destination-mariadb-columnstore/metadata.yaml new file mode 100644 index 000000000000..470d6f685004 --- /dev/null +++ b/airbyte-integrations/connectors/destination-mariadb-columnstore/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: database + connectorType: destination + definitionId: 294a4790-429b-40ae-9516-49826b9702e1 + dockerImageTag: 0.1.7 + dockerRepository: airbyte/destination-mariadb-columnstore + githubIssueLabel: destination-mariadb-columnstore + icon: mariadb.svg + license: MIT + name: MariaDB ColumnStore + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/mariadb-columnstore +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-meilisearch/metadata.yaml b/airbyte-integrations/connectors/destination-meilisearch/metadata.yaml new file mode 100644 index 000000000000..156cf2760902 --- /dev/null +++ b/airbyte-integrations/connectors/destination-meilisearch/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: destination + definitionId: af7c921e-5892-4ff2-b6c1-4a5ab258fb7e + dockerImageTag: 1.0.0 + dockerRepository: airbyte/destination-meilisearch + githubIssueLabel: destination-meilisearch + icon: meilisearch.svg + license: MIT + name: MeiliSearch + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/meilisearch +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-mongodb-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/destination-mongodb-strict-encrypt/metadata.yaml new file mode 100644 index 000000000000..f0823a431ae2 --- /dev/null +++ b/airbyte-integrations/connectors/destination-mongodb-strict-encrypt/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false # strict encrypt connectors are deployed to Cloud by their non strict encrypt sibling. + oss: + enabled: false # strict encrypt connectors are not used on OSS. + connectorSubtype: database + connectorType: destination + definitionId: 8b746512-8c2e-6ac1-4adc-b59faafd473c + dockerImageTag: 0.1.9 + dockerRepository: airbyte/destination-mongodb + githubIssueLabel: destination-mongodb + icon: mongodb.svg + license: MIT + name: MongoDB + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/mongodb +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-mongodb/metadata.yaml b/airbyte-integrations/connectors/destination-mongodb/metadata.yaml new file mode 100644 index 000000000000..2b1185c3584c --- /dev/null +++ b/airbyte-integrations/connectors/destination-mongodb/metadata.yaml @@ -0,0 +1,19 @@ +data: + catalogs: + cloud: + dockerRepository: airbyte/destination-mongodb-strict-encrypt + enabled: true + oss: + enabled: true + connectorSubtype: database + connectorType: destination + definitionId: 8b746512-8c2e-6ac1-4adc-b59faafd473c + dockerImageTag: 0.1.9 + dockerRepository: airbyte/destination-mongodb + githubIssueLabel: destination-mongodb + icon: mongodb.svg + license: MIT + name: MongoDB + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/mongodb +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-mqtt/metadata.yaml b/airbyte-integrations/connectors/destination-mqtt/metadata.yaml new file mode 100644 index 000000000000..6b9a840aa846 --- /dev/null +++ b/airbyte-integrations/connectors/destination-mqtt/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: message_queue + connectorType: destination + definitionId: f3802bc4-5406-4752-9e8d-01e504ca8194 + dockerImageTag: 0.1.3 + dockerRepository: airbyte/destination-mqtt + githubIssueLabel: destination-mqtt + icon: mqtt.svg + license: MIT + name: MQTT + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/mqtt +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-mssql-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/destination-mssql-strict-encrypt/metadata.yaml new file mode 100644 index 000000000000..b56cff2d23e9 --- /dev/null +++ b/airbyte-integrations/connectors/destination-mssql-strict-encrypt/metadata.yaml @@ -0,0 +1,23 @@ +data: + catalogs: + cloud: + enabled: false # strict encrypt connectors are deployed to Cloud by their non strict encrypt sibling. + oss: + enabled: false # strict encrypt connectors are not used on OSS. + connectorSubtype: database + connectorType: destination + definitionId: d4353156-9217-4cad-8dd7-c108fd4f74cf + dockerImageTag: 0.1.23 + dockerRepository: airbyte/destination-mssql + githubIssueLabel: destination-mssql + icon: mssql.svg + license: MIT + name: MS SQL Server + normalizationConfig: + normalizationIntegrationType: mssql + normalizationRepository: airbyte/normalization-mssql + normalizationTag: 0.4.0 + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/mssql + supportsDbt: true +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-mssql/metadata.yaml b/airbyte-integrations/connectors/destination-mssql/metadata.yaml new file mode 100644 index 000000000000..45f8e966c040 --- /dev/null +++ b/airbyte-integrations/connectors/destination-mssql/metadata.yaml @@ -0,0 +1,25 @@ +data: + catalogs: + cloud: + dockerImageTag: 0.1.22 + dockerRepository: airbyte/destination-mssql-strict-encrypt + enabled: true + oss: + enabled: true + connectorSubtype: database + connectorType: destination + definitionId: d4353156-9217-4cad-8dd7-c108fd4f74cf + dockerImageTag: 0.1.23 + dockerRepository: airbyte/destination-mssql + githubIssueLabel: destination-mssql + icon: mssql.svg + license: MIT + name: MS SQL Server + normalizationConfig: + normalizationIntegrationType: mssql + normalizationRepository: airbyte/normalization-mssql + normalizationTag: 0.4.0 + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/mssql + supportsDbt: true +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-mysql-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/destination-mysql-strict-encrypt/metadata.yaml new file mode 100644 index 000000000000..2a45708864c6 --- /dev/null +++ b/airbyte-integrations/connectors/destination-mysql-strict-encrypt/metadata.yaml @@ -0,0 +1,23 @@ +data: + catalogs: + cloud: + enabled: false # strict encrypt connectors are deployed to Cloud by their non strict encrypt sibling. + oss: + enabled: false # strict encrypt connectors are not used on OSS. + connectorSubtype: database + connectorType: destination + definitionId: ca81ee7c-3163-4246-af40-094cc31e5e42 + dockerImageTag: 0.1.20 + dockerRepository: airbyte/destination-mysql + githubIssueLabel: destination-mysql + icon: mysql.svg + license: MIT + name: MySQL + normalizationConfig: + normalizationIntegrationType: mysql + normalizationRepository: airbyte/normalization-mysql + normalizationTag: 0.4.0 + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/mysql + supportsDbt: true +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-mysql/metadata.yaml b/airbyte-integrations/connectors/destination-mysql/metadata.yaml new file mode 100644 index 000000000000..5db3442b1dfe --- /dev/null +++ b/airbyte-integrations/connectors/destination-mysql/metadata.yaml @@ -0,0 +1,24 @@ +data: + catalogs: + cloud: + dockerRepository: airbyte/destination-mysql-strict-encrypt + enabled: true + oss: + enabled: true + connectorSubtype: database + connectorType: destination + definitionId: ca81ee7c-3163-4246-af40-094cc31e5e42 + dockerImageTag: 0.1.20 + dockerRepository: airbyte/destination-mysql + githubIssueLabel: destination-mysql + icon: mysql.svg + license: MIT + name: MySQL + normalizationConfig: + normalizationIntegrationType: mysql + normalizationRepository: airbyte/normalization-mysql + normalizationTag: 0.4.0 + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/mysql + supportsDbt: true +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-oracle-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/destination-oracle-strict-encrypt/metadata.yaml new file mode 100644 index 000000000000..b38a2ac6bfcf --- /dev/null +++ b/airbyte-integrations/connectors/destination-oracle-strict-encrypt/metadata.yaml @@ -0,0 +1,23 @@ +data: + catalogs: + cloud: + enabled: false # strict encrypt connectors are deployed to Cloud by their non strict encrypt sibling. + oss: + enabled: false # strict encrypt connectors are not used on OSS. + connectorSubtype: database + connectorType: destination + definitionId: 3986776d-2319-4de9-8af8-db14c0996e72 + dockerImageTag: 0.1.19 + dockerRepository: airbyte/destination-oracle + githubIssueLabel: destination-oracle + icon: oracle.svg + license: MIT + name: Oracle + normalizationConfig: + normalizationIntegrationType: oracle + normalizationRepository: airbyte/normalization-oracle + normalizationTag: 0.4.0 + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/oracle + supportsDbt: true +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-oracle/metadata.yaml b/airbyte-integrations/connectors/destination-oracle/metadata.yaml new file mode 100644 index 000000000000..78532e763208 --- /dev/null +++ b/airbyte-integrations/connectors/destination-oracle/metadata.yaml @@ -0,0 +1,24 @@ +data: + catalogs: + cloud: + dockerRepository: airbyte/destination-oracle-strict-encrypt + enabled: true + oss: + enabled: true + connectorSubtype: database + connectorType: destination + definitionId: 3986776d-2319-4de9-8af8-db14c0996e72 + dockerImageTag: 0.1.19 + dockerRepository: airbyte/destination-oracle + githubIssueLabel: destination-oracle + icon: oracle.svg + license: MIT + name: Oracle + normalizationConfig: + normalizationIntegrationType: oracle + normalizationRepository: airbyte/normalization-oracle + normalizationTag: 0.4.0 + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/oracle + supportsDbt: true +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-postgres-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/destination-postgres-strict-encrypt/metadata.yaml new file mode 100644 index 000000000000..943df18038aa --- /dev/null +++ b/airbyte-integrations/connectors/destination-postgres-strict-encrypt/metadata.yaml @@ -0,0 +1,23 @@ +data: + catalogs: + cloud: + enabled: false # strict encrypt connectors are deployed to Cloud by their non strict encrypt sibling. + oss: + enabled: false # strict encrypt connectors are not used on OSS. + connectorSubtype: database + connectorType: destination + definitionId: 25c5221d-dce2-4163-ade9-739ef790f503 + dockerImageTag: 0.3.27 + dockerRepository: airbyte/destination-postgres + githubIssueLabel: destination-postgres + icon: postgresql.svg + license: MIT + name: Postgres + normalizationConfig: + normalizationIntegrationType: postgres + normalizationRepository: airbyte/normalization + normalizationTag: 0.4.0 + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/postgres + supportsDbt: true +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-postgres/metadata.yaml b/airbyte-integrations/connectors/destination-postgres/metadata.yaml new file mode 100644 index 000000000000..be4270bb56df --- /dev/null +++ b/airbyte-integrations/connectors/destination-postgres/metadata.yaml @@ -0,0 +1,25 @@ +data: + catalogs: + cloud: + dockerImageTag: 0.3.26 + dockerRepository: airbyte/destination-postgres-strict-encrypt + enabled: true + oss: + enabled: true + connectorSubtype: database + connectorType: destination + definitionId: 25c5221d-dce2-4163-ade9-739ef790f503 + dockerImageTag: 0.3.27 + dockerRepository: airbyte/destination-postgres + githubIssueLabel: destination-postgres + icon: postgresql.svg + license: MIT + name: Postgres + normalizationConfig: + normalizationIntegrationType: postgres + normalizationRepository: airbyte/normalization + normalizationTag: 0.4.0 + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/postgres + supportsDbt: true +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-pubsub/metadata.yaml b/airbyte-integrations/connectors/destination-pubsub/metadata.yaml new file mode 100644 index 000000000000..360147f82757 --- /dev/null +++ b/airbyte-integrations/connectors/destination-pubsub/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: destination + definitionId: 356668e2-7e34-47f3-a3b0-67a8a481b692 + dockerImageTag: 0.2.0 + dockerRepository: airbyte/destination-pubsub + githubIssueLabel: destination-pubsub + icon: googlepubsub.svg + license: MIT + name: Google PubSub + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/pubsub +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-pulsar/metadata.yaml b/airbyte-integrations/connectors/destination-pulsar/metadata.yaml new file mode 100644 index 000000000000..41cf809d63cd --- /dev/null +++ b/airbyte-integrations/connectors/destination-pulsar/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: database + connectorType: destination + definitionId: 2340cbba-358e-11ec-8d3d-0242ac130203 + dockerImageTag: 0.1.3 + dockerRepository: airbyte/destination-pulsar + githubIssueLabel: destination-pulsar + icon: pulsar.svg + license: MIT + name: Pulsar + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/pulsar +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-r2/metadata.yaml b/airbyte-integrations/connectors/destination-r2/metadata.yaml new file mode 100644 index 000000000000..8bb5b0f13c00 --- /dev/null +++ b/airbyte-integrations/connectors/destination-r2/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: file + connectorType: destination + definitionId: 0fb07be9-7c3b-4336-850d-5efc006152ee + dockerImageTag: 0.1.0 + dockerRepository: airbyte/destination-r2 + githubIssueLabel: destination-r2 + icon: cloudflare-r2.svg + license: MIT + name: Cloudflare R2 + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/r2 +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-rabbitmq/metadata.yaml b/airbyte-integrations/connectors/destination-rabbitmq/metadata.yaml new file mode 100644 index 000000000000..959e2c744566 --- /dev/null +++ b/airbyte-integrations/connectors/destination-rabbitmq/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: database + connectorType: destination + definitionId: e06ad785-ad6f-4647-b2e8-3027a5c59454 + dockerImageTag: 0.1.1 + dockerRepository: airbyte/destination-rabbitmq + githubIssueLabel: destination-rabbitmq + icon: pulsar.svg + license: MIT + name: RabbitMQ + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/rabbitmq +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-redis/metadata.yaml b/airbyte-integrations/connectors/destination-redis/metadata.yaml new file mode 100644 index 000000000000..2be741a3f9f1 --- /dev/null +++ b/airbyte-integrations/connectors/destination-redis/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: database + connectorType: destination + definitionId: d4d3fef9-e319-45c2-881a-bd02ce44cc9f + dockerImageTag: 0.1.4 + dockerRepository: airbyte/destination-redis + githubIssueLabel: destination-redis + icon: redis.svg + license: MIT + name: Redis + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/redis +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-redpanda/metadata.yaml b/airbyte-integrations/connectors/destination-redpanda/metadata.yaml new file mode 100644 index 000000000000..5b8008c6c8fe --- /dev/null +++ b/airbyte-integrations/connectors/destination-redpanda/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: database + connectorType: destination + definitionId: 825c5ee3-ed9a-4dd1-a2b6-79ed722f7b13 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/destination-redpanda + githubIssueLabel: destination-redpanda + icon: redpanda.svg + license: MIT + name: Redpanda + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/redpanda +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-redshift/metadata.yaml b/airbyte-integrations/connectors/destination-redshift/metadata.yaml new file mode 100644 index 000000000000..97d09a5ae482 --- /dev/null +++ b/airbyte-integrations/connectors/destination-redshift/metadata.yaml @@ -0,0 +1,29 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: database + connectorType: destination + definitionId: f7a7d195-377f-cf5b-70a5-be6b819019dc + dockerImageTag: 0.4.5 + dockerRepository: airbyte/destination-redshift + githubIssueLabel: destination-redshift + icon: redshift.svg + license: MIT + name: Redshift + normalizationConfig: + normalizationIntegrationType: redshift + normalizationRepository: airbyte/normalization-redshift + normalizationTag: 0.4.0 + releaseStage: beta + resourceRequirements: + jobSpecific: + - jobType: sync + resourceRequirements: + memory_limit: 1Gi + memory_request: 1Gi + supportUrl: https://docs.airbyte.com/integrations/destinations/redshift + supportsDbt: true +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-rockset/metadata.yaml b/airbyte-integrations/connectors/destination-rockset/metadata.yaml new file mode 100644 index 000000000000..939a91868af7 --- /dev/null +++ b/airbyte-integrations/connectors/destination-rockset/metadata.yaml @@ -0,0 +1,17 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: database + connectorType: destination + definitionId: 2c9d93a7-9a17-4789-9de9-f46f0097eb70 + dockerImageTag: 0.1.4 + dockerRepository: airbyte/destination-rockset + githubIssueLabel: destination-rockset + license: MIT + name: Rockset + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/rockset +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-s3-glue/metadata.yaml b/airbyte-integrations/connectors/destination-s3-glue/metadata.yaml new file mode 100644 index 000000000000..e3436264d2ef --- /dev/null +++ b/airbyte-integrations/connectors/destination-s3-glue/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: file + connectorType: destination + definitionId: 471e5cab-8ed1-49f3-ba11-79c687784737 + dockerImageTag: 0.1.4 + dockerRepository: airbyte/destination-s3-glue + githubIssueLabel: destination-s3-glue + icon: s3-glue.svg + license: MIT + name: S3 Glue + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/s3-glue +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-s3/metadata.yaml b/airbyte-integrations/connectors/destination-s3/metadata.yaml new file mode 100644 index 000000000000..390c495f2866 --- /dev/null +++ b/airbyte-integrations/connectors/destination-s3/metadata.yaml @@ -0,0 +1,24 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: file + connectorType: destination + definitionId: 4816b78f-1489-44c1-9060-4b19d5fa9362 + dockerImageTag: 0.3.23 + dockerRepository: airbyte/destination-s3 + githubIssueLabel: destination-s3 + icon: s3.svg + license: MIT + name: S3 + releaseStage: generally_available + resourceRequirements: + jobSpecific: + - jobType: sync + resourceRequirements: + memory_limit: 1Gi + memory_request: 1Gi + supportUrl: https://docs.airbyte.com/integrations/destinations/s3 +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-scylla/metadata.yaml b/airbyte-integrations/connectors/destination-scylla/metadata.yaml new file mode 100644 index 000000000000..0bce37d35938 --- /dev/null +++ b/airbyte-integrations/connectors/destination-scylla/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: database + connectorType: destination + definitionId: 3dc6f384-cd6b-4be3-ad16-a41450899bf0 + dockerImageTag: 0.1.3 + dockerRepository: airbyte/destination-scylla + githubIssueLabel: destination-scylla + icon: scylla.svg + license: MIT + name: Scylla + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/scylla +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-selectdb/metadata.yaml b/airbyte-integrations/connectors/destination-selectdb/metadata.yaml new file mode 100644 index 000000000000..f5b59100d316 --- /dev/null +++ b/airbyte-integrations/connectors/destination-selectdb/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorType: destination + definitionId: 50a559a7-6323-4e33-8aa0-51dfd9dfadac + dockerImageTag: 0.1.0 + dockerRepository: airbyte/destination-selectdb + githubIssueLabel: destination-selectdb + icon: select.db + license: MIT + name: SelectDB + connectorSubtype: database + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/selectdb +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-sftp-json/metadata.yaml b/airbyte-integrations/connectors/destination-sftp-json/metadata.yaml new file mode 100644 index 000000000000..878623279ed8 --- /dev/null +++ b/airbyte-integrations/connectors/destination-sftp-json/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: file + connectorType: destination + definitionId: e9810f61-4bab-46d2-bb22-edfc902e0644 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/destination-sftp-json + githubIssueLabel: destination-sftp-json + icon: sftp.svg + license: MIT + name: SFTP-JSON + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/sftp-json +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-snowflake/metadata.yaml b/airbyte-integrations/connectors/destination-snowflake/metadata.yaml new file mode 100644 index 000000000000..d39e4cea4ee9 --- /dev/null +++ b/airbyte-integrations/connectors/destination-snowflake/metadata.yaml @@ -0,0 +1,29 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: database + connectorType: destination + definitionId: 424892c4-daac-4491-b35d-c6688ba547ba + dockerImageTag: 0.4.61 + dockerRepository: airbyte/destination-snowflake + githubIssueLabel: destination-snowflake + icon: snowflake.svg + license: MIT + name: Snowflake + normalizationConfig: + normalizationIntegrationType: snowflake + normalizationRepository: airbyte/normalization-snowflake + normalizationTag: 0.4.0 + releaseStage: generally_available + resourceRequirements: + jobSpecific: + - jobType: sync + resourceRequirements: + memory_limit: 1Gi + memory_request: 1Gi + supportUrl: https://docs.airbyte.com/integrations/destinations/snowflake + supportsDbt: true +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-sqlite/metadata.yaml b/airbyte-integrations/connectors/destination-sqlite/metadata.yaml new file mode 100644 index 000000000000..e3adf17f6294 --- /dev/null +++ b/airbyte-integrations/connectors/destination-sqlite/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: database + connectorType: destination + definitionId: b76be0a6-27dc-4560-95f6-2623da0bd7b6 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/destination-sqlite + githubIssueLabel: destination-sqlite + icon: sqlite.svg + license: MIT + name: Local SQLite + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/local-sqlite +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-teradata/metadata.yaml b/airbyte-integrations/connectors/destination-teradata/metadata.yaml new file mode 100644 index 000000000000..dd3b15d915f2 --- /dev/null +++ b/airbyte-integrations/connectors/destination-teradata/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: database + connectorType: destination + definitionId: 58e6f9da-904e-11ed-a1eb-0242ac120002 + dockerImageTag: 0.1.1 + dockerRepository: airbyte/destination-teradata + githubIssueLabel: destination-teradata + icon: teradata.svg + license: MIT + name: Teradata Vantage + releaseStage: alpha + supportUrl: https://docs.airbyte.io/integrations/destinations/teradata +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-tidb/metadata.yaml b/airbyte-integrations/connectors/destination-tidb/metadata.yaml new file mode 100644 index 000000000000..dbe1e10e9408 --- /dev/null +++ b/airbyte-integrations/connectors/destination-tidb/metadata.yaml @@ -0,0 +1,23 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: database + connectorType: destination + definitionId: 06ec60c7-7468-45c0-91ac-174f6e1a788b + dockerImageTag: 0.1.1 + dockerRepository: airbyte/destination-tidb + githubIssueLabel: destination-tidb + icon: tidb.svg + license: MIT + name: TiDB + normalizationConfig: + normalizationIntegrationType: tidb + normalizationRepository: airbyte/normalization-tidb + normalizationTag: 0.4.0 + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/tidb + supportsDbt: true +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-typesense/metadata.yaml b/airbyte-integrations/connectors/destination-typesense/metadata.yaml new file mode 100644 index 000000000000..abff36cdd3d8 --- /dev/null +++ b/airbyte-integrations/connectors/destination-typesense/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: database + connectorType: destination + definitionId: 36be8dc6-9851-49af-b776-9d4c30e4ab6a + dockerImageTag: 0.1.0 + dockerRepository: airbyte/destination-typesense + githubIssueLabel: destination-typesense + icon: typesense.svg + license: MIT + name: Typesense + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/typesense +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-weaviate/metadata.yaml b/airbyte-integrations/connectors/destination-weaviate/metadata.yaml new file mode 100644 index 000000000000..ee28f185f819 --- /dev/null +++ b/airbyte-integrations/connectors/destination-weaviate/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: database + connectorType: destination + definitionId: 7b7d7a0d-954c-45a0-bcfc-39a634b97736 + dockerImageTag: 0.1.1 + dockerRepository: airbyte/destination-weaviate + githubIssueLabel: destination-weaviate + icon: weaviate.svg + license: MIT + name: Weaviate + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/weaviate +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/destination-yugabytedb/metadata.yaml b/airbyte-integrations/connectors/destination-yugabytedb/metadata.yaml new file mode 100644 index 000000000000..9388db1e6959 --- /dev/null +++ b/airbyte-integrations/connectors/destination-yugabytedb/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: database + connectorType: destination + definitionId: 2300fdcf-a532-419f-9f24-a014336e7966 + dockerImageTag: 0.1.1 + dockerRepository: airbyte/destination-yugabytedb + githubIssueLabel: destination-yugabytedb + icon: yugabytedb.svg + license: MIT + name: YugabyteDB + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/yugabytedb +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-activecampaign/metadata.yaml b/airbyte-integrations/connectors/source-activecampaign/metadata.yaml new file mode 100644 index 000000000000..6d2bdc729bab --- /dev/null +++ b/airbyte-integrations/connectors/source-activecampaign/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 9f32dab3-77cb-45a1-9d33-347aa5fbe363 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-activecampaign + githubIssueLabel: source-activecampaign + icon: activecampaign.svg + license: MIT + name: ActiveCampaign + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/activecampaign +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-adjust/metadata.yaml b/airbyte-integrations/connectors/source-adjust/metadata.yaml new file mode 100644 index 000000000000..d543932dd890 --- /dev/null +++ b/airbyte-integrations/connectors/source-adjust/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: d3b7fa46-111b-419a-998a-d7f046f6d66d + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-adjust + githubIssueLabel: source-adjust + icon: adjust.svg + license: MIT + name: Adjust + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/adjust +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-aha/metadata.yaml b/airbyte-integrations/connectors/source-aha/metadata.yaml new file mode 100644 index 000000000000..928d922f4124 --- /dev/null +++ b/airbyte-integrations/connectors/source-aha/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 81ca39dc-4534-4dd2-b848-b0cfd2c11fce + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-aha + githubIssueLabel: source-aha + icon: aha.svg + license: MIT + name: Aha + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/aha +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-airtable/metadata.yaml b/airbyte-integrations/connectors/source-airtable/metadata.yaml new file mode 100644 index 000000000000..e492275efc46 --- /dev/null +++ b/airbyte-integrations/connectors/source-airtable/metadata.yaml @@ -0,0 +1,22 @@ +data: + allowedHosts: + hosts: + - api.airtable.com + - airtable.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 14c6e7ea-97ed-4f5e-a7b5-25e9a80b8212 + dockerImageTag: 3.0.0 + dockerRepository: airbyte/source-airtable + githubIssueLabel: source-airtable + icon: airtable.svg + license: MIT + name: Airtable + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/airtable +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-alloydb-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/source-alloydb-strict-encrypt/metadata.yaml new file mode 100644 index 000000000000..c7a7c01bb820 --- /dev/null +++ b/airbyte-integrations/connectors/source-alloydb-strict-encrypt/metadata.yaml @@ -0,0 +1,22 @@ +data: + allowedHosts: + hosts: + - ${host} + - ${tunnel_method.tunnel_host} + catalogs: + cloud: + enabled: false # strict encrypt connectors are deployed to Cloud by their non strict encrypt sibling. + oss: + enabled: false # strict encrypt connectors are not used on OSS. + connectorSubtype: database + connectorType: source + definitionId: 1fa90628-2b9e-11ed-a261-0242ac120002 + dockerImageTag: 2.0.17 + dockerRepository: airbyte/source-alloydb + githubIssueLabel: source-alloydb + icon: alloydb.svg + license: MIT + name: AlloyDB for PostgreSQL + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/alloydb +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-alloydb/metadata.yaml b/airbyte-integrations/connectors/source-alloydb/metadata.yaml new file mode 100644 index 000000000000..94b84628612f --- /dev/null +++ b/airbyte-integrations/connectors/source-alloydb/metadata.yaml @@ -0,0 +1,24 @@ +data: + allowedHosts: + hosts: + - ${host} + - ${tunnel_method.tunnel_host} + catalogs: + cloud: + dockerImageTag: 2.0.15 + dockerRepository: airbyte/source-alloydb-strict-encrypt + enabled: true + oss: + enabled: true + connectorSubtype: database + connectorType: source + definitionId: 1fa90628-2b9e-11ed-a261-0242ac120002 + dockerImageTag: 2.0.17 + dockerRepository: airbyte/source-alloydb + githubIssueLabel: source-alloydb + icon: alloydb.svg + license: MIT + name: AlloyDB for PostgreSQL + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/alloydb +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-alpha-vantage/metadata.yaml b/airbyte-integrations/connectors/source-alpha-vantage/metadata.yaml new file mode 100644 index 000000000000..161ce824728b --- /dev/null +++ b/airbyte-integrations/connectors/source-alpha-vantage/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: db385323-9333-4fec-bec3-9e0ca9326c90 + dockerImageTag: 0.1.1 + dockerRepository: airbyte/source-alpha-vantage + githubIssueLabel: source-alpha-vantage + icon: alpha-vantage.svg + license: MIT + name: Alpha Vantage + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/alpha-vantage +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-amazon-ads/metadata.yaml b/airbyte-integrations/connectors/source-amazon-ads/metadata.yaml new file mode 100644 index 000000000000..c90ce9add70b --- /dev/null +++ b/airbyte-integrations/connectors/source-amazon-ads/metadata.yaml @@ -0,0 +1,24 @@ +data: + allowedHosts: + hosts: + - api.amazon.com + - advertising-api.amazon.com + - advertising-api-eu.amazon.com + - advertising-api-fe.amazon.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: c6b0a29e-1da9-4512-9002-7bfd0cba2246 + dockerImageTag: 1.0.2 + dockerRepository: airbyte/source-amazon-ads + githubIssueLabel: source-amazon-ads + icon: amazonads.svg + license: MIT + name: Amazon Ads + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/amazon-ads +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-amazon-seller-partner/metadata.yaml b/airbyte-integrations/connectors/source-amazon-seller-partner/metadata.yaml new file mode 100644 index 000000000000..d36e43e6ec49 --- /dev/null +++ b/airbyte-integrations/connectors/source-amazon-seller-partner/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: e55879a8-0ef8-4557-abcf-ab34c53ec460 + dockerImageTag: 1.0.1 + dockerRepository: airbyte/source-amazon-seller-partner + githubIssueLabel: source-amazon-seller-partner + icon: amazonsellerpartner.svg + license: MIT + name: Amazon Seller Partner + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/amazon-seller-partner +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-amazon-sqs/metadata.yaml b/airbyte-integrations/connectors/source-amazon-sqs/metadata.yaml new file mode 100644 index 000000000000..4a1e5e5df238 --- /dev/null +++ b/airbyte-integrations/connectors/source-amazon-sqs/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 983fd355-6bf3-4709-91b5-37afa391eeb6 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-amazon-sqs + githubIssueLabel: source-amazon-sqs + icon: awssqs.svg + license: MIT + name: Amazon SQS + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/amazon-sqs +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-amplitude/metadata.yaml b/airbyte-integrations/connectors/source-amplitude/metadata.yaml new file mode 100644 index 000000000000..ed09403c2f87 --- /dev/null +++ b/airbyte-integrations/connectors/source-amplitude/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - "*.amplitude.com" + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: fa9f58c6-2d03-4237-aaa4-07d75e0c1396 + dockerImageTag: 0.1.24 + dockerRepository: airbyte/source-amplitude + githubIssueLabel: source-amplitude + icon: amplitude.svg + license: MIT + name: Amplitude + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/amplitude +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-apify-dataset/metadata.yaml b/airbyte-integrations/connectors/source-apify-dataset/metadata.yaml new file mode 100644 index 000000000000..39716a539b05 --- /dev/null +++ b/airbyte-integrations/connectors/source-apify-dataset/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 47f17145-fe20-4ef5-a548-e29b048adf84 + dockerImageTag: 0.1.11 + dockerRepository: airbyte/source-apify-dataset + githubIssueLabel: source-apify-dataset + icon: apify.svg + license: MIT + name: Apify Dataset + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/apify-dataset +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-appfollow/metadata.yaml b/airbyte-integrations/connectors/source-appfollow/metadata.yaml new file mode 100644 index 000000000000..e12b82cafc9d --- /dev/null +++ b/airbyte-integrations/connectors/source-appfollow/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: b4375641-e270-41d3-9c20-4f9cecad87a8 + dockerImageTag: 0.1.1 + dockerRepository: airbyte/source-appfollow + githubIssueLabel: source-appfollow + icon: appfollow.svg + license: MIT + name: Appfollow + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/appfollow +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-appsflyer/metadata.yaml b/airbyte-integrations/connectors/source-appsflyer/metadata.yaml new file mode 100644 index 000000000000..ad9047ae4d25 --- /dev/null +++ b/airbyte-integrations/connectors/source-appsflyer/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 16447954-e6a8-4593-b140-43dea13bc457 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-appsflyer + githubIssueLabel: source-appsflyer + icon: appsflyer.svg + license: MIT + name: AppsFlyer + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/appsflyer +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-appstore-singer/metadata.yaml b/airbyte-integrations/connectors/source-appstore-singer/metadata.yaml new file mode 100644 index 000000000000..e59b502726b6 --- /dev/null +++ b/airbyte-integrations/connectors/source-appstore-singer/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 2af123bf-0aaf-4e0d-9784-cb497f23741a + dockerImageTag: 0.2.6 + dockerRepository: airbyte/source-appstore-singer + githubIssueLabel: source-appstore-singer + icon: appstore.svg + license: MIT + name: Appstore + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/appstore +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-asana/metadata.yaml b/airbyte-integrations/connectors/source-asana/metadata.yaml new file mode 100644 index 000000000000..afa92e85973a --- /dev/null +++ b/airbyte-integrations/connectors/source-asana/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: d0243522-dccf-4978-8ba0-37ed47a0bdbf + dockerImageTag: 0.1.5 + dockerRepository: airbyte/source-asana + githubIssueLabel: source-asana + icon: asana.svg + license: MIT + name: Asana + releaseStage: beta + supportUrl: https://docs.airbyte.com/integrations/sources/asana +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-ashby/metadata.yaml b/airbyte-integrations/connectors/source-ashby/metadata.yaml new file mode 100644 index 000000000000..fbf616af1aad --- /dev/null +++ b/airbyte-integrations/connectors/source-ashby/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 4e8c9fa0-3634-499b-b948-11581b5c3efa + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-ashby + githubIssueLabel: source-ashby + icon: ashby.svg + license: MIT + name: Ashby + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/ashby +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-auth0/metadata.yaml b/airbyte-integrations/connectors/source-auth0/metadata.yaml new file mode 100644 index 000000000000..e9d935bbdb31 --- /dev/null +++ b/airbyte-integrations/connectors/source-auth0/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 6c504e48-14aa-4221-9a72-19cf5ff1ae78 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-auth0 + githubIssueLabel: source-auth0 + icon: auth0.svg + license: MIT + name: Auth0 + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/auth0 +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-aws-cloudtrail/metadata.yaml b/airbyte-integrations/connectors/source-aws-cloudtrail/metadata.yaml new file mode 100644 index 000000000000..99674d87b0c4 --- /dev/null +++ b/airbyte-integrations/connectors/source-aws-cloudtrail/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 6ff047c0-f5d5-4ce5-8c81-204a830fa7e1 + dockerImageTag: 0.1.5 + dockerRepository: airbyte/source-aws-cloudtrail + githubIssueLabel: source-aws-cloudtrail + icon: awscloudtrail.svg + license: MIT + name: AWS CloudTrail + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/aws-cloudtrail +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-azure-blob-storage/metadata.yaml b/airbyte-integrations/connectors/source-azure-blob-storage/metadata.yaml new file mode 100644 index 000000000000..d452be854424 --- /dev/null +++ b/airbyte-integrations/connectors/source-azure-blob-storage/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: file + connectorType: source + definitionId: fdaaba68-4875-4ed9-8fcd-4ae1e0a25093 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-azure-blob-storage + githubIssueLabel: source-azure-blob-storage + icon: azureblobstorage.svg + license: MIT + name: Azure Blob Storage + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/azure-blob-storage +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-azure-table/metadata.yaml b/airbyte-integrations/connectors/source-azure-table/metadata.yaml new file mode 100644 index 000000000000..fe9fa9bcf8ff --- /dev/null +++ b/airbyte-integrations/connectors/source-azure-table/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: database + connectorType: source + definitionId: 798ae795-5189-42b6-b64e-3cb91db93338 + dockerImageTag: 0.1.3 + dockerRepository: airbyte/source-azure-table + githubIssueLabel: source-azure-table + icon: azureblobstorage.svg + license: MIT + name: Azure Table Storage + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/azure-table +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-babelforce/metadata.yaml b/airbyte-integrations/connectors/source-babelforce/metadata.yaml new file mode 100644 index 000000000000..0c90c26ac1cb --- /dev/null +++ b/airbyte-integrations/connectors/source-babelforce/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 971c3e1e-78a5-411e-ad56-c4052b50876b + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-babelforce + githubIssueLabel: source-babelforce + icon: babelforce.svg + license: MIT + name: Babelforce + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/babelforce +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-bamboo-hr/metadata.yaml b/airbyte-integrations/connectors/source-bamboo-hr/metadata.yaml new file mode 100644 index 000000000000..77d589afd7b6 --- /dev/null +++ b/airbyte-integrations/connectors/source-bamboo-hr/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 90916976-a132-4ce9-8bce-82a03dd58788 + dockerImageTag: 0.2.2 + dockerRepository: airbyte/source-bamboo-hr + githubIssueLabel: source-bamboo-hr + icon: bamboohr.svg + license: MIT + name: BambooHR + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/bamboo-hr +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-bigcommerce/metadata.yaml b/airbyte-integrations/connectors/source-bigcommerce/metadata.yaml new file mode 100644 index 000000000000..b5c214cc87a9 --- /dev/null +++ b/airbyte-integrations/connectors/source-bigcommerce/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 59c5501b-9f95-411e-9269-7143c939adbd + dockerImageTag: 0.1.10 + dockerRepository: airbyte/source-bigcommerce + githubIssueLabel: source-bigcommerce + icon: bigcommerce.svg + license: MIT + name: BigCommerce + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/bigcommerce +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-bigquery/metadata.yaml b/airbyte-integrations/connectors/source-bigquery/metadata.yaml new file mode 100644 index 000000000000..3e3ee88e1037 --- /dev/null +++ b/airbyte-integrations/connectors/source-bigquery/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: database + connectorType: source + definitionId: bfd1ddf8-ae8a-4620-b1d7-55597d2ba08c + dockerImageTag: 0.2.3 + dockerRepository: airbyte/source-bigquery + githubIssueLabel: source-bigquery + icon: bigquery.svg + license: MIT + name: BigQuery + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/bigquery +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-bing-ads/metadata.yaml b/airbyte-integrations/connectors/source-bing-ads/metadata.yaml new file mode 100644 index 000000000000..3127634d0c3f --- /dev/null +++ b/airbyte-integrations/connectors/source-bing-ads/metadata.yaml @@ -0,0 +1,26 @@ +data: + allowedHosts: + hosts: + - bingads.microsoft.com + - login.microsoftonline.com + - login.live.com + - login.windows-ppe.net + - ads.microsoft.com + - api.ads.microsoft.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 47f25999-dd5e-4636-8c39-e7cea2453331 + dockerImageTag: 0.1.18 + dockerRepository: airbyte/source-bing-ads + githubIssueLabel: source-bing-ads + icon: bingads.svg + license: MIT + name: Bing Ads + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/bing-ads +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-braintree/metadata.yaml b/airbyte-integrations/connectors/source-braintree/metadata.yaml new file mode 100644 index 000000000000..18c51b884a2d --- /dev/null +++ b/airbyte-integrations/connectors/source-braintree/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 63cea06f-1c75-458d-88fe-ad48c7cb27fd + dockerImageTag: 0.1.4 + dockerRepository: airbyte/source-braintree + githubIssueLabel: source-braintree + icon: braintree.svg + license: MIT + name: Braintree + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/braintree +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-braze/metadata.yaml b/airbyte-integrations/connectors/source-braze/metadata.yaml new file mode 100644 index 000000000000..fd6407dce4e8 --- /dev/null +++ b/airbyte-integrations/connectors/source-braze/metadata.yaml @@ -0,0 +1,17 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 68b9c98e-0747-4c84-b05b-d30b47686725 + dockerImageTag: 0.1.3 + dockerRepository: airbyte/source-braze + githubIssueLabel: source-braze + license: MIT + name: Braze + releaseStage: alpha + supportUrl: https://docs.airbyte.io/integrations/sources/braze +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-breezometer/metadata.yaml b/airbyte-integrations/connectors/source-breezometer/metadata.yaml new file mode 100644 index 000000000000..9e8cedae3c25 --- /dev/null +++ b/airbyte-integrations/connectors/source-breezometer/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 7c37685e-8512-4901-addf-9afbef6c0de9 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-breezometer + githubIssueLabel: source-breezometer + icon: breezometer.svg + license: MIT + name: Breezometer + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/breezometer +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-callrail/metadata.yaml b/airbyte-integrations/connectors/source-callrail/metadata.yaml new file mode 100644 index 000000000000..cbd72e3a6e5f --- /dev/null +++ b/airbyte-integrations/connectors/source-callrail/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: dc98a6ad-2dd1-47b6-9529-2ec35820f9c6 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-callrail + githubIssueLabel: source-callrail + icon: callrail.svg + license: MIT + name: CallRail + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/callrail +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-cart/metadata.yaml b/airbyte-integrations/connectors/source-cart/metadata.yaml new file mode 100644 index 000000000000..cb472c5b74d4 --- /dev/null +++ b/airbyte-integrations/connectors/source-cart/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: bb1a6d31-6879-4819-a2bd-3eed299ea8e2 + dockerImageTag: 0.2.1 + dockerRepository: airbyte/source-cart + githubIssueLabel: source-cart + icon: cart.svg + license: MIT + name: Cart.com + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/cart +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-chargebee/metadata.yaml b/airbyte-integrations/connectors/source-chargebee/metadata.yaml new file mode 100644 index 000000000000..b20c655e5ebe --- /dev/null +++ b/airbyte-integrations/connectors/source-chargebee/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - "*.chargebee.com" + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 686473f1-76d9-4994-9cc7-9b13da46147c + dockerImageTag: 0.2.3 + dockerRepository: airbyte/source-chargebee + githubIssueLabel: source-chargebee + icon: chargebee.svg + license: MIT + name: Chargebee + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/chargebee +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-chargify/metadata.yaml b/airbyte-integrations/connectors/source-chargify/metadata.yaml new file mode 100644 index 000000000000..b1a460572d3d --- /dev/null +++ b/airbyte-integrations/connectors/source-chargify/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 9b2d3607-7222-4709-9fa2-c2abdebbdd88 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-chargify + githubIssueLabel: source-chargify + icon: chargify.svg + license: MIT + name: Chargify + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/chargify +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-chartmogul/metadata.yaml b/airbyte-integrations/connectors/source-chartmogul/metadata.yaml new file mode 100644 index 000000000000..a961f5605102 --- /dev/null +++ b/airbyte-integrations/connectors/source-chartmogul/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - api.chartmogul.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: b6604cbd-1b12-4c08-8767-e140d0fb0877 + dockerImageTag: 0.2.1 + dockerRepository: airbyte/source-chartmogul + githubIssueLabel: source-chartmogul + icon: chartmogul.svg + license: MIT + name: Chartmogul + releaseStage: beta + supportUrl: https://docs.airbyte.com/integrations/sources/chartmogul +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-clickhouse-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/source-clickhouse-strict-encrypt/metadata.yaml new file mode 100644 index 000000000000..881c0c062897 --- /dev/null +++ b/airbyte-integrations/connectors/source-clickhouse-strict-encrypt/metadata.yaml @@ -0,0 +1,22 @@ +data: + allowedHosts: + hosts: + - ${host} + - ${tunnel_method.tunnel_host} + catalogs: + cloud: + enabled: false # strict encrypt connectors are deployed to Cloud by their non strict encrypt sibling. + oss: + enabled: false # strict encrypt connectors are not used on OSS. + connectorSubtype: database + connectorType: source + definitionId: bad83517-5e54-4a3d-9b53-63e85fbd4d7c + dockerImageTag: 0.1.17 + dockerRepository: airbyte/source-clickhouse + githubIssueLabel: source-clickhouse + icon: clickhouse.svg + license: MIT + name: ClickHouse + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/clickhouse +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-clickhouse/metadata.yaml b/airbyte-integrations/connectors/source-clickhouse/metadata.yaml new file mode 100644 index 000000000000..b0c7b1ebe372 --- /dev/null +++ b/airbyte-integrations/connectors/source-clickhouse/metadata.yaml @@ -0,0 +1,24 @@ +data: + allowedHosts: + hosts: + - ${host} + - ${tunnel_method.tunnel_host} + catalogs: + cloud: + dockerImageTag: 0.1.8 + dockerRepository: airbyte/source-clickhouse-strict-encrypt + enabled: true + oss: + enabled: true + connectorSubtype: database + connectorType: source + definitionId: bad83517-5e54-4a3d-9b53-63e85fbd4d7c + dockerImageTag: 0.1.17 + dockerRepository: airbyte/source-clickhouse + githubIssueLabel: source-clickhouse + icon: clickhouse.svg + license: MIT + name: ClickHouse + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/clickhouse +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-clickup-api/metadata.yaml b/airbyte-integrations/connectors/source-clickup-api/metadata.yaml new file mode 100644 index 000000000000..86256039e29b --- /dev/null +++ b/airbyte-integrations/connectors/source-clickup-api/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 311a7a27-3fb5-4f7e-8265-5e4afe258b66 + dockerImageTag: 0.1.1 + dockerRepository: airbyte/source-clickup-api + githubIssueLabel: source-clickup-api + icon: clickup.svg + license: MIT + name: ClickUp + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/click-up +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-clockify/metadata.yaml b/airbyte-integrations/connectors/source-clockify/metadata.yaml new file mode 100644 index 000000000000..e8fd0b3cd56c --- /dev/null +++ b/airbyte-integrations/connectors/source-clockify/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: e71aae8a-5143-11ed-bdc3-0242ac120002 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-clockify + githubIssueLabel: source-clockify + icon: clockify.svg + license: MIT + name: Clockify + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/clockify +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-close-com/metadata.yaml b/airbyte-integrations/connectors/source-close-com/metadata.yaml new file mode 100644 index 000000000000..ef7a9c40e748 --- /dev/null +++ b/airbyte-integrations/connectors/source-close-com/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - api.close.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: dfffecb7-9a13-43e9-acdc-b92af7997ca9 + dockerImageTag: 0.2.1 + dockerRepository: airbyte/source-close-com + githubIssueLabel: source-close-com + icon: close.svg + license: MIT + name: Close.com + releaseStage: beta + supportUrl: https://docs.airbyte.com/integrations/sources/close-com +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-cockroachdb-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/source-cockroachdb-strict-encrypt/metadata.yaml new file mode 100644 index 000000000000..88485fbc7bc6 --- /dev/null +++ b/airbyte-integrations/connectors/source-cockroachdb-strict-encrypt/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - ${host} + catalogs: + cloud: + enabled: false # strict encrypt connectors are deployed to Cloud by their non strict encrypt sibling. + oss: + enabled: false # strict encrypt connectors are not used on OSS. + connectorSubtype: database + connectorType: source + definitionId: 9fa5862c-da7c-11eb-8d19-0242ac130003 + dockerImageTag: 0.1.22 + dockerRepository: airbyte/source-cockroachdb + githubIssueLabel: source-cockroachdb + icon: cockroachdb.svg + license: MIT + name: Cockroachdb + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/cockroachdb +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-cockroachdb/metadata.yaml b/airbyte-integrations/connectors/source-cockroachdb/metadata.yaml new file mode 100644 index 000000000000..dbbe2ab3d3f7 --- /dev/null +++ b/airbyte-integrations/connectors/source-cockroachdb/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - ${host} + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: database + connectorType: source + definitionId: 9fa5862c-da7c-11eb-8d19-0242ac130003 + dockerImageTag: 0.1.22 + dockerRepository: airbyte/source-cockroachdb + githubIssueLabel: source-cockroachdb + icon: cockroachdb.svg + license: MIT + name: Cockroachdb + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/cockroachdb +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-coda/metadata.yaml b/airbyte-integrations/connectors/source-coda/metadata.yaml new file mode 100644 index 000000000000..5a9656d9f3d5 --- /dev/null +++ b/airbyte-integrations/connectors/source-coda/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 27f910fd-f832-4b2e-bcfd-6ab342e434d8 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-coda + githubIssueLabel: source-coda + icon: coda.svg + license: MIT + name: Coda + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/coda +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-coin-api/metadata.yaml b/airbyte-integrations/connectors/source-coin-api/metadata.yaml new file mode 100644 index 000000000000..f5aec07ba8ae --- /dev/null +++ b/airbyte-integrations/connectors/source-coin-api/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 919984ef-53a2-479b-8ffe-9c1ddb9fc3f3 + dockerImageTag: 0.1.1 + dockerRepository: airbyte/source-coin-api + githubIssueLabel: source-coin-api + icon: coinapi.svg + license: MIT + name: Coin API + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/coin-api +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-coingecko-coins/metadata.yaml b/airbyte-integrations/connectors/source-coingecko-coins/metadata.yaml new file mode 100644 index 000000000000..92a500e0db1b --- /dev/null +++ b/airbyte-integrations/connectors/source-coingecko-coins/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 9cdd4183-d0ba-40c3-aad3-6f46d4103974 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-coingecko-coins + githubIssueLabel: source-coingecko-coins + icon: coingeckocoins.svg + license: MIT + name: CoinGecko Coins + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/coingecko-coins +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-coinmarketcap/metadata.yaml b/airbyte-integrations/connectors/source-coinmarketcap/metadata.yaml new file mode 100644 index 000000000000..03c67c42a1b8 --- /dev/null +++ b/airbyte-integrations/connectors/source-coinmarketcap/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 239463f5-64bb-4d88-b4bd-18ce673fd572 + dockerImageTag: 0.1.1 + dockerRepository: airbyte/source-coinmarketcap + githubIssueLabel: source-coinmarketcap + icon: coinmarketcap.svg + license: MIT + name: CoinMarketCap + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/coinmarketcap +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-commcare/metadata.yaml b/airbyte-integrations/connectors/source-commcare/metadata.yaml new file mode 100644 index 000000000000..babd3625d2ac --- /dev/null +++ b/airbyte-integrations/connectors/source-commcare/metadata.yaml @@ -0,0 +1,17 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: f39208dc-7e1c-48b8-919b-5006360cc27f + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-commcare + githubIssueLabel: source-commcare + license: MIT + name: Commcare + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/commcare +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-commercetools/metadata.yaml b/airbyte-integrations/connectors/source-commercetools/metadata.yaml new file mode 100644 index 000000000000..7349c00efeac --- /dev/null +++ b/airbyte-integrations/connectors/source-commercetools/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 008b2e26-11a3-11ec-82a8-0242ac130003 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-commercetools + githubIssueLabel: source-commercetools + icon: commercetools.svg + license: MIT + name: Commercetools + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/commercetools +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-configcat/metadata.yaml b/airbyte-integrations/connectors/source-configcat/metadata.yaml new file mode 100644 index 000000000000..ae6fc918433f --- /dev/null +++ b/airbyte-integrations/connectors/source-configcat/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 4fd7565c-8b99-439b-80d0-2d965e1d958c + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-configcat + githubIssueLabel: source-configcat + icon: configcat.svg + license: MIT + name: ConfigCat + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/configcat +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-confluence/metadata.yaml b/airbyte-integrations/connectors/source-confluence/metadata.yaml new file mode 100644 index 000000000000..2c422134d8fe --- /dev/null +++ b/airbyte-integrations/connectors/source-confluence/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - ${subdomain}.atlassian.net + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: cf40a7f8-71f8-45ce-a7fa-fca053e4028c + dockerImageTag: 0.1.3 + dockerRepository: airbyte/source-confluence + githubIssueLabel: source-confluence + icon: confluence.svg + license: MIT + name: Confluence + releaseStage: beta + supportUrl: https://docs.airbyte.com/integrations/sources/confluence +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-convertkit/metadata.yaml b/airbyte-integrations/connectors/source-convertkit/metadata.yaml new file mode 100644 index 000000000000..2840b889195e --- /dev/null +++ b/airbyte-integrations/connectors/source-convertkit/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: be9ee02f-6efe-4970-979b-95f797a37188 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-convertkit + githubIssueLabel: source-convertkit + icon: convertkit.svg + license: MIT + name: ConvertKit + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/convertkit +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-convex/metadata.yaml b/airbyte-integrations/connectors/source-convex/metadata.yaml new file mode 100644 index 000000000000..550645536210 --- /dev/null +++ b/airbyte-integrations/connectors/source-convex/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: c332628c-f55c-4017-8222-378cfafda9b2 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-convex + githubIssueLabel: source-convex + icon: convex.svg + license: MIT + name: Convex + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/convex +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-copper/metadata.yaml b/airbyte-integrations/connectors/source-copper/metadata.yaml new file mode 100644 index 000000000000..d4ca088a98b8 --- /dev/null +++ b/airbyte-integrations/connectors/source-copper/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 44f3002f-2df9-4f6d-b21c-02cd3b47d0dc + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-copper + githubIssueLabel: source-copper + icon: copper.svg + license: MIT + name: Copper + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/copper +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-courier/metadata.yaml b/airbyte-integrations/connectors/source-courier/metadata.yaml new file mode 100644 index 000000000000..f72d847b17ae --- /dev/null +++ b/airbyte-integrations/connectors/source-courier/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 0541b2cd-2367-4986-b5f1-b79ff55439e4 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-courier + githubIssueLabel: source-courier + icon: courier.svg + license: MIT + name: Courier + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/courier +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-datadog/metadata.yaml b/airbyte-integrations/connectors/source-datadog/metadata.yaml new file mode 100644 index 000000000000..4b20b83fe2e8 --- /dev/null +++ b/airbyte-integrations/connectors/source-datadog/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 1cfc30c7-82db-43f4-9fd7-ac1b42312cda + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-datadog + githubIssueLabel: source-datadog + icon: datadog.svg + license: MIT + name: Datadog + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/datadog +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-datascope/metadata.yaml b/airbyte-integrations/connectors/source-datascope/metadata.yaml new file mode 100644 index 000000000000..a7239b484277 --- /dev/null +++ b/airbyte-integrations/connectors/source-datascope/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 8e1ae2d2-4790-44d3-9d83-75b3fc3940ff + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-datascope + githubIssueLabel: source-datascope + icon: datascope.svg + license: MIT + name: Datascope + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/datascope +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-db2/metadata.yaml b/airbyte-integrations/connectors/source-db2/metadata.yaml new file mode 100644 index 000000000000..30b853e455d3 --- /dev/null +++ b/airbyte-integrations/connectors/source-db2/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - ${host} + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: database + connectorType: source + definitionId: 447e0381-3780-4b46-bb62-00a4e3c8b8e2 + dockerImageTag: 0.1.19 + dockerRepository: airbyte/source-db2 + githubIssueLabel: source-db2 + icon: db2.svg + license: MIT + name: IBM Db2 + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/db2 +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-delighted/metadata.yaml b/airbyte-integrations/connectors/source-delighted/metadata.yaml new file mode 100644 index 000000000000..0de5c61db1ec --- /dev/null +++ b/airbyte-integrations/connectors/source-delighted/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - api.delighted.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: cc88c43f-6f53-4e8a-8c4d-b284baaf9635 + dockerImageTag: 0.2.2 + dockerRepository: airbyte/source-delighted + githubIssueLabel: source-delighted + icon: delighted.svg + license: MIT + name: Delighted + releaseStage: beta + supportUrl: https://docs.airbyte.com/integrations/sources/delighted +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-dixa/metadata.yaml b/airbyte-integrations/connectors/source-dixa/metadata.yaml new file mode 100644 index 000000000000..703b414b424b --- /dev/null +++ b/airbyte-integrations/connectors/source-dixa/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 0b5c867e-1b12-4d02-ab74-97b2184ff6d7 + dockerImageTag: 0.1.3 + dockerRepository: airbyte/source-dixa + githubIssueLabel: source-dixa + icon: dixa.svg + license: MIT + name: Dixa + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/dixa +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-dockerhub/metadata.yaml b/airbyte-integrations/connectors/source-dockerhub/metadata.yaml new file mode 100644 index 000000000000..2ac5f1d80d84 --- /dev/null +++ b/airbyte-integrations/connectors/source-dockerhub/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 72d405a3-56d8-499f-a571-667c03406e43 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-dockerhub + githubIssueLabel: source-dockerhub + icon: dockerhub.svg + license: MIT + name: Dockerhub + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/dockerhub +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-dremio/metadata.yaml b/airbyte-integrations/connectors/source-dremio/metadata.yaml new file mode 100644 index 000000000000..b8818ef39e0c --- /dev/null +++ b/airbyte-integrations/connectors/source-dremio/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: d99e9ace-8621-46c2-9144-76ae4751d64b + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-dremio + githubIssueLabel: source-dremio + icon: dremio.svg + license: MIT + name: Dremio + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/dremio +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-drift/metadata.yaml b/airbyte-integrations/connectors/source-drift/metadata.yaml new file mode 100644 index 000000000000..a84fbd4eeb30 --- /dev/null +++ b/airbyte-integrations/connectors/source-drift/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - driftapi.com + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 445831eb-78db-4b1f-8f1f-0d96ad8739e2 + dockerImageTag: 0.2.6 + dockerRepository: airbyte/source-drift + githubIssueLabel: source-drift + icon: drift.svg + license: MIT + name: Drift + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/drift +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-dv-360/metadata.yaml b/airbyte-integrations/connectors/source-dv-360/metadata.yaml new file mode 100644 index 000000000000..1e67a9ea992a --- /dev/null +++ b/airbyte-integrations/connectors/source-dv-360/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 1356e1d9-977f-4057-ad4b-65f25329cf61 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-dv-360 + githubIssueLabel: source-dv-360 + icon: dv360.svg + license: MIT + name: DV 360 + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/dv-360 +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-dynamodb/metadata.yaml b/airbyte-integrations/connectors/source-dynamodb/metadata.yaml new file mode 100644 index 000000000000..33f5221367cf --- /dev/null +++ b/airbyte-integrations/connectors/source-dynamodb/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 50401137-8871-4c5a-abb7-1f5fda35545a + dockerImageTag: 0.1.2 + dockerRepository: airbyte/source-dynamodb + githubIssueLabel: source-dynamodb + icon: dynamodb.svg + license: MIT + name: DynamoDB + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/dynamodb +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-e2e-test-cloud/metadata.yaml b/airbyte-integrations/connectors/source-e2e-test-cloud/metadata.yaml new file mode 100644 index 000000000000..8a9d69f285ec --- /dev/null +++ b/airbyte-integrations/connectors/source-e2e-test-cloud/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: false + connectorSubtype: api + connectorType: source + definitionId: 50bd8338-7c4e-46f1-8c7f-3ef95de19fdd + dockerImageTag: 2.1.0 + dockerRepository: airbyte/source-e2e-test-cloud + githubIssueLabel: source-e2e-test-cloud + icon: airbyte.svg + license: MIT + name: End-to-End Testing (Mock API) + releaseStage: alpha + supportUrl: https://docs.airbyte.io/integrations/sources/e2e-test +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-e2e-test/metadata.yaml b/airbyte-integrations/connectors/source-e2e-test/metadata.yaml new file mode 100644 index 000000000000..0ca944ee49f9 --- /dev/null +++ b/airbyte-integrations/connectors/source-e2e-test/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: d53f9084-fa6b-4a5a-976c-5b8392f4ad8a + dockerImageTag: 2.1.4 + dockerRepository: airbyte/source-e2e-test + githubIssueLabel: source-e2e-test + icon: airbyte.svg + license: MIT + name: E2E Testing + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/e2e-test +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-elasticsearch/metadata.yaml b/airbyte-integrations/connectors/source-elasticsearch/metadata.yaml new file mode 100644 index 000000000000..977cf1d79f73 --- /dev/null +++ b/airbyte-integrations/connectors/source-elasticsearch/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 7cf88806-25f5-4e1a-b422-b2fa9e1b0090 + dockerImageTag: 0.1.1 + dockerRepository: airbyte/source-elasticsearch + githubIssueLabel: source-elasticsearch + icon: elasticsearch.svg + license: MIT + name: Elasticsearch + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/elasticsearch +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-emailoctopus/metadata.yaml b/airbyte-integrations/connectors/source-emailoctopus/metadata.yaml new file mode 100644 index 000000000000..cbef6b86c892 --- /dev/null +++ b/airbyte-integrations/connectors/source-emailoctopus/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 46b25e70-c980-4590-a811-8deaf50ee09f + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-emailoctopus + githubIssueLabel: source-emailoctopus + icon: emailoctopus.svg + license: MIT + name: EmailOctopus + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/emailoctopus +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-everhour/metadata.yaml b/airbyte-integrations/connectors/source-everhour/metadata.yaml new file mode 100644 index 000000000000..69c699d4aa5f --- /dev/null +++ b/airbyte-integrations/connectors/source-everhour/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - api.everhour.com + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 6babfc42-c734-4ef6-a817-6eca15f0f9b7 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-everhour + githubIssueLabel: source-everhour + icon: everhour.svg + license: MIT + name: Everhour + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/everhour +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-exchange-rates/metadata.yaml b/airbyte-integrations/connectors/source-exchange-rates/metadata.yaml new file mode 100644 index 000000000000..3ab578d814b6 --- /dev/null +++ b/airbyte-integrations/connectors/source-exchange-rates/metadata.yaml @@ -0,0 +1,22 @@ +data: + allowedHosts: + hosts: + - ${subdomain}.apilayer.com + - apilayer.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: e2b40e36-aa0e-4bed-b41b-bcea6fa348b1 + dockerImageTag: 1.2.8 + dockerRepository: airbyte/source-exchange-rates + githubIssueLabel: source-exchange-rates + icon: exchangeratesapi.svg + license: MIT + name: Exchange Rates Api + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/exchangeratesapi +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-facebook-marketing/metadata.yaml b/airbyte-integrations/connectors/source-facebook-marketing/metadata.yaml new file mode 100644 index 000000000000..f75f3afee653 --- /dev/null +++ b/airbyte-integrations/connectors/source-facebook-marketing/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - graph.facebook.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: e7778cfc-e97c-4458-9ecb-b4f2bba8946c + dockerImageTag: 0.3.1 + dockerRepository: airbyte/source-facebook-marketing + githubIssueLabel: source-facebook-marketing + icon: facebook.svg + license: MIT + name: Facebook Marketing + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/facebook-marketing +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-facebook-pages/metadata.yaml b/airbyte-integrations/connectors/source-facebook-pages/metadata.yaml new file mode 100644 index 000000000000..f853a76d98a1 --- /dev/null +++ b/airbyte-integrations/connectors/source-facebook-pages/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - graph.facebook.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 010eb12f-837b-4685-892d-0a39f76a98f5 + dockerImageTag: 0.2.3 + dockerRepository: airbyte/source-facebook-pages + githubIssueLabel: source-facebook-pages + icon: facebook.svg + license: MIT + name: Facebook Pages + releaseStage: beta + supportUrl: https://docs.airbyte.com/integrations/sources/facebook-pages +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-faker/metadata.yaml b/airbyte-integrations/connectors/source-faker/metadata.yaml new file mode 100644 index 000000000000..38d4355fe5a6 --- /dev/null +++ b/airbyte-integrations/connectors/source-faker/metadata.yaml @@ -0,0 +1,31 @@ +data: + allowedHosts: + hosts: [] + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: dfd88b22-b603-4c3d-aad7-3701784586b1 + dockerImageTag: 2.0.3 + dockerRepository: airbyte/source-faker + githubIssueLabel: source-faker + icon: faker.svg + license: MIT + name: Sample Data (Faker) + releaseStage: beta + resourceRequirements: + jobSpecific: + - jobType: sync + resourceRequirements: + cpu_limit: "4.0" + cpu_request: "1.0" + suggestedStreams: + streams: + - users + - products + - purchases + supportUrl: https://docs.airbyte.com/integrations/sources/faker +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-fastbill/metadata.yaml b/airbyte-integrations/connectors/source-fastbill/metadata.yaml new file mode 100644 index 000000000000..af979546cfa0 --- /dev/null +++ b/airbyte-integrations/connectors/source-fastbill/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: eb3e9c1c-0467-4eb7-a172-5265e04ccd0a + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-fastbill + githubIssueLabel: source-fastbill + icon: fastbill.svg + license: MIT + name: Fastbill + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/fastbill +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-fauna/metadata.yaml b/airbyte-integrations/connectors/source-fauna/metadata.yaml new file mode 100644 index 000000000000..e14e58829b26 --- /dev/null +++ b/airbyte-integrations/connectors/source-fauna/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: database + connectorType: source + definitionId: 3825db3e-c94b-42ac-bd53-b5a9507ace2b + dockerImageTag: 0.1.1 + dockerRepository: airbyte/source-fauna + githubIssueLabel: source-fauna + icon: fauna.svg + license: MIT + name: Fauna + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/fauna +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-file/metadata.yaml b/airbyte-integrations/connectors/source-file/metadata.yaml new file mode 100644 index 000000000000..fb09259a9e9b --- /dev/null +++ b/airbyte-integrations/connectors/source-file/metadata.yaml @@ -0,0 +1,22 @@ +data: + allowedHosts: + hosts: + - "*" + catalogs: + cloud: + dockerRepository: airbyte/source-file-secure + enabled: true + oss: + enabled: true + connectorSubtype: file + connectorType: source + definitionId: 778daa7c-feaf-4db6-96f3-70fd645acc77 + dockerImageTag: 0.2.36 + dockerRepository: airbyte/source-file + githubIssueLabel: source-file + icon: file.svg + license: MIT + name: File (CSV, JSON, Excel, Feather, Parquet) + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/file +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-firebase-realtime-database/metadata.yaml b/airbyte-integrations/connectors/source-firebase-realtime-database/metadata.yaml new file mode 100644 index 000000000000..24f7f9d1b303 --- /dev/null +++ b/airbyte-integrations/connectors/source-firebase-realtime-database/metadata.yaml @@ -0,0 +1,20 @@ +data: + allowedHosts: + hosts: + - "*" + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: database + connectorType: source + definitionId: acb5f973-a565-441e-992f-4946f3e65662 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-firebase-realtime-database + githubIssueLabel: source-firebase-realtime-database + license: MIT + name: Firebase Realtime Database + releaseStage: alpha + supportUrl: https://docs.airbyte.io/integrations/sources/firebase-realtime-database +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-firebolt/metadata.yaml b/airbyte-integrations/connectors/source-firebolt/metadata.yaml new file mode 100644 index 000000000000..e8d0f4763fd5 --- /dev/null +++ b/airbyte-integrations/connectors/source-firebolt/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: database + connectorType: source + definitionId: 6f2ac653-8623-43c4-8950-19218c7caf3d + dockerImageTag: 0.2.0 + dockerRepository: airbyte/source-firebolt + githubIssueLabel: source-firebolt + icon: firebolt.svg + license: MIT + name: Firebolt + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/firebolt +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-flexport/metadata.yaml b/airbyte-integrations/connectors/source-flexport/metadata.yaml new file mode 100644 index 000000000000..82d597ddfbf2 --- /dev/null +++ b/airbyte-integrations/connectors/source-flexport/metadata.yaml @@ -0,0 +1,17 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: f95337f1-2ad1-4baf-922f-2ca9152de630 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-flexport + githubIssueLabel: source-flexport + license: MIT + name: Flexport + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/flexport +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-freshcaller/metadata.yaml b/airbyte-integrations/connectors/source-freshcaller/metadata.yaml new file mode 100644 index 000000000000..402477e21579 --- /dev/null +++ b/airbyte-integrations/connectors/source-freshcaller/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 8a5d48f6-03bb-4038-a942-a8d3f175cca3 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-freshcaller + githubIssueLabel: source-freshcaller + icon: freshcaller.svg + license: MIT + name: Freshcaller + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/freshcaller +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-freshdesk/metadata.yaml b/airbyte-integrations/connectors/source-freshdesk/metadata.yaml new file mode 100644 index 000000000000..3588ba154cee --- /dev/null +++ b/airbyte-integrations/connectors/source-freshdesk/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - "*.freshdesk.com" + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: ec4b9503-13cb-48ab-a4ab-6ade4be46567 + dockerImageTag: 3.0.2 + dockerRepository: airbyte/source-freshdesk + githubIssueLabel: source-freshdesk + icon: freshdesk.svg + license: MIT + name: Freshdesk + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/freshdesk +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-freshsales/metadata.yaml b/airbyte-integrations/connectors/source-freshsales/metadata.yaml new file mode 100644 index 000000000000..67d81961a391 --- /dev/null +++ b/airbyte-integrations/connectors/source-freshsales/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - "*.myfreshworks.com" + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: eca08d79-7b92-4065-b7f3-79c14836ebe7 + dockerImageTag: 0.1.4 + dockerRepository: airbyte/source-freshsales + githubIssueLabel: source-freshsales + icon: freshsales.svg + license: MIT + name: Freshsales + releaseStage: beta + supportUrl: https://docs.airbyte.com/integrations/sources/freshsales +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-freshservice/metadata.yaml b/airbyte-integrations/connectors/source-freshservice/metadata.yaml new file mode 100644 index 000000000000..e7c50ebd9e2d --- /dev/null +++ b/airbyte-integrations/connectors/source-freshservice/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 9bb85338-ea95-4c93-b267-6be89125b267 + dockerImageTag: 0.1.1 + dockerRepository: airbyte/source-freshservice + githubIssueLabel: source-freshservice + icon: freshservice.svg + license: MIT + name: Freshservice + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/freshservice +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-gcs/metadata.yaml b/airbyte-integrations/connectors/source-gcs/metadata.yaml new file mode 100644 index 000000000000..85b0f528fa1e --- /dev/null +++ b/airbyte-integrations/connectors/source-gcs/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + releaseStage: alpha + connectorSubtype: file + connectorType: source + definitionId: 2a8c41ae-8c23-4be0-a73f-2ab10ca1a820 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-gcs + githubIssueLabel: source-gcs + icon: gcs.svg + license: MIT + name: GCS + supportUrl: https://docs.airbyte.com/integrations/sources/gcs +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-genesys/metadata.yaml b/airbyte-integrations/connectors/source-genesys/metadata.yaml new file mode 100644 index 000000000000..07bed56053a8 --- /dev/null +++ b/airbyte-integrations/connectors/source-genesys/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 5ea4459a-8f1a-452a-830f-a65c38cc438d + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-genesys + githubIssueLabel: source-genesys + icon: genesys.svg + license: MIT + name: Genesys + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/genesys +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-getlago/metadata.yaml b/airbyte-integrations/connectors/source-getlago/metadata.yaml new file mode 100644 index 000000000000..7a9ac51d6cb2 --- /dev/null +++ b/airbyte-integrations/connectors/source-getlago/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: e1a3866b-d3b2-43b6-b6d7-8c1ee4d7f53f + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-getlago + githubIssueLabel: source-getlago + icon: getlago.svg + license: MIT + name: GetLago + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/getlago +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-github/metadata.yaml b/airbyte-integrations/connectors/source-github/metadata.yaml new file mode 100644 index 000000000000..a4173b4cf9f6 --- /dev/null +++ b/airbyte-integrations/connectors/source-github/metadata.yaml @@ -0,0 +1,33 @@ +data: + allowedHosts: + hosts: + - api.github.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: ef69ef6e-aa7f-4af1-a01d-ef775033524e + dockerImageTag: 0.4.7 + dockerRepository: airbyte/source-github + githubIssueLabel: source-github + icon: github.svg + license: MIT + name: GitHub + releaseStage: generally_available + suggestedStreams: + streams: + - branches + - comments + - issues + - organizations + - pull_requests + - repositories + - stargazers + - tags + - teams + - users + supportUrl: https://docs.airbyte.com/integrations/sources/github +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-gitlab/metadata.yaml b/airbyte-integrations/connectors/source-gitlab/metadata.yaml new file mode 100644 index 000000000000..a24a64f8f937 --- /dev/null +++ b/airbyte-integrations/connectors/source-gitlab/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - "*" + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 5e6175e5-68e1-4c17-bff9-56103bbb0d80 + dockerImageTag: 1.0.3 + dockerRepository: airbyte/source-gitlab + githubIssueLabel: source-gitlab + icon: gitlab.svg + license: MIT + name: Gitlab + releaseStage: beta + supportUrl: https://docs.airbyte.com/integrations/sources/gitlab +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-glassfrog/metadata.yaml b/airbyte-integrations/connectors/source-glassfrog/metadata.yaml new file mode 100644 index 000000000000..26060f9beb8c --- /dev/null +++ b/airbyte-integrations/connectors/source-glassfrog/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: cf8ff320-6272-4faa-89e6-4402dc17e5d5 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-glassfrog + githubIssueLabel: source-glassfrog + icon: glassfrog.svg + license: MIT + name: Glassfrog + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/glassfrog +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-gnews/metadata.yaml b/airbyte-integrations/connectors/source-gnews/metadata.yaml new file mode 100644 index 000000000000..ddc1141fb8eb --- /dev/null +++ b/airbyte-integrations/connectors/source-gnews/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: ce38aec4-5a77-439a-be29-9ca44fd4e811 + dockerImageTag: 0.1.3 + dockerRepository: airbyte/source-gnews + githubIssueLabel: source-gnews + icon: gnews.svg + license: MIT + name: GNews + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/gnews +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-gocardless/metadata.yaml b/airbyte-integrations/connectors/source-gocardless/metadata.yaml new file mode 100644 index 000000000000..10d12e344974 --- /dev/null +++ b/airbyte-integrations/connectors/source-gocardless/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: ba15ac82-5c6a-4fb2-bf24-925c23a1180c + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-gocardless + githubIssueLabel: source-gocardless + icon: gocardless.svg + license: MIT + name: GoCardless + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/gocardless +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-gong/metadata.yaml b/airbyte-integrations/connectors/source-gong/metadata.yaml new file mode 100644 index 000000000000..a0c39502bf2b --- /dev/null +++ b/airbyte-integrations/connectors/source-gong/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 32382e40-3b49-4b99-9c5c-4076501914e7 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-gong + githubIssueLabel: source-gong + icon: gong.svg + license: MIT + name: Gong + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/gong +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-google-ads/metadata.yaml b/airbyte-integrations/connectors/source-google-ads/metadata.yaml new file mode 100644 index 000000000000..d6688657fb4a --- /dev/null +++ b/airbyte-integrations/connectors/source-google-ads/metadata.yaml @@ -0,0 +1,22 @@ +data: + allowedHosts: + hosts: + - accounts.google.com + - googleads.googleapis.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 253487c0-2246-43ba-a21f-5116b20a2c50 + dockerImageTag: 0.2.13 + dockerRepository: airbyte/source-google-ads + githubIssueLabel: source-google-ads + icon: google-adwords.svg + license: MIT + name: Google Ads + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/google-ads +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-google-analytics-data-api/metadata.yaml b/airbyte-integrations/connectors/source-google-analytics-data-api/metadata.yaml new file mode 100644 index 000000000000..f43c5ad7d371 --- /dev/null +++ b/airbyte-integrations/connectors/source-google-analytics-data-api/metadata.yaml @@ -0,0 +1,23 @@ +data: + allowedHosts: + hosts: + - oauth2.googleapis.com + - www.googleapis.com + - analyticsdata.googleapis.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 3cc2eafd-84aa-4dca-93af-322d9dfeec1a + dockerImageTag: 0.1.3 + dockerRepository: airbyte/source-google-analytics-data-api + githubIssueLabel: source-google-analytics-data-api + icon: google-analytics.svg + license: MIT + name: Google Analytics 4 (GA4) + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/google-analytics-data-api +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-google-analytics-v4/metadata.yaml b/airbyte-integrations/connectors/source-google-analytics-v4/metadata.yaml new file mode 100644 index 000000000000..3323a6adfa68 --- /dev/null +++ b/airbyte-integrations/connectors/source-google-analytics-v4/metadata.yaml @@ -0,0 +1,24 @@ +data: + allowedHosts: + hosts: + - oauth2.googleapis.com + - www.googleapis.com + - analyticsdata.googleapis.com + - analyticsreporting.googleapis.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: eff3616a-f9c3-11eb-9a03-0242ac130003 + dockerImageTag: 0.1.34 + dockerRepository: airbyte/source-google-analytics-v4 + githubIssueLabel: source-google-analytics-v4 + icon: google-analytics.svg + license: MIT + name: Google Analytics (Universal Analytics) + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/google-analytics-v4 +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-google-directory/metadata.yaml b/airbyte-integrations/connectors/source-google-directory/metadata.yaml new file mode 100644 index 000000000000..52bf820b8576 --- /dev/null +++ b/airbyte-integrations/connectors/source-google-directory/metadata.yaml @@ -0,0 +1,19 @@ +data: + catalogs: + cloud: + dockerImageTag: 0.1.3 + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: d19ae824-e289-4b14-995a-0632eb46d246 + dockerImageTag: 0.1.9 + dockerRepository: airbyte/source-google-directory + githubIssueLabel: source-google-directory + icon: googledirectory.svg + license: MIT + name: Google Directory + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/google-directory +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-google-pagespeed-insights/metadata.yaml b/airbyte-integrations/connectors/source-google-pagespeed-insights/metadata.yaml new file mode 100644 index 000000000000..a8a01bc638b4 --- /dev/null +++ b/airbyte-integrations/connectors/source-google-pagespeed-insights/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 1e9086ab-ddac-4c1d-aafd-ba43ff575fe4 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-google-pagespeed-insights + githubIssueLabel: source-google-pagespeed-insights + icon: google-pagespeed-insights.svg + license: MIT + name: Google PageSpeed Insights + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/google-pagespeed-insights +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-google-search-console/metadata.yaml b/airbyte-integrations/connectors/source-google-search-console/metadata.yaml new file mode 100644 index 000000000000..d153eb576cbc --- /dev/null +++ b/airbyte-integrations/connectors/source-google-search-console/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - "*.googleapis.com" + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: eb4c9e00-db83-4d63-a386-39cfa91012a8 + dockerImageTag: 0.1.22 + dockerRepository: airbyte/source-google-search-console + githubIssueLabel: source-google-search-console + icon: googlesearchconsole.svg + license: MIT + name: Google Search Console + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/google-search-console +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-google-sheets/metadata.yaml b/airbyte-integrations/connectors/source-google-sheets/metadata.yaml new file mode 100644 index 000000000000..e317f73b1f66 --- /dev/null +++ b/airbyte-integrations/connectors/source-google-sheets/metadata.yaml @@ -0,0 +1,22 @@ +data: + allowedHosts: + hosts: + - "*.googleapis.com" + catalogs: + cloud: + dockerImageTag: 0.2.21 + enabled: true + oss: + enabled: true + connectorSubtype: file + connectorType: source + definitionId: 71607ba1-c0ac-4799-8049-7f4b90dd50f7 + dockerImageTag: 0.2.37 + dockerRepository: airbyte/source-google-sheets + githubIssueLabel: source-google-sheets + icon: google-sheets.svg + license: MIT + name: Google Sheets + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/google-sheets +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-google-webfonts/metadata.yaml b/airbyte-integrations/connectors/source-google-webfonts/metadata.yaml new file mode 100644 index 000000000000..51f7236b088b --- /dev/null +++ b/airbyte-integrations/connectors/source-google-webfonts/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: a68fbcde-b465-4ab3-b2a6-b0590a875835 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-google-webfonts + githubIssueLabel: source-google-webfonts + icon: googleworkpace.svg + license: MIT + name: Google Webfonts + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/google-webfonts +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-google-workspace-admin-reports/metadata.yaml b/airbyte-integrations/connectors/source-google-workspace-admin-reports/metadata.yaml new file mode 100644 index 000000000000..5b4879fd430e --- /dev/null +++ b/airbyte-integrations/connectors/source-google-workspace-admin-reports/metadata.yaml @@ -0,0 +1,19 @@ +data: + catalogs: + cloud: + dockerImageTag: 0.1.4 + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: ed9dfefa-1bbc-419d-8c5e-4d78f0ef6734 + dockerImageTag: 0.1.8 + dockerRepository: airbyte/source-google-workspace-admin-reports + githubIssueLabel: source-google-workspace-admin-reports + icon: googleworkpace.svg + license: MIT + name: Google Workspace Admin Reports + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/google-workspace-admin-reports +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-greenhouse/metadata.yaml b/airbyte-integrations/connectors/source-greenhouse/metadata.yaml new file mode 100644 index 000000000000..c1fc419327cc --- /dev/null +++ b/airbyte-integrations/connectors/source-greenhouse/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - harvest.greenhouse.io + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 59f1e50a-331f-4f09-b3e8-2e8d4d355f44 + dockerImageTag: 0.3.1 + dockerRepository: airbyte/source-greenhouse + githubIssueLabel: source-greenhouse + icon: greenhouse.svg + license: MIT + name: Greenhouse + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/greenhouse +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-gridly/metadata.yaml b/airbyte-integrations/connectors/source-gridly/metadata.yaml new file mode 100644 index 000000000000..858496e1dc5c --- /dev/null +++ b/airbyte-integrations/connectors/source-gridly/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 6cbea164-3237-433b-9abb-36d384ee4cbf + dockerImageTag: 0.1.1 + dockerRepository: airbyte/source-gridly + githubIssueLabel: source-gridly + icon: gridly.svg + license: MIT + name: Gridly + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/gridly +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-gutendex/metadata.yaml b/airbyte-integrations/connectors/source-gutendex/metadata.yaml new file mode 100644 index 000000000000..7fcc0095f781 --- /dev/null +++ b/airbyte-integrations/connectors/source-gutendex/metadata.yaml @@ -0,0 +1,17 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: bff9a277-e01d-420d-81ee-80f28a307318 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-gutendex + githubIssueLabel: source-gutendex + license: MIT + name: Gutendex + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/gutendex +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-harvest/metadata.yaml b/airbyte-integrations/connectors/source-harvest/metadata.yaml new file mode 100644 index 000000000000..ddca541ba001 --- /dev/null +++ b/airbyte-integrations/connectors/source-harvest/metadata.yaml @@ -0,0 +1,22 @@ +data: + allowedHosts: + hosts: + - api.harvestapp.com + catalogs: + cloud: + dockerImageTag: 0.1.16 + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: fe2b4084-3386-4d3b-9ad6-308f61a6f1e6 + dockerImageTag: 0.1.17 + dockerRepository: airbyte/source-harvest + githubIssueLabel: source-harvest + icon: harvest.svg + license: MIT + name: Harvest + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/harvest +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-hellobaton/metadata.yaml b/airbyte-integrations/connectors/source-hellobaton/metadata.yaml new file mode 100644 index 000000000000..06419e5c6c43 --- /dev/null +++ b/airbyte-integrations/connectors/source-hellobaton/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 492b56d1-937c-462e-8076-21ad2031e784 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-hellobaton + githubIssueLabel: source-hellobaton + icon: hellobaton.svg + license: MIT + name: Hellobaton + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/hellobaton +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-hubplanner/metadata.yaml b/airbyte-integrations/connectors/source-hubplanner/metadata.yaml new file mode 100644 index 000000000000..9a68324e29b8 --- /dev/null +++ b/airbyte-integrations/connectors/source-hubplanner/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 8097ceb9-383f-42f6-9f92-d3fd4bcc7689 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-hubplanner + githubIssueLabel: source-hubplanner + icon: hubplanner.svg + license: MIT + name: Hubplanner + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/hubplanner +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-hubspot/metadata.yaml b/airbyte-integrations/connectors/source-hubspot/metadata.yaml new file mode 100644 index 000000000000..5a6ad1bfae5b --- /dev/null +++ b/airbyte-integrations/connectors/source-hubspot/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - api.hubapi.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 36c891d9-4bd9-43ac-bad2-10e12756272c + dockerImageTag: 0.4.0 + dockerRepository: airbyte/source-hubspot + githubIssueLabel: source-hubspot + icon: hubspot.svg + license: MIT + name: HubSpot + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/hubspot +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-insightly/metadata.yaml b/airbyte-integrations/connectors/source-insightly/metadata.yaml new file mode 100644 index 000000000000..d0a4dc9b44e7 --- /dev/null +++ b/airbyte-integrations/connectors/source-insightly/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 38f84314-fe6a-4257-97be-a8dcd942d693 + dockerImageTag: 0.1.1 + dockerRepository: airbyte/source-insightly + githubIssueLabel: source-insightly + icon: insightly.svg + license: MIT + name: Insightly + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/insightly +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-instagram/metadata.yaml b/airbyte-integrations/connectors/source-instagram/metadata.yaml new file mode 100644 index 000000000000..1cdfd79840a8 --- /dev/null +++ b/airbyte-integrations/connectors/source-instagram/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - graph.facebook.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 6acf6b55-4f1e-4fca-944e-1a3caef8aba8 + dockerImageTag: 1.0.5 + dockerRepository: airbyte/source-instagram + githubIssueLabel: source-instagram + icon: instagram.svg + license: MIT + name: Instagram + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/instagram +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-instatus/metadata.yaml b/airbyte-integrations/connectors/source-instatus/metadata.yaml new file mode 100644 index 000000000000..bf24e3a9c3fa --- /dev/null +++ b/airbyte-integrations/connectors/source-instatus/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 1901024c-0249-45d0-bcac-31a954652927 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-instatus + githubIssueLabel: source-instatus + icon: instatus.svg + license: MIT + name: Instatus + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/instatus +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-intercom/metadata.yaml b/airbyte-integrations/connectors/source-intercom/metadata.yaml new file mode 100644 index 000000000000..8ca75a32533d --- /dev/null +++ b/airbyte-integrations/connectors/source-intercom/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - api.intercom.io + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: d8313939-3782-41b0-be29-b3ca20d8dd3a + dockerImageTag: 0.2.0 + dockerRepository: airbyte/source-intercom + githubIssueLabel: source-intercom + icon: intercom.svg + license: MIT + name: Intercom + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/intercom +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-intruder/metadata.yaml b/airbyte-integrations/connectors/source-intruder/metadata.yaml new file mode 100644 index 000000000000..03af0a118161 --- /dev/null +++ b/airbyte-integrations/connectors/source-intruder/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 3d15163b-11d8-412f-b808-795c9b2c3a3a + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-intruder + githubIssueLabel: source-intruder + icon: intruder.svg + license: MIT + name: Intruder + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/intruder +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-ip2whois/metadata.yaml b/airbyte-integrations/connectors/source-ip2whois/metadata.yaml new file mode 100644 index 000000000000..d293f8f8bf11 --- /dev/null +++ b/airbyte-integrations/connectors/source-ip2whois/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: f23b7b7c-d705-49a3-9042-09add3b104a5 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-ip2whois + githubIssueLabel: source-ip2whois + icon: ip2whois.svg + license: MIT + name: IP2Whois + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/ip2whois +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-iterable/metadata.yaml b/airbyte-integrations/connectors/source-iterable/metadata.yaml new file mode 100644 index 000000000000..ed811a6af81d --- /dev/null +++ b/airbyte-integrations/connectors/source-iterable/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - api.iterable.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 2e875208-0c0b-4ee4-9e92-1cb3156ea799 + dockerImageTag: 0.1.26 + dockerRepository: airbyte/source-iterable + githubIssueLabel: source-iterable + icon: iterable.svg + license: MIT + name: Iterable + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/iterable +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-jira/metadata.yaml b/airbyte-integrations/connectors/source-jira/metadata.yaml new file mode 100644 index 000000000000..e11e4d4203f4 --- /dev/null +++ b/airbyte-integrations/connectors/source-jira/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - ${domain} + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 68e63de2-bb83-4c7e-93fa-a8a9051e3993 + dockerImageTag: 0.3.4 + dockerRepository: airbyte/source-jira + githubIssueLabel: source-jira + icon: jira.svg + license: MIT + name: Jira + releaseStage: beta + supportUrl: https://docs.airbyte.com/integrations/sources/jira +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-k6-cloud/metadata.yaml b/airbyte-integrations/connectors/source-k6-cloud/metadata.yaml new file mode 100644 index 000000000000..d68c06626d83 --- /dev/null +++ b/airbyte-integrations/connectors/source-k6-cloud/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: e300ece7-b073-43a3-852e-8aff36a57f13 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-k6-cloud + githubIssueLabel: source-k6-cloud + icon: k6cloud.svg + license: MIT + name: K6 Cloud + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/k6-cloud +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-kafka/metadata.yaml b/airbyte-integrations/connectors/source-kafka/metadata.yaml new file mode 100644 index 000000000000..d9810eaecaef --- /dev/null +++ b/airbyte-integrations/connectors/source-kafka/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: database + connectorType: source + definitionId: d917a47b-8537-4d0d-8c10-36a9928d4265 + dockerImageTag: 0.2.3 + dockerRepository: airbyte/source-kafka + githubIssueLabel: source-kafka + icon: kafka.svg + license: MIT + name: Kafka + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/kafka +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-klarna/metadata.yaml b/airbyte-integrations/connectors/source-klarna/metadata.yaml new file mode 100644 index 000000000000..816471f2dc9a --- /dev/null +++ b/airbyte-integrations/connectors/source-klarna/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 60c24725-00ae-490c-991d-55b78c3197e0 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-klarna + githubIssueLabel: source-klarna + icon: klarna.svg + license: MIT + name: Klarna + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/klarna +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-klaviyo/metadata.yaml b/airbyte-integrations/connectors/source-klaviyo/metadata.yaml new file mode 100644 index 000000000000..f756b0a20724 --- /dev/null +++ b/airbyte-integrations/connectors/source-klaviyo/metadata.yaml @@ -0,0 +1,22 @@ +data: + allowedHosts: + hosts: + - a.klaviyo.com + - klaviyo.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 95e8cffd-b8c4-4039-968e-d32fb4a69bde + dockerImageTag: 0.3.0 + dockerRepository: airbyte/source-klaviyo + githubIssueLabel: source-klaviyo + icon: klaviyo.svg + license: MIT + name: Klaviyo + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/klaviyo +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-kustomer-singer/metadata.yaml b/airbyte-integrations/connectors/source-kustomer-singer/metadata.yaml new file mode 100644 index 000000000000..e0fe7f1d643e --- /dev/null +++ b/airbyte-integrations/connectors/source-kustomer-singer/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: cd06e646-31bf-4dc8-af48-cbc6530fcad3 + dockerImageTag: 0.1.2 + dockerRepository: airbyte/source-kustomer-singer + githubIssueLabel: source-kustomer-singer + icon: kustomer.svg + license: MIT + name: Kustomer + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/kustomer +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-kyriba/metadata.yaml b/airbyte-integrations/connectors/source-kyriba/metadata.yaml new file mode 100644 index 000000000000..a69b35690a87 --- /dev/null +++ b/airbyte-integrations/connectors/source-kyriba/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 547dc08e-ab51-421d-953b-8f3745201a8c + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-kyriba + githubIssueLabel: source-kyriba + icon: kyriba.svg + license: MIT + name: Kyriba + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/kyriba +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-launchdarkly/metadata.yaml b/airbyte-integrations/connectors/source-launchdarkly/metadata.yaml new file mode 100644 index 000000000000..88ce16548d58 --- /dev/null +++ b/airbyte-integrations/connectors/source-launchdarkly/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: f96bb511-5e3c-48fc-b408-547953cd81a4 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-launchdarkly + githubIssueLabel: source-launchdarkly + icon: launchdarkly.svg + license: MIT + name: LaunchDarkly + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/launchdarkly +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-lemlist/metadata.yaml b/airbyte-integrations/connectors/source-lemlist/metadata.yaml new file mode 100644 index 000000000000..89d2c0db27eb --- /dev/null +++ b/airbyte-integrations/connectors/source-lemlist/metadata.yaml @@ -0,0 +1,17 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 789f8e7a-2d28-11ec-8d3d-0242ac130003 + dockerImageTag: 0.1.1 + dockerRepository: airbyte/source-lemlist + githubIssueLabel: source-lemlist + license: MIT + name: Lemlist + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/lemlist +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-lever-hiring/metadata.yaml b/airbyte-integrations/connectors/source-lever-hiring/metadata.yaml new file mode 100644 index 000000000000..b89b232039cd --- /dev/null +++ b/airbyte-integrations/connectors/source-lever-hiring/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 3981c999-bd7d-4afc-849b-e53dea90c948 + dockerImageTag: 0.1.3 + dockerRepository: airbyte/source-lever-hiring + githubIssueLabel: source-lever-hiring + icon: leverhiring.svg + license: MIT + name: Lever Hiring + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/lever-hiring +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-linkedin-ads/metadata.yaml b/airbyte-integrations/connectors/source-linkedin-ads/metadata.yaml new file mode 100644 index 000000000000..62de5e393d1c --- /dev/null +++ b/airbyte-integrations/connectors/source-linkedin-ads/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - api.linkedin.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 137ece28-5434-455c-8f34-69dc3782f451 + dockerImageTag: 0.1.15 + dockerRepository: airbyte/source-linkedin-ads + githubIssueLabel: source-linkedin-ads + icon: linkedin.svg + license: MIT + name: LinkedIn Ads + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/linkedin-ads +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-linkedin-pages/metadata.yaml b/airbyte-integrations/connectors/source-linkedin-pages/metadata.yaml new file mode 100644 index 000000000000..5d1a25ec674b --- /dev/null +++ b/airbyte-integrations/connectors/source-linkedin-pages/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: af54297c-e8f8-4d63-a00d-a94695acc9d3 + dockerImageTag: 1.0.1 + dockerRepository: airbyte/source-linkedin-pages + githubIssueLabel: source-linkedin-pages + icon: linkedin.svg + license: MIT + name: LinkedIn Pages + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/linkedin-pages +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-linnworks/metadata.yaml b/airbyte-integrations/connectors/source-linnworks/metadata.yaml new file mode 100644 index 000000000000..53d7dc4b505c --- /dev/null +++ b/airbyte-integrations/connectors/source-linnworks/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 7b86879e-26c5-4ef6-a5ce-2be5c7b46d1e + dockerImageTag: 0.1.5 + dockerRepository: airbyte/source-linnworks + githubIssueLabel: source-linnworks + icon: linnworks.svg + license: MIT + name: Linnworks + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/linnworks +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-lokalise/metadata.yaml b/airbyte-integrations/connectors/source-lokalise/metadata.yaml new file mode 100644 index 000000000000..b8f1b1169815 --- /dev/null +++ b/airbyte-integrations/connectors/source-lokalise/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 45e0b135-615c-40ac-b38e-e65b0944197f + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-lokalise + githubIssueLabel: source-lokalise + icon: lokalise.svg + license: MIT + name: Lokalise + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/lokalise +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-looker/metadata.yaml b/airbyte-integrations/connectors/source-looker/metadata.yaml new file mode 100644 index 000000000000..8d28c1a5e000 --- /dev/null +++ b/airbyte-integrations/connectors/source-looker/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 00405b19-9768-4e0c-b1ae-9fc2ee2b2a8c + dockerImageTag: 0.2.8 + dockerRepository: airbyte/source-looker + githubIssueLabel: source-looker + icon: looker.svg + license: MIT + name: Looker + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/looker +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-mailchimp/metadata.yaml b/airbyte-integrations/connectors/source-mailchimp/metadata.yaml new file mode 100644 index 000000000000..2bd773678975 --- /dev/null +++ b/airbyte-integrations/connectors/source-mailchimp/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - "*.api.mailchimp.com" + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: b03a9f3e-22a5-11eb-adc1-0242ac120002 + dockerImageTag: 0.3.5 + dockerRepository: airbyte/source-mailchimp + githubIssueLabel: source-mailchimp + icon: mailchimp.svg + license: MIT + name: Mailchimp + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/mailchimp +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-mailerlite/metadata.yaml b/airbyte-integrations/connectors/source-mailerlite/metadata.yaml new file mode 100644 index 000000000000..97923842dd29 --- /dev/null +++ b/airbyte-integrations/connectors/source-mailerlite/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: dc3b9003-2432-4e93-a7f4-4620b0f14674 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-mailerlite + githubIssueLabel: source-mailerlite + icon: mailerlite.svg + license: MIT + name: MailerLite + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/mailerlite +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-mailersend/metadata.yaml b/airbyte-integrations/connectors/source-mailersend/metadata.yaml new file mode 100644 index 000000000000..1fd46e221c58 --- /dev/null +++ b/airbyte-integrations/connectors/source-mailersend/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 2707d529-3c04-46eb-9c7e-40d4038df6f7 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-mailersend + githubIssueLabel: source-mailersend + icon: mailersend.svg + license: MIT + name: MailerSend + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/mailersend +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-mailgun/metadata.yaml b/airbyte-integrations/connectors/source-mailgun/metadata.yaml new file mode 100644 index 000000000000..74f84d367dc6 --- /dev/null +++ b/airbyte-integrations/connectors/source-mailgun/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 5b9cb09e-1003-4f9c-983d-5779d1b2cd51 + dockerImageTag: 0.1.1 + dockerRepository: airbyte/source-mailgun + githubIssueLabel: source-mailgun + icon: mailgun.svg + license: MIT + name: Mailgun + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/mailgun +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-mailjet-mail/metadata.yaml b/airbyte-integrations/connectors/source-mailjet-mail/metadata.yaml new file mode 100644 index 000000000000..80cc33a3f38c --- /dev/null +++ b/airbyte-integrations/connectors/source-mailjet-mail/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 56582331-5de2-476b-b913-5798de77bbdf + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-mailjet-mail + githubIssueLabel: source-mailjet-mail + icon: mailjetmail.svg + license: MIT + name: Mailjet Mail + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/mailjet-mail +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-mailjet-sms/metadata.yaml b/airbyte-integrations/connectors/source-mailjet-sms/metadata.yaml new file mode 100644 index 000000000000..9f19918fb8f1 --- /dev/null +++ b/airbyte-integrations/connectors/source-mailjet-sms/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 6ec2acea-7fd1-4378-b403-41a666e0c028 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-mailjet-sms + githubIssueLabel: source-mailjet-sms + icon: mailjetsms.svg + license: MIT + name: Mailjet SMS + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/mailjet-sms +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-marketo/metadata.yaml b/airbyte-integrations/connectors/source-marketo/metadata.yaml new file mode 100644 index 000000000000..17895ff69566 --- /dev/null +++ b/airbyte-integrations/connectors/source-marketo/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - "*.mktorest.com" + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 9e0556f4-69df-4522-a3fb-03264d36b348 + dockerImageTag: 1.0.2 + dockerRepository: airbyte/source-marketo + githubIssueLabel: source-marketo + icon: marketo.svg + license: MIT + name: Marketo + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/marketo +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-metabase/metadata.yaml b/airbyte-integrations/connectors/source-metabase/metadata.yaml new file mode 100644 index 000000000000..5797823f8489 --- /dev/null +++ b/airbyte-integrations/connectors/source-metabase/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: c7cb421b-942e-4468-99ee-e369bcabaec5 + dockerImageTag: 0.3.1 + dockerRepository: airbyte/source-metabase + githubIssueLabel: source-metabase + icon: metabase.svg + license: MIT + name: Metabase + releaseStage: beta + supportUrl: https://docs.airbyte.com/integrations/sources/metabase +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-microsoft-dataverse/metadata.yaml b/airbyte-integrations/connectors/source-microsoft-dataverse/metadata.yaml new file mode 100644 index 000000000000..80d4f0f518b1 --- /dev/null +++ b/airbyte-integrations/connectors/source-microsoft-dataverse/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 9220e3de-3b60-4bb2-a46f-046d59ea235a + dockerImageTag: 0.1.1 + dockerRepository: airbyte/source-microsoft-dataverse + githubIssueLabel: source-microsoft-dataverse + icon: microsoftdataverse.svg + license: MIT + name: Microsoft Dataverse + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/microsoft-dataverse +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-microsoft-teams/metadata.yaml b/airbyte-integrations/connectors/source-microsoft-teams/metadata.yaml new file mode 100644 index 000000000000..06c11b79c762 --- /dev/null +++ b/airbyte-integrations/connectors/source-microsoft-teams/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: eaf50f04-21dd-4620-913b-2a83f5635227 + dockerImageTag: 0.2.5 + dockerRepository: airbyte/source-microsoft-teams + githubIssueLabel: source-microsoft-teams + icon: microsoft-teams.svg + license: MIT + name: Microsoft teams + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/microsoft-teams +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-mixpanel/metadata.yaml b/airbyte-integrations/connectors/source-mixpanel/metadata.yaml new file mode 100644 index 000000000000..f8b86c512542 --- /dev/null +++ b/airbyte-integrations/connectors/source-mixpanel/metadata.yaml @@ -0,0 +1,23 @@ +data: + allowedHosts: + hosts: + - mixpanel.com + - eu.mixpanel.com + catalogs: + cloud: + dockerImageTag: 0.1.30 + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 12928b32-bf0a-4f1e-964f-07e12e37153a + dockerImageTag: 0.1.31 + dockerRepository: airbyte/source-mixpanel + githubIssueLabel: source-mixpanel + icon: mixpanel.svg + license: MIT + name: Mixpanel + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/mixpanel +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-monday/metadata.yaml b/airbyte-integrations/connectors/source-monday/metadata.yaml new file mode 100644 index 000000000000..4cca756180b7 --- /dev/null +++ b/airbyte-integrations/connectors/source-monday/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - api.monday.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 80a54ea2-9959-4040-aac1-eee42423ec9b + dockerImageTag: 0.2.3 + dockerRepository: airbyte/source-monday + githubIssueLabel: source-monday + icon: monday.svg + license: MIT + name: Monday + releaseStage: beta + supportUrl: https://docs.airbyte.com/integrations/sources/monday +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-mongodb-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/source-mongodb-strict-encrypt/metadata.yaml new file mode 100644 index 000000000000..97e4a25668e0 --- /dev/null +++ b/airbyte-integrations/connectors/source-mongodb-strict-encrypt/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false # strict encrypt connectors are deployed to Cloud by their non strict encrypt sibling. + oss: + enabled: false # strict encrypt connectors are not used on OSS. + connectorSubtype: database + connectorType: source + definitionId: b2e713cd-cc36-4c0a-b5bd-b47cb8a0561e + dockerImageTag: 0.1.19 + dockerRepository: airbyte/source-mongodb-v2 + githubIssueLabel: source-mongodb-v2 + icon: mongodb.svg + license: MIT + name: MongoDb + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/mongodb-v2 +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-mongodb-v2/metadata.yaml b/airbyte-integrations/connectors/source-mongodb-v2/metadata.yaml new file mode 100644 index 000000000000..5f91c09a5209 --- /dev/null +++ b/airbyte-integrations/connectors/source-mongodb-v2/metadata.yaml @@ -0,0 +1,20 @@ +data: + catalogs: + cloud: + dockerImageTag: 0.1.7 + dockerRepository: airbyte/source-mongodb-strict-encrypt + enabled: true + oss: + enabled: true + connectorSubtype: database + connectorType: source + definitionId: b2e713cd-cc36-4c0a-b5bd-b47cb8a0561e + dockerImageTag: 0.1.19 + dockerRepository: airbyte/source-mongodb-v2 + githubIssueLabel: source-mongodb-v2 + icon: mongodb.svg + license: MIT + name: MongoDb + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/mongodb-v2 +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-mssql-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/source-mssql-strict-encrypt/metadata.yaml new file mode 100644 index 000000000000..74124fa7612a --- /dev/null +++ b/airbyte-integrations/connectors/source-mssql-strict-encrypt/metadata.yaml @@ -0,0 +1,22 @@ +data: + allowedHosts: + hosts: + - ${host} + - ${tunnel_method.tunnel_host} + catalogs: + cloud: + enabled: false # strict encrypt connectors are deployed to Cloud by their non strict encrypt sibling. + oss: + enabled: false # strict encrypt connectors are not used on OSS. + connectorSubtype: database + connectorType: source + definitionId: b5ea17b1-f170-46dc-bc31-cc744ca984c1 + dockerImageTag: 1.0.9 + dockerRepository: airbyte/source-mssql + githubIssueLabel: source-mssql + icon: mssql.svg + license: MIT + name: Microsoft SQL Server (MSSQL) + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/mssql +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-mssql/metadata.yaml b/airbyte-integrations/connectors/source-mssql/metadata.yaml new file mode 100644 index 000000000000..723d7c390be8 --- /dev/null +++ b/airbyte-integrations/connectors/source-mssql/metadata.yaml @@ -0,0 +1,23 @@ +data: + allowedHosts: + hosts: + - ${host} + - ${tunnel_method.tunnel_host} + catalogs: + cloud: + dockerRepository: airbyte/source-mssql-strict-encrypt + enabled: true + oss: + enabled: true + connectorSubtype: database + connectorType: source + definitionId: b5ea17b1-f170-46dc-bc31-cc744ca984c1 + dockerImageTag: 1.0.9 + dockerRepository: airbyte/source-mssql + githubIssueLabel: source-mssql + icon: mssql.svg + license: MIT + name: Microsoft SQL Server (MSSQL) + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/mssql +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-my-hours/metadata.yaml b/airbyte-integrations/connectors/source-my-hours/metadata.yaml new file mode 100644 index 000000000000..182e1986cce6 --- /dev/null +++ b/airbyte-integrations/connectors/source-my-hours/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 722ba4bf-06ec-45a4-8dd5-72e4a5cf3903 + dockerImageTag: 0.1.1 + dockerRepository: airbyte/source-my-hours + githubIssueLabel: source-my-hours + icon: my-hours.svg + license: MIT + name: My Hours + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/my-hours +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-mysql-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/source-mysql-strict-encrypt/metadata.yaml new file mode 100644 index 000000000000..ff9449af3c1e --- /dev/null +++ b/airbyte-integrations/connectors/source-mysql-strict-encrypt/metadata.yaml @@ -0,0 +1,22 @@ +data: + allowedHosts: + hosts: + - ${host} + - ${tunnel_method.tunnel_host} + catalogs: + cloud: + enabled: false # strict encrypt connectors are deployed to Cloud by their non strict encrypt sibling. + oss: + enabled: false # strict encrypt connectors are not used on OSS. + connectorSubtype: database + connectorType: source + definitionId: 435bb9a5-7887-4809-aa58-28c27df0d7ad + dockerImageTag: 2.0.12 + dockerRepository: airbyte/source-mysql + githubIssueLabel: source-mysql + icon: mysql.svg + license: MIT + name: MySQL + releaseStage: beta + supportUrl: https://docs.airbyte.com/integrations/sources/mysql +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-mysql/metadata.yaml b/airbyte-integrations/connectors/source-mysql/metadata.yaml new file mode 100644 index 000000000000..27e9e222c3fb --- /dev/null +++ b/airbyte-integrations/connectors/source-mysql/metadata.yaml @@ -0,0 +1,23 @@ +data: + allowedHosts: + hosts: + - ${host} + - ${tunnel_method.tunnel_host} + catalogs: + cloud: + dockerRepository: airbyte/source-mysql-strict-encrypt + enabled: true + oss: + enabled: true + connectorSubtype: database + connectorType: source + definitionId: 435bb9a5-7887-4809-aa58-28c27df0d7ad + dockerImageTag: 2.0.12 + dockerRepository: airbyte/source-mysql + githubIssueLabel: source-mysql + icon: mysql.svg + license: MIT + name: MySQL + releaseStage: beta + supportUrl: https://docs.airbyte.com/integrations/sources/mysql +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-n8n/metadata.yaml b/airbyte-integrations/connectors/source-n8n/metadata.yaml new file mode 100644 index 000000000000..97619f6f91ac --- /dev/null +++ b/airbyte-integrations/connectors/source-n8n/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 4a961f66-5e99-4430-8320-a73afe52f7a2 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-n8n + githubIssueLabel: source-n8n + icon: n8n.svg + license: MIT + name: n8n + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/n8n +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-nasa/metadata.yaml b/airbyte-integrations/connectors/source-nasa/metadata.yaml new file mode 100644 index 000000000000..5370ce4bc64a --- /dev/null +++ b/airbyte-integrations/connectors/source-nasa/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - api.nasa.gov + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 1a8667d7-7978-43cd-ba4d-d32cbd478971 + dockerImageTag: 0.1.1 + dockerRepository: airbyte/source-nasa + githubIssueLabel: source-nasa + icon: nasa.svg + license: MIT + name: NASA + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/nasa +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-netsuite/metadata.yaml b/airbyte-integrations/connectors/source-netsuite/metadata.yaml new file mode 100644 index 000000000000..a826571f65c2 --- /dev/null +++ b/airbyte-integrations/connectors/source-netsuite/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 4f2f093d-ce44-4121-8118-9d13b7bfccd0 + dockerImageTag: 0.1.3 + dockerRepository: airbyte/source-netsuite + githubIssueLabel: source-netsuite + icon: netsuite.svg + license: MIT + name: Netsuite + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/netsuite +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-news-api/metadata.yaml b/airbyte-integrations/connectors/source-news-api/metadata.yaml new file mode 100644 index 000000000000..9c8971f9dac7 --- /dev/null +++ b/airbyte-integrations/connectors/source-news-api/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: df38991e-f35b-4af2-996d-36817f614587 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-news-api + githubIssueLabel: source-news-api + icon: newsapi.svg + license: MIT + name: News API + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/news-api +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-newsdata/metadata.yaml b/airbyte-integrations/connectors/source-newsdata/metadata.yaml new file mode 100644 index 000000000000..94e1b153287e --- /dev/null +++ b/airbyte-integrations/connectors/source-newsdata/metadata.yaml @@ -0,0 +1,17 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 60bd11d8-2632-4daa-a688-b47336d32093 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-newsdata + githubIssueLabel: source-newsdata + license: MIT + name: Newsdata + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/newsdata +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-notion/metadata.yaml b/airbyte-integrations/connectors/source-notion/metadata.yaml new file mode 100644 index 000000000000..7ac9914b4f34 --- /dev/null +++ b/airbyte-integrations/connectors/source-notion/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - api.notion.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 6e00b415-b02e-4160-bf02-58176a0ae687 + dockerImageTag: 1.0.3 + dockerRepository: airbyte/source-notion + githubIssueLabel: source-notion + icon: notion.svg + license: MIT + name: Notion + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/notion +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-nytimes/metadata.yaml b/airbyte-integrations/connectors/source-nytimes/metadata.yaml new file mode 100644 index 000000000000..b0969f166eff --- /dev/null +++ b/airbyte-integrations/connectors/source-nytimes/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 0fae6a9a-04eb-44d4-96e1-e02d3dbc1d83 + dockerImageTag: 0.1.1 + dockerRepository: airbyte/source-nytimes + githubIssueLabel: source-nytimes + icon: nytimes.svg + license: MIT + name: New York Times + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/nytimes +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-okta/metadata.yaml b/airbyte-integrations/connectors/source-okta/metadata.yaml new file mode 100644 index 000000000000..4d05e48acf20 --- /dev/null +++ b/airbyte-integrations/connectors/source-okta/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 1d4fdb25-64fc-4569-92da-fcdca79a8372 + dockerImageTag: 0.1.14 + dockerRepository: airbyte/source-okta + githubIssueLabel: source-okta + icon: okta.svg + license: MIT + name: Okta + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/okta +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-omnisend/metadata.yaml b/airbyte-integrations/connectors/source-omnisend/metadata.yaml new file mode 100644 index 000000000000..11bdbda33e99 --- /dev/null +++ b/airbyte-integrations/connectors/source-omnisend/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: e7f0c5e2-4815-48c4-90cf-f47124209835 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-omnisend + githubIssueLabel: source-omnisend + icon: omnisend.svg + license: MIT + name: Omnisend + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/omnisend +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-onesignal/metadata.yaml b/airbyte-integrations/connectors/source-onesignal/metadata.yaml new file mode 100644 index 000000000000..04cb2f6016d4 --- /dev/null +++ b/airbyte-integrations/connectors/source-onesignal/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: bb6afd81-87d5-47e3-97c4-e2c2901b1cf8 + dockerImageTag: 1.0.0 + dockerRepository: airbyte/source-onesignal + githubIssueLabel: source-onesignal + icon: onesignal.svg + license: MIT + name: OneSignal + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/onesignal +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-open-exchange-rates/metadata.yaml b/airbyte-integrations/connectors/source-open-exchange-rates/metadata.yaml new file mode 100644 index 000000000000..9ea553e7d6d8 --- /dev/null +++ b/airbyte-integrations/connectors/source-open-exchange-rates/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 77d5ca6b-d345-4dce-ba1e-1935a75778b8 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-open-exchange-rates + githubIssueLabel: source-open-exchange-rates + icon: airbyte.svg + license: MIT + name: Open Exchange Rates + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/open-exchange-rates +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-openweather/metadata.yaml b/airbyte-integrations/connectors/source-openweather/metadata.yaml new file mode 100644 index 000000000000..349e2a2f2c95 --- /dev/null +++ b/airbyte-integrations/connectors/source-openweather/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: d8540a80-6120-485d-b7d6-272bca477d9b + dockerImageTag: 0.1.6 + dockerRepository: airbyte/source-openweather + githubIssueLabel: source-openweather + icon: openweather.svg + license: MIT + name: OpenWeather + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/openweather +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-opsgenie/metadata.yaml b/airbyte-integrations/connectors/source-opsgenie/metadata.yaml new file mode 100644 index 000000000000..43668a85e166 --- /dev/null +++ b/airbyte-integrations/connectors/source-opsgenie/metadata.yaml @@ -0,0 +1,17 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 06bdb480-2598-40b8-8b0f-fc2e2d2abdda + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-opsgenie + githubIssueLabel: source-opsgenie + license: MIT + name: Opsgenie + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/opsgenie +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-oracle-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/source-oracle-strict-encrypt/metadata.yaml new file mode 100644 index 000000000000..044d32c9061f --- /dev/null +++ b/airbyte-integrations/connectors/source-oracle-strict-encrypt/metadata.yaml @@ -0,0 +1,22 @@ +data: + allowedHosts: + hosts: + - ${host} + - ${tunnel_method.tunnel_host} + catalogs: + cloud: + enabled: false # strict encrypt connectors are deployed to Cloud by their non strict encrypt sibling. + oss: + enabled: false # strict encrypt connectors are not used on OSS. + connectorSubtype: database + connectorType: source + definitionId: b39a7370-74c3-45a6-ac3a-380d48520a83 + dockerImageTag: 0.3.24 + dockerRepository: airbyte/source-oracle + githubIssueLabel: source-oracle + icon: oracle.svg + license: MIT + name: Oracle DB + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/oracle +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-oracle/metadata.yaml b/airbyte-integrations/connectors/source-oracle/metadata.yaml new file mode 100644 index 000000000000..988eb7b72bba --- /dev/null +++ b/airbyte-integrations/connectors/source-oracle/metadata.yaml @@ -0,0 +1,24 @@ +data: + allowedHosts: + hosts: + - ${host} + - ${tunnel_method.tunnel_host} + catalogs: + cloud: + dockerImageTag: 0.3.17 + dockerRepository: airbyte/source-oracle-strict-encrypt + enabled: true + oss: + enabled: true + connectorSubtype: database + connectorType: source + definitionId: b39a7370-74c3-45a6-ac3a-380d48520a83 + dockerImageTag: 0.3.24 + dockerRepository: airbyte/source-oracle + githubIssueLabel: source-oracle + icon: oracle.svg + license: MIT + name: Oracle DB + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/oracle +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-orb/metadata.yaml b/airbyte-integrations/connectors/source-orb/metadata.yaml new file mode 100644 index 000000000000..a3d8372ac8cd --- /dev/null +++ b/airbyte-integrations/connectors/source-orb/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 7f0455fb-4518-4ec0-b7a3-d808bf8081cc + dockerImageTag: 1.1.0 + dockerRepository: airbyte/source-orb + githubIssueLabel: source-orb + icon: orb.svg + license: MIT + name: Orb + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/orb +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-orbit/metadata.yaml b/airbyte-integrations/connectors/source-orbit/metadata.yaml new file mode 100644 index 000000000000..ce02fec308a5 --- /dev/null +++ b/airbyte-integrations/connectors/source-orbit/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 95bcc041-1d1a-4c2e-8802-0ca5b1bfa36a + dockerImageTag: 0.1.1 + dockerRepository: airbyte/source-orbit + githubIssueLabel: source-orbit + icon: orbit.svg + license: MIT + name: Orbit + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/orbit +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-oura/metadata.yaml b/airbyte-integrations/connectors/source-oura/metadata.yaml new file mode 100644 index 000000000000..a81501ac5cb3 --- /dev/null +++ b/airbyte-integrations/connectors/source-oura/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 2bf6c581-bec5-4e32-891d-de33036bd631 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-oura + githubIssueLabel: source-oura + icon: oura.svg + license: MIT + name: Oura + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/oura +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-outreach/metadata.yaml b/airbyte-integrations/connectors/source-outreach/metadata.yaml new file mode 100644 index 000000000000..da355541a58a --- /dev/null +++ b/airbyte-integrations/connectors/source-outreach/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 3490c201-5d95-4783-b600-eaf07a4c7787 + dockerImageTag: 0.2.0 + dockerRepository: airbyte/source-outreach + githubIssueLabel: source-outreach + icon: outreach.svg + license: MIT + name: Outreach + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/outreach +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-pardot/metadata.yaml b/airbyte-integrations/connectors/source-pardot/metadata.yaml new file mode 100644 index 000000000000..72eb1e1461da --- /dev/null +++ b/airbyte-integrations/connectors/source-pardot/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: ad15c7ba-72a7-440b-af15-b9a963dc1a8a + dockerImageTag: 0.1.1 + dockerRepository: airbyte/source-pardot + githubIssueLabel: source-pardot + icon: salesforcepardot.svg + license: MIT + name: Pardot + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/pardot +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-partnerstack/metadata.yaml b/airbyte-integrations/connectors/source-partnerstack/metadata.yaml new file mode 100644 index 000000000000..d68330d1869d --- /dev/null +++ b/airbyte-integrations/connectors/source-partnerstack/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: d30fb809-6456-484d-8e2c-ee12e0f6888d + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-partnerstack + githubIssueLabel: source-partnerstack + icon: partnerstack.svg + license: MIT + name: PartnerStack + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/partnerstack +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-paypal-transaction/metadata.yaml b/airbyte-integrations/connectors/source-paypal-transaction/metadata.yaml new file mode 100644 index 000000000000..7c846c9c6dc1 --- /dev/null +++ b/airbyte-integrations/connectors/source-paypal-transaction/metadata.yaml @@ -0,0 +1,22 @@ +data: + allowedHosts: + hosts: + - api-m.paypal.com + - api-m.sandbox.paypal.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: d913b0f2-cc51-4e55-a44c-8ba1697b9239 + dockerImageTag: 0.1.12 + dockerRepository: airbyte/source-paypal-transaction + githubIssueLabel: source-paypal-transaction + icon: paypal.svg + license: MIT + name: Paypal Transaction + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/paypal-transaction +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-paystack/metadata.yaml b/airbyte-integrations/connectors/source-paystack/metadata.yaml new file mode 100644 index 000000000000..17deb8ee6b53 --- /dev/null +++ b/airbyte-integrations/connectors/source-paystack/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - api.paystack.co + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 193bdcb8-1dd9-48d1-aade-91cadfd74f9b + dockerImageTag: 0.1.3 + dockerRepository: airbyte/source-paystack + githubIssueLabel: source-paystack + icon: paystack.svg + license: MIT + name: Paystack + releaseStage: beta + supportUrl: https://docs.airbyte.com/integrations/sources/paystack +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-pendo/metadata.yaml b/airbyte-integrations/connectors/source-pendo/metadata.yaml new file mode 100644 index 000000000000..56e39761119d --- /dev/null +++ b/airbyte-integrations/connectors/source-pendo/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: b1ccb590-e84f-46c0-83a0-2048ccfffdae + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-pendo + githubIssueLabel: source-pendo + icon: pendo.svg + license: MIT + name: Pendo + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/pendo +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-persistiq/metadata.yaml b/airbyte-integrations/connectors/source-persistiq/metadata.yaml new file mode 100644 index 000000000000..8aabd03b8fe5 --- /dev/null +++ b/airbyte-integrations/connectors/source-persistiq/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 3052c77e-8b91-47e2-97a0-a29a22794b4b + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-persistiq + githubIssueLabel: source-persistiq + icon: persistiq.svg + license: MIT + name: PersistIq + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/persistiq +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-pexels-api/metadata.yaml b/airbyte-integrations/connectors/source-pexels-api/metadata.yaml new file mode 100644 index 000000000000..5b64c4e4865d --- /dev/null +++ b/airbyte-integrations/connectors/source-pexels-api/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 69d9eb65-8026-47dc-baf1-e4bf67901fd6 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-pexels-api + githubIssueLabel: source-pexels-api + icon: pexels.svg + license: MIT + name: Pexels API + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/pexels-api +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-pinterest/metadata.yaml b/airbyte-integrations/connectors/source-pinterest/metadata.yaml new file mode 100644 index 000000000000..953d3327ba12 --- /dev/null +++ b/airbyte-integrations/connectors/source-pinterest/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - api.pinterest.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 5cb7e5fe-38c2-11ec-8d3d-0242ac130003 + dockerImageTag: 0.2.4 + dockerRepository: airbyte/source-pinterest + githubIssueLabel: source-pinterest + icon: pinterest.svg + license: MIT + name: Pinterest + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/pinterest +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-pipedrive/metadata.yaml b/airbyte-integrations/connectors/source-pipedrive/metadata.yaml new file mode 100644 index 000000000000..836decaec4d4 --- /dev/null +++ b/airbyte-integrations/connectors/source-pipedrive/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - api.pipedrive.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: d8286229-c680-4063-8c59-23b9b391c700 + dockerImageTag: 0.1.17 + dockerRepository: airbyte/source-pipedrive + githubIssueLabel: source-pipedrive + icon: pipedrive.svg + license: MIT + name: Pipedrive + releaseStage: beta + supportUrl: https://docs.airbyte.com/integrations/sources/pipedrive +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-pivotal-tracker/metadata.yaml b/airbyte-integrations/connectors/source-pivotal-tracker/metadata.yaml new file mode 100644 index 000000000000..e780c47520cc --- /dev/null +++ b/airbyte-integrations/connectors/source-pivotal-tracker/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: d60f5393-f99e-4310-8d05-b1876820f40e + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-pivotal-tracker + githubIssueLabel: source-pivotal-tracker + icon: pivotal-tracker.svg + license: MIT + name: Pivotal Tracker + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/pivotal-tracker +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-plaid/metadata.yaml b/airbyte-integrations/connectors/source-plaid/metadata.yaml new file mode 100644 index 000000000000..585cf1b5beef --- /dev/null +++ b/airbyte-integrations/connectors/source-plaid/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: ed799e2b-2158-4c66-8da4-b40fe63bc72a + dockerImageTag: 0.3.2 + dockerRepository: airbyte/source-plaid + githubIssueLabel: source-plaid + icon: plaid.svg + license: MIT + name: Plaid + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/plaid +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-plausible/metadata.yaml b/airbyte-integrations/connectors/source-plausible/metadata.yaml new file mode 100644 index 000000000000..051dfe70c2c7 --- /dev/null +++ b/airbyte-integrations/connectors/source-plausible/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 603ba446-3d75-41d7-92f3-aba901f8b897 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-plausible + githubIssueLabel: source-plausible + icon: plausible.svg + license: MIT + name: Plausible + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/plausible +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-pocket/metadata.yaml b/airbyte-integrations/connectors/source-pocket/metadata.yaml new file mode 100644 index 000000000000..3a27cdc2ae9c --- /dev/null +++ b/airbyte-integrations/connectors/source-pocket/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: b0dd65f1-081f-4731-9c51-38e9e6aa0ebf + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-pocket + githubIssueLabel: source-pocket + icon: pocket.svg + license: MIT + name: Pocket + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/pocket +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-pokeapi/metadata.yaml b/airbyte-integrations/connectors/source-pokeapi/metadata.yaml new file mode 100644 index 000000000000..1626dc2b4b1d --- /dev/null +++ b/airbyte-integrations/connectors/source-pokeapi/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 6371b14b-bc68-4236-bfbd-468e8df8e968 + dockerImageTag: 0.1.5 + dockerRepository: airbyte/source-pokeapi + githubIssueLabel: source-pokeapi + icon: pokeapi.svg + license: MIT + name: PokeAPI + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/pokeapi +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-polygon-stock-api/metadata.yaml b/airbyte-integrations/connectors/source-polygon-stock-api/metadata.yaml new file mode 100644 index 000000000000..47c00de25788 --- /dev/null +++ b/airbyte-integrations/connectors/source-polygon-stock-api/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - api.polygon.io + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 5807d72f-0abc-49f9-8fa5-ae820007032b + dockerImageTag: 0.1.1 + dockerRepository: airbyte/source-polygon-stock-api + githubIssueLabel: source-polygon-stock-api + icon: polygon.svg + license: MIT + name: Polygon Stock API + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/polygon-stock-api +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-postgres-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/source-postgres-strict-encrypt/metadata.yaml new file mode 100644 index 000000000000..6e8f3e134759 --- /dev/null +++ b/airbyte-integrations/connectors/source-postgres-strict-encrypt/metadata.yaml @@ -0,0 +1,22 @@ +data: + allowedHosts: + hosts: + - ${host} + - ${tunnel_method.tunnel_host} + catalogs: + cloud: + enabled: false # strict encrypt connectors are deployed to Cloud by their non strict encrypt sibling. + oss: + enabled: false # strict encrypt connectors are not used on OSS. + connectorSubtype: database + connectorType: source + definitionId: decd338e-5647-4c0b-adf4-da0e75f5a750 + dockerImageTag: 2.0.17 + dockerRepository: airbyte/source-postgres + githubIssueLabel: source-postgres + icon: postgresql.svg + license: MIT + name: Postgres + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/postgres +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-postgres/metadata.yaml b/airbyte-integrations/connectors/source-postgres/metadata.yaml new file mode 100644 index 000000000000..e4152acbd3c9 --- /dev/null +++ b/airbyte-integrations/connectors/source-postgres/metadata.yaml @@ -0,0 +1,24 @@ +data: + allowedHosts: + hosts: + - ${host} + - ${tunnel_method.tunnel_host} + catalogs: + cloud: + dockerImageTag: 2.0.16 + dockerRepository: airbyte/source-postgres-strict-encrypt + enabled: true + oss: + enabled: true + connectorSubtype: database + connectorType: source + definitionId: decd338e-5647-4c0b-adf4-da0e75f5a750 + dockerImageTag: 2.0.17 + dockerRepository: airbyte/source-postgres + githubIssueLabel: source-postgres + icon: postgresql.svg + license: MIT + name: Postgres + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/postgres +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-posthog/metadata.yaml b/airbyte-integrations/connectors/source-posthog/metadata.yaml new file mode 100644 index 000000000000..fe2b647d0a59 --- /dev/null +++ b/airbyte-integrations/connectors/source-posthog/metadata.yaml @@ -0,0 +1,22 @@ +data: + allowedHosts: + hosts: + - ${base_url} + - app.posthog.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: af6d50ee-dddf-4126-a8ee-7faee990774f + dockerImageTag: 0.1.9 + dockerRepository: airbyte/source-posthog + githubIssueLabel: source-posthog + icon: posthog.svg + license: MIT + name: PostHog + releaseStage: beta + supportUrl: https://docs.airbyte.com/integrations/sources/posthog +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-postmarkapp/metadata.yaml b/airbyte-integrations/connectors/source-postmarkapp/metadata.yaml new file mode 100644 index 000000000000..0afdb60402a7 --- /dev/null +++ b/airbyte-integrations/connectors/source-postmarkapp/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: cde75ca1-1e28-4a0f-85bb-90c546de9f1f + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-postmarkapp + githubIssueLabel: source-postmarkapp + icon: postmark.svg + license: MIT + name: Postmark App + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/postmarkapp +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-prestashop/metadata.yaml b/airbyte-integrations/connectors/source-prestashop/metadata.yaml new file mode 100644 index 000000000000..7fc4b030efac --- /dev/null +++ b/airbyte-integrations/connectors/source-prestashop/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - ${domain} + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: d60a46d4-709f-4092-a6b7-2457f7d455f5 + dockerImageTag: 0.3.1 + dockerRepository: airbyte/source-prestashop + githubIssueLabel: source-prestashop + icon: prestashop.svg + license: MIT + name: PrestaShop + releaseStage: beta + supportUrl: https://docs.airbyte.com/integrations/sources/prestashop +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-primetric/metadata.yaml b/airbyte-integrations/connectors/source-primetric/metadata.yaml new file mode 100644 index 000000000000..de35f2399dc3 --- /dev/null +++ b/airbyte-integrations/connectors/source-primetric/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: f636c3c6-4077-45ac-b109-19fc62a283c1 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-primetric + githubIssueLabel: source-primetric + icon: primetric.svg + license: MIT + name: Primetric + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/primetric +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-public-apis/metadata.yaml b/airbyte-integrations/connectors/source-public-apis/metadata.yaml new file mode 100644 index 000000000000..f792d88a4b56 --- /dev/null +++ b/airbyte-integrations/connectors/source-public-apis/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: a4617b39-3c14-44cd-a2eb-6e720f269235 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-public-apis + githubIssueLabel: source-public-apis + icon: publicapi.svg + license: MIT + name: Public APIs + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/public-apis +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-punk-api/metadata.yaml b/airbyte-integrations/connectors/source-punk-api/metadata.yaml new file mode 100644 index 000000000000..d263a8c05195 --- /dev/null +++ b/airbyte-integrations/connectors/source-punk-api/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: dbe9b7ae-7b46-4e44-a507-02a343cf7230 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-punk-api + githubIssueLabel: source-punk-api + icon: punkapi.svg + license: MIT + name: Punk API + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/punk-api +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-pypi/metadata.yaml b/airbyte-integrations/connectors/source-pypi/metadata.yaml new file mode 100644 index 000000000000..7d8ae3ab708a --- /dev/null +++ b/airbyte-integrations/connectors/source-pypi/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 88ecd3a8-5f5b-11ed-9b6a-0242ac120002 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-pypi + githubIssueLabel: source-pypi + icon: pypi.svg + license: MIT + name: PyPI + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/pypi +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-qonto/metadata.yaml b/airbyte-integrations/connectors/source-qonto/metadata.yaml new file mode 100644 index 000000000000..6ed1842f6450 --- /dev/null +++ b/airbyte-integrations/connectors/source-qonto/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: f7c0b910-5f66-11ed-9b6a-0242ac120002 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-qonto + githubIssueLabel: source-qonto + icon: qonto.svg + license: MIT + name: Qonto + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/public-qonto +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-qualaroo/metadata.yaml b/airbyte-integrations/connectors/source-qualaroo/metadata.yaml new file mode 100644 index 000000000000..8e89c669c3d1 --- /dev/null +++ b/airbyte-integrations/connectors/source-qualaroo/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: b08e4776-d1de-4e80-ab5c-1e51dad934a2 + dockerImageTag: 0.1.2 + dockerRepository: airbyte/source-qualaroo + githubIssueLabel: source-qualaroo + icon: qualaroo.svg + license: MIT + name: Qualaroo + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/qualaroo +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-quickbooks-singer/metadata.yaml b/airbyte-integrations/connectors/source-quickbooks-singer/metadata.yaml new file mode 100644 index 000000000000..2c7643ee7ab6 --- /dev/null +++ b/airbyte-integrations/connectors/source-quickbooks-singer/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 29b409d9-30a5-4cc8-ad50-886eb846fea3 + dockerImageTag: 0.1.5 + dockerRepository: airbyte/source-quickbooks-singer + githubIssueLabel: source-quickbooks-singer + icon: qb.svg + license: MIT + name: QuickBooks + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/quickbooks-singer +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-railz/metadata.yaml b/airbyte-integrations/connectors/source-railz/metadata.yaml new file mode 100644 index 000000000000..80b48a5adeeb --- /dev/null +++ b/airbyte-integrations/connectors/source-railz/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 9b6cc0c0-da81-4103-bbfd-5279e18a849a + dockerImageTag: 0.1.1 + dockerRepository: airbyte/source-railz + githubIssueLabel: source-railz + icon: railz.svg + license: MIT + name: Railz + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/railz +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-rd-station-marketing/metadata.yaml b/airbyte-integrations/connectors/source-rd-station-marketing/metadata.yaml new file mode 100644 index 000000000000..9a3864f0fddc --- /dev/null +++ b/airbyte-integrations/connectors/source-rd-station-marketing/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: fb141f29-be2a-450b-a4f2-2cd203a00f84 + dockerImageTag: 0.1.1 + dockerRepository: airbyte/source-rd-station-marketing + githubIssueLabel: source-rd-station-marketing + icon: rdstation.svg + license: MIT + name: RD Station Marketing + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/rd-station-marketing +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-recharge/metadata.yaml b/airbyte-integrations/connectors/source-recharge/metadata.yaml new file mode 100644 index 000000000000..dd63f009a6ff --- /dev/null +++ b/airbyte-integrations/connectors/source-recharge/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - api.rechargeapps.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 45d2e135-2ede-49e1-939f-3e3ec357a65e + dockerImageTag: 0.2.7 + dockerRepository: airbyte/source-recharge + githubIssueLabel: source-recharge + icon: recharge.svg + license: MIT + name: Recharge + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/recharge +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-recreation/metadata.yaml b/airbyte-integrations/connectors/source-recreation/metadata.yaml new file mode 100644 index 000000000000..9a9a51d8e9ea --- /dev/null +++ b/airbyte-integrations/connectors/source-recreation/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 25d7535d-91e0-466a-aa7f-af81578be277 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-recreation + githubIssueLabel: source-recreation + icon: recreation.svg + license: MIT + name: Recreation + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/recreation +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-recruitee/metadata.yaml b/airbyte-integrations/connectors/source-recruitee/metadata.yaml new file mode 100644 index 000000000000..b109a05b4241 --- /dev/null +++ b/airbyte-integrations/connectors/source-recruitee/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 3b046ac7-d8d3-4eb3-b122-f96b2a16d8a8 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-recruitee + githubIssueLabel: source-recruitee + icon: recruitee.svg + license: MIT + name: Recruitee + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/recruitee +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-recurly/metadata.yaml b/airbyte-integrations/connectors/source-recurly/metadata.yaml new file mode 100644 index 000000000000..decc883d2d3b --- /dev/null +++ b/airbyte-integrations/connectors/source-recurly/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: cd42861b-01fc-4658-a8ab-5d11d0510f01 + dockerImageTag: 0.4.1 + dockerRepository: airbyte/source-recurly + githubIssueLabel: source-recurly + icon: recurly.svg + license: MIT + name: Recurly + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/recurly +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-redshift/metadata.yaml b/airbyte-integrations/connectors/source-redshift/metadata.yaml new file mode 100644 index 000000000000..5f042c9790ff --- /dev/null +++ b/airbyte-integrations/connectors/source-redshift/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: database + connectorType: source + definitionId: e87ffa8e-a3b5-f69c-9076-6011339de1f6 + dockerImageTag: 0.3.16 + dockerRepository: airbyte/source-redshift + githubIssueLabel: source-redshift + icon: redshift.svg + license: MIT + name: Redshift + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/redshift +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-reply-io/metadata.yaml b/airbyte-integrations/connectors/source-reply-io/metadata.yaml new file mode 100644 index 000000000000..d4052dfe1270 --- /dev/null +++ b/airbyte-integrations/connectors/source-reply-io/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 8cc6537e-f8a6-423c-b960-e927af76116e + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-reply-io + githubIssueLabel: source-reply-io + icon: reply-io.svg + license: MIT + name: Reply.io + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/reply-io +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-retently/metadata.yaml b/airbyte-integrations/connectors/source-retently/metadata.yaml new file mode 100644 index 000000000000..5ee36d4f6ff3 --- /dev/null +++ b/airbyte-integrations/connectors/source-retently/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: db04ecd1-42e7-4115-9cec-95812905c626 + dockerImageTag: 0.1.3 + dockerRepository: airbyte/source-retently + githubIssueLabel: source-retently + icon: retently.svg + license: MIT + name: Retently + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/retently +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-rki-covid/metadata.yaml b/airbyte-integrations/connectors/source-rki-covid/metadata.yaml new file mode 100644 index 000000000000..155b1f756e5b --- /dev/null +++ b/airbyte-integrations/connectors/source-rki-covid/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: d78e5de0-aa44-4744-aa4f-74c818ccfe19 + dockerImageTag: 0.1.2 + dockerRepository: airbyte/source-rki-covid + githubIssueLabel: source-rki-covid + icon: rki.svg + license: MIT + name: RKI Covid + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/rki-covid +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-rocket-chat/metadata.yaml b/airbyte-integrations/connectors/source-rocket-chat/metadata.yaml new file mode 100644 index 000000000000..a95c910ed499 --- /dev/null +++ b/airbyte-integrations/connectors/source-rocket-chat/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 921d9608-3915-450b-8078-0af18801ea1b + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-rocket-chat + githubIssueLabel: source-rocket-chat + icon: rocket-chat.svg + license: MIT + name: Rocket.chat + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/rocket-chat +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-rss/metadata.yaml b/airbyte-integrations/connectors/source-rss/metadata.yaml new file mode 100644 index 000000000000..2783ce8c4ddf --- /dev/null +++ b/airbyte-integrations/connectors/source-rss/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 0efee448-6948-49e2-b786-17db50647908 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-rss + githubIssueLabel: source-rss + icon: rss.svg + license: MIT + name: RSS + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/rss +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-s3/metadata.yaml b/airbyte-integrations/connectors/source-s3/metadata.yaml new file mode 100644 index 000000000000..1ff27ddd71d4 --- /dev/null +++ b/airbyte-integrations/connectors/source-s3/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - "*.s3.amazonaws.com" + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: file + connectorType: source + definitionId: 69589781-7828-43c5-9f63-8925b1c1ccc2 + dockerImageTag: 2.0.4 + dockerRepository: airbyte/source-s3 + githubIssueLabel: source-s3 + icon: s3.svg + license: MIT + name: S3 + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/s3 +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-salesforce-singer/metadata.yaml b/airbyte-integrations/connectors/source-salesforce-singer/metadata.yaml new file mode 100644 index 000000000000..d76ae5c3a904 --- /dev/null +++ b/airbyte-integrations/connectors/source-salesforce-singer/metadata.yaml @@ -0,0 +1,17 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: false + connectorSubtype: api + connectorType: source + definitionId: 2470e835-feaf-4db6-96f3-70fd645acc77 + dockerImageTag: 0.2.5 + dockerRepository: airbyte/source-salesforce-singer + githubIssueLabel: source-salesforce-singer + license: MIT + name: Salesforce (Singer) + releaseStage: alpha + supportUrl: https://docs.airbyte.io/integrations/sources/salesforce +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-salesforce/metadata.yaml b/airbyte-integrations/connectors/source-salesforce/metadata.yaml new file mode 100644 index 000000000000..ee548e55ce2b --- /dev/null +++ b/airbyte-integrations/connectors/source-salesforce/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - "*.salesforce.com" + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: b117307c-14b6-41aa-9422-947e34922962 + dockerImageTag: 2.0.9 + dockerRepository: airbyte/source-salesforce + githubIssueLabel: source-salesforce + icon: salesforce.svg + license: MIT + name: Salesforce + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/salesforce +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-salesloft/metadata.yaml b/airbyte-integrations/connectors/source-salesloft/metadata.yaml new file mode 100644 index 000000000000..74c0ab915218 --- /dev/null +++ b/airbyte-integrations/connectors/source-salesloft/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - api.salesloft.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 41991d12-d4b5-439e-afd0-260a31d4c53f + dockerImageTag: 1.0.0 + dockerRepository: airbyte/source-salesloft + githubIssueLabel: source-salesloft + icon: salesloft.svg + license: MIT + name: SalesLoft + releaseStage: beta + supportUrl: https://docs.airbyte.com/integrations/sources/salesloft +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-sap-fieldglass/metadata.yaml b/airbyte-integrations/connectors/source-sap-fieldglass/metadata.yaml new file mode 100644 index 000000000000..5edfd13ac603 --- /dev/null +++ b/airbyte-integrations/connectors/source-sap-fieldglass/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: ec5f3102-fb31-4916-99ae-864faf8e7e25 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-sap-fieldglass + githubIssueLabel: source-sap-fieldglass + icon: sapfieldglass.svg + license: MIT + name: SAP Fieldglass + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/sap-fieldglass +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-search-metrics/metadata.yaml b/airbyte-integrations/connectors/source-search-metrics/metadata.yaml new file mode 100644 index 000000000000..7ea73013bfcb --- /dev/null +++ b/airbyte-integrations/connectors/source-search-metrics/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 8d7ef552-2c0f-11ec-8d3d-0242ac130003 + dockerImageTag: 0.1.1 + dockerRepository: airbyte/source-search-metrics + githubIssueLabel: source-search-metrics + icon: searchmetrics.svg + license: MIT + name: SearchMetrics + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/search-metrics +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-secoda/metadata.yaml b/airbyte-integrations/connectors/source-secoda/metadata.yaml new file mode 100644 index 000000000000..87568f7dfb96 --- /dev/null +++ b/airbyte-integrations/connectors/source-secoda/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: da9fc6b9-8059-4be0-b204-f56e22e4d52d + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-secoda + githubIssueLabel: source-secoda + icon: secoda.svg + license: MIT + name: Secoda + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/secoda +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-sendgrid/metadata.yaml b/airbyte-integrations/connectors/source-sendgrid/metadata.yaml new file mode 100644 index 000000000000..17e9bc54a5ae --- /dev/null +++ b/airbyte-integrations/connectors/source-sendgrid/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - api.sendgrid.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: fbb5fbe2-16ad-4cf4-af7d-ff9d9c316c87 + dockerImageTag: 0.3.1 + dockerRepository: airbyte/source-sendgrid + githubIssueLabel: source-sendgrid + icon: sendgrid.svg + license: MIT + name: Sendgrid + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/sendgrid +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-sendinblue/metadata.yaml b/airbyte-integrations/connectors/source-sendinblue/metadata.yaml new file mode 100644 index 000000000000..98d72f32903c --- /dev/null +++ b/airbyte-integrations/connectors/source-sendinblue/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 2e88fa20-a2f6-43cc-bba6-98a0a3f244fb + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-sendinblue + githubIssueLabel: source-sendinblue + icon: sendinblue.svg + license: MIT + name: Sendinblue + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/sendinblue +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-senseforce/metadata.yaml b/airbyte-integrations/connectors/source-senseforce/metadata.yaml new file mode 100644 index 000000000000..c5fbfaa6b741 --- /dev/null +++ b/airbyte-integrations/connectors/source-senseforce/metadata.yaml @@ -0,0 +1,22 @@ +data: + allowedHosts: + hosts: + - galaxyapi.senseforce.io + - senseforce.io + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 39de93cb-1511-473e-a673-5cbedb9436af + dockerImageTag: 0.1.1 + dockerRepository: airbyte/source-senseforce + githubIssueLabel: source-senseforce + icon: senseforce.svg + license: MIT + name: Senseforce + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/senseforce +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-sentry/metadata.yaml b/airbyte-integrations/connectors/source-sentry/metadata.yaml new file mode 100644 index 000000000000..ade93d58f2d3 --- /dev/null +++ b/airbyte-integrations/connectors/source-sentry/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - "*" + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: cdaf146a-9b75-49fd-9dd2-9d64a0bb4781 + dockerImageTag: 0.2.0 + dockerRepository: airbyte/source-sentry + githubIssueLabel: source-sentry + icon: sentry.svg + license: MIT + name: Sentry + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/sentry +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-sftp-bulk/metadata.yaml b/airbyte-integrations/connectors/source-sftp-bulk/metadata.yaml new file mode 100644 index 000000000000..349d64507a47 --- /dev/null +++ b/airbyte-integrations/connectors/source-sftp-bulk/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: file + connectorType: source + definitionId: 31e3242f-dee7-4cdc-a4b8-8e06c5458517 + dockerImageTag: 0.1.1 + dockerRepository: airbyte/source-sftp-bulk + githubIssueLabel: source-sftp-bulk + icon: sftp.svg + license: MIT + name: SFTP Bulk + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/sftp-bulk +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-sftp/metadata.yaml b/airbyte-integrations/connectors/source-sftp/metadata.yaml new file mode 100644 index 000000000000..3a333ec038f3 --- /dev/null +++ b/airbyte-integrations/connectors/source-sftp/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: file + connectorType: source + definitionId: a827c52e-791c-4135-a245-e233c5255199 + dockerImageTag: 0.1.2 + dockerRepository: airbyte/source-sftp + githubIssueLabel: source-sftp + icon: sftp.svg + license: MIT + name: SFTP + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/sftp +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-shopify/metadata.yaml b/airbyte-integrations/connectors/source-shopify/metadata.yaml new file mode 100644 index 000000000000..08456429dbf2 --- /dev/null +++ b/airbyte-integrations/connectors/source-shopify/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 9da77001-af33-4bcd-be46-6252bf9342b9 + dockerImageTag: 0.3.2 + dockerRepository: airbyte/source-shopify + githubIssueLabel: source-shopify + icon: shopify.svg + license: MIT + name: Shopify + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/shopify +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-shortio/metadata.yaml b/airbyte-integrations/connectors/source-shortio/metadata.yaml new file mode 100644 index 000000000000..0b5c55b93d0e --- /dev/null +++ b/airbyte-integrations/connectors/source-shortio/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 2fed2292-5586-480c-af92-9944e39fe12d + dockerImageTag: 0.1.3 + dockerRepository: airbyte/source-shortio + githubIssueLabel: source-shortio + icon: short.svg + license: MIT + name: Short.io + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/shortio +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-slack/metadata.yaml b/airbyte-integrations/connectors/source-slack/metadata.yaml new file mode 100644 index 000000000000..810c28b4147a --- /dev/null +++ b/airbyte-integrations/connectors/source-slack/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - slack.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: c2281cee-86f9-4a86-bb48-d23286b4c7bd + dockerImageTag: 0.1.25 + dockerRepository: airbyte/source-slack + githubIssueLabel: source-slack + icon: slack.svg + license: MIT + name: Slack + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/slack +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-smaily/metadata.yaml b/airbyte-integrations/connectors/source-smaily/metadata.yaml new file mode 100644 index 000000000000..5f3fd4e5f261 --- /dev/null +++ b/airbyte-integrations/connectors/source-smaily/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 781f8b1d-4e20-4842-a2c3-cd9b119d65fa + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-smaily + githubIssueLabel: source-smaily + icon: smaily.svg + license: MIT + name: Smaily + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/smaily +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-smartengage/metadata.yaml b/airbyte-integrations/connectors/source-smartengage/metadata.yaml new file mode 100644 index 000000000000..257cff362bcc --- /dev/null +++ b/airbyte-integrations/connectors/source-smartengage/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 21cc4a17-a011-4485-8a3e-e2341a91ab9f + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-smartengage + githubIssueLabel: source-smartengage + icon: smartengage.svg + license: MIT + name: SmartEngage + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/smartengage +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-smartsheets/metadata.yaml b/airbyte-integrations/connectors/source-smartsheets/metadata.yaml new file mode 100644 index 000000000000..1358fe253106 --- /dev/null +++ b/airbyte-integrations/connectors/source-smartsheets/metadata.yaml @@ -0,0 +1,22 @@ +data: + allowedHosts: + hosts: + - app.smartsheet.com + - api.smartsheet.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 374ebc65-6636-4ea0-925c-7d35999a8ffc + dockerImageTag: 1.0.0 + dockerRepository: airbyte/source-smartsheets + githubIssueLabel: source-smartsheets + icon: smartsheet.svg + license: MIT + name: Smartsheets + releaseStage: beta + supportUrl: https://docs.airbyte.com/integrations/sources/smartsheets +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-snapchat-marketing/metadata.yaml b/airbyte-integrations/connectors/source-snapchat-marketing/metadata.yaml new file mode 100644 index 000000000000..da268764389d --- /dev/null +++ b/airbyte-integrations/connectors/source-snapchat-marketing/metadata.yaml @@ -0,0 +1,22 @@ +data: + allowedHosts: + hosts: + - accounts.snapchat.com + - adsapi.snapchat.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 200330b2-ea62-4d11-ac6d-cfe3e3f8ab2b + dockerImageTag: 0.1.15 + dockerRepository: airbyte/source-snapchat-marketing + githubIssueLabel: source-snapchat-marketing + icon: snapchat.svg + license: MIT + name: Snapchat Marketing + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/snapchat-marketing +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-snowflake/metadata.yaml b/airbyte-integrations/connectors/source-snowflake/metadata.yaml new file mode 100644 index 000000000000..1a14cf20b548 --- /dev/null +++ b/airbyte-integrations/connectors/source-snowflake/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - ${host} + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: database + connectorType: source + definitionId: e2d65910-8c8b-40a1-ae7d-ee2416b2bfa2 + dockerImageTag: 0.1.34 + dockerRepository: airbyte/source-snowflake + githubIssueLabel: source-snowflake + icon: snowflake.svg + license: MIT + name: Snowflake + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/snowflake +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-sonar-cloud/metadata.yaml b/airbyte-integrations/connectors/source-sonar-cloud/metadata.yaml new file mode 100644 index 000000000000..62b5c69e4e32 --- /dev/null +++ b/airbyte-integrations/connectors/source-sonar-cloud/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - sonarcloud.io + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 3ab1d7d0-1577-4ab9-bcc4-1ff6a4c2c9f2 + dockerImageTag: 0.1.1 + dockerRepository: airbyte/source-sonar-cloud + githubIssueLabel: source-sonar-cloud + icon: sonarcloud.svg + license: MIT + name: Sonar Cloud + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/sonar-cloud +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-spacex-api/metadata.yaml b/airbyte-integrations/connectors/source-spacex-api/metadata.yaml new file mode 100644 index 000000000000..ea1929eef5d4 --- /dev/null +++ b/airbyte-integrations/connectors/source-spacex-api/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 62235e65-af7a-4138-9130-0bda954eb6a8 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-spacex-api + githubIssueLabel: source-spacex-api + icon: spacex.svg + license: MIT + name: SpaceX API + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/spacex-api +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-square/metadata.yaml b/airbyte-integrations/connectors/source-square/metadata.yaml new file mode 100644 index 000000000000..c1c1c48d5eb2 --- /dev/null +++ b/airbyte-integrations/connectors/source-square/metadata.yaml @@ -0,0 +1,22 @@ +data: + allowedHosts: + hosts: + - connect.squareupsandbox.com + - connect.squareup.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 77225a51-cd15-4a13-af02-65816bd0ecf4 + dockerImageTag: 0.2.2 + dockerRepository: airbyte/source-square + githubIssueLabel: source-square + icon: square.svg + license: MIT + name: Square + releaseStage: beta + supportUrl: https://docs.airbyte.com/integrations/sources/square +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-statuspage/metadata.yaml b/airbyte-integrations/connectors/source-statuspage/metadata.yaml new file mode 100644 index 000000000000..a7dbb3589884 --- /dev/null +++ b/airbyte-integrations/connectors/source-statuspage/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 74cbd708-46c3-4512-9c93-abd5c3e9a94d + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-statuspage + githubIssueLabel: source-statuspage + icon: statuspage.svg + license: MIT + name: Statuspage + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/statuspage +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-strava/metadata.yaml b/airbyte-integrations/connectors/source-strava/metadata.yaml new file mode 100644 index 000000000000..4daf33447d77 --- /dev/null +++ b/airbyte-integrations/connectors/source-strava/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - strava.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 7a4327c4-315a-11ec-8d3d-0242ac130003 + dockerImageTag: 0.1.4 + dockerRepository: airbyte/source-strava + githubIssueLabel: source-strava + icon: strava.svg + license: MIT + name: Strava + releaseStage: beta + supportUrl: https://docs.airbyte.com/integrations/sources/strava +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-stripe/metadata.yaml b/airbyte-integrations/connectors/source-stripe/metadata.yaml new file mode 100644 index 000000000000..b12598299b14 --- /dev/null +++ b/airbyte-integrations/connectors/source-stripe/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - api.stripe.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: e094cb9a-26de-4645-8761-65c0c425d1de + dockerImageTag: 3.0.5 + dockerRepository: airbyte/source-stripe + githubIssueLabel: source-stripe + icon: stripe.svg + license: MIT + name: Stripe + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/stripe +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-survey-sparrow/metadata.yaml b/airbyte-integrations/connectors/source-survey-sparrow/metadata.yaml new file mode 100644 index 000000000000..f0079b9d8f19 --- /dev/null +++ b/airbyte-integrations/connectors/source-survey-sparrow/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 4a4d887b-0f2d-4b33-ab7f-9b01b9072804 + dockerImageTag: 0.2.0 + dockerRepository: airbyte/source-survey-sparrow + githubIssueLabel: source-survey-sparrow + icon: surveysparrow.svg + license: MIT + name: SurveySparrow + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/survey-sparrow +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-surveycto/metadata.yaml b/airbyte-integrations/connectors/source-surveycto/metadata.yaml new file mode 100644 index 000000000000..26b17b1faf94 --- /dev/null +++ b/airbyte-integrations/connectors/source-surveycto/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: dd4632f4-15e0-4649-9b71-41719fb1fdee + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-surveycto + githubIssueLabel: source-surveycto + icon: surveycto.svg + license: MIT + name: SurveyCTO + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/surveycto +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-surveymonkey/metadata.yaml b/airbyte-integrations/connectors/source-surveymonkey/metadata.yaml new file mode 100644 index 000000000000..97ed811d058b --- /dev/null +++ b/airbyte-integrations/connectors/source-surveymonkey/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - api.surveymonkey.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: badc5925-0485-42be-8caa-b34096cb71b5 + dockerImageTag: 0.1.15 + dockerRepository: airbyte/source-surveymonkey + githubIssueLabel: source-surveymonkey + icon: surveymonkey.svg + license: MIT + name: SurveyMonkey + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/surveymonkey +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-talkdesk-explore/metadata.yaml b/airbyte-integrations/connectors/source-talkdesk-explore/metadata.yaml new file mode 100644 index 000000000000..0fe2f4bf0f35 --- /dev/null +++ b/airbyte-integrations/connectors/source-talkdesk-explore/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: f00d2cf4-3c28-499a-ba93-b50b6f26359e + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-talkdesk-explore + githubIssueLabel: source-talkdesk-explore + icon: talkdesk-explore.svg + license: MIT + name: TalkDesk Explore + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/talkdesk-explore +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-tempo/metadata.yaml b/airbyte-integrations/connectors/source-tempo/metadata.yaml new file mode 100644 index 000000000000..be314d575e8c --- /dev/null +++ b/airbyte-integrations/connectors/source-tempo/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - api.tempo.io + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: d1aa448b-7c54-498e-ad95-263cbebcd2db + dockerImageTag: 0.3.1 + dockerRepository: airbyte/source-tempo + githubIssueLabel: source-tempo + icon: tempo.svg + license: MIT + name: Tempo + releaseStage: beta + supportUrl: https://docs.airbyte.com/integrations/sources/tempo +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-the-guardian-api/metadata.yaml b/airbyte-integrations/connectors/source-the-guardian-api/metadata.yaml new file mode 100644 index 000000000000..096d3ba9b9fa --- /dev/null +++ b/airbyte-integrations/connectors/source-the-guardian-api/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: d42bd69f-6bf0-4d0b-9209-16231af07a92 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-the-guardian-api + githubIssueLabel: source-the-guardian-api + icon: theguardian.svg + license: MIT + name: The Guardian API + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/the-guardian-api +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-tidb/metadata.yaml b/airbyte-integrations/connectors/source-tidb/metadata.yaml new file mode 100644 index 000000000000..33d7e8284e33 --- /dev/null +++ b/airbyte-integrations/connectors/source-tidb/metadata.yaml @@ -0,0 +1,22 @@ +data: + allowedHosts: + hosts: + - ${host} + - ${tunnel_method.tunnel_host} + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: database + connectorType: source + definitionId: 0dad1a35-ccf8-4d03-b73e-6788c00b13ae + dockerImageTag: 0.2.4 + dockerRepository: airbyte/source-tidb + githubIssueLabel: source-tidb + icon: tidb.svg + license: MIT + name: TiDB + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/tidb +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-tiktok-marketing/metadata.yaml b/airbyte-integrations/connectors/source-tiktok-marketing/metadata.yaml new file mode 100644 index 000000000000..d24cc8d5fe60 --- /dev/null +++ b/airbyte-integrations/connectors/source-tiktok-marketing/metadata.yaml @@ -0,0 +1,22 @@ +data: + allowedHosts: + hosts: + - sandbox-ads.tiktok.com + - business-api.tiktok.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 4bfac00d-ce15-44ff-95b9-9e3c3e8fbd35 + dockerImageTag: 2.0.6 + dockerRepository: airbyte/source-tiktok-marketing + githubIssueLabel: source-tiktok-marketing + icon: tiktok.svg + license: MIT + name: TikTok Marketing + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/tiktok-marketing +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-timely/metadata.yaml b/airbyte-integrations/connectors/source-timely/metadata.yaml new file mode 100644 index 000000000000..546e368f931b --- /dev/null +++ b/airbyte-integrations/connectors/source-timely/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: bc617b5f-1b9e-4a2d-bebe-782fd454a771 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-timely + githubIssueLabel: source-timely + icon: timely.svg + license: MIT + name: Timely + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/timely +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-tmdb/metadata.yaml b/airbyte-integrations/connectors/source-tmdb/metadata.yaml new file mode 100644 index 000000000000..6345ba7bf05d --- /dev/null +++ b/airbyte-integrations/connectors/source-tmdb/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 6240848f-f795-45eb-8f5e-c7542822fc03 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-tmdb + githubIssueLabel: source-tmdb + icon: tmdb.svg + license: MIT + name: TMDb + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/tmdb +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-todoist/metadata.yaml b/airbyte-integrations/connectors/source-todoist/metadata.yaml new file mode 100644 index 000000000000..830189a4b399 --- /dev/null +++ b/airbyte-integrations/connectors/source-todoist/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 7d272065-c316-4c04-a433-cd4ee143f83e + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-todoist + githubIssueLabel: source-todoist + icon: todoist.svg + license: MIT + name: Todoist + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/todoist +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-toggl/metadata.yaml b/airbyte-integrations/connectors/source-toggl/metadata.yaml new file mode 100644 index 000000000000..714d03b10334 --- /dev/null +++ b/airbyte-integrations/connectors/source-toggl/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 7e7c844f-2300-4342-b7d3-6dd7992593cd + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-toggl + githubIssueLabel: source-toggl + icon: toggl.svg + license: MIT + name: Toggl + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/toggl +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-tplcentral/metadata.yaml b/airbyte-integrations/connectors/source-tplcentral/metadata.yaml new file mode 100644 index 000000000000..2afcad7483ee --- /dev/null +++ b/airbyte-integrations/connectors/source-tplcentral/metadata.yaml @@ -0,0 +1,17 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: f9b6c538-ee12-42fe-8d4b-0c10f5955417 + dockerImageTag: 0.1.1 + dockerRepository: airbyte/source-tplcentral + githubIssueLabel: source-tplcentral + license: MIT + name: TPLcentral + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/tplcentral +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-trello/metadata.yaml b/airbyte-integrations/connectors/source-trello/metadata.yaml new file mode 100644 index 000000000000..e097669617a8 --- /dev/null +++ b/airbyte-integrations/connectors/source-trello/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - api.trello.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 8da67652-004c-11ec-9a03-0242ac130003 + dockerImageTag: 0.3.1 + dockerRepository: airbyte/source-trello + githubIssueLabel: source-trello + icon: trello.svg + license: MIT + name: Trello + releaseStage: beta + supportUrl: https://docs.airbyte.com/integrations/sources/trello +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-trustpilot/metadata.yaml b/airbyte-integrations/connectors/source-trustpilot/metadata.yaml new file mode 100644 index 000000000000..56b1256c743e --- /dev/null +++ b/airbyte-integrations/connectors/source-trustpilot/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: d7e23ea6-d741-4314-9209-a33c91a2e945 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-trustpilot + githubIssueLabel: source-trustpilot + icon: trustpilot.svg + license: MIT + name: TrustPilot + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/trustpilot +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-tvmaze-schedule/metadata.yaml b/airbyte-integrations/connectors/source-tvmaze-schedule/metadata.yaml new file mode 100644 index 000000000000..82f7708ab331 --- /dev/null +++ b/airbyte-integrations/connectors/source-tvmaze-schedule/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: bd14b08f-9f43-400f-b2b6-7248b5c72561 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-tvmaze-schedule + githubIssueLabel: source-tvmaze-schedule + icon: tvmazeschedule.svg + license: MIT + name: TVMaze Schedule + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/tvmaze-schedule +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-twilio-taskrouter/metadata.yaml b/airbyte-integrations/connectors/source-twilio-taskrouter/metadata.yaml new file mode 100644 index 000000000000..a7924701169b --- /dev/null +++ b/airbyte-integrations/connectors/source-twilio-taskrouter/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 2446953b-b794-429b-a9b3-c821ba992a48 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-twilio-taskrouter + githubIssueLabel: source-twilio-taskrouter + icon: twilio.svg + license: MIT + name: Twilio Taskrouter + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/twilio-taskrouter +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-twilio/metadata.yaml b/airbyte-integrations/connectors/source-twilio/metadata.yaml new file mode 100644 index 000000000000..39cd18fa2f04 --- /dev/null +++ b/airbyte-integrations/connectors/source-twilio/metadata.yaml @@ -0,0 +1,22 @@ +data: + allowedHosts: + hosts: + - api.twilio.com + - monitor.twilio.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: b9dc6155-672e-42ea-b10d-9f1f1fb95ab1 + dockerImageTag: 0.2.0 + dockerRepository: airbyte/source-twilio + githubIssueLabel: source-twilio + icon: twilio.svg + license: MIT + name: Twilio + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/twilio +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-twitter/metadata.yaml b/airbyte-integrations/connectors/source-twitter/metadata.yaml new file mode 100644 index 000000000000..703222909a2d --- /dev/null +++ b/airbyte-integrations/connectors/source-twitter/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - api.twitter.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: d7fd4f40-5e5a-4b8b-918f-a73077f8c131 + dockerImageTag: 0.1.2 + dockerRepository: airbyte/source-twitter + githubIssueLabel: source-twitter + icon: twitter.svg + license: MIT + name: Twitter + releaseStage: beta + supportUrl: https://docs.airbyte.com/integrations/sources/twitter +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-tyntec-sms/metadata.yaml b/airbyte-integrations/connectors/source-tyntec-sms/metadata.yaml new file mode 100644 index 000000000000..ae0a23e548af --- /dev/null +++ b/airbyte-integrations/connectors/source-tyntec-sms/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 3c0c3cd1-b3e0-464a-9090-d3ceb5f92346 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-tyntec-sms + githubIssueLabel: source-tyntec-sms + icon: tyntec.svg + license: MIT + name: Tyntec SMS + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/tyntec-sms +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-typeform/metadata.yaml b/airbyte-integrations/connectors/source-typeform/metadata.yaml new file mode 100644 index 000000000000..6a0168524499 --- /dev/null +++ b/airbyte-integrations/connectors/source-typeform/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - api.typeform.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: e7eff203-90bf-43e5-a240-19ea3056c474 + dockerImageTag: 0.1.12 + dockerRepository: airbyte/source-typeform + githubIssueLabel: source-typeform + icon: typeform.svg + license: MIT + name: Typeform + releaseStage: beta + supportUrl: https://docs.airbyte.com/integrations/sources/typeform +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-unleash/metadata.yaml b/airbyte-integrations/connectors/source-unleash/metadata.yaml new file mode 100644 index 000000000000..39f95ddcab59 --- /dev/null +++ b/airbyte-integrations/connectors/source-unleash/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: f77914a1-442b-4195-9355-8810a1f4ed3f + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-unleash + githubIssueLabel: source-unleash + icon: unleash.svg + license: MIT + name: Unleash + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/unleash +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-us-census/metadata.yaml b/airbyte-integrations/connectors/source-us-census/metadata.yaml new file mode 100644 index 000000000000..ad289e92b9f8 --- /dev/null +++ b/airbyte-integrations/connectors/source-us-census/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: c4cfaeda-c757-489a-8aba-859fb08b6970 + dockerImageTag: 0.1.2 + dockerRepository: airbyte/source-us-census + githubIssueLabel: source-us-census + icon: uscensus.svg + license: MIT + name: US Census + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/us-census +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-vantage/metadata.yaml b/airbyte-integrations/connectors/source-vantage/metadata.yaml new file mode 100644 index 000000000000..f5387ba6f9a8 --- /dev/null +++ b/airbyte-integrations/connectors/source-vantage/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 28ce1fbd-1e15-453f-aa9f-da6c4d928e92 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-vantage + githubIssueLabel: source-vantage + icon: vantage.svg + license: MIT + name: Vantage + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/vantage +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-visma-economic/metadata.yaml b/airbyte-integrations/connectors/source-visma-economic/metadata.yaml new file mode 100644 index 000000000000..4489bef325ab --- /dev/null +++ b/airbyte-integrations/connectors/source-visma-economic/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 42495935-95de-4f5c-ae08-8fac00f6b308 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-visma-economic + githubIssueLabel: source-visma-economic + icon: visma-e-conomic.svg + license: MIT + name: Visma E-conomic + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/visma-economic +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-vitally/metadata.yaml b/airbyte-integrations/connectors/source-vitally/metadata.yaml new file mode 100644 index 000000000000..1d9da4ba8b4f --- /dev/null +++ b/airbyte-integrations/connectors/source-vitally/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 6c6d8b0c-db35-4cd1-a7de-0ca8b080f5ac + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-vitally + githubIssueLabel: source-vitally + icon: vitally.svg + license: MIT + name: Vitally + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/vitally +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-waiteraid/metadata.yaml b/airbyte-integrations/connectors/source-waiteraid/metadata.yaml new file mode 100644 index 000000000000..7c436140fe33 --- /dev/null +++ b/airbyte-integrations/connectors/source-waiteraid/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 03a53b13-794a-4d6b-8544-3b36ed8f3ce4 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-waiteraid + githubIssueLabel: source-waiteraid + icon: waiteraid.svg + license: MIT + name: Waiteraid + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/waiteraid +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-weatherstack/metadata.yaml b/airbyte-integrations/connectors/source-weatherstack/metadata.yaml new file mode 100644 index 000000000000..e1fdffbdef3f --- /dev/null +++ b/airbyte-integrations/connectors/source-weatherstack/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 5db8292c-5f5a-11ed-9b6a-0242ac120002 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-weatherstack + githubIssueLabel: source-weatherstack + icon: weatherstack.svg + license: MIT + name: Weatherstack + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/weatherstack +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-webflow/metadata.yaml b/airbyte-integrations/connectors/source-webflow/metadata.yaml new file mode 100644 index 000000000000..4d1bd12f393b --- /dev/null +++ b/airbyte-integrations/connectors/source-webflow/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: ef580275-d9a9-48bb-af5e-db0f5855be04 + dockerImageTag: 0.1.2 + dockerRepository: airbyte/source-webflow + githubIssueLabel: source-webflow + icon: webflow.svg + license: MIT + name: Webflow + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/webflow +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-whisky-hunter/metadata.yaml b/airbyte-integrations/connectors/source-whisky-hunter/metadata.yaml new file mode 100644 index 000000000000..f3c711f5a763 --- /dev/null +++ b/airbyte-integrations/connectors/source-whisky-hunter/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: e65f84c0-7598-458a-bfac-f770c381ff5d + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-whisky-hunter + githubIssueLabel: source-whisky-hunter + icon: whiskyhunter.svg + license: MIT + name: Whisky Hunter + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/whisky-hunter +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-wikipedia-pageviews/metadata.yaml b/airbyte-integrations/connectors/source-wikipedia-pageviews/metadata.yaml new file mode 100644 index 000000000000..8860947e7121 --- /dev/null +++ b/airbyte-integrations/connectors/source-wikipedia-pageviews/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 87c58f70-6f7a-4f70-aba5-bab1a458f5ba + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-wikipedia-pageviews + githubIssueLabel: source-wikipedia-pageviews + icon: wikipediapageviews.svg + license: MIT + name: Wikipedia Pageviews + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/wikipedia-pageviews +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-woocommerce/metadata.yaml b/airbyte-integrations/connectors/source-woocommerce/metadata.yaml new file mode 100644 index 000000000000..65d1ed2b8f2c --- /dev/null +++ b/airbyte-integrations/connectors/source-woocommerce/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - ${domain} + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 2a2552ca-9f78-4c1c-9eb7-4d0dc66d72df + dockerImageTag: 0.2.2 + dockerRepository: airbyte/source-woocommerce + githubIssueLabel: source-woocommerce + icon: woocommerce.svg + license: MIT + name: WooCommerce + releaseStage: beta + supportUrl: https://docs.airbyte.com/integrations/sources/woocommerce +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-workable/metadata.yaml b/airbyte-integrations/connectors/source-workable/metadata.yaml new file mode 100644 index 000000000000..a1d53b837f41 --- /dev/null +++ b/airbyte-integrations/connectors/source-workable/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: ef3c99c6-9e90-43c8-9517-926cfd978517 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-workable + githubIssueLabel: source-workable + icon: workable.svg + license: MIT + name: Workable + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/workable +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-workramp/metadata.yaml b/airbyte-integrations/connectors/source-workramp/metadata.yaml new file mode 100644 index 000000000000..f552e1dcdf5b --- /dev/null +++ b/airbyte-integrations/connectors/source-workramp/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 05b0bce2-4ec4-4534-bb1a-5d0127bd91b7 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-workramp + githubIssueLabel: source-workramp + icon: workramp.svg + license: MIT + name: WorkRamp + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/workramp +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-wrike/metadata.yaml b/airbyte-integrations/connectors/source-wrike/metadata.yaml new file mode 100644 index 000000000000..9abc82d331bc --- /dev/null +++ b/airbyte-integrations/connectors/source-wrike/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 9c13f986-a13b-4988-b808-4705badf71c2 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-wrike + githubIssueLabel: source-wrike + icon: wrike.svg + license: MIT + name: Wrike + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/wrike +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-xero/metadata.yaml b/airbyte-integrations/connectors/source-xero/metadata.yaml new file mode 100644 index 000000000000..1b0d413d50c9 --- /dev/null +++ b/airbyte-integrations/connectors/source-xero/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - api.xero.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 6fd1e833-dd6e-45ec-a727-ab917c5be892 + dockerImageTag: 0.2.1 + dockerRepository: airbyte/source-xero + githubIssueLabel: source-xero + icon: xero.svg + license: MIT + name: Xero + releaseStage: beta + supportUrl: https://docs.airbyte.com/integrations/sources/xero +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-xkcd/metadata.yaml b/airbyte-integrations/connectors/source-xkcd/metadata.yaml new file mode 100644 index 000000000000..555d44bcc2c0 --- /dev/null +++ b/airbyte-integrations/connectors/source-xkcd/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 80fddd16-17bd-4c0c-bf4a-80df7863fc9d + dockerImageTag: 0.1.1 + dockerRepository: airbyte/source-xkcd + githubIssueLabel: source-xkcd + icon: xkcd.svg + license: MIT + name: xkcd + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/xkcd +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-yandex-metrica/metadata.yaml b/airbyte-integrations/connectors/source-yandex-metrica/metadata.yaml new file mode 100644 index 000000000000..ec51262b136e --- /dev/null +++ b/airbyte-integrations/connectors/source-yandex-metrica/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - api-metrica.yandex.net + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 7865dce4-2211-4f6a-88e5-9d0fe161afe7 + dockerImageTag: 1.0.0 + dockerRepository: airbyte/source-yandex-metrica + githubIssueLabel: source-yandex-metrica + icon: yandexmetrica.svg + license: MIT + name: Yandex Metrica + releaseStage: beta + supportUrl: https://docs.airbyte.com/integrations/sources/yandex-metrica +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-younium/metadata.yaml b/airbyte-integrations/connectors/source-younium/metadata.yaml new file mode 100644 index 000000000000..cf1d888da85a --- /dev/null +++ b/airbyte-integrations/connectors/source-younium/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 9c74c2d7-531a-4ebf-b6d8-6181f805ecdc + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-younium + githubIssueLabel: source-younium + icon: younium.svg + license: MIT + name: Younium + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/younium +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-youtube-analytics/metadata.yaml b/airbyte-integrations/connectors/source-youtube-analytics/metadata.yaml new file mode 100644 index 000000000000..3fc0f9a03a83 --- /dev/null +++ b/airbyte-integrations/connectors/source-youtube-analytics/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - "*.googleapis.com" + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: afa734e4-3571-11ec-991a-1e0031268139 + dockerImageTag: 0.1.3 + dockerRepository: airbyte/source-youtube-analytics + githubIssueLabel: source-youtube-analytics + icon: youtube-analytics.svg + license: MIT + name: YouTube Analytics + releaseStage: beta + supportUrl: https://docs.airbyte.com/integrations/sources/youtube-analytics +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-zapier-supported-storage/metadata.yaml b/airbyte-integrations/connectors/source-zapier-supported-storage/metadata.yaml new file mode 100644 index 000000000000..9c41dbf84a44 --- /dev/null +++ b/airbyte-integrations/connectors/source-zapier-supported-storage/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: b8c917bc-7d1b-4828-995f-6726820266d0 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-zapier-supported-storage + githubIssueLabel: source-zapier-supported-storage + icon: zapiersupportedstorage.svg + license: MIT + name: Zapier Supported Storage + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/zendesk-supported-storage +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-zendesk-chat/metadata.yaml b/airbyte-integrations/connectors/source-zendesk-chat/metadata.yaml new file mode 100644 index 000000000000..9be09abdfecf --- /dev/null +++ b/airbyte-integrations/connectors/source-zendesk-chat/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - zopim.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 40d24d0f-b8f9-4fe0-9e6c-b06c0f3f45e4 + dockerImageTag: 0.1.14 + dockerRepository: airbyte/source-zendesk-chat + githubIssueLabel: source-zendesk-chat + icon: zendesk-chat.svg + license: MIT + name: Zendesk Chat + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/zendesk-chat +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-zendesk-sell/metadata.yaml b/airbyte-integrations/connectors/source-zendesk-sell/metadata.yaml new file mode 100644 index 000000000000..2dc8a50b6b71 --- /dev/null +++ b/airbyte-integrations/connectors/source-zendesk-sell/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 982eaa4c-bba1-4cce-a971-06a41f700b8c + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-zendesk-sell + githubIssueLabel: source-zendesk-sell + icon: zendesk.svg + license: MIT + name: Zendesk Sell + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/zendesk-sell +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-zendesk-sunshine/metadata.yaml b/airbyte-integrations/connectors/source-zendesk-sunshine/metadata.yaml new file mode 100644 index 000000000000..c296fe87660d --- /dev/null +++ b/airbyte-integrations/connectors/source-zendesk-sunshine/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 325e0640-e7b3-4e24-b823-3361008f603f + dockerImageTag: 0.1.1 + dockerRepository: airbyte/source-zendesk-sunshine + githubIssueLabel: source-zendesk-sunshine + icon: zendesk-sunshine.svg + license: MIT + name: Zendesk Sunshine + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/zendesk-sunshine +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-zendesk-support/metadata.yaml b/airbyte-integrations/connectors/source-zendesk-support/metadata.yaml new file mode 100644 index 000000000000..7a8dc7f75d46 --- /dev/null +++ b/airbyte-integrations/connectors/source-zendesk-support/metadata.yaml @@ -0,0 +1,22 @@ +data: + allowedHosts: + hosts: + - ${subdomain}.zendesk.com + - zendesk.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 79c1aa37-dae3-42ae-b333-d1c105477715 + dockerImageTag: 0.2.27 + dockerRepository: airbyte/source-zendesk-support + githubIssueLabel: source-zendesk-support + icon: zendesk-support.svg + license: MIT + name: Zendesk Support + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/zendesk-support +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-zendesk-talk/metadata.yaml b/airbyte-integrations/connectors/source-zendesk-talk/metadata.yaml new file mode 100644 index 000000000000..e4025da0ba02 --- /dev/null +++ b/airbyte-integrations/connectors/source-zendesk-talk/metadata.yaml @@ -0,0 +1,22 @@ +data: + allowedHosts: + hosts: + - ${subdomain}.zendesk.com + - zendesk.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: c8630570-086d-4a40-99ae-ea5b18673071 + dockerImageTag: 0.1.7 + dockerRepository: airbyte/source-zendesk-talk + githubIssueLabel: source-zendesk-talk + icon: zendesk-talk.svg + license: MIT + name: Zendesk Talk + releaseStage: generally_available + supportUrl: https://docs.airbyte.com/integrations/sources/zendesk-talk +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-zenefits/metadata.yaml b/airbyte-integrations/connectors/source-zenefits/metadata.yaml new file mode 100644 index 000000000000..3d3b3c57a29e --- /dev/null +++ b/airbyte-integrations/connectors/source-zenefits/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 8baba53d-2fe3-4e33-bc85-210d0eb62884 + dockerImageTag: 0.1.0 + dockerRepository: airbyte/source-zenefits + githubIssueLabel: source-zenefits + icon: zenefits.svg + license: MIT + name: Zenefits + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/zenefits +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-zenloop/metadata.yaml b/airbyte-integrations/connectors/source-zenloop/metadata.yaml new file mode 100644 index 000000000000..b9cdc8fe9495 --- /dev/null +++ b/airbyte-integrations/connectors/source-zenloop/metadata.yaml @@ -0,0 +1,21 @@ +data: + allowedHosts: + hosts: + - api.zenloop.com + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: f1e4c7f6-db5c-4035-981f-d35ab4998794 + dockerImageTag: 0.1.6 + dockerRepository: airbyte/source-zenloop + githubIssueLabel: source-zenloop + icon: zenloop.svg + license: MIT + name: Zenloop + releaseStage: beta + supportUrl: https://docs.airbyte.com/integrations/sources/zenloop +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-zoho-crm/metadata.yaml b/airbyte-integrations/connectors/source-zoho-crm/metadata.yaml new file mode 100644 index 000000000000..8394f853397c --- /dev/null +++ b/airbyte-integrations/connectors/source-zoho-crm/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 4942d392-c7b5-4271-91f9-3b4f4e51eb3e + dockerImageTag: 0.1.2 + dockerRepository: airbyte/source-zoho-crm + githubIssueLabel: source-zoho-crm + icon: zohocrm.svg + license: MIT + name: ZohoCRM + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/zoho-crm +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-zoom/metadata.yaml b/airbyte-integrations/connectors/source-zoom/metadata.yaml new file mode 100644 index 000000000000..c1f4bad358b9 --- /dev/null +++ b/airbyte-integrations/connectors/source-zoom/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: cbfd9856-1322-44fb-bcf1-0b39b7a8e92e + dockerImageTag: 0.1.1 + dockerRepository: airbyte/source-zoom + githubIssueLabel: source-zoom + icon: zoom.svg + license: MIT + name: Zoom + releaseStage: alpha + supportUrl: https://docs.airbyte.io/integrations/sources/zoom +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/source-zuora/metadata.yaml b/airbyte-integrations/connectors/source-zuora/metadata.yaml new file mode 100644 index 000000000000..b8c73522890b --- /dev/null +++ b/airbyte-integrations/connectors/source-zuora/metadata.yaml @@ -0,0 +1,19 @@ +data: + catalogs: + cloud: + dockerImageTag: 0.1.0 + enabled: true + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 3dc3037c-5ce8-4661-adc2-f7a9e3c5ece5 + dockerImageTag: 0.1.3 + dockerRepository: airbyte/source-zuora + githubIssueLabel: source-zuora + icon: zuora.svg + license: MIT + name: Zuora + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/zuora +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/third-party/farosai/airbyte-customer-io-source/metadata.yaml b/airbyte-integrations/connectors/third-party/farosai/airbyte-customer-io-source/metadata.yaml new file mode 100644 index 000000000000..fb424a5b5afb --- /dev/null +++ b/airbyte-integrations/connectors/third-party/farosai/airbyte-customer-io-source/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: c47d6804-8b98-449f-970a-5ddb5cb5d7aa + dockerImageTag: 0.1.23 + dockerRepository: farosai/airbyte-customer-io-source + githubIssueLabel: farosai/airbyte-customer-io-source + icon: customer-io.svg + license: MIT + name: Customer.io + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/customer-io +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/third-party/farosai/airbyte-harness-source/metadata.yaml b/airbyte-integrations/connectors/third-party/farosai/airbyte-harness-source/metadata.yaml new file mode 100644 index 000000000000..d2280db91480 --- /dev/null +++ b/airbyte-integrations/connectors/third-party/farosai/airbyte-harness-source/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 6fe89830-d04d-401b-aad6-6552ffa5c4af + dockerImageTag: 0.1.23 + dockerRepository: farosai/airbyte-harness-source + githubIssueLabel: farosai/airbyte-harness-source + icon: harness.svg + license: MIT + name: Harness + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/harness +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/third-party/farosai/airbyte-jenkins-source/metadata.yaml b/airbyte-integrations/connectors/third-party/farosai/airbyte-jenkins-source/metadata.yaml new file mode 100644 index 000000000000..b9e97211cb9a --- /dev/null +++ b/airbyte-integrations/connectors/third-party/farosai/airbyte-jenkins-source/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: d6f73702-d7a0-4e95-9758-b0fb1af0bfba + dockerImageTag: 0.1.23 + dockerRepository: farosai/airbyte-jenkins-source + githubIssueLabel: farosai/airbyte-jenkins-source + icon: jenkins.svg + license: MIT + name: Jenkins + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/jenkins +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/third-party/farosai/airbyte-pagerduty-source/metadata.yaml b/airbyte-integrations/connectors/third-party/farosai/airbyte-pagerduty-source/metadata.yaml new file mode 100644 index 000000000000..7734b975a0f8 --- /dev/null +++ b/airbyte-integrations/connectors/third-party/farosai/airbyte-pagerduty-source/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 2817b3f0-04e4-4c7a-9f32-7a5e8a83db95 + dockerImageTag: 0.1.23 + dockerRepository: farosai/airbyte-pagerduty-source + githubIssueLabel: farosai/airbyte-pagerduty-source + icon: pagerduty.svg + license: MIT + name: PagerDuty + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/pagerduty +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/third-party/farosai/airbyte-victorops-source/metadata.yaml b/airbyte-integrations/connectors/third-party/farosai/airbyte-victorops-source/metadata.yaml new file mode 100644 index 000000000000..0decfc42b940 --- /dev/null +++ b/airbyte-integrations/connectors/third-party/farosai/airbyte-victorops-source/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: source + definitionId: 7e20ce3e-d820-4327-ad7a-88f3927fd97a + dockerImageTag: 0.1.23 + dockerRepository: farosai/airbyte-victorops-source + githubIssueLabel: farosai/airbyte-victorops-source + icon: victorops.svg + license: MIT + name: VictorOps + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/sources/victorops +metadataSpecVersion: "1.0" diff --git a/airbyte-integrations/connectors/third-party/ghcr/streamr-airbyte-connector/metadata.yaml b/airbyte-integrations/connectors/third-party/ghcr/streamr-airbyte-connector/metadata.yaml new file mode 100644 index 000000000000..925e5ac53207 --- /dev/null +++ b/airbyte-integrations/connectors/third-party/ghcr/streamr-airbyte-connector/metadata.yaml @@ -0,0 +1,18 @@ +data: + catalogs: + cloud: + enabled: false + oss: + enabled: true + connectorSubtype: api + connectorType: destination + definitionId: eebd85cf-60b2-4af6-9ba0-edeca01437b0 + dockerImageTag: 0.0.1 + dockerRepository: ghcr.io/devmate-cloud/streamr-airbyte-connectors + githubIssueLabel: ghcr.io/devmate-cloud/streamr-airbyte-connectors + icon: streamr.svg + license: MIT + name: Streamr + releaseStage: alpha + supportUrl: https://docs.airbyte.com/integrations/destinations/streamr +metadataSpecVersion: "1.0" From 2f0e8b19e5f0eac451600695d8303faa2d88765e Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Mon, 17 Apr 2023 23:11:51 +0530 Subject: [PATCH 041/187] fix date_from, optimize manifest, update docs --- .../src/main/resources/seed/oss_catalog.json | 4 +- .../src/main/resources/seed/source_specs.yaml | 4 +- .../integration_tests/expected_records.jsonl | 2 +- .../integration_tests/invalid_config.json | 5 +- .../integration_tests/sample_config.json | 5 +- .../source-yotpo/source_yotpo/manifest.yaml | 56 +++++++++---------- .../source_yotpo/schemas/privacy_data.json | 1 + .../source_yotpo/schemas/privacy_user.json | 1 + .../source_yotpo/schemas/reviews.json | 4 ++ .../schemas/reviews_bottomline.json | 1 + .../source_yotpo/schemas/top_reviews.json | 1 + .../source_yotpo/schemas/webhooks.json | 1 + .../source-yotpo/source_yotpo/spec.yaml | 6 +- docs/integrations/sources/yotpo.md | 8 +-- 14 files changed, 55 insertions(+), 44 deletions(-) diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json index 66dc718b5496..97364d507cb5 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json @@ -28416,7 +28416,7 @@ "$schema": "https://json-schema.org/draft-07/schema#", "title": "Yotpo Spec", "type": "object", - "required": [ "access_token", "app_key", "date_from", "email" ], + "required": [ "access_token", "app_key", "start_date", "email" ], "additionalProperties": true, "properties": { "access_token": { @@ -28430,7 +28430,7 @@ "type": "string", "description": "App key found at settings (Ref- https://settings.yotpo.com/#/general_settings)" }, - "date_from": { + "start_date": { "title": "Date-From Filter", "type": "string", "description": "Date time filter for incremental filter, Specify which date to extract from.", diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml index 7581bb85df00..c72feec908da 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml @@ -18349,7 +18349,7 @@ required: - access_token - app_key - - date_from + - start_date - email additionalProperties: true properties: @@ -18362,7 +18362,7 @@ title: App Key type: string description: App key found at settings (Ref- https://settings.yotpo.com/#/general_settings) - date_from: + start_date: title: Date-From Filter type: string description: Date time filter for incremental filter, Specify which date to extract from. diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-yotpo/integration_tests/expected_records.jsonl index f11f7ca46cb6..b4a93e4c2d9f 100644 --- a/airbyte-integrations/connectors/source-yotpo/integration_tests/expected_records.jsonl +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/expected_records.jsonl @@ -1 +1 @@ -{"stream": "reviews", "data": {"id":460530094,"title":"Great Phone","content":"It’s really good","score":5,"votes_up":0,"votes_down":0,"created_at":"2023-04-13T05:06:00.000Z","updated_at":"2023-04-13T05:08:41.000Z","sentiment":0.960069,"sku":"19","name":"John S.","email":"moles57397@snowlash.com","reviewer_type":"verified_reviewer","deleted":false,"archived":false,"escalated":false,"is_incentivized":false}, "emitted_at": 1679051186833} +{"stream": "reviews", "data":{"id":460312221,"title":"Great Phone","content":"It’s really good","score":5,"votes_up":0,"votes_down":0,"created_at":"2023-04-12T18:13:47.000Z","updated_at":"2023-04-17T17:10:34.000Z","sentiment":0.960069,"sku":"13","name":"John S.","email":"john@shop.com","reviewer_type":"anonymous_user","deleted":false,"archived":false,"escalated":false,"is_incentivized":false}, "emitted_at": 1679051186833} diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/invalid_config.json b/airbyte-integrations/connectors/source-yotpo/integration_tests/invalid_config.json index 34470dc18f00..c266c8bd0766 100644 --- a/airbyte-integrations/connectors/source-yotpo/integration_tests/invalid_config.json +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/invalid_config.json @@ -1,3 +1,6 @@ { - "access_token": "" + "app_key": "", + "access_token": "", + "start_date": "2099-04-12T18:42:50.000Z", + "email": "" } diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/sample_config.json b/airbyte-integrations/connectors/source-yotpo/integration_tests/sample_config.json index ccc9b992b901..11b1fda38bac 100644 --- a/airbyte-integrations/connectors/source-yotpo/integration_tests/sample_config.json +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/sample_config.json @@ -1,3 +1,6 @@ { - "access_token": "XXXXXXXXXXXXXXXXXXXXXXXXXX" + "app_key": "XXXXXXXXXXXXXXXXXXX", + "access_token": "YYYYYYYYYYYYYYYY", + "start_date": "2020-04-12T18:42:50.000Z", + "email": "example@gmail.com" } diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml index 251fef833a58..aaa1e147f66f 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml @@ -1,6 +1,27 @@ version: "0.29.0" definitions: + + yotpo_stream_requester: + type: HttpRequester + url_base: "https://api.yotpo.com/v1" + http_method: "GET" + request_parameters: + utoken: "{{ config['access_token'] }}" + authenticator: + type: BearerAuthenticator + api_token: "{{ config['access_token'] }}" + + yotpo_stream_plain_requester: + type: HttpRequester + url_base: "https://api.yotpo.com" + http_method: "GET" + request_parameters: + utoken: "{{ config['access_token'] }}" + authenticator: + type: BearerAuthenticator + api_token: "{{ config['access_token'] }}" + privacy_stream_requester: type: HttpRequester url_base: "https://api.yotpo.com/privacy" @@ -55,14 +76,7 @@ definitions: paginator: type: NoPagination requester: - type: HttpRequester - url_base: "https://api.yotpo.com/v1" - http_method: "GET" - request_parameters: - utoken: "{{ config['access_token'] }}" - authenticator: - type: BearerAuthenticator - api_token: "{{ config['access_token'] }}" + $ref: "#/definitions/yotpo_stream_requester" incremental_sync: type: DatetimeBasedCursor cursor_field: "updated_at" @@ -70,7 +84,7 @@ definitions: cursor_granularity: "PT0.000001S" lookback_window: "P31D" start_datetime: - datetime: "{{ config['date_from'] }}" + datetime: "{{ config['start_date'] }}" datetime_format: "%Y-%m-%dT%H:%M:%S.%f%z" end_datetime: datetime: "{{ today_utc() }}" @@ -93,14 +107,7 @@ definitions: paginator: type: NoPagination requester: - type: HttpRequester - url_base: "https://api.yotpo.com" - http_method: "GET" - request_parameters: - utoken: "{{ config['access_token'] }}" - authenticator: - type: BearerAuthenticator - api_token: "{{ config['access_token'] }}" + $ref: "#/definitions/yotpo_stream_plain_requester" name: "reviews_bottomline" $parameters: path: "/products/{{ config['app_key'] }}/yotpo_site_reviews/bottomline" @@ -118,14 +125,7 @@ definitions: paginator: type: NoPagination requester: - type: HttpRequester - url_base: "https://api.yotpo.com/" - http_method: "GET" - request_parameters: - utoken: "{{ config['access_token'] }}" - authenticator: - type: BearerAuthenticator - api_token: "{{ config['access_token'] }}" + $ref: "#/definitions/yotpo_stream_plain_requester" name: "top_reviews" $parameters: path: "/apps/{{ config['app_key'] }}/top_reviews" @@ -142,11 +142,7 @@ definitions: paginator: type: NoPagination requester: - type: HttpRequester - url_base: "https://api.yotpo.com/" - http_method: "GET" - request_parameters: - utoken: "{{ config['access_token'] }}" + $ref: "#/definitions/yotpo_stream_plain_requester" name: "webhooks" $parameters: path: "/apps/{{ config['app_key'] }}/webhooks" diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_data.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_data.json index 552feb4e7ef6..3d6ecf69ffac 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_data.json +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_data.json @@ -1,6 +1,7 @@ { "$schema": "http://json-schema.org/draft-07/schema#", "title": "Privacy Data", + "additionalProperties": true, "type": "object", "properties": { "has_data": { diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_user.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_user.json index 7e2817c09be2..3603d55f04da 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_user.json +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_user.json @@ -1,6 +1,7 @@ { "$schema": "http://json-schema.org/draft-07/schema#", "title": "Privacy User", + "additionalProperties": true, "type": "object", "properties": { "code": { diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews.json index 6d4eac1f090f..3710a009987c 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews.json +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews.json @@ -1,6 +1,7 @@ { "$schema": "http://json-schema.org/draft-07/schema#", "title": "Reviews Schema", + "additionalProperties": true, "type": "object", "properties": { "id": { @@ -9,6 +10,9 @@ "title": { "type": ["null", "string"] }, + "incentive_type": { + "type": ["null", "string"] + }, "content": { "type": ["null", "string"] }, diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json index 8188f59bb5ae..796cda50d838 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json @@ -1,6 +1,7 @@ { "$schema": "http://json-schema.org/draft-07/schema#", "title": "Reviews Bottomline", + "additionalProperties": true, "type": "object", "properties": { "bottomline": { diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json index a5021d309b7a..a9048548d365 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json @@ -1,6 +1,7 @@ { "$schema": "http://json-schema.org/draft-07/schema#", "title": "Top Reviews Schema", + "additionalProperties": true, "type": "object", "properties": { "image_url": { diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/webhooks.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/webhooks.json index 6d7e0f0e0af9..e4fc677f852e 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/webhooks.json +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/webhooks.json @@ -1,6 +1,7 @@ { "$schema": "http://json-schema.org/draft-07/schema#", "title": "Webhooks Schema", + "additionalProperties": true, "type": "object", "properties": { "webhooks": { diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml index 8408215c011d..496dca04cc80 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml @@ -3,12 +3,12 @@ connectionSpecification: $schema: http://json-schema.org/draft-07/schema# title: Yotpo Spec type: object + additionalProperties: true required: - access_token - app_key - - date_from + - start_date - email - additionalProperties: true properties: access_token: title: Access Token @@ -19,7 +19,7 @@ connectionSpecification: title: App Key type: string description: App key found at settings (Ref- https://settings.yotpo.com/#/general_settings) - date_from: + start_date: title: Date-From Filter type: string description: Date time filter for incremental filter, Specify which date to extract from. diff --git a/docs/integrations/sources/yotpo.md b/docs/integrations/sources/yotpo.md index 63e6448c2f14..d4a6a19e42d1 100644 --- a/docs/integrations/sources/yotpo.md +++ b/docs/integrations/sources/yotpo.md @@ -15,8 +15,8 @@ Access Token (which acts as bearer token) is mandate for this connector to work, - Available params - access_token: The generated access token - app_key: Seen at the yotpo settings (ref - https://settings.yotpo.com/#/general_settings) - - date_from: Date filter for eligible streams, enter - - email + - start_date: Date filter for eligible streams, enter + - email: Registered email address ## Step 2: Set up the Yotpo connector in Airbyte @@ -25,14 +25,14 @@ Access Token (which acts as bearer token) is mandate for this connector to work, 1. [Log into your Airbyte Cloud](https://cloud.airbyte.io/workspaces) account. 2. In the left navigation bar, click **Sources**. In the top-right corner, click **+new source**. 3. On the Set up the source page, enter the name for the Yotpo connector and select **Yotpo** from the Source type dropdown. -4. Enter your `access_token`. +4. Enter your `access_token, app_key, start_date and email`. 5. Click **Set up source**. ### For Airbyte OSS: 1. Navigate to the Airbyte Open Source dashboard. 2. Set the name for your source. -3. Enter your `access_token`. +3. Enter your `access_token, app_key, start_date and email`. 5. Click **Set up source**. ## Supported sync modes From a5f9e55544206b9beefc5e5dd5d5e82ecf05c007 Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Sat, 15 Apr 2023 16:49:24 +0530 Subject: [PATCH 042/187] Update spec.yaml --- .../connectors/source-yotpo/source_yotpo/spec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml index 496dca04cc80..6e7d6441711a 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/spec.yaml @@ -1,4 +1,4 @@ -documentationUrl: https://docs.airbyte.com/integrations/sources/pingdom +documentationUrl: https://docs.airbyte.com/integrations/sources/yotpo connectionSpecification: $schema: http://json-schema.org/draft-07/schema# title: Yotpo Spec From fc8ddf8ffb7458fdc993493f50b266ea87d659b2 Mon Sep 17 00:00:00 2001 From: Artem Inzhyyants <36314070+artem1205@users.noreply.github.com> Date: Thu, 13 Apr 2023 11:56:20 +0200 Subject: [PATCH 043/187] =?UTF-8?q?=F0=9F=9A=A8=F0=9F=9A=A8=20Source=20Amp?= =?UTF-8?q?litude:=20migrate=20to=20YAML=20(#22362)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Source Amplitude: migrate to YAML * Source Amplitude: enable high strictness level * Source Amplitude: update docs * Source Amplitude: update cursor field + expected records * Source Amplitude: logging refactor * Source Amplitude: refactor extractors * Source Amplitude: refactor extractors * Source Amplitude: migrate to beta low-code * Source Amplitude: add docstring * Source Amplitude: fix unit tests * Source Amplitude: update expected records * Source Amplitude: fix response filter action * Source Amplitude: rename typo * Source Amplitude: fix migration * Source Amplitude: update docs * Source Amplitude: fix migration * Source Amplitude: update expected recrods * Source Amplitude: bump manifest version * Automated Change * Source Amplitude: Update http -> https * Source Amplitude: tests fix + pin cdk version * auto-bump connector version --------- Co-authored-by: artem1205 Co-authored-by: Octavia Squidington III --- .../src/main/resources/seed/oss_catalog.json | 33 +- .../resources/seed/source_definitions.yaml | 5 +- .../src/main/resources/seed/source_specs.yaml | 36 +-- .../connectors/source-amplitude/Dockerfile | 36 ++- .../connectors/source-amplitude/README.md | 64 +--- .../__init__.py} | 4 - .../acceptance-test-config.yml | 53 ++-- .../acceptance-test-docker.sh | 0 .../integration_tests/abnormal_state.json | 6 +- .../integration_tests/configured_catalog.json | 4 +- .../integration_tests/expected_records.jsonl | 201 +++++++----- .../connectors/source-amplitude/setup.py | 10 +- .../source_amplitude/__init__.py | 23 +- .../source-amplitude/source_amplitude/api.py | 297 ------------------ .../source_amplitude/components.py | 119 +++++++ .../source_amplitude/errors.py | 34 -- .../source_amplitude/manifest.yaml | 164 ++++++++++ .../schemas/active_users.json | 2 +- .../source_amplitude/schemas/annotations.json | 2 +- .../schemas/average_session_length.json | 2 +- .../source_amplitude/schemas/cohorts.json | 2 +- .../source_amplitude/schemas/events.json | 2 +- .../source_amplitude/source.py | 69 +--- .../source_amplitude/spec.json | 64 ---- .../source_amplitude/spec.yaml | 47 +++ .../unit_tests/records.json.zip | Bin 0 -> 163 bytes .../source-amplitude/unit_tests/test_api.py | 277 ---------------- .../unit_tests/test_custom_extractors.py | 114 +++++++ .../unit_tests/test_errors.py | 45 --- .../unit_tests/test_source.py | 72 ----- .../{api_data/zipped.json => zipped.json.gz} | Bin connectors.md | 2 +- docs/integrations/sources/amplitude.md | 1 + 33 files changed, 682 insertions(+), 1108 deletions(-) rename airbyte-integrations/connectors/{source-sendgrid/integration_tests/integration_test.py => source-amplitude/__init__.py} (61%) mode change 100644 => 100755 airbyte-integrations/connectors/source-amplitude/acceptance-test-docker.sh delete mode 100644 airbyte-integrations/connectors/source-amplitude/source_amplitude/api.py create mode 100644 airbyte-integrations/connectors/source-amplitude/source_amplitude/components.py delete mode 100644 airbyte-integrations/connectors/source-amplitude/source_amplitude/errors.py create mode 100644 airbyte-integrations/connectors/source-amplitude/source_amplitude/manifest.yaml delete mode 100644 airbyte-integrations/connectors/source-amplitude/source_amplitude/spec.json create mode 100644 airbyte-integrations/connectors/source-amplitude/source_amplitude/spec.yaml create mode 100644 airbyte-integrations/connectors/source-amplitude/unit_tests/records.json.zip delete mode 100644 airbyte-integrations/connectors/source-amplitude/unit_tests/test_api.py create mode 100644 airbyte-integrations/connectors/source-amplitude/unit_tests/test_custom_extractors.py delete mode 100755 airbyte-integrations/connectors/source-amplitude/unit_tests/test_errors.py delete mode 100644 airbyte-integrations/connectors/source-amplitude/unit_tests/test_source.py rename airbyte-integrations/connectors/source-amplitude/unit_tests/{api_data/zipped.json => zipped.json.gz} (100%) diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json index 97364d507cb5..99e0d82d61a2 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json @@ -8925,14 +8925,14 @@ "sourceDefinitionId": "fa9f58c6-2d03-4237-aaa4-07d75e0c1396", "name": "Amplitude", "dockerRepository": "airbyte/source-amplitude", - "dockerImageTag": "0.1.24", + "dockerImageTag": "0.2.0", "documentationUrl": "https://docs.airbyte.com/integrations/sources/amplitude", "icon": "amplitude.svg", "sourceType": "api", "spec": { "documentationUrl": "https://docs.airbyte.com/integrations/sources/amplitude", "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", + "$schema": "https://json-schema.org/draft-07/schema#", "title": "Amplitude Spec", "type": "object", "required": [ "api_key", "secret_key", "start_date" ], @@ -8964,26 +8964,13 @@ "description": "UTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.", "examples": [ "2021-01-25T00:00:00Z" ] }, - "event_time_interval": { - "type": "object", - "title": "Event Stream Time Interval", - "description": "Amplitude event stream time interval", - "required": [ "size_unit", "size" ], - "properties": { - "size_unit": { - "type": "string", - "title": "Events Time Interval Size Unit", - "description": "Amplitude event stream's interval size unit", - "enum": [ "days", "hours", "weeks", "months" ], - "default": "days" - }, - "size": { - "type": "integer", - "title": "Events Time Interval Size", - "description": "Amplitude event stream's interval size unit", - "default": 1 - } - } + "request_time_range": { + "type": "integer", + "title": "Request time range", + "description": "According to Considerations too big time range in request can cause a timeout error. In this case, set shorter time interval in hours.", + "default": 24, + "minimum": 1, + "maximum": 8760 } } }, @@ -8996,7 +8983,7 @@ "custom": false, "releaseStage": "generally_available", "allowedHosts": { - "hosts": [ "*.amplitude.com" ] + "hosts": [ "amplitude.com", "analytics.eu.amplitude.com" ] } }, { "sourceDefinitionId": "47f17145-fe20-4ef5-a548-e29b048adf84", diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml index 8df1da73307a..ca4661532cbc 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml @@ -95,14 +95,15 @@ - name: Amplitude sourceDefinitionId: fa9f58c6-2d03-4237-aaa4-07d75e0c1396 dockerRepository: airbyte/source-amplitude - dockerImageTag: 0.1.24 + dockerImageTag: 0.2.0 documentationUrl: https://docs.airbyte.com/integrations/sources/amplitude icon: amplitude.svg sourceType: api releaseStage: generally_available allowedHosts: hosts: - - "*.amplitude.com" + - amplitude.com + - analytics.eu.amplitude.com - name: Apify Dataset sourceDefinitionId: 47f17145-fe20-4ef5-a548-e29b048adf84 dockerRepository: airbyte/source-apify-dataset diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml index c72feec908da..7ea13d11b471 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml @@ -1314,11 +1314,11 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-amplitude:0.1.24" +- dockerImage: "airbyte/source-amplitude:0.2.0" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/amplitude" connectionSpecification: - $schema: "http://json-schema.org/draft-07/schema#" + $schema: "https://json-schema.org/draft-07/schema#" title: "Amplitude Spec" type: "object" required: @@ -1355,29 +1355,15 @@ \ data before this date will not be replicated." examples: - "2021-01-25T00:00:00Z" - event_time_interval: - type: "object" - title: "Event Stream Time Interval" - description: "Amplitude event stream time interval" - required: - - "size_unit" - - "size" - properties: - size_unit: - type: "string" - title: "Events Time Interval Size Unit" - description: "Amplitude event stream's interval size unit" - enum: - - "days" - - "hours" - - "weeks" - - "months" - default: "days" - size: - type: "integer" - title: "Events Time Interval Size" - description: "Amplitude event stream's interval size unit" - default: 1 + request_time_range: + type: "integer" + title: "Request time range" + description: "According to Considerations too big time range in request can cause a timeout\ + \ error. In this case, set shorter time interval in hours." + default: 24 + minimum: 1 + maximum: 8760 supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] diff --git a/airbyte-integrations/connectors/source-amplitude/Dockerfile b/airbyte-integrations/connectors/source-amplitude/Dockerfile index 2f51d0ff3f12..450d0c50f4d9 100644 --- a/airbyte-integrations/connectors/source-amplitude/Dockerfile +++ b/airbyte-integrations/connectors/source-amplitude/Dockerfile @@ -1,16 +1,38 @@ -FROM python:3.9-slim +FROM python:3.9.11-alpine3.15 as base + +# build and load all requirements +FROM base as builder +WORKDIR /airbyte/integration_code + +# upgrade pip to the latest version +RUN apk --no-cache upgrade \ + && pip install --upgrade pip \ + && apk --no-cache add tzdata build-base -# Bash is installed for more convenient debugging. -RUN apt-get update && apt-get install -y bash && rm -rf /var/lib/apt/lists/* +COPY setup.py ./ +# install necessary packages to a temporary folder +RUN pip install --prefix=/install . + +# build a clean environment +FROM base WORKDIR /airbyte/integration_code -COPY source_amplitude ./source_amplitude + +# copy all loaded and built libraries to a pure basic image +COPY --from=builder /install /usr/local +# add default timezone settings +COPY --from=builder /usr/share/zoneinfo/Etc/UTC /etc/localtime +RUN echo "Etc/UTC" > /etc/timezone + +# bash is installed for more convenient debugging. +RUN apk --no-cache add bash + +# copy payload code only COPY main.py ./ -COPY setup.py ./ -RUN pip install . +COPY source_amplitude ./source_amplitude ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=0.1.24 +LABEL io.airbyte.version=0.2.0 LABEL io.airbyte.name=airbyte/source-amplitude diff --git a/airbyte-integrations/connectors/source-amplitude/README.md b/airbyte-integrations/connectors/source-amplitude/README.md index 9bdf0b8c9f33..2318166113d0 100644 --- a/airbyte-integrations/connectors/source-amplitude/README.md +++ b/airbyte-integrations/connectors/source-amplitude/README.md @@ -1,32 +1,10 @@ # Amplitude Source -This is the repository for the Amplitude source connector, written in Python. -For information about how to use this connector within Airbyte, see [the documentation](https://docs.airbyte.io/integrations/sources/amplitude). +This is the repository for the Amplitude configuration based source connector. +For information about how to use this connector within Airbyte, see [the documentation](https://docs.airbyte.com/integrations/sources/amplitude). ## Local development -### Prerequisites -**To iterate on this connector, make sure to complete this prerequisites section.** - -#### Build & Activate Virtual Environment and install dependencies -From this connector directory, create a virtual environment: -``` -python -m venv .venv -``` - -This will generate a virtualenv for this module in `.venv/`. Make sure this venv is active in your -development environment of choice. To activate it from the terminal, run: -``` -source .venv/bin/activate -pip install -r requirements.txt -``` -If you are in an IDE, follow your IDE's instructions to activate the virtualenv. - -Note that while we are installing dependencies from `requirements.txt`, you should only edit `setup.py` for your dependencies. `requirements.txt` is -used for editable installs (`pip install -e`) to pull in Python dependencies from the monorepo and will call `setup.py`. -If this is mumbo jumbo to you, don't worry about it, just put your deps in `setup.py` but install using `pip install -r requirements.txt` and everything -should work as you expect. - #### Building via Gradle You can also build the connector in Gradle. This is typically used in CI and not needed for your development workflow. @@ -36,22 +14,14 @@ To build using Gradle, from the Airbyte repository root, run: ``` #### Create credentials -**If you are a community contributor**, follow the instructions in the [documentation](https://docs.airbyte.io/integrations/sources/amplitude) -to generate the necessary credentials. Then create a file `secrets/config.json` conforming to the `source_amplitude/spec.json` file. +**If you are a community contributor**, follow the instructions in the [documentation](https://docs.airbyte.com/integrations/sources/amplitude) +to generate the necessary credentials. Then create a file `secrets/config.json` conforming to the `source_amplitude/spec.yaml` file. Note that any directory named `secrets` is gitignored across the entire Airbyte repo, so there is no danger of accidentally checking in sensitive information. See `integration_tests/sample_config.json` for a sample config file. **If you are an Airbyte core member**, copy the credentials in Lastpass under the secret name `source amplitude test creds` and place them into `secrets/config.json`. -### Locally running the connector -``` -python main.py spec -python main.py check --config secrets/config.json -python main.py discover --config secrets/config.json -python main.py read --config secrets/config.json --catalog integration_tests/configured_catalog.json -``` - ### Locally running the connector docker image #### Build @@ -76,33 +46,15 @@ docker run --rm -v $(pwd)/secrets:/secrets airbyte/source-amplitude:dev discover docker run --rm -v $(pwd)/secrets:/secrets -v $(pwd)/integration_tests:/integration_tests airbyte/source-amplitude:dev read --config /secrets/config.json --catalog /integration_tests/configured_catalog.json ``` ## Testing -Make sure to familiarize yourself with [pytest test discovery](https://docs.pytest.org/en/latest/goodpractices.html#test-discovery) to know how your test files and methods should be named. -First install test dependencies into your virtual environment: -``` -pip install '.[tests]' -``` -### Unit Tests -To run unit tests locally, from the connector directory run: -``` -python -m pytest unit_tests -``` -### Integration Tests -There are two types of integration tests: Acceptance Tests (Airbyte's test suite for all source connectors) and custom integration tests (which are specific to this connector). -#### Custom Integration tests -Place custom tests inside `integration_tests/` folder, then, from the connector root, run -``` -python -m pytest integration_tests -``` #### Acceptance Tests -Customize `acceptance-test-config.yml` file to configure tests. See [Connector Acceptance Tests](https://docs.airbyte.io/connector-development/testing-connectors/connector-acceptance-tests-reference) for more information. +Customize `acceptance-test-config.yml` file to configure tests. See [Connector Acceptance Tests](https://docs.airbyte.com/connector-development/testing-connectors/connector-acceptance-tests-reference) for more information. If your connector requires to create or destroy resources for use during acceptance tests create fixtures for it and place them inside integration_tests/acceptance.py. -To run your integration tests with acceptance tests, from the connector root, run + +To run your integration tests with Docker, run: ``` -docker build . --no-cache -t airbyte/source-amplitude:dev \ -&& python -m pytest -p connector_acceptance_test.plugin +./acceptance-test-docker.sh ``` -To run your integration tests with docker ### Using gradle to run tests All commands should be run from airbyte project root. diff --git a/airbyte-integrations/connectors/source-sendgrid/integration_tests/integration_test.py b/airbyte-integrations/connectors/source-amplitude/__init__.py similarity index 61% rename from airbyte-integrations/connectors/source-sendgrid/integration_tests/integration_test.py rename to airbyte-integrations/connectors/source-amplitude/__init__.py index 5544269fad67..c941b3045795 100644 --- a/airbyte-integrations/connectors/source-sendgrid/integration_tests/integration_test.py +++ b/airbyte-integrations/connectors/source-amplitude/__init__.py @@ -1,7 +1,3 @@ # # Copyright (c) 2023 Airbyte, Inc., all rights reserved. # - - -def test_example(): - assert True diff --git a/airbyte-integrations/connectors/source-amplitude/acceptance-test-config.yml b/airbyte-integrations/connectors/source-amplitude/acceptance-test-config.yml index 3bcbe5347874..36d8829fa789 100644 --- a/airbyte-integrations/connectors/source-amplitude/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-amplitude/acceptance-test-config.yml @@ -1,36 +1,43 @@ +# See [Connector Acceptance Tests](https://docs.airbyte.io/connector-development/testing-connectors/connector-acceptance-tests-reference) +# for more information about how to configure these tests connector_image: airbyte/source-amplitude:dev test_strictness_level: high acceptance_tests: spec: tests: - - spec_path: "source_amplitude/spec.json" + - spec_path: "source_amplitude/spec.yaml" connection: tests: - - config_path: "secrets/config.json" - status: "succeed" - - config_path: "integration_tests/invalid_config.json" - status: "failed" + - config_path: "secrets/config.json" + status: "succeed" + - config_path: "integration_tests/invalid_config.json" + status: "failed" discovery: tests: - - config_path: "secrets/config.json" + - config_path: "secrets/config.json" + backward_compatibility_tests_config: + disable_for_version: 0.1.24 # cursor field for stream events has been changed basic_read: tests: - - config_path: "secrets/config.json" - expect_records: - path: "integration_tests/expected_records.jsonl" - empty_streams: - - name: "cohorts" - bypass_reason: "This stream is empty due to free subscription plan for the sandbox." - - name: "annotations" - bypass_reason: "This stream is empty due to free subscription plan for the sandbox." - fail_on_extra_columns: false - full_refresh: - tests: - - config_path: "secrets/config.json" - configured_catalog_path: "integration_tests/configured_catalog.json" + - config_path: "secrets/config.json" + empty_streams: + - name: "cohorts" + bypass_reason: "This stream is empty due to free subscription plan for the sandbox." + - name: "annotations" + bypass_reason: "This stream is empty due to free subscription plan for the sandbox." + expect_records: + path: "integration_tests/expected_records.jsonl" + extra_fields: no + exact_order: no + extra_records: yes + fail_on_extra_columns: false incremental: tests: - - config_path: "secrets/config.json" - configured_catalog_path: "integration_tests/configured_catalog.json" - future_state: - future_state_path: "integration_tests/abnormal_state.json" + - config_path: "secrets/config.json" + configured_catalog_path: "integration_tests/configured_catalog.json" + future_state: + future_state_path: "integration_tests/abnormal_state.json" + full_refresh: + tests: + - config_path: "secrets/config.json" + configured_catalog_path: "integration_tests/configured_catalog.json" diff --git a/airbyte-integrations/connectors/source-amplitude/acceptance-test-docker.sh b/airbyte-integrations/connectors/source-amplitude/acceptance-test-docker.sh old mode 100644 new mode 100755 diff --git a/airbyte-integrations/connectors/source-amplitude/integration_tests/abnormal_state.json b/airbyte-integrations/connectors/source-amplitude/integration_tests/abnormal_state.json index ad51d63cd699..d45d91157ecb 100644 --- a/airbyte-integrations/connectors/source-amplitude/integration_tests/abnormal_state.json +++ b/airbyte-integrations/connectors/source-amplitude/integration_tests/abnormal_state.json @@ -2,21 +2,21 @@ { "type": "STREAM", "stream": { - "stream_state": { "event_time": "2025-02-15 08:00:00.000000" }, + "stream_state": { "server_upload_time": "2100-01-01T00:00:00.00+00:00" }, "stream_descriptor": { "name": "events" } } }, { "type": "STREAM", "stream": { - "stream_state": { "date": "2025-02-17" }, + "stream_state": { "date": "2100-01-01" }, "stream_descriptor": { "name": "active_users" } } }, { "type": "STREAM", "stream": { - "stream_state": { "date": "2025-02-17" }, + "stream_state": { "date": "2100-01-01" }, "stream_descriptor": { "name": "average_session_length" } } } diff --git a/airbyte-integrations/connectors/source-amplitude/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-amplitude/integration_tests/configured_catalog.json index e333d27a8113..52bbd2410288 100644 --- a/airbyte-integrations/connectors/source-amplitude/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-amplitude/integration_tests/configured_catalog.json @@ -52,12 +52,12 @@ "json_schema": {}, "supported_sync_modes": ["full_refresh", "incremental"], "source_defined_cursor": true, - "default_cursor_field": ["event_time"], + "default_cursor_field": ["server_upload_time"], "source_defined_primary_key": [["uuid"]] }, "sync_mode": "incremental", "destination_sync_mode": "append", - "cursor_field": ["event_time"] + "cursor_field": ["server_upload_time"] } ] } diff --git a/airbyte-integrations/connectors/source-amplitude/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-amplitude/integration_tests/expected_records.jsonl index cd564fc0d88d..412b5966b9bc 100644 --- a/airbyte-integrations/connectors/source-amplitude/integration_tests/expected_records.jsonl +++ b/airbyte-integrations/connectors/source-amplitude/integration_tests/expected_records.jsonl @@ -1,85 +1,116 @@ -{"stream": "active_users", "data": {"date": "2023-02-01", "statistics": {"(none)": 1, "Ukraine": 0}}, "emitted_at": 1676633494310} -{"stream": "active_users", "data": {"date": "2023-02-02", "statistics": {"(none)": 1, "Ukraine": 0}}, "emitted_at": 1676633494310} -{"stream": "active_users", "data": {"date": "2023-02-03", "statistics": {"(none)": 1, "Ukraine": 0}}, "emitted_at": 1676633494310} -{"stream": "active_users", "data": {"date": "2023-02-04", "statistics": {"(none)": 1, "Ukraine": 0}}, "emitted_at": 1676633494310} -{"stream": "active_users", "data": {"date": "2023-02-05", "statistics": {"(none)": 1, "Ukraine": 0}}, "emitted_at": 1676633494310} -{"stream": "active_users", "data": {"date": "2023-02-06", "statistics": {"(none)": 1, "Ukraine": 0}}, "emitted_at": 1676633494311} -{"stream": "active_users", "data": {"date": "2023-02-07", "statistics": {"(none)": 1, "Ukraine": 0}}, "emitted_at": 1676633494311} -{"stream": "active_users", "data": {"date": "2023-02-08", "statistics": {"(none)": 1, "Ukraine": 0}}, "emitted_at": 1676633494311} -{"stream": "active_users", "data": {"date": "2023-02-09", "statistics": {"(none)": 1, "Ukraine": 1}}, "emitted_at": 1676633494311} -{"stream": "active_users", "data": {"date": "2023-02-10", "statistics": {"(none)": 1, "Ukraine": 0}}, "emitted_at": 1676633494311} -{"stream": "active_users", "data": {"date": "2023-02-11", "statistics": {"(none)": 1, "Ukraine": 0}}, "emitted_at": 1676633494312} -{"stream": "active_users", "data": {"date": "2023-02-12", "statistics": {"(none)": 1, "Ukraine": 0}}, "emitted_at": 1676633494312} -{"stream": "active_users", "data": {"date": "2023-02-13", "statistics": {"(none)": 1, "Ukraine": 0}}, "emitted_at": 1676633494312} -{"stream": "active_users", "data": {"date": "2023-02-14", "statistics": {"(none)": 1, "Ukraine": 0}}, "emitted_at": 1676633494312} -{"stream": "active_users", "data": {"date": "2023-02-15", "statistics": {"(none)": 1, "Ukraine": 0}}, "emitted_at": 1676633494312} -{"stream": "average_session_length", "data": {"date": "2023-02-01", "length": 0}, "emitted_at": 1676633495359} -{"stream": "average_session_length", "data": {"date": "2023-02-02", "length": 0}, "emitted_at": 1676633495359} -{"stream": "average_session_length", "data": {"date": "2023-02-03", "length": 0}, "emitted_at": 1676633495360} -{"stream": "average_session_length", "data": {"date": "2023-02-04", "length": 0}, "emitted_at": 1676633495360} -{"stream": "average_session_length", "data": {"date": "2023-02-05", "length": 0}, "emitted_at": 1676633495360} -{"stream": "average_session_length", "data": {"date": "2023-02-06", "length": 0}, "emitted_at": 1676633495360} -{"stream": "average_session_length", "data": {"date": "2023-02-07", "length": 0}, "emitted_at": 1676633495360} -{"stream": "average_session_length", "data": {"date": "2023-02-08", "length": 0}, "emitted_at": 1676633495360} -{"stream": "average_session_length", "data": {"date": "2023-02-09", "length": 0}, "emitted_at": 1676633495360} -{"stream": "average_session_length", "data": {"date": "2023-02-10", "length": 0}, "emitted_at": 1676633495360} -{"stream": "average_session_length", "data": {"date": "2023-02-11", "length": 0}, "emitted_at": 1676633495361} -{"stream": "average_session_length", "data": {"date": "2023-02-12", "length": 0}, "emitted_at": 1676633495361} -{"stream": "average_session_length", "data": {"date": "2023-02-13", "length": 0}, "emitted_at": 1676633495361} -{"stream": "average_session_length", "data": {"date": "2023-02-14", "length": 0}, "emitted_at": 1676633495361} -{"stream": "average_session_length", "data": {"date": "2023-02-15", "length": 0}, "emitted_at": 1676633495361} -{"stream": "average_session_length", "data": {"date": "2023-02-16", "length": 0}, "emitted_at": 1676633495361} -{"stream": "average_session_length", "data": {"date": "2023-02-16", "length": 0}, "emitted_at": 1676633496935} -{"stream": "average_session_length", "data": {"date": "2023-02-17", "length": 0}, "emitted_at": 1676633496935} -{"stream": "average_session_length", "data": {"date": "2023-02-16", "length": 0}, "emitted_at": 1676633497355} -{"stream": "average_session_length", "data": {"date": "2023-02-17", "length": 0}, "emitted_at": 1676633497356} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-DESKTOP-2023-02-01", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-01T08:00:00+00:00", "client_upload_time": "2023-02-02T12:03:25.005000+00:00", "country": null, "data": {"user_properties_updated": true, "vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 579725194, "event_properties": {"ad_metrics.cost": 0.087394, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "DESKTOP", "ad_metrics.impressions": 258, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 0, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 0, "campaign_id": 19410069806}, "event_time": "2023-02-01T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-02T12:03:52.152000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-02T12:03:25.005000+00:00", "server_upload_time": "2023-02-02T12:03:43.846000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {}, "uuid": "a8b6b648-a2f1-11ed-b981-774fa598444a", "version_name": null}, "emitted_at": 1676633500206} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-TABLET-2023-02-01", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-01T08:00:00+00:00", "client_upload_time": "2023-02-02T12:03:25.005000+00:00", "country": null, "data": {"vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 186292011, "event_properties": {"ad_metrics.cost": 0.237483, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "TABLET", "ad_metrics.impressions": 268, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 0, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 0, "campaign_id": 19410069806}, "event_time": "2023-02-01T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-02T12:03:52.152000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-02T12:03:25.005000+00:00", "server_upload_time": "2023-02-02T12:03:43.846000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {}, "uuid": "a8b6c322-a2f1-11ed-9dbe-774fa598444a", "version_name": null}, "emitted_at": 1676633500207} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-MOBILE-2023-02-01", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-01T08:00:00+00:00", "client_upload_time": "2023-02-02T12:03:25.005000+00:00", "country": null, "data": {"vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 343534293, "event_properties": {"ad_metrics.cost": 1.913081, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "MOBILE", "ad_metrics.impressions": 2380, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 4, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 4, "campaign_id": 19410069806}, "event_time": "2023-02-01T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-02T12:03:52.152000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-02T12:03:25.005000+00:00", "server_upload_time": "2023-02-02T12:03:43.846000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {}, "uuid": "a8b6bd56-a2f1-11ed-84fd-774fa598444a", "version_name": null}, "emitted_at": 1676633500208} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-DESKTOP-2023-02-02", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-02T08:00:00+00:00", "client_upload_time": "2023-02-03T12:02:59.374000+00:00", "country": null, "data": {"user_properties_updated": true, "vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 444502983, "event_properties": {"ad_metrics.cost": 0.098846, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "DESKTOP", "ad_metrics.impressions": 260, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 0, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 0, "campaign_id": 19410069806}, "event_time": "2023-02-02T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-03T12:03:14.894000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-03T12:02:59.374000+00:00", "server_upload_time": "2023-02-03T12:03:12.182000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {}, "uuid": "bcf76cb7-a3ba-11ed-bbc1-ef5367694578", "version_name": null}, "emitted_at": 1676633500606} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-TABLET-2023-02-02", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-02T08:00:00+00:00", "client_upload_time": "2023-02-03T12:02:59.374000+00:00", "country": null, "data": {"vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 540530303, "event_properties": {"ad_metrics.cost": 0.255795, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "TABLET", "ad_metrics.impressions": 318, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 0, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 0, "campaign_id": 19410069806}, "event_time": "2023-02-02T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-03T12:03:14.894000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-03T12:02:59.374000+00:00", "server_upload_time": "2023-02-03T12:03:12.182000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {}, "uuid": "bcf77ba6-a3ba-11ed-b2f9-ef5367694578", "version_name": null}, "emitted_at": 1676633500607} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-MOBILE-2023-02-02", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-02T08:00:00+00:00", "client_upload_time": "2023-02-03T12:02:59.374000+00:00", "country": null, "data": {"vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 472999226, "event_properties": {"ad_metrics.cost": 1.91728, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "MOBILE", "ad_metrics.impressions": 2473, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 3, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 3, "campaign_id": 19410069806}, "event_time": "2023-02-02T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-03T12:03:14.894000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-03T12:02:59.374000+00:00", "server_upload_time": "2023-02-03T12:03:12.182000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {}, "uuid": "bcf77529-a3ba-11ed-9ee2-ef5367694578", "version_name": null}, "emitted_at": 1676633500607} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-DESKTOP-2023-02-03", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-03T08:00:00+00:00", "client_upload_time": "2023-02-04T12:02:25.436000+00:00", "country": null, "data": {"user_properties_updated": true, "vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 830727485, "event_properties": {"ad_metrics.cost": 0.075498, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "DESKTOP", "ad_metrics.impressions": 229, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 0, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 0, "campaign_id": 19410069806}, "event_time": "2023-02-03T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-04T12:02:41.144000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-04T12:02:25.436000+00:00", "server_upload_time": "2023-02-04T12:02:37.836000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {}, "uuid": "d3388c42-a483-11ed-a241-a9a73855976a", "version_name": null}, "emitted_at": 1676633501850} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-TABLET-2023-02-03", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-03T08:00:00+00:00", "client_upload_time": "2023-02-04T12:02:25.436000+00:00", "country": null, "data": {"vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 738101948, "event_properties": {"ad_metrics.cost": 0.109966, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "TABLET", "ad_metrics.impressions": 166, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 0, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 0, "campaign_id": 19410069806}, "event_time": "2023-02-03T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-04T12:02:41.144000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-04T12:02:25.436000+00:00", "server_upload_time": "2023-02-04T12:02:37.836000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {}, "uuid": "d3389906-a483-11ed-9a82-a9a73855976a", "version_name": null}, "emitted_at": 1676633501851} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-MOBILE-2023-02-03", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-03T08:00:00+00:00", "client_upload_time": "2023-02-04T12:02:25.436000+00:00", "country": null, "data": {"vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 181349706, "event_properties": {"ad_metrics.cost": 2.031292, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "MOBILE", "ad_metrics.impressions": 2580, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 5, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 5, "campaign_id": 19410069806}, "event_time": "2023-02-03T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-04T12:02:41.144000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-04T12:02:25.436000+00:00", "server_upload_time": "2023-02-04T12:02:37.836000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {}, "uuid": "d3389329-a483-11ed-90ec-a9a73855976a", "version_name": null}, "emitted_at": 1676633501852} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-DESKTOP-2023-02-04", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-04T08:00:00+00:00", "client_upload_time": "2023-02-05T12:04:06.941000+00:00", "country": null, "data": {"user_properties_updated": true, "vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 920042324, "event_properties": {"ad_metrics.cost": 0.077221, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "DESKTOP", "ad_metrics.impressions": 272, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 0, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 0, "campaign_id": 19410069806}, "event_time": "2023-02-04T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-05T12:17:06.057000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-05T12:04:06.941000+00:00", "server_upload_time": "2023-02-05T12:15:52.509000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {}, "uuid": "01311b3f-a54f-11ed-bd6b-b9b1c4f00a9c", "version_name": null}, "emitted_at": 1676633502187} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-CONNECTED_TV-2023-02-04", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-04T08:00:00+00:00", "client_upload_time": "2023-02-05T12:04:06.941000+00:00", "country": null, "data": {"vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 323952360, "event_properties": {"ad_metrics.cost": 0.000117, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "CONNECTED_TV", "ad_metrics.impressions": 6, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 0, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 0, "campaign_id": 19410069806}, "event_time": "2023-02-04T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-05T12:17:06.057000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-05T12:04:06.941000+00:00", "server_upload_time": "2023-02-05T12:15:52.509000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {}, "uuid": "01312d7f-a54f-11ed-b760-b9b1c4f00a9c", "version_name": null}, "emitted_at": 1676633502188} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-TABLET-2023-02-04", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-04T08:00:00+00:00", "client_upload_time": "2023-02-05T12:04:06.941000+00:00", "country": null, "data": {"vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 335634502, "event_properties": {"ad_metrics.cost": 0.180594, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "TABLET", "ad_metrics.impressions": 238, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 2, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 2, "campaign_id": 19410069806}, "event_time": "2023-02-04T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-05T12:17:06.057000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-05T12:04:06.941000+00:00", "server_upload_time": "2023-02-05T12:15:52.509000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {}, "uuid": "013127e4-a54f-11ed-94cb-b9b1c4f00a9c", "version_name": null}, "emitted_at": 1676633502189} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-MOBILE-2023-02-04", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-04T08:00:00+00:00", "client_upload_time": "2023-02-05T12:04:06.941000+00:00", "country": null, "data": {"vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 978891508, "event_properties": {"ad_metrics.cost": 1.956155, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "MOBILE", "ad_metrics.impressions": 2409, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 5, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 5, "campaign_id": 19410069806}, "event_time": "2023-02-04T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-05T12:17:06.057000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-05T12:04:06.941000+00:00", "server_upload_time": "2023-02-05T12:15:52.509000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {}, "uuid": "01312229-a54f-11ed-b0ff-b9b1c4f00a9c", "version_name": null}, "emitted_at": 1676633502190} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-DESKTOP-2023-02-05", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-05T08:00:00+00:00", "client_upload_time": "2023-02-06T12:01:06.017000+00:00", "country": null, "data": {"user_properties_updated": true, "vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 862973577, "event_properties": {"ad_metrics.cost": 0.071026, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "DESKTOP", "ad_metrics.impressions": 195, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 0, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 0, "campaign_id": 19410069806}, "event_time": "2023-02-05T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-06T12:02:08.452000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-06T12:01:06.017000+00:00", "server_upload_time": "2023-02-06T12:01:17.335000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {}, "uuid": "14915d67-a616-11ed-b37b-1d24c3d1426b", "version_name": null}, "emitted_at": 1676633503419} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-TABLET-2023-02-05", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-05T08:00:00+00:00", "client_upload_time": "2023-02-06T12:01:06.017000+00:00", "country": null, "data": {"vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 183007151, "event_properties": {"ad_metrics.cost": 0.144935, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "TABLET", "ad_metrics.impressions": 188, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 0, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 0, "campaign_id": 19410069806}, "event_time": "2023-02-05T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-06T12:02:08.452000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-06T12:01:06.017000+00:00", "server_upload_time": "2023-02-06T12:01:17.335000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {}, "uuid": "14916bdc-a616-11ed-abef-1d24c3d1426b", "version_name": null}, "emitted_at": 1676633503420} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-MOBILE-2023-02-05", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-05T08:00:00+00:00", "client_upload_time": "2023-02-06T12:01:06.017000+00:00", "country": null, "data": {"vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 681776226, "event_properties": {"ad_metrics.cost": 1.997995, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "MOBILE", "ad_metrics.impressions": 2583, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 3, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 3, "campaign_id": 19410069806}, "event_time": "2023-02-05T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-06T12:02:08.452000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-06T12:01:06.017000+00:00", "server_upload_time": "2023-02-06T12:01:17.335000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {}, "uuid": "149164c6-a616-11ed-b3e0-1d24c3d1426b", "version_name": null}, "emitted_at": 1676633503421} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-DESKTOP-2023-02-06", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-06T08:00:00+00:00", "client_upload_time": "2023-02-07T12:01:48.859000+00:00", "country": null, "data": {"user_properties_updated": true, "vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 970466740, "event_properties": {"ad_metrics.cost": 0.078221, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "DESKTOP", "ad_metrics.impressions": 278, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 0, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 0, "campaign_id": 19410069806}, "event_time": "2023-02-06T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-07T12:02:07.033000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-07T12:01:48.859000+00:00", "server_upload_time": "2023-02-07T12:02:04.872000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {}, "uuid": "3e28db97-a6df-11ed-be64-5d7f35c3b01a", "version_name": null}, "emitted_at": 1676633503787} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-CONNECTED_TV-2023-02-06", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-06T08:00:00+00:00", "client_upload_time": "2023-02-07T12:01:48.859000+00:00", "country": null, "data": {"vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 567803347, "event_properties": {"ad_metrics.cost": 0.0, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "CONNECTED_TV", "ad_metrics.impressions": 4, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 0, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 0, "campaign_id": 19410069806}, "event_time": "2023-02-06T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-07T12:02:07.033000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-07T12:01:48.859000+00:00", "server_upload_time": "2023-02-07T12:02:04.872000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {}, "uuid": "3e28ee9f-a6df-11ed-8c6f-5d7f35c3b01a", "version_name": null}, "emitted_at": 1676633503788} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-TABLET-2023-02-06", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-06T08:00:00+00:00", "client_upload_time": "2023-02-07T12:01:48.859000+00:00", "country": null, "data": {"vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 557070126, "event_properties": {"ad_metrics.cost": 0.192373, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "TABLET", "ad_metrics.impressions": 213, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 0, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 0, "campaign_id": 19410069806}, "event_time": "2023-02-06T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-07T12:02:07.033000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-07T12:01:48.859000+00:00", "server_upload_time": "2023-02-07T12:02:04.872000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {}, "uuid": "3e28e905-a6df-11ed-b2b0-5d7f35c3b01a", "version_name": null}, "emitted_at": 1676633503789} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-MOBILE-2023-02-06", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-06T08:00:00+00:00", "client_upload_time": "2023-02-07T12:01:48.859000+00:00", "country": null, "data": {"vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 701875278, "event_properties": {"ad_metrics.cost": 2.018299, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "MOBILE", "ad_metrics.impressions": 2595, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 4, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 4, "campaign_id": 19410069806}, "event_time": "2023-02-06T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-07T12:02:07.033000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-07T12:01:48.859000+00:00", "server_upload_time": "2023-02-07T12:02:04.872000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {}, "uuid": "3e28e312-a6df-11ed-8dec-5d7f35c3b01a", "version_name": null}, "emitted_at": 1676633503789} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-DESKTOP-2023-02-07", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-07T08:00:00+00:00", "client_upload_time": "2023-02-08T12:02:25.066000+00:00", "country": null, "data": {"user_properties_updated": true, "vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 215560287, "event_properties": {"ad_metrics.cost": 0.049814, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "DESKTOP", "ad_metrics.impressions": 208, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 1, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 1, "campaign_id": 19410069806}, "event_time": "2023-02-07T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-08T12:02:39.178000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-08T12:02:25.066000+00:00", "server_upload_time": "2023-02-08T12:02:35.998000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {}, "uuid": "7bba250f-a7a8-11ed-9ce6-3718c73e0dcb", "version_name": null}, "emitted_at": 1676633505339} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-TABLET-2023-02-07", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-07T08:00:00+00:00", "client_upload_time": "2023-02-08T12:02:25.066000+00:00", "country": null, "data": {"vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 750045948, "event_properties": {"ad_metrics.cost": 0.145436, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "TABLET", "ad_metrics.impressions": 180, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 0, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 0, "campaign_id": 19410069806}, "event_time": "2023-02-07T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-08T12:02:39.178000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-08T12:02:25.066000+00:00", "server_upload_time": "2023-02-08T12:02:35.998000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {}, "uuid": "7bba32f5-a7a8-11ed-a10d-3718c73e0dcb", "version_name": null}, "emitted_at": 1676633505340} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-MOBILE-2023-02-07", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-07T08:00:00+00:00", "client_upload_time": "2023-02-08T12:02:25.066000+00:00", "country": null, "data": {"vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 54427230, "event_properties": {"ad_metrics.cost": 2.093716, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "MOBILE", "ad_metrics.impressions": 2694, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 3, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 3, "campaign_id": 19410069806}, "event_time": "2023-02-07T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-08T12:02:39.178000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-08T12:02:25.066000+00:00", "server_upload_time": "2023-02-08T12:02:35.998000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {}, "uuid": "7bba2cff-a7a8-11ed-baf0-3718c73e0dcb", "version_name": null}, "emitted_at": 1676633505341} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-DESKTOP-2023-02-08", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-08T08:00:00+00:00", "client_upload_time": "2023-02-09T12:02:17.656000+00:00", "country": null, "data": {"user_properties_updated": true, "vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 500159953, "event_properties": {"ad_metrics.cost": 0.063632, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "DESKTOP", "ad_metrics.impressions": 275, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 0, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 0, "campaign_id": 19410069806}, "event_time": "2023-02-08T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-09T12:02:40.173000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-09T12:02:17.656000+00:00", "server_upload_time": "2023-02-09T12:02:37.115000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {"country": "test", "device_model": "test", "city": "test", "os_version": "test", "City": "London", "platform": "test", "device_manufacturer": "test", "carrier": "test", "device_brand": "test", "Region": "London", "DMA": "London", "Country": "UK", "os_name": "test", "region": "test"}, "uuid": "a6b63b9b-a871-11ed-8e0e-556bceaee760", "version_name": null}, "emitted_at": 1676633506774} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-CONNECTED_TV-2023-02-08", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-08T08:00:00+00:00", "client_upload_time": "2023-02-09T12:02:17.656000+00:00", "country": null, "data": {"vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 91323750, "event_properties": {"ad_metrics.cost": 2.4e-05, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "CONNECTED_TV", "ad_metrics.impressions": 2, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 0, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 0, "campaign_id": 19410069806}, "event_time": "2023-02-08T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-09T12:02:40.173000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-09T12:02:17.656000+00:00", "server_upload_time": "2023-02-09T12:02:37.115000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {"country": "test", "device_model": "test", "city": "test", "os_version": "test", "City": "London", "platform": "test", "device_manufacturer": "test", "carrier": "test", "device_brand": "test", "Region": "London", "DMA": "London", "Country": "UK", "os_name": "test", "region": "test"}, "uuid": "a6b65793-a871-11ed-9158-556bceaee760", "version_name": null}, "emitted_at": 1676633506774} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-TABLET-2023-02-08", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-08T08:00:00+00:00", "client_upload_time": "2023-02-09T12:02:17.656000+00:00", "country": null, "data": {"vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 248713684, "event_properties": {"ad_metrics.cost": 0.111586, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "TABLET", "ad_metrics.impressions": 188, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 1, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 1, "campaign_id": 19410069806}, "event_time": "2023-02-08T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-09T12:02:40.173000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-09T12:02:17.656000+00:00", "server_upload_time": "2023-02-09T12:02:37.115000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {"country": "test", "device_model": "test", "city": "test", "os_version": "test", "City": "London", "platform": "test", "device_manufacturer": "test", "carrier": "test", "device_brand": "test", "Region": "London", "DMA": "London", "Country": "UK", "os_name": "test", "region": "test"}, "uuid": "a6b6514c-a871-11ed-963a-556bceaee760", "version_name": null}, "emitted_at": 1676633506775} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-MOBILE-2023-02-08", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-08T08:00:00+00:00", "client_upload_time": "2023-02-09T12:02:17.656000+00:00", "country": null, "data": {"vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 771697037, "event_properties": {"ad_metrics.cost": 2.075305, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "MOBILE", "ad_metrics.impressions": 2687, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 7, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 7, "campaign_id": 19410069806}, "event_time": "2023-02-08T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-09T12:02:40.173000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-09T12:02:17.656000+00:00", "server_upload_time": "2023-02-09T12:02:37.115000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {"country": "test", "device_model": "test", "city": "test", "os_version": "test", "City": "London", "platform": "test", "device_manufacturer": "test", "carrier": "test", "device_brand": "test", "Region": "London", "DMA": "London", "Country": "UK", "os_name": "test", "region": "test"}, "uuid": "a6b64994-a871-11ed-bdac-556bceaee760", "version_name": null}, "emitted_at": 1676633506776} -{"stream": "events", "data": {"$insert_id": "13648a56-a2bf-468d-89ce-af8148d5eb4b", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 568771836625, "app": 434735, "city": "Kyiv", "client_event_time": "2023-02-09T09:57:33+00:00", "client_upload_time": "2023-02-09T09:57:33+00:00", "country": "Ukraine", "data": {"user_properties_updated": true, "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "ff91a939-5a66-57f3-934c-6e58f7bd6da2", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 115597971, "event_properties": {"keyBool": true, "keyString": "valueString", "keyInt": 11}, "event_time": "2023-02-09T09:57:33+00:00", "event_type": "[Shopify] Connect Amplitude Test", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": "85.209.47.207", "is_attribution_event": null, "language": null, "library": "amplitude-node/1.10.0", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-09T09:57:35.351000+00:00", "region": "Kyiv City", "sample_rate": null, "server_received_time": "2023-02-09T09:57:33+00:00", "server_upload_time": "2023-02-09T09:57:33.014000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": "testuserEmail@gmail.com", "user_properties": {}, "uuid": "2d7ec4b1-a860-11ed-aae8-01da73a04a5b", "version_name": null}, "emitted_at": 1676633506777} -{"stream": "events", "data": {"$insert_id": "ca3fb836-163b-4898-9d59-1586fe103693", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 568771836625, "app": 434735, "city": "Kyiv", "client_event_time": "2023-02-09T09:57:39.118000+00:00", "client_upload_time": "2023-02-09T09:57:39.118000+00:00", "country": "Ukraine", "data": {"group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "ff91a939-5a66-57f3-934c-6e58f7bd6da2", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 748377217, "event_properties": {"keyBool": true, "keyString": "valueString", "keyInt": 11}, "event_time": "2023-02-09T09:57:39.118000+00:00", "event_type": "[Shopify] Connect Amplitude Test", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": "85.209.47.207", "is_attribution_event": null, "language": null, "library": "amplitude-node/1.10.0", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-09T09:57:40.295000+00:00", "region": "Kyiv City", "sample_rate": null, "server_received_time": "2023-02-09T09:57:39.118000+00:00", "server_upload_time": "2023-02-09T09:57:39.123000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": "testuserEmail@gmail.com", "user_properties": {}, "uuid": "30869ad0-a860-11ed-a807-f949e6b8dfb8", "version_name": null}, "emitted_at": 1676633506777} -{"stream": "events", "data": {"$insert_id": "6bf42abd-5033-4ea6-9574-c1c674a4d32d", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 568771836625, "app": 434735, "city": "Kyiv", "client_event_time": "2023-02-09T09:57:44.390000+00:00", "client_upload_time": "2023-02-09T09:57:44.390000+00:00", "country": "Ukraine", "data": {"group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "ff91a939-5a66-57f3-934c-6e58f7bd6da2", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 969823192, "event_properties": {"keyBool": true, "keyString": "valueString", "keyInt": 11}, "event_time": "2023-02-09T09:57:44.390000+00:00", "event_type": "[Shopify] Connect Amplitude Test", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": "85.209.47.207", "is_attribution_event": null, "language": null, "library": "amplitude-node/1.10.0", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-09T09:57:45.721000+00:00", "region": "Kyiv City", "sample_rate": null, "server_received_time": "2023-02-09T09:57:44.390000+00:00", "server_upload_time": "2023-02-09T09:57:44.394000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": "testuserEmail@gmail.com", "user_properties": {}, "uuid": "33c35984-a860-11ed-8460-f949e6b8dfb8", "version_name": null}, "emitted_at": 1676633506778} -{"stream": "events", "data": {"$insert_id": "afb8f963-cae5-4232-b20d-9047440d29c9", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 568771836625, "app": 434735, "city": "Kyiv", "client_event_time": "2023-02-09T09:58:07.981000+00:00", "client_upload_time": "2023-02-09T09:58:07.981000+00:00", "country": "Ukraine", "data": {"group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "ff91a939-5a66-57f3-934c-6e58f7bd6da2", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 318819040, "event_properties": {"keyBool": true, "keyString": "valueString", "keyInt": 11}, "event_time": "2023-02-09T09:58:07.981000+00:00", "event_type": "[Shopify] Connect Amplitude Test", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": "85.209.47.207", "is_attribution_event": null, "language": null, "library": "amplitude-node/1.10.0", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-09T09:58:10.307000+00:00", "region": "Kyiv City", "sample_rate": null, "server_received_time": "2023-02-09T09:58:07.981000+00:00", "server_upload_time": "2023-02-09T09:58:07.987000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": "testuserEmail@gmail.com", "user_properties": {}, "uuid": "426b1ef9-a860-11ed-8868-f949e6b8dfb8", "version_name": null}, "emitted_at": 1676633506779} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-DESKTOP-2023-02-10", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-10T08:00:00+00:00", "client_upload_time": "2023-02-11T12:01:50.248000+00:00", "country": null, "data": {"user_properties_updated": true, "vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 782291950, "event_properties": {"ad_metrics.cost": 0.070298, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "DESKTOP", "ad_metrics.impressions": 250, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 0, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 0, "campaign_id": 19410069806}, "event_time": "2023-02-10T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-11T12:02:19.794000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-11T12:01:50.248000+00:00", "server_upload_time": "2023-02-11T12:02:04.360000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {"country": "test", "device_model": "test", "city": "test", "os_version": "test", "City": "London", "platform": "test", "device_manufacturer": "test", "carrier": "test", "device_brand": "test", "Region": "London", "DMA": "London", "Country": "UK", "os_name": "test", "region": "test"}, "uuid": "ef62e73e-aa03-11ed-ab60-21041b90b30e", "version_name": null}, "emitted_at": 1676633509080} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-TABLET-2023-02-10", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-10T08:00:00+00:00", "client_upload_time": "2023-02-11T12:01:50.248000+00:00", "country": null, "data": {"vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 660413772, "event_properties": {"ad_metrics.cost": 0.137032, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "TABLET", "ad_metrics.impressions": 184, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 0, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 0, "campaign_id": 19410069806}, "event_time": "2023-02-10T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-11T12:02:19.794000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-11T12:01:50.248000+00:00", "server_upload_time": "2023-02-11T12:02:04.360000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {"country": "test", "device_model": "test", "city": "test", "os_version": "test", "City": "London", "platform": "test", "device_manufacturer": "test", "carrier": "test", "device_brand": "test", "Region": "London", "DMA": "London", "Country": "UK", "os_name": "test", "region": "test"}, "uuid": "ef62f428-aa03-11ed-9aea-21041b90b30e", "version_name": null}, "emitted_at": 1676633509081} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-MOBILE-2023-02-10", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-10T08:00:00+00:00", "client_upload_time": "2023-02-11T12:01:50.248000+00:00", "country": null, "data": {"vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 345846795, "event_properties": {"ad_metrics.cost": 1.986076, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "MOBILE", "ad_metrics.impressions": 2366, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 3, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 3, "campaign_id": 19410069806}, "event_time": "2023-02-10T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-11T12:02:19.794000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-11T12:01:50.248000+00:00", "server_upload_time": "2023-02-11T12:02:04.360000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {"country": "test", "device_model": "test", "city": "test", "os_version": "test", "City": "London", "platform": "test", "device_manufacturer": "test", "carrier": "test", "device_brand": "test", "Region": "London", "DMA": "London", "Country": "UK", "os_name": "test", "region": "test"}, "uuid": "ef62ee58-aa03-11ed-9470-21041b90b30e", "version_name": null}, "emitted_at": 1676633509082} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-DESKTOP-2023-02-11", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-11T08:00:00+00:00", "client_upload_time": "2023-02-12T12:02:28.595000+00:00", "country": null, "data": {"user_properties_updated": true, "vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 589830428, "event_properties": {"ad_metrics.cost": 0.069645, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "DESKTOP", "ad_metrics.impressions": 183, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 0, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 0, "campaign_id": 19410069806}, "event_time": "2023-02-11T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-12T12:03:53.410000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-12T12:02:28.595000+00:00", "server_upload_time": "2023-02-12T12:02:39.319000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {"country": "test", "device_model": "test", "city": "test", "os_version": "test", "City": "London", "platform": "test", "device_manufacturer": "test", "carrier": "test", "device_brand": "test", "Region": "London", "DMA": "London", "Country": "UK", "os_name": "test", "region": "test"}, "uuid": "518af7fe-aacd-11ed-9a80-43c1bac2ac7b", "version_name": null}, "emitted_at": 1676633510148} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-TABLET-2023-02-11", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-11T08:00:00+00:00", "client_upload_time": "2023-02-12T12:02:28.595000+00:00", "country": null, "data": {"vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 661524851, "event_properties": {"ad_metrics.cost": 0.100511, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "TABLET", "ad_metrics.impressions": 125, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 0, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 0, "campaign_id": 19410069806}, "event_time": "2023-02-11T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-12T12:03:53.410000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-12T12:02:28.595000+00:00", "server_upload_time": "2023-02-12T12:02:39.319000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {"country": "test", "device_model": "test", "city": "test", "os_version": "test", "City": "London", "platform": "test", "device_manufacturer": "test", "carrier": "test", "device_brand": "test", "Region": "London", "DMA": "London", "Country": "UK", "os_name": "test", "region": "test"}, "uuid": "518b0451-aacd-11ed-bf81-43c1bac2ac7b", "version_name": null}, "emitted_at": 1676633510148} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-MOBILE-2023-02-11", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-11T08:00:00+00:00", "client_upload_time": "2023-02-12T12:02:28.595000+00:00", "country": null, "data": {"vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 608278585, "event_properties": {"ad_metrics.cost": 2.019566, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "MOBILE", "ad_metrics.impressions": 2505, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 3, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 3, "campaign_id": 19410069806}, "event_time": "2023-02-11T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-12T12:03:53.410000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-12T12:02:28.595000+00:00", "server_upload_time": "2023-02-12T12:02:39.319000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {"country": "test", "device_model": "test", "city": "test", "os_version": "test", "City": "London", "platform": "test", "device_manufacturer": "test", "carrier": "test", "device_brand": "test", "Region": "London", "DMA": "London", "Country": "UK", "os_name": "test", "region": "test"}, "uuid": "518afebd-aacd-11ed-a1be-43c1bac2ac7b", "version_name": null}, "emitted_at": 1676633510149} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-DESKTOP-2023-02-12", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-12T08:00:00+00:00", "client_upload_time": "2023-02-13T12:02:12.416000+00:00", "country": null, "data": {"user_properties_updated": true, "vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 756118159, "event_properties": {"ad_metrics.cost": 0.047594, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "DESKTOP", "ad_metrics.impressions": 228, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 0, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 0, "campaign_id": 19410069806}, "event_time": "2023-02-12T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-13T12:02:26.981000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-13T12:02:12.416000+00:00", "server_upload_time": "2023-02-13T12:02:22.901000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {"country": "test", "device_model": "test", "city": "test", "os_version": "test", "City": "London", "platform": "test", "device_manufacturer": "test", "carrier": "test", "device_brand": "test", "Region": "London", "DMA": "London", "Country": "UK", "os_name": "test", "region": "test"}, "uuid": "488ce6ab-ab96-11ed-a18e-516670498ef9", "version_name": null}, "emitted_at": 1676633510566} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-TABLET-2023-02-12", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-12T08:00:00+00:00", "client_upload_time": "2023-02-13T12:02:12.416000+00:00", "country": null, "data": {"vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 726820846, "event_properties": {"ad_metrics.cost": 0.094987, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "TABLET", "ad_metrics.impressions": 135, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 0, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 0, "campaign_id": 19410069806}, "event_time": "2023-02-12T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-13T12:02:26.981000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-13T12:02:12.416000+00:00", "server_upload_time": "2023-02-13T12:02:22.901000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {"country": "test", "device_model": "test", "city": "test", "os_version": "test", "City": "London", "platform": "test", "device_manufacturer": "test", "carrier": "test", "device_brand": "test", "Region": "London", "DMA": "London", "Country": "UK", "os_name": "test", "region": "test"}, "uuid": "488cf2ca-ab96-11ed-baad-516670498ef9", "version_name": null}, "emitted_at": 1676633510567} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-MOBILE-2023-02-12", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-12T08:00:00+00:00", "client_upload_time": "2023-02-13T12:02:12.416000+00:00", "country": null, "data": {"vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 30838997, "event_properties": {"ad_metrics.cost": 2.057797, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "MOBILE", "ad_metrics.impressions": 2555, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 7, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 7, "campaign_id": 19410069806}, "event_time": "2023-02-12T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-13T12:02:26.981000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-13T12:02:12.416000+00:00", "server_upload_time": "2023-02-13T12:02:22.901000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {"country": "test", "device_model": "test", "city": "test", "os_version": "test", "City": "London", "platform": "test", "device_manufacturer": "test", "carrier": "test", "device_brand": "test", "Region": "London", "DMA": "London", "Country": "UK", "os_name": "test", "region": "test"}, "uuid": "488ced3a-ab96-11ed-9cc6-516670498ef9", "version_name": null}, "emitted_at": 1676633510568} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-DESKTOP-2023-02-13", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-13T08:00:00+00:00", "client_upload_time": "2023-02-14T12:02:09.474000+00:00", "country": null, "data": {"user_properties_updated": true, "vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 602281810, "event_properties": {"ad_metrics.cost": 0.084583, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "DESKTOP", "ad_metrics.impressions": 227, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 0, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 0, "campaign_id": 19410069806}, "event_time": "2023-02-13T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-14T12:02:24.303000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-14T12:02:09.474000+00:00", "server_upload_time": "2023-02-14T12:02:20.979000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {"country": "test", "device_model": "test", "city": "test", "os_version": "test", "City": "London", "platform": "test", "device_manufacturer": "test", "carrier": "test", "device_brand": "test", "Region": "London", "DMA": "London", "Country": "UK", "os_name": "test", "region": "test"}, "uuid": "7152006b-ac5f-11ed-bb6d-b95ddc26bbd1", "version_name": null}, "emitted_at": 1676633511090} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-TABLET-2023-02-13", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-13T08:00:00+00:00", "client_upload_time": "2023-02-14T12:02:09.474000+00:00", "country": null, "data": {"vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 204201377, "event_properties": {"ad_metrics.cost": 0.1489, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "TABLET", "ad_metrics.impressions": 191, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 0, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 0, "campaign_id": 19410069806}, "event_time": "2023-02-13T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-14T12:02:24.303000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-14T12:02:09.474000+00:00", "server_upload_time": "2023-02-14T12:02:20.979000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {"country": "test", "device_model": "test", "city": "test", "os_version": "test", "City": "London", "platform": "test", "device_manufacturer": "test", "carrier": "test", "device_brand": "test", "Region": "London", "DMA": "London", "Country": "UK", "os_name": "test", "region": "test"}, "uuid": "71520cd4-ac5f-11ed-8538-b95ddc26bbd1", "version_name": null}, "emitted_at": 1676633511091} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-MOBILE-2023-02-13", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-13T08:00:00+00:00", "client_upload_time": "2023-02-14T12:02:09.474000+00:00", "country": null, "data": {"vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 96617686, "event_properties": {"ad_metrics.cost": 2.033321, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "MOBILE", "ad_metrics.impressions": 2658, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 5, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 5, "campaign_id": 19410069806}, "event_time": "2023-02-13T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-14T12:02:24.303000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-14T12:02:09.474000+00:00", "server_upload_time": "2023-02-14T12:02:20.979000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {"country": "test", "device_model": "test", "city": "test", "os_version": "test", "City": "London", "platform": "test", "device_manufacturer": "test", "carrier": "test", "device_brand": "test", "Region": "London", "DMA": "London", "Country": "UK", "os_name": "test", "region": "test"}, "uuid": "71520734-ac5f-11ed-bc4a-b95ddc26bbd1", "version_name": null}, "emitted_at": 1676633511092} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-DESKTOP-2023-02-14", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-14T08:00:00+00:00", "client_upload_time": "2023-02-15T12:02:02.211000+00:00", "country": null, "data": {"user_properties_updated": true, "vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 325453045, "event_properties": {"ad_metrics.cost": 0.065906, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "DESKTOP", "ad_metrics.impressions": 291, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 0, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 0, "campaign_id": 19410069806}, "event_time": "2023-02-14T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-15T12:02:17.536000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-15T12:02:02.211000+00:00", "server_upload_time": "2023-02-15T12:02:15.558000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {"country": "test", "device_model": "test", "city": "test", "os_version": "test", "City": "London", "platform": "test", "device_manufacturer": "test", "carrier": "test", "device_brand": "test", "Region": "London", "DMA": "London", "Country": "UK", "os_name": "test", "region": "test"}, "uuid": "97bd311f-ad28-11ed-a272-9937469197fb", "version_name": null}, "emitted_at": 1676633511617} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-TABLET-2023-02-14", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-14T08:00:00+00:00", "client_upload_time": "2023-02-15T12:02:02.211000+00:00", "country": null, "data": {"vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 579050854, "event_properties": {"ad_metrics.cost": 0.085808, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "TABLET", "ad_metrics.impressions": 166, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 0, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 0, "campaign_id": 19410069806}, "event_time": "2023-02-14T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-15T12:02:17.536000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-15T12:02:02.211000+00:00", "server_upload_time": "2023-02-15T12:02:15.558000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {"country": "test", "device_model": "test", "city": "test", "os_version": "test", "City": "London", "platform": "test", "device_manufacturer": "test", "carrier": "test", "device_brand": "test", "Region": "London", "DMA": "London", "Country": "UK", "os_name": "test", "region": "test"}, "uuid": "97bd3d80-ad28-11ed-9543-9937469197fb", "version_name": null}, "emitted_at": 1676633511618} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-MOBILE-2023-02-14", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-14T08:00:00+00:00", "client_upload_time": "2023-02-15T12:02:02.211000+00:00", "country": null, "data": {"vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 153980233, "event_properties": {"ad_metrics.cost": 2.036793, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "MOBILE", "ad_metrics.impressions": 2514, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 4, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 4, "campaign_id": 19410069806}, "event_time": "2023-02-14T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-15T12:02:17.536000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-15T12:02:02.211000+00:00", "server_upload_time": "2023-02-15T12:02:15.558000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {"country": "test", "device_model": "test", "city": "test", "os_version": "test", "City": "London", "platform": "test", "device_manufacturer": "test", "carrier": "test", "device_brand": "test", "Region": "London", "DMA": "London", "Country": "UK", "os_name": "test", "region": "test"}, "uuid": "97bd37e1-ad28-11ed-a554-9937469197fb", "version_name": null}, "emitted_at": 1676633511619} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-DESKTOP-2023-02-15", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-15T08:00:00+00:00", "client_upload_time": "2023-02-16T12:01:18.942000+00:00", "country": null, "data": {"user_properties_updated": true, "vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 230240803, "event_properties": {"ad_metrics.cost": 0.043522, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "DESKTOP", "ad_metrics.impressions": 193, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 0, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 0, "campaign_id": 19410069806}, "event_time": "2023-02-15T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-16T12:01:41.299000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-16T12:01:18.942000+00:00", "server_upload_time": "2023-02-16T12:01:39.526000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {"country": "test", "device_model": "test", "city": "test", "os_version": "test", "City": "London", "platform": "test", "device_manufacturer": "test", "carrier": "test", "device_brand": "test", "Region": "London", "DMA": "London", "Country": "UK", "os_name": "test", "region": "test"}, "uuid": "ac8bae8d-adf1-11ed-b15b-91b6ce29e523", "version_name": null}, "emitted_at": 1676633512157} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-CONNECTED_TV-2023-02-15", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-15T08:00:00+00:00", "client_upload_time": "2023-02-16T12:01:18.942000+00:00", "country": null, "data": {"vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 324823220, "event_properties": {"ad_metrics.cost": 3e-05, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "CONNECTED_TV", "ad_metrics.impressions": 1, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 0, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 0, "campaign_id": 19410069806}, "event_time": "2023-02-15T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-16T12:01:41.299000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-16T12:01:18.942000+00:00", "server_upload_time": "2023-02-16T12:01:39.526000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {"country": "test", "device_model": "test", "city": "test", "os_version": "test", "City": "London", "platform": "test", "device_manufacturer": "test", "carrier": "test", "device_brand": "test", "Region": "London", "DMA": "London", "Country": "UK", "os_name": "test", "region": "test"}, "uuid": "ac8bc13f-adf1-11ed-b15c-91b6ce29e523", "version_name": null}, "emitted_at": 1676633512158} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-TABLET-2023-02-15", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-15T08:00:00+00:00", "client_upload_time": "2023-02-16T12:01:18.942000+00:00", "country": null, "data": {"vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 427159891, "event_properties": {"ad_metrics.cost": 0.127895, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "TABLET", "ad_metrics.impressions": 173, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 1, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 1, "campaign_id": 19410069806}, "event_time": "2023-02-15T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-16T12:01:41.299000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-16T12:01:18.942000+00:00", "server_upload_time": "2023-02-16T12:01:39.526000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {"country": "test", "device_model": "test", "city": "test", "os_version": "test", "City": "London", "platform": "test", "device_manufacturer": "test", "carrier": "test", "device_brand": "test", "Region": "London", "DMA": "London", "Country": "UK", "os_name": "test", "region": "test"}, "uuid": "ac8bbbc1-adf1-11ed-9548-91b6ce29e523", "version_name": null}, "emitted_at": 1676633512159} -{"stream": "events", "data": {"$insert_id": "google-ad-4651612872-643022056303-MOBILE-2023-02-15", "$insert_key": null, "$schema": null, "adid": null, "amplitude_attribution_ids": null, "amplitude_event_type": null, "amplitude_id": 550106004607, "app": 434735, "city": null, "client_event_time": "2023-02-15T08:00:00+00:00", "client_upload_time": "2023-02-16T12:01:18.942000+00:00", "country": null, "data": {"vacuum_source_id": "5955", "group_first_event": {}, "group_ids": {}}, "data_type": "event", "device_brand": null, "device_carrier": null, "device_family": null, "device_id": "google-ad-4651612872-643022056303", "device_manufacturer": null, "device_model": null, "device_type": null, "dma": null, "event_id": 26870094, "event_properties": {"ad_metrics.cost": 2.069498, "campaign_advertising_channel_type": "DISPLAY", "ad_segment_device": "MOBILE", "ad_metrics.impressions": 2644, "ad_group_type": "DISPLAY_STANDARD", "campaign_name": "Brand awareness and reach-Display-1", "ad_group_name": "Ad group 1", "ad_id": 643022056303, "campaign_start_date": "2022-12-28", "final_url": "https://airbyte.com", "ad_platform": "google", "campaign_end_date": "2037-12-30", "ad_metrics.clicks": 5, "ad_group_id": 144799120517, "ad_metrics.conversions": 0.0, "ad_metrics.interactions": 5, "campaign_id": 19410069806}, "event_time": "2023-02-15T08:00:00+00:00", "event_type": "Daily Ad Metrics", "global_user_properties": null, "group_properties": {}, "groups": {}, "idfa": null, "ip_address": null, "is_attribution_event": null, "language": null, "library": "google_ads", "location_lat": null, "location_lng": null, "os_name": null, "os_version": null, "partner_id": null, "paying": null, "plan": {}, "platform": null, "processed_time": "2023-02-16T12:01:41.299000+00:00", "region": null, "sample_rate": null, "server_received_time": "2023-02-16T12:01:18.942000+00:00", "server_upload_time": "2023-02-16T12:01:39.526000+00:00", "session_id": -1, "source_id": null, "start_version": null, "user_creation_time": null, "user_id": null, "user_properties": {"country": "test", "device_model": "test", "city": "test", "os_version": "test", "City": "London", "platform": "test", "device_manufacturer": "test", "carrier": "test", "device_brand": "test", "Region": "London", "DMA": "London", "Country": "UK", "os_name": "test", "region": "test"}, "uuid": "ac8bb5e3-adf1-11ed-b665-91b6ce29e523", "version_name": null}, "emitted_at": 1676633512160} +{"stream":"active_users","data":{"date":"2023-02-01","statistics":{"(none)":1,"Ukraine":0}},"emitted_at":1676633494310} +{"stream":"active_users","data":{"date":"2023-02-02","statistics":{"(none)":1,"Ukraine":0}},"emitted_at":1676633494310} +{"stream":"active_users","data":{"date":"2023-02-03","statistics":{"(none)":1,"Ukraine":0}},"emitted_at":1676633494310} +{"stream":"active_users","data":{"date":"2023-02-04","statistics":{"(none)":1,"Ukraine":0}},"emitted_at":1676633494310} +{"stream":"active_users","data":{"date":"2023-02-05","statistics":{"(none)":1,"Ukraine":0}},"emitted_at":1676633494310} +{"stream":"active_users","data":{"date":"2023-02-06","statistics":{"(none)":1,"Ukraine":0}},"emitted_at":1676633494311} +{"stream":"active_users","data":{"date":"2023-02-07","statistics":{"(none)":1,"Ukraine":0}},"emitted_at":1676633494311} +{"stream":"active_users","data":{"date":"2023-02-08","statistics":{"(none)":1,"Ukraine":0}},"emitted_at":1676633494311} +{"stream":"active_users","data":{"date":"2023-02-09","statistics":{"(none)":1,"Ukraine":1}},"emitted_at":1676633494311} +{"stream":"active_users","data":{"date":"2023-02-10","statistics":{"(none)":1,"Ukraine":0}},"emitted_at":1676633494311} +{"stream":"active_users","data":{"date":"2023-02-11","statistics":{"(none)":1,"Ukraine":0}},"emitted_at":1676633494312} +{"stream":"active_users","data":{"date":"2023-02-12","statistics":{"(none)":1,"Ukraine":0}},"emitted_at":1676633494312} +{"stream":"active_users","data":{"date":"2023-02-13","statistics":{"(none)":1,"Ukraine":0}},"emitted_at":1676633494312} +{"stream":"active_users","data":{"date":"2023-02-14","statistics":{"(none)":1,"Ukraine":0}},"emitted_at":1676633494312} +{"stream":"active_users","data":{"date":"2023-02-15","statistics":{"(none)":1,"Ukraine":0}},"emitted_at":1676633494312} +{"stream":"average_session_length","data":{"date":"2023-02-01","length":0},"emitted_at":1677160664431} +{"stream":"average_session_length","data":{"date":"2023-02-02","length":0},"emitted_at":1677160664432} +{"stream":"average_session_length","data":{"date":"2023-02-03","length":0},"emitted_at":1677160664434} +{"stream":"average_session_length","data":{"date":"2023-02-04","length":0},"emitted_at":1677160664435} +{"stream":"average_session_length","data":{"date":"2023-02-05","length":0},"emitted_at":1677160664436} +{"stream":"average_session_length","data":{"date":"2023-02-06","length":0},"emitted_at":1677160664438} +{"stream":"average_session_length","data":{"date":"2023-02-07","length":0},"emitted_at":1677160664439} +{"stream":"average_session_length","data":{"date":"2023-02-08","length":0},"emitted_at":1677160664441} +{"stream":"average_session_length","data":{"date":"2023-02-09","length":0},"emitted_at":1677160664442} +{"stream":"average_session_length","data":{"date":"2023-02-10","length":0},"emitted_at":1677160664443} +{"stream":"average_session_length","data":{"date":"2023-02-11","length":0},"emitted_at":1677160664445} +{"stream":"average_session_length","data":{"date":"2023-02-12","length":0},"emitted_at":1677160664446} +{"stream":"average_session_length","data":{"date":"2023-02-13","length":0},"emitted_at":1677160664447} +{"stream":"average_session_length","data":{"date":"2023-02-14","length":0},"emitted_at":1677160664449} +{"stream":"average_session_length","data":{"date":"2023-02-15","length":0},"emitted_at":1677160664450} +{"stream":"average_session_length","data":{"date":"2023-02-16","length":0},"emitted_at":1677160664803} +{"stream":"average_session_length","data":{"date":"2023-02-17","length":0},"emitted_at":1677160664805} +{"stream":"average_session_length","data":{"date":"2023-02-18","length":0},"emitted_at":1677160664806} +{"stream":"average_session_length","data":{"date":"2023-02-19","length":0},"emitted_at":1677160664812} +{"stream":"average_session_length","data":{"date":"2023-02-20","length":0},"emitted_at":1677160664814} +{"stream":"average_session_length","data":{"date":"2023-02-21","length":0},"emitted_at":1677160664815} +{"stream":"average_session_length","data":{"date":"2023-02-22","length":0},"emitted_at":1677160664816} +{"stream":"average_session_length","data":{"date":"2023-02-23","length":0},"emitted_at":1677160664818} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-DESKTOP-2023-01-31","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-01-31T08:00:00+00:00","client_upload_time":"2023-02-01T12:02:17.685000+00:00","country":null,"data":{"user_properties_updated":true,"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":82672889,"event_properties":{"ad_metrics.cost":0.055104,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"DESKTOP","ad_metrics.impressions":202,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-01-31T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-01T12:02:40.918000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-01T12:02:17.685000+00:00","server_upload_time":"2023-02-01T12:02:36.650000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{},"uuid":"53e385c4-a228-11ed-8e51-171d53d06523","version_name":null},"emitted_at":1677160703462} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-TABLET-2023-01-31","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-01-31T08:00:00+00:00","client_upload_time":"2023-02-01T12:02:17.685000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":273196606,"event_properties":{"ad_metrics.cost":0.10283,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"TABLET","ad_metrics.impressions":188,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-01-31T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-01T12:02:40.918000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-01T12:02:17.685000+00:00","server_upload_time":"2023-02-01T12:02:36.650000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{},"uuid":"53e39277-a228-11ed-9400-171d53d06523","version_name":null},"emitted_at":1677160703465} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-MOBILE-2023-01-31","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-01-31T08:00:00+00:00","client_upload_time":"2023-02-01T12:02:17.685000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":695784978,"event_properties":{"ad_metrics.cost":1.781222,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"MOBILE","ad_metrics.impressions":2406,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":3,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":3,"campaign_id":19410069806},"event_time":"2023-01-31T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-01T12:02:40.918000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-01T12:02:17.685000+00:00","server_upload_time":"2023-02-01T12:02:36.650000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{},"uuid":"53e38ca8-a228-11ed-a707-171d53d06523","version_name":null},"emitted_at":1677160703491} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-DESKTOP-2023-02-01","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-01T08:00:00+00:00","client_upload_time":"2023-02-02T12:03:25.005000+00:00","country":null,"data":{"user_properties_updated":true,"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":579725194,"event_properties":{"ad_metrics.cost":0.087394,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"DESKTOP","ad_metrics.impressions":258,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-01T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-02T12:03:52.152000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-02T12:03:25.005000+00:00","server_upload_time":"2023-02-02T12:03:43.846000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{},"uuid":"a8b6b648-a2f1-11ed-b981-774fa598444a","version_name":null},"emitted_at":1677160704054} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-TABLET-2023-02-01","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-01T08:00:00+00:00","client_upload_time":"2023-02-02T12:03:25.005000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":186292011,"event_properties":{"ad_metrics.cost":0.237483,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"TABLET","ad_metrics.impressions":268,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-01T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-02T12:03:52.152000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-02T12:03:25.005000+00:00","server_upload_time":"2023-02-02T12:03:43.846000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{},"uuid":"a8b6c322-a2f1-11ed-9dbe-774fa598444a","version_name":null},"emitted_at":1677160704057} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-MOBILE-2023-02-01","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-01T08:00:00+00:00","client_upload_time":"2023-02-02T12:03:25.005000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":343534293,"event_properties":{"ad_metrics.cost":1.913081,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"MOBILE","ad_metrics.impressions":2380,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":4,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":4,"campaign_id":19410069806},"event_time":"2023-02-01T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-02T12:03:52.152000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-02T12:03:25.005000+00:00","server_upload_time":"2023-02-02T12:03:43.846000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{},"uuid":"a8b6bd56-a2f1-11ed-84fd-774fa598444a","version_name":null},"emitted_at":1677160704059} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-DESKTOP-2023-02-02","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-02T08:00:00+00:00","client_upload_time":"2023-02-03T12:02:59.374000+00:00","country":null,"data":{"user_properties_updated":true,"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":444502983,"event_properties":{"ad_metrics.cost":0.098846,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"DESKTOP","ad_metrics.impressions":260,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-02T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-03T12:03:14.894000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-03T12:02:59.374000+00:00","server_upload_time":"2023-02-03T12:03:12.182000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{},"uuid":"bcf76cb7-a3ba-11ed-bbc1-ef5367694578","version_name":null},"emitted_at":1677160704734} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-TABLET-2023-02-02","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-02T08:00:00+00:00","client_upload_time":"2023-02-03T12:02:59.374000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":540530303,"event_properties":{"ad_metrics.cost":0.255795,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"TABLET","ad_metrics.impressions":318,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-02T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-03T12:03:14.894000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-03T12:02:59.374000+00:00","server_upload_time":"2023-02-03T12:03:12.182000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{},"uuid":"bcf77ba6-a3ba-11ed-b2f9-ef5367694578","version_name":null},"emitted_at":1677160704736} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-MOBILE-2023-02-02","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-02T08:00:00+00:00","client_upload_time":"2023-02-03T12:02:59.374000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":472999226,"event_properties":{"ad_metrics.cost":1.91728,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"MOBILE","ad_metrics.impressions":2473,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":3,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":3,"campaign_id":19410069806},"event_time":"2023-02-02T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-03T12:03:14.894000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-03T12:02:59.374000+00:00","server_upload_time":"2023-02-03T12:03:12.182000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{},"uuid":"bcf77529-a3ba-11ed-9ee2-ef5367694578","version_name":null},"emitted_at":1677160704744} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-DESKTOP-2023-02-03","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-03T08:00:00+00:00","client_upload_time":"2023-02-04T12:02:25.436000+00:00","country":null,"data":{"user_properties_updated":true,"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":830727485,"event_properties":{"ad_metrics.cost":0.075498,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"DESKTOP","ad_metrics.impressions":229,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-03T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-04T12:02:41.144000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-04T12:02:25.436000+00:00","server_upload_time":"2023-02-04T12:02:37.836000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{},"uuid":"d3388c42-a483-11ed-a241-a9a73855976a","version_name":null},"emitted_at":1677160705252} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-TABLET-2023-02-03","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-03T08:00:00+00:00","client_upload_time":"2023-02-04T12:02:25.436000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":738101948,"event_properties":{"ad_metrics.cost":0.109966,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"TABLET","ad_metrics.impressions":166,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-03T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-04T12:02:41.144000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-04T12:02:25.436000+00:00","server_upload_time":"2023-02-04T12:02:37.836000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{},"uuid":"d3389906-a483-11ed-9a82-a9a73855976a","version_name":null},"emitted_at":1677160705254} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-MOBILE-2023-02-03","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-03T08:00:00+00:00","client_upload_time":"2023-02-04T12:02:25.436000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":181349706,"event_properties":{"ad_metrics.cost":2.031292,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"MOBILE","ad_metrics.impressions":2580,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":5,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":5,"campaign_id":19410069806},"event_time":"2023-02-03T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-04T12:02:41.144000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-04T12:02:25.436000+00:00","server_upload_time":"2023-02-04T12:02:37.836000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{},"uuid":"d3389329-a483-11ed-90ec-a9a73855976a","version_name":null},"emitted_at":1677160705256} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-DESKTOP-2023-02-04","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-04T08:00:00+00:00","client_upload_time":"2023-02-05T12:04:06.941000+00:00","country":null,"data":{"user_properties_updated":true,"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":920042324,"event_properties":{"ad_metrics.cost":0.077221,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"DESKTOP","ad_metrics.impressions":272,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-04T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-05T12:17:06.057000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-05T12:04:06.941000+00:00","server_upload_time":"2023-02-05T12:15:52.509000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{},"uuid":"01311b3f-a54f-11ed-bd6b-b9b1c4f00a9c","version_name":null},"emitted_at":1677160705685} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-CONNECTED_TV-2023-02-04","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-04T08:00:00+00:00","client_upload_time":"2023-02-05T12:04:06.941000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":323952360,"event_properties":{"ad_metrics.cost":0.000117,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"CONNECTED_TV","ad_metrics.impressions":6,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-04T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-05T12:17:06.057000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-05T12:04:06.941000+00:00","server_upload_time":"2023-02-05T12:15:52.509000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{},"uuid":"01312d7f-a54f-11ed-b760-b9b1c4f00a9c","version_name":null},"emitted_at":1677160705687} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-TABLET-2023-02-04","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-04T08:00:00+00:00","client_upload_time":"2023-02-05T12:04:06.941000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":335634502,"event_properties":{"ad_metrics.cost":0.180594,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"TABLET","ad_metrics.impressions":238,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":2,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":2,"campaign_id":19410069806},"event_time":"2023-02-04T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-05T12:17:06.057000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-05T12:04:06.941000+00:00","server_upload_time":"2023-02-05T12:15:52.509000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{},"uuid":"013127e4-a54f-11ed-94cb-b9b1c4f00a9c","version_name":null},"emitted_at":1677160705689} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-MOBILE-2023-02-04","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-04T08:00:00+00:00","client_upload_time":"2023-02-05T12:04:06.941000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":978891508,"event_properties":{"ad_metrics.cost":1.956155,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"MOBILE","ad_metrics.impressions":2409,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":5,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":5,"campaign_id":19410069806},"event_time":"2023-02-04T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-05T12:17:06.057000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-05T12:04:06.941000+00:00","server_upload_time":"2023-02-05T12:15:52.509000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{},"uuid":"01312229-a54f-11ed-b0ff-b9b1c4f00a9c","version_name":null},"emitted_at":1677160705691} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-DESKTOP-2023-02-05","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-05T08:00:00+00:00","client_upload_time":"2023-02-06T12:01:06.017000+00:00","country":null,"data":{"user_properties_updated":true,"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":862973577,"event_properties":{"ad_metrics.cost":0.071026,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"DESKTOP","ad_metrics.impressions":195,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-05T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-06T12:02:08.452000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-06T12:01:06.017000+00:00","server_upload_time":"2023-02-06T12:01:17.335000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{},"uuid":"14915d67-a616-11ed-b37b-1d24c3d1426b","version_name":null},"emitted_at":1677160706263} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-TABLET-2023-02-05","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-05T08:00:00+00:00","client_upload_time":"2023-02-06T12:01:06.017000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":183007151,"event_properties":{"ad_metrics.cost":0.144935,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"TABLET","ad_metrics.impressions":188,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-05T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-06T12:02:08.452000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-06T12:01:06.017000+00:00","server_upload_time":"2023-02-06T12:01:17.335000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{},"uuid":"14916bdc-a616-11ed-abef-1d24c3d1426b","version_name":null},"emitted_at":1677160706329} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-MOBILE-2023-02-05","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-05T08:00:00+00:00","client_upload_time":"2023-02-06T12:01:06.017000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":681776226,"event_properties":{"ad_metrics.cost":1.997995,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"MOBILE","ad_metrics.impressions":2583,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":3,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":3,"campaign_id":19410069806},"event_time":"2023-02-05T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-06T12:02:08.452000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-06T12:01:06.017000+00:00","server_upload_time":"2023-02-06T12:01:17.335000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{},"uuid":"149164c6-a616-11ed-b3e0-1d24c3d1426b","version_name":null},"emitted_at":1677160706331} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-DESKTOP-2023-02-06","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-06T08:00:00+00:00","client_upload_time":"2023-02-07T12:01:48.859000+00:00","country":null,"data":{"user_properties_updated":true,"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":970466740,"event_properties":{"ad_metrics.cost":0.078221,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"DESKTOP","ad_metrics.impressions":278,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-06T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-07T12:02:07.033000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-07T12:01:48.859000+00:00","server_upload_time":"2023-02-07T12:02:04.872000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{},"uuid":"3e28db97-a6df-11ed-be64-5d7f35c3b01a","version_name":null},"emitted_at":1677160706837} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-CONNECTED_TV-2023-02-06","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-06T08:00:00+00:00","client_upload_time":"2023-02-07T12:01:48.859000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":567803347,"event_properties":{"ad_metrics.cost":0,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"CONNECTED_TV","ad_metrics.impressions":4,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-06T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-07T12:02:07.033000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-07T12:01:48.859000+00:00","server_upload_time":"2023-02-07T12:02:04.872000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{},"uuid":"3e28ee9f-a6df-11ed-8c6f-5d7f35c3b01a","version_name":null},"emitted_at":1677160706848} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-TABLET-2023-02-06","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-06T08:00:00+00:00","client_upload_time":"2023-02-07T12:01:48.859000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":557070126,"event_properties":{"ad_metrics.cost":0.192373,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"TABLET","ad_metrics.impressions":213,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-06T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-07T12:02:07.033000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-07T12:01:48.859000+00:00","server_upload_time":"2023-02-07T12:02:04.872000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{},"uuid":"3e28e905-a6df-11ed-b2b0-5d7f35c3b01a","version_name":null},"emitted_at":1677160706851} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-MOBILE-2023-02-06","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-06T08:00:00+00:00","client_upload_time":"2023-02-07T12:01:48.859000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":701875278,"event_properties":{"ad_metrics.cost":2.018299,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"MOBILE","ad_metrics.impressions":2595,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":4,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":4,"campaign_id":19410069806},"event_time":"2023-02-06T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-07T12:02:07.033000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-07T12:01:48.859000+00:00","server_upload_time":"2023-02-07T12:02:04.872000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{},"uuid":"3e28e312-a6df-11ed-8dec-5d7f35c3b01a","version_name":null},"emitted_at":1677160706995} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-DESKTOP-2023-02-07","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-07T08:00:00+00:00","client_upload_time":"2023-02-08T12:02:25.066000+00:00","country":null,"data":{"user_properties_updated":true,"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":215560287,"event_properties":{"ad_metrics.cost":0.049814,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"DESKTOP","ad_metrics.impressions":208,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":1,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":1,"campaign_id":19410069806},"event_time":"2023-02-07T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-08T12:02:39.178000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-08T12:02:25.066000+00:00","server_upload_time":"2023-02-08T12:02:35.998000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{},"uuid":"7bba250f-a7a8-11ed-9ce6-3718c73e0dcb","version_name":null},"emitted_at":1677160707555} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-TABLET-2023-02-07","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-07T08:00:00+00:00","client_upload_time":"2023-02-08T12:02:25.066000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":750045948,"event_properties":{"ad_metrics.cost":0.145436,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"TABLET","ad_metrics.impressions":180,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-07T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-08T12:02:39.178000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-08T12:02:25.066000+00:00","server_upload_time":"2023-02-08T12:02:35.998000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{},"uuid":"7bba32f5-a7a8-11ed-a10d-3718c73e0dcb","version_name":null},"emitted_at":1677160707557} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-MOBILE-2023-02-07","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-07T08:00:00+00:00","client_upload_time":"2023-02-08T12:02:25.066000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":54427230,"event_properties":{"ad_metrics.cost":2.093716,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"MOBILE","ad_metrics.impressions":2694,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":3,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":3,"campaign_id":19410069806},"event_time":"2023-02-07T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-08T12:02:39.178000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-08T12:02:25.066000+00:00","server_upload_time":"2023-02-08T12:02:35.998000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{},"uuid":"7bba2cff-a7a8-11ed-baf0-3718c73e0dcb","version_name":null},"emitted_at":1677160707559} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-DESKTOP-2023-02-08","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-08T08:00:00+00:00","client_upload_time":"2023-02-09T12:02:17.656000+00:00","country":null,"data":{"user_properties_updated":true,"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":500159953,"event_properties":{"ad_metrics.cost":0.063632,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"DESKTOP","ad_metrics.impressions":275,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-08T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-09T12:02:40.173000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-09T12:02:17.656000+00:00","server_upload_time":"2023-02-09T12:02:37.115000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"a6b63b9b-a871-11ed-8e0e-556bceaee760","version_name":null},"emitted_at":1677160708339} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-CONNECTED_TV-2023-02-08","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-08T08:00:00+00:00","client_upload_time":"2023-02-09T12:02:17.656000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":91323750,"event_properties":{"ad_metrics.cost":2.4e-05,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"CONNECTED_TV","ad_metrics.impressions":2,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-08T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-09T12:02:40.173000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-09T12:02:17.656000+00:00","server_upload_time":"2023-02-09T12:02:37.115000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"a6b65793-a871-11ed-9158-556bceaee760","version_name":null},"emitted_at":1677160708341} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-TABLET-2023-02-08","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-08T08:00:00+00:00","client_upload_time":"2023-02-09T12:02:17.656000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":248713684,"event_properties":{"ad_metrics.cost":0.111586,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"TABLET","ad_metrics.impressions":188,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":1,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":1,"campaign_id":19410069806},"event_time":"2023-02-08T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-09T12:02:40.173000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-09T12:02:17.656000+00:00","server_upload_time":"2023-02-09T12:02:37.115000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"a6b6514c-a871-11ed-963a-556bceaee760","version_name":null},"emitted_at":1677160708344} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-MOBILE-2023-02-08","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-08T08:00:00+00:00","client_upload_time":"2023-02-09T12:02:17.656000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":771697037,"event_properties":{"ad_metrics.cost":2.075305,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"MOBILE","ad_metrics.impressions":2687,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":7,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":7,"campaign_id":19410069806},"event_time":"2023-02-08T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-09T12:02:40.173000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-09T12:02:17.656000+00:00","server_upload_time":"2023-02-09T12:02:37.115000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"a6b64994-a871-11ed-bdac-556bceaee760","version_name":null},"emitted_at":1677160708346} +{"stream":"events","data":{"$insert_id":"13648a56-a2bf-468d-89ce-af8148d5eb4b","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":568771836625,"app":434735,"city":"Kyiv","client_event_time":"2023-02-09T09:57:33+00:00","client_upload_time":"2023-02-09T09:57:33+00:00","country":"Ukraine","data":{"user_properties_updated":true,"group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"ff91a939-5a66-57f3-934c-6e58f7bd6da2","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":115597971,"event_properties":{"keyBool":true,"keyString":"valueString","keyInt":11},"event_time":"2023-02-09T09:57:33+00:00","event_type":"[Shopify] Connect Amplitude Test","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":"85.209.47.207","is_attribution_event":null,"language":null,"library":"amplitude-node/1.10.0","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-09T09:57:35.351000+00:00","region":"Kyiv City","sample_rate":null,"server_received_time":"2023-02-09T09:57:33+00:00","server_upload_time":"2023-02-09T09:57:33.014000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":"testuserEmail@gmail.com","user_properties":{},"uuid":"2d7ec4b1-a860-11ed-aae8-01da73a04a5b","version_name":null},"emitted_at":1677160708348} +{"stream":"events","data":{"$insert_id":"ca3fb836-163b-4898-9d59-1586fe103693","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":568771836625,"app":434735,"city":"Kyiv","client_event_time":"2023-02-09T09:57:39.118000+00:00","client_upload_time":"2023-02-09T09:57:39.118000+00:00","country":"Ukraine","data":{"group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"ff91a939-5a66-57f3-934c-6e58f7bd6da2","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":748377217,"event_properties":{"keyBool":true,"keyString":"valueString","keyInt":11},"event_time":"2023-02-09T09:57:39.118000+00:00","event_type":"[Shopify] Connect Amplitude Test","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":"85.209.47.207","is_attribution_event":null,"language":null,"library":"amplitude-node/1.10.0","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-09T09:57:40.295000+00:00","region":"Kyiv City","sample_rate":null,"server_received_time":"2023-02-09T09:57:39.118000+00:00","server_upload_time":"2023-02-09T09:57:39.123000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":"testuserEmail@gmail.com","user_properties":{},"uuid":"30869ad0-a860-11ed-a807-f949e6b8dfb8","version_name":null},"emitted_at":1677160708350} +{"stream":"events","data":{"$insert_id":"6bf42abd-5033-4ea6-9574-c1c674a4d32d","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":568771836625,"app":434735,"city":"Kyiv","client_event_time":"2023-02-09T09:57:44.390000+00:00","client_upload_time":"2023-02-09T09:57:44.390000+00:00","country":"Ukraine","data":{"group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"ff91a939-5a66-57f3-934c-6e58f7bd6da2","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":969823192,"event_properties":{"keyBool":true,"keyString":"valueString","keyInt":11},"event_time":"2023-02-09T09:57:44.390000+00:00","event_type":"[Shopify] Connect Amplitude Test","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":"85.209.47.207","is_attribution_event":null,"language":null,"library":"amplitude-node/1.10.0","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-09T09:57:45.721000+00:00","region":"Kyiv City","sample_rate":null,"server_received_time":"2023-02-09T09:57:44.390000+00:00","server_upload_time":"2023-02-09T09:57:44.394000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":"testuserEmail@gmail.com","user_properties":{},"uuid":"33c35984-a860-11ed-8460-f949e6b8dfb8","version_name":null},"emitted_at":1677160708352} +{"stream":"events","data":{"$insert_id":"afb8f963-cae5-4232-b20d-9047440d29c9","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":568771836625,"app":434735,"city":"Kyiv","client_event_time":"2023-02-09T09:58:07.981000+00:00","client_upload_time":"2023-02-09T09:58:07.981000+00:00","country":"Ukraine","data":{"group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"ff91a939-5a66-57f3-934c-6e58f7bd6da2","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":318819040,"event_properties":{"keyBool":true,"keyString":"valueString","keyInt":11},"event_time":"2023-02-09T09:58:07.981000+00:00","event_type":"[Shopify] Connect Amplitude Test","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":"85.209.47.207","is_attribution_event":null,"language":null,"library":"amplitude-node/1.10.0","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-09T09:58:10.307000+00:00","region":"Kyiv City","sample_rate":null,"server_received_time":"2023-02-09T09:58:07.981000+00:00","server_upload_time":"2023-02-09T09:58:07.987000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":"testuserEmail@gmail.com","user_properties":{},"uuid":"426b1ef9-a860-11ed-8868-f949e6b8dfb8","version_name":null},"emitted_at":1677160708354} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-DESKTOP-2023-02-09","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-09T08:00:00+00:00","client_upload_time":"2023-02-10T12:03:21.518000+00:00","country":null,"data":{"user_properties_updated":true,"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":549198577,"event_properties":{"ad_metrics.cost":0.091194,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"DESKTOP","ad_metrics.impressions":240,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-09T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-10T12:03:43.615000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-10T12:03:21.518000+00:00","server_upload_time":"2023-02-10T12:03:42.091000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"f6f54177-a93a-11ed-9aef-65efbbbc3a1e","version_name":null},"emitted_at":1677160708954} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-CONNECTED_TV-2023-02-09","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-09T08:00:00+00:00","client_upload_time":"2023-02-10T12:03:21.518000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":970373985,"event_properties":{"ad_metrics.cost":0.000757,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"CONNECTED_TV","ad_metrics.impressions":4,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-09T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-10T12:03:43.615000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-10T12:03:21.518000+00:00","server_upload_time":"2023-02-10T12:03:42.091000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"f6f553c2-a93a-11ed-bc53-65efbbbc3a1e","version_name":null},"emitted_at":1677160708956} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-TABLET-2023-02-09","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-09T08:00:00+00:00","client_upload_time":"2023-02-10T12:03:21.518000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":574382501,"event_properties":{"ad_metrics.cost":0.109206,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"TABLET","ad_metrics.impressions":158,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":2,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":2,"campaign_id":19410069806},"event_time":"2023-02-09T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-10T12:03:43.615000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-10T12:03:21.518000+00:00","server_upload_time":"2023-02-10T12:03:42.091000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"f6f54e4b-a93a-11ed-8085-65efbbbc3a1e","version_name":null},"emitted_at":1677160708958} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-MOBILE-2023-02-09","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-09T08:00:00+00:00","client_upload_time":"2023-02-10T12:03:21.518000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":557690644,"event_properties":{"ad_metrics.cost":2.006873,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"MOBILE","ad_metrics.impressions":2565,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":6,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":6,"campaign_id":19410069806},"event_time":"2023-02-09T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-10T12:03:43.615000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-10T12:03:21.518000+00:00","server_upload_time":"2023-02-10T12:03:42.091000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"f6f54886-a93a-11ed-b598-65efbbbc3a1e","version_name":null},"emitted_at":1677160708961} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-DESKTOP-2023-02-10","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-10T08:00:00+00:00","client_upload_time":"2023-02-11T12:01:50.248000+00:00","country":null,"data":{"user_properties_updated":true,"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":782291950,"event_properties":{"ad_metrics.cost":0.070298,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"DESKTOP","ad_metrics.impressions":250,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-10T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-11T12:02:19.794000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-11T12:01:50.248000+00:00","server_upload_time":"2023-02-11T12:02:04.360000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"ef62e73e-aa03-11ed-ab60-21041b90b30e","version_name":null},"emitted_at":1677160709463} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-TABLET-2023-02-10","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-10T08:00:00+00:00","client_upload_time":"2023-02-11T12:01:50.248000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":660413772,"event_properties":{"ad_metrics.cost":0.137032,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"TABLET","ad_metrics.impressions":184,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-10T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-11T12:02:19.794000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-11T12:01:50.248000+00:00","server_upload_time":"2023-02-11T12:02:04.360000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"ef62f428-aa03-11ed-9aea-21041b90b30e","version_name":null},"emitted_at":1677160709465} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-MOBILE-2023-02-10","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-10T08:00:00+00:00","client_upload_time":"2023-02-11T12:01:50.248000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":345846795,"event_properties":{"ad_metrics.cost":1.986076,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"MOBILE","ad_metrics.impressions":2366,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":3,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":3,"campaign_id":19410069806},"event_time":"2023-02-10T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-11T12:02:19.794000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-11T12:01:50.248000+00:00","server_upload_time":"2023-02-11T12:02:04.360000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"ef62ee58-aa03-11ed-9470-21041b90b30e","version_name":null},"emitted_at":1677160709468} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-DESKTOP-2023-02-11","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-11T08:00:00+00:00","client_upload_time":"2023-02-12T12:02:28.595000+00:00","country":null,"data":{"user_properties_updated":true,"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":589830428,"event_properties":{"ad_metrics.cost":0.069645,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"DESKTOP","ad_metrics.impressions":183,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-11T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-12T12:03:53.410000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-12T12:02:28.595000+00:00","server_upload_time":"2023-02-12T12:02:39.319000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"518af7fe-aacd-11ed-9a80-43c1bac2ac7b","version_name":null},"emitted_at":1677160709960} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-TABLET-2023-02-11","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-11T08:00:00+00:00","client_upload_time":"2023-02-12T12:02:28.595000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":661524851,"event_properties":{"ad_metrics.cost":0.100511,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"TABLET","ad_metrics.impressions":125,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-11T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-12T12:03:53.410000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-12T12:02:28.595000+00:00","server_upload_time":"2023-02-12T12:02:39.319000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"518b0451-aacd-11ed-bf81-43c1bac2ac7b","version_name":null},"emitted_at":1677160709962} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-MOBILE-2023-02-11","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-11T08:00:00+00:00","client_upload_time":"2023-02-12T12:02:28.595000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":608278585,"event_properties":{"ad_metrics.cost":2.019566,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"MOBILE","ad_metrics.impressions":2505,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":3,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":3,"campaign_id":19410069806},"event_time":"2023-02-11T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-12T12:03:53.410000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-12T12:02:28.595000+00:00","server_upload_time":"2023-02-12T12:02:39.319000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"518afebd-aacd-11ed-a1be-43c1bac2ac7b","version_name":null},"emitted_at":1677160709964} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-DESKTOP-2023-02-12","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-12T08:00:00+00:00","client_upload_time":"2023-02-13T12:02:12.416000+00:00","country":null,"data":{"user_properties_updated":true,"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":756118159,"event_properties":{"ad_metrics.cost":0.047594,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"DESKTOP","ad_metrics.impressions":228,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-12T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-13T12:02:26.981000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-13T12:02:12.416000+00:00","server_upload_time":"2023-02-13T12:02:22.901000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"488ce6ab-ab96-11ed-a18e-516670498ef9","version_name":null},"emitted_at":1677160710459} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-TABLET-2023-02-12","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-12T08:00:00+00:00","client_upload_time":"2023-02-13T12:02:12.416000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":726820846,"event_properties":{"ad_metrics.cost":0.094987,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"TABLET","ad_metrics.impressions":135,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-12T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-13T12:02:26.981000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-13T12:02:12.416000+00:00","server_upload_time":"2023-02-13T12:02:22.901000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"488cf2ca-ab96-11ed-baad-516670498ef9","version_name":null},"emitted_at":1677160710461} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-MOBILE-2023-02-12","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-12T08:00:00+00:00","client_upload_time":"2023-02-13T12:02:12.416000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":30838997,"event_properties":{"ad_metrics.cost":2.057797,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"MOBILE","ad_metrics.impressions":2555,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":7,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":7,"campaign_id":19410069806},"event_time":"2023-02-12T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-13T12:02:26.981000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-13T12:02:12.416000+00:00","server_upload_time":"2023-02-13T12:02:22.901000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"488ced3a-ab96-11ed-9cc6-516670498ef9","version_name":null},"emitted_at":1677160710463} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-DESKTOP-2023-02-13","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-13T08:00:00+00:00","client_upload_time":"2023-02-14T12:02:09.474000+00:00","country":null,"data":{"user_properties_updated":true,"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":602281810,"event_properties":{"ad_metrics.cost":0.084583,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"DESKTOP","ad_metrics.impressions":227,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-13T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-14T12:02:24.303000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-14T12:02:09.474000+00:00","server_upload_time":"2023-02-14T12:02:20.979000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"7152006b-ac5f-11ed-bb6d-b95ddc26bbd1","version_name":null},"emitted_at":1677160710878} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-TABLET-2023-02-13","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-13T08:00:00+00:00","client_upload_time":"2023-02-14T12:02:09.474000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":204201377,"event_properties":{"ad_metrics.cost":0.1489,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"TABLET","ad_metrics.impressions":191,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-13T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-14T12:02:24.303000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-14T12:02:09.474000+00:00","server_upload_time":"2023-02-14T12:02:20.979000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"71520cd4-ac5f-11ed-8538-b95ddc26bbd1","version_name":null},"emitted_at":1677160710880} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-MOBILE-2023-02-13","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-13T08:00:00+00:00","client_upload_time":"2023-02-14T12:02:09.474000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":96617686,"event_properties":{"ad_metrics.cost":2.033321,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"MOBILE","ad_metrics.impressions":2658,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":5,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":5,"campaign_id":19410069806},"event_time":"2023-02-13T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-14T12:02:24.303000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-14T12:02:09.474000+00:00","server_upload_time":"2023-02-14T12:02:20.979000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"71520734-ac5f-11ed-bc4a-b95ddc26bbd1","version_name":null},"emitted_at":1677160710882} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-DESKTOP-2023-02-14","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-14T08:00:00+00:00","client_upload_time":"2023-02-15T12:02:02.211000+00:00","country":null,"data":{"user_properties_updated":true,"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":325453045,"event_properties":{"ad_metrics.cost":0.065906,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"DESKTOP","ad_metrics.impressions":291,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-14T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-15T12:02:17.536000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-15T12:02:02.211000+00:00","server_upload_time":"2023-02-15T12:02:15.558000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"97bd311f-ad28-11ed-a272-9937469197fb","version_name":null},"emitted_at":1677160711338} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-TABLET-2023-02-14","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-14T08:00:00+00:00","client_upload_time":"2023-02-15T12:02:02.211000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":579050854,"event_properties":{"ad_metrics.cost":0.085808,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"TABLET","ad_metrics.impressions":166,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-14T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-15T12:02:17.536000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-15T12:02:02.211000+00:00","server_upload_time":"2023-02-15T12:02:15.558000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"97bd3d80-ad28-11ed-9543-9937469197fb","version_name":null},"emitted_at":1677160711340} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-MOBILE-2023-02-14","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-14T08:00:00+00:00","client_upload_time":"2023-02-15T12:02:02.211000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":153980233,"event_properties":{"ad_metrics.cost":2.036793,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"MOBILE","ad_metrics.impressions":2514,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":4,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":4,"campaign_id":19410069806},"event_time":"2023-02-14T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-15T12:02:17.536000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-15T12:02:02.211000+00:00","server_upload_time":"2023-02-15T12:02:15.558000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"97bd37e1-ad28-11ed-a554-9937469197fb","version_name":null},"emitted_at":1677160711342} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-DESKTOP-2023-02-15","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-15T08:00:00+00:00","client_upload_time":"2023-02-16T12:01:18.942000+00:00","country":null,"data":{"user_properties_updated":true,"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":230240803,"event_properties":{"ad_metrics.cost":0.043522,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"DESKTOP","ad_metrics.impressions":193,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-15T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-16T12:01:41.299000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-16T12:01:18.942000+00:00","server_upload_time":"2023-02-16T12:01:39.526000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"ac8bae8d-adf1-11ed-b15b-91b6ce29e523","version_name":null},"emitted_at":1677160711799} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-CONNECTED_TV-2023-02-15","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-15T08:00:00+00:00","client_upload_time":"2023-02-16T12:01:18.942000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":324823220,"event_properties":{"ad_metrics.cost":3e-05,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"CONNECTED_TV","ad_metrics.impressions":1,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-15T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-16T12:01:41.299000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-16T12:01:18.942000+00:00","server_upload_time":"2023-02-16T12:01:39.526000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"ac8bc13f-adf1-11ed-b15c-91b6ce29e523","version_name":null},"emitted_at":1677160711801} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-TABLET-2023-02-15","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-15T08:00:00+00:00","client_upload_time":"2023-02-16T12:01:18.942000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":427159891,"event_properties":{"ad_metrics.cost":0.127895,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"TABLET","ad_metrics.impressions":173,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":1,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":1,"campaign_id":19410069806},"event_time":"2023-02-15T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-16T12:01:41.299000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-16T12:01:18.942000+00:00","server_upload_time":"2023-02-16T12:01:39.526000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"ac8bbbc1-adf1-11ed-9548-91b6ce29e523","version_name":null},"emitted_at":1677160711803} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-MOBILE-2023-02-15","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-15T08:00:00+00:00","client_upload_time":"2023-02-16T12:01:18.942000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":26870094,"event_properties":{"ad_metrics.cost":2.069498,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"MOBILE","ad_metrics.impressions":2644,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":5,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":5,"campaign_id":19410069806},"event_time":"2023-02-15T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-16T12:01:41.299000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-16T12:01:18.942000+00:00","server_upload_time":"2023-02-16T12:01:39.526000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"ac8bb5e3-adf1-11ed-b665-91b6ce29e523","version_name":null},"emitted_at":1677160711805} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-DESKTOP-2023-02-16","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-16T08:00:00+00:00","client_upload_time":"2023-02-17T12:03:01.224000+00:00","country":null,"data":{"user_properties_updated":true,"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":285988082,"event_properties":{"ad_metrics.cost":0.032337,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"DESKTOP","ad_metrics.impressions":130,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-16T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-17T12:03:21.797000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-17T12:03:01.224000+00:00","server_upload_time":"2023-02-17T12:03:12.561000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"12ad685e-aebb-11ed-85a1-f5fef6fa6c3e","version_name":null},"emitted_at":1677160712406} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-TABLET-2023-02-16","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-16T08:00:00+00:00","client_upload_time":"2023-02-17T12:03:01.224000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":945641623,"event_properties":{"ad_metrics.cost":0.177236,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"TABLET","ad_metrics.impressions":215,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-16T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-17T12:03:21.797000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-17T12:03:01.224000+00:00","server_upload_time":"2023-02-17T12:03:12.561000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"12ad74f4-aebb-11ed-af5e-f5fef6fa6c3e","version_name":null},"emitted_at":1677160712408} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-MOBILE-2023-02-16","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-16T08:00:00+00:00","client_upload_time":"2023-02-17T12:03:01.224000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":684001950,"event_properties":{"ad_metrics.cost":2.002117,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"MOBILE","ad_metrics.impressions":2518,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":5,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":5,"campaign_id":19410069806},"event_time":"2023-02-16T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-17T12:03:21.797000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-17T12:03:01.224000+00:00","server_upload_time":"2023-02-17T12:03:12.561000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"12ad6f4f-aebb-11ed-849c-f5fef6fa6c3e","version_name":null},"emitted_at":1677160712411} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-DESKTOP-2023-02-18","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-18T08:00:00+00:00","client_upload_time":"2023-02-19T12:03:29.271000+00:00","country":null,"data":{"user_properties_updated":true,"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":131262759,"event_properties":{"ad_metrics.cost":0.029716,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"DESKTOP","ad_metrics.impressions":142,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-18T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-19T12:03:51.321000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-19T12:03:29.271000+00:00","server_upload_time":"2023-02-19T12:03:48.945000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"7948776d-b04d-11ed-9e25-0d3650f391bb","version_name":null},"emitted_at":1677160713566} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-TABLET-2023-02-18","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-18T08:00:00+00:00","client_upload_time":"2023-02-19T12:03:29.271000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":297590864,"event_properties":{"ad_metrics.cost":0.095908,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"TABLET","ad_metrics.impressions":105,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-18T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-19T12:03:51.321000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-19T12:03:29.271000+00:00","server_upload_time":"2023-02-19T12:03:48.945000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"794883a6-b04d-11ed-aa23-0d3650f391bb","version_name":null},"emitted_at":1677160713568} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-MOBILE-2023-02-18","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-18T08:00:00+00:00","client_upload_time":"2023-02-19T12:03:29.271000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":275214096,"event_properties":{"ad_metrics.cost":2.043589,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"MOBILE","ad_metrics.impressions":2421,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":5,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":5,"campaign_id":19410069806},"event_time":"2023-02-18T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-19T12:03:51.321000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-19T12:03:29.271000+00:00","server_upload_time":"2023-02-19T12:03:48.945000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"79487e0a-b04d-11ed-92e7-0d3650f391bb","version_name":null},"emitted_at":1677160713570} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-DESKTOP-2023-02-17","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-17T08:00:00+00:00","client_upload_time":"2023-02-19T13:01:25.998000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":592568898,"event_properties":{"ad_metrics.cost":0.070942,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"DESKTOP","ad_metrics.impressions":225,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-17T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-19T13:01:40.473000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-19T13:01:25.998000+00:00","server_upload_time":"2023-02-19T13:01:37.076000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"8d1b530d-b055-11ed-b3db-113a8bccd94d","version_name":null},"emitted_at":1677160713572} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-TABLET-2023-02-17","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-17T08:00:00+00:00","client_upload_time":"2023-02-19T13:01:25.998000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":921057594,"event_properties":{"ad_metrics.cost":0.082843,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"TABLET","ad_metrics.impressions":101,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-17T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-19T13:01:40.473000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-19T13:01:25.998000+00:00","server_upload_time":"2023-02-19T13:01:37.076000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"8d1b605e-b055-11ed-8e2a-113a8bccd94d","version_name":null},"emitted_at":1677160713574} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-MOBILE-2023-02-17","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-17T08:00:00+00:00","client_upload_time":"2023-02-19T13:01:25.998000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":771686719,"event_properties":{"ad_metrics.cost":2.034163,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"MOBILE","ad_metrics.impressions":2612,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":2,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":2,"campaign_id":19410069806},"event_time":"2023-02-17T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-19T13:01:40.473000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-19T13:01:25.998000+00:00","server_upload_time":"2023-02-19T13:01:37.076000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"8d1b59c4-b055-11ed-a1df-113a8bccd94d","version_name":null},"emitted_at":1677160713656} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-DESKTOP-2023-02-19","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-19T08:00:00+00:00","client_upload_time":"2023-02-20T12:03:35.170000+00:00","country":null,"data":{"user_properties_updated":true,"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":664632971,"event_properties":{"ad_metrics.cost":0.031298,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"DESKTOP","ad_metrics.impressions":139,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-19T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-20T12:04:00.393000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-20T12:03:35.170000+00:00","server_upload_time":"2023-02-20T12:03:46.062000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"a907cef2-b116-11ed-87dd-bdba20a14ceb","version_name":null},"emitted_at":1677160714816} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-TABLET-2023-02-19","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-19T08:00:00+00:00","client_upload_time":"2023-02-20T12:03:35.170000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":600181548,"event_properties":{"ad_metrics.cost":0.112333,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"TABLET","ad_metrics.impressions":154,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-19T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-20T12:04:00.393000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-20T12:03:35.170000+00:00","server_upload_time":"2023-02-20T12:03:46.062000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"a907db97-b116-11ed-9271-bdba20a14ceb","version_name":null},"emitted_at":1677160714819} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-MOBILE-2023-02-19","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-19T08:00:00+00:00","client_upload_time":"2023-02-20T12:03:35.170000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":780220200,"event_properties":{"ad_metrics.cost":2.061574,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"MOBILE","ad_metrics.impressions":2389,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":4,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":4,"campaign_id":19410069806},"event_time":"2023-02-19T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-20T12:04:00.393000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-20T12:03:35.170000+00:00","server_upload_time":"2023-02-20T12:03:46.062000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"a907d5dc-b116-11ed-8b8e-bdba20a14ceb","version_name":null},"emitted_at":1677160714821} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-DESKTOP-2023-02-20","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-20T08:00:00+00:00","client_upload_time":"2023-02-21T12:01:29.891000+00:00","country":null,"data":{"user_properties_updated":true,"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":801727177,"event_properties":{"ad_metrics.cost":0.045563,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"DESKTOP","ad_metrics.impressions":188,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-20T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-21T12:01:48.145000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-21T12:01:29.891000+00:00","server_upload_time":"2023-02-21T12:01:45.796000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"84ad0ece-b1df-11ed-8b09-bdc83361662a","version_name":null},"emitted_at":1677160715235} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-TABLET-2023-02-20","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-20T08:00:00+00:00","client_upload_time":"2023-02-21T12:01:29.891000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":847817114,"event_properties":{"ad_metrics.cost":0.153187,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"TABLET","ad_metrics.impressions":191,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-20T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-21T12:01:48.145000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-21T12:01:29.891000+00:00","server_upload_time":"2023-02-21T12:01:45.796000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"84ad1bde-b1df-11ed-ab01-bdc83361662a","version_name":null},"emitted_at":1677160715237} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-MOBILE-2023-02-20","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-20T08:00:00+00:00","client_upload_time":"2023-02-21T12:01:29.891000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":795787975,"event_properties":{"ad_metrics.cost":2.096516,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"MOBILE","ad_metrics.impressions":2720,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":3,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":3,"campaign_id":19410069806},"event_time":"2023-02-20T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-21T12:01:48.145000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-21T12:01:29.891000+00:00","server_upload_time":"2023-02-21T12:01:45.796000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"84ad15c9-b1df-11ed-b84e-bdc83361662a","version_name":null},"emitted_at":1677160715263} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-DESKTOP-2023-02-21","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-21T08:00:00+00:00","client_upload_time":"2023-02-22T12:02:15.518000+00:00","country":null,"data":{"user_properties_updated":true,"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":354116550,"event_properties":{"ad_metrics.cost":0.057382,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"DESKTOP","ad_metrics.impressions":186,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-21T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-22T12:02:37.973000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-22T12:02:15.518000+00:00","server_upload_time":"2023-02-22T12:02:34.242000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"ccc51943-b2a8-11ed-ac61-871718cb9747","version_name":null},"emitted_at":1677160715762} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-TABLET-2023-02-21","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-21T08:00:00+00:00","client_upload_time":"2023-02-22T12:02:15.518000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":541365877,"event_properties":{"ad_metrics.cost":0.118621,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"TABLET","ad_metrics.impressions":141,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-21T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-22T12:02:37.973000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-22T12:02:15.518000+00:00","server_upload_time":"2023-02-22T12:02:34.242000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"ccc525c9-b2a8-11ed-850f-871718cb9747","version_name":null},"emitted_at":1677160715764} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-MOBILE-2023-02-21","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-21T08:00:00+00:00","client_upload_time":"2023-02-22T12:02:15.518000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":562697441,"event_properties":{"ad_metrics.cost":2.088394,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"MOBILE","ad_metrics.impressions":2726,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":9,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":9,"campaign_id":19410069806},"event_time":"2023-02-21T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-22T12:02:37.973000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-22T12:02:15.518000+00:00","server_upload_time":"2023-02-22T12:02:34.242000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"ccc52020-b2a8-11ed-abd4-871718cb9747","version_name":null},"emitted_at":1677160715767} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-DESKTOP-2023-02-22","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-22T08:00:00+00:00","client_upload_time":"2023-02-23T12:04:28.073000+00:00","country":null,"data":{"user_properties_updated":true,"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":216489823,"event_properties":{"ad_metrics.cost":0.030981,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"DESKTOP","ad_metrics.impressions":137,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-22T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-23T12:04:44.116000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-23T12:04:28.073000+00:00","server_upload_time":"2023-02-23T12:04:40.311000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"426992d9-b372-11ed-8ac0-137abd2e6743","version_name":null},"emitted_at":1677160717689} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-TABLET-2023-02-22","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-22T08:00:00+00:00","client_upload_time":"2023-02-23T12:04:28.073000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":910022464,"event_properties":{"ad_metrics.cost":0.080812,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"TABLET","ad_metrics.impressions":118,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":0,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":0,"campaign_id":19410069806},"event_time":"2023-02-22T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-23T12:04:44.116000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-23T12:04:28.073000+00:00","server_upload_time":"2023-02-23T12:04:40.311000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"4269a22c-b372-11ed-84ce-137abd2e6743","version_name":null},"emitted_at":1677160717691} +{"stream":"events","data":{"$insert_id":"google-ad-4651612872-643022056303-MOBILE-2023-02-22","$insert_key":null,"$schema":null,"adid":null,"amplitude_attribution_ids":null,"amplitude_event_type":null,"amplitude_id":550106004607,"app":434735,"city":null,"client_event_time":"2023-02-22T08:00:00+00:00","client_upload_time":"2023-02-23T12:04:28.073000+00:00","country":null,"data":{"vacuum_source_id":"5955","group_first_event":{},"group_ids":{}},"data_type":"event","device_brand":null,"device_carrier":null,"device_family":null,"device_id":"google-ad-4651612872-643022056303","device_manufacturer":null,"device_model":null,"device_type":null,"dma":null,"event_id":119391830,"event_properties":{"ad_metrics.cost":2.106073,"campaign_advertising_channel_type":"DISPLAY","ad_segment_device":"MOBILE","ad_metrics.impressions":2741,"ad_group_type":"DISPLAY_STANDARD","campaign_name":"Brand awareness and reach-Display-1","ad_group_name":"Ad group 1","ad_id":643022056303,"campaign_start_date":"2022-12-28","final_url":"https://airbyte.com","ad_platform":"google","campaign_end_date":"2037-12-30","ad_metrics.clicks":1,"ad_group_id":144799120517,"ad_metrics.conversions":0,"ad_metrics.interactions":1,"campaign_id":19410069806},"event_time":"2023-02-22T08:00:00+00:00","event_type":"Daily Ad Metrics","global_user_properties":null,"group_properties":{},"groups":{},"idfa":null,"ip_address":null,"is_attribution_event":null,"language":null,"library":"google_ads","location_lat":null,"location_lng":null,"os_name":null,"os_version":null,"partner_id":null,"paying":null,"plan":{},"platform":null,"processed_time":"2023-02-23T12:04:44.116000+00:00","region":null,"sample_rate":null,"server_received_time":"2023-02-23T12:04:28.073000+00:00","server_upload_time":"2023-02-23T12:04:40.311000+00:00","session_id":-1,"source_id":null,"start_version":null,"user_creation_time":null,"user_id":null,"user_properties":{"country":"test","device_model":"test","city":"test","os_version":"test","City":"London","platform":"test","device_manufacturer":"test","carrier":"test","device_brand":"test","Region":"London","DMA":"London","Country":"UK","os_name":"test","region":"test"},"uuid":"42699ba5-b372-11ed-8487-137abd2e6743","version_name":null},"emitted_at":1677160717693} diff --git a/airbyte-integrations/connectors/source-amplitude/setup.py b/airbyte-integrations/connectors/source-amplitude/setup.py index 57bcae269855..727c043aa667 100644 --- a/airbyte-integrations/connectors/source-amplitude/setup.py +++ b/airbyte-integrations/connectors/source-amplitude/setup.py @@ -6,10 +6,14 @@ from setuptools import find_packages, setup MAIN_REQUIREMENTS = [ - "airbyte-cdk", + "airbyte-cdk==0.33.0", ] -TEST_REQUIREMENTS = ["pytest~=6.1", "pytest-mock~=3.6.1", "requests-mock"] +TEST_REQUIREMENTS = [ + "pytest~=6.2", + "pytest-mock~=3.6.1", + "connector-acceptance-test", +] setup( name="source_amplitude", @@ -18,7 +22,7 @@ author_email="contact@airbyte.io", packages=find_packages(), install_requires=MAIN_REQUIREMENTS, - package_data={"": ["*.json", "schemas/*.json", "schemas/shared/*.json"]}, + package_data={"": ["*.json", "*.yaml", "schemas/*.json", "schemas/shared/*.json"]}, extras_require={ "tests": TEST_REQUIREMENTS, }, diff --git a/airbyte-integrations/connectors/source-amplitude/source_amplitude/__init__.py b/airbyte-integrations/connectors/source-amplitude/source_amplitude/__init__.py index 2c519b869478..e6007dcb1a3b 100644 --- a/airbyte-integrations/connectors/source-amplitude/source_amplitude/__init__.py +++ b/airbyte-integrations/connectors/source-amplitude/source_amplitude/__init__.py @@ -1,27 +1,8 @@ # -# MIT License -# -# Copyright (c) 2020 Airbyte -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. +# Copyright (c) 2022 Airbyte, Inc., all rights reserved. # + from .source import SourceAmplitude __all__ = ["SourceAmplitude"] diff --git a/airbyte-integrations/connectors/source-amplitude/source_amplitude/api.py b/airbyte-integrations/connectors/source-amplitude/source_amplitude/api.py deleted file mode 100644 index dd0eed85ceec..000000000000 --- a/airbyte-integrations/connectors/source-amplitude/source_amplitude/api.py +++ /dev/null @@ -1,297 +0,0 @@ -# -# Copyright (c) 2023 Airbyte, Inc., all rights reserved. -# - - -import gzip -import io -import json -import urllib.parse as urlparse -import zipfile -from abc import ABC, abstractmethod -from typing import IO, Any, Iterable, List, Mapping, MutableMapping, Optional -from urllib.parse import parse_qs - -import pendulum -import requests -from airbyte_cdk.models import SyncMode -from airbyte_cdk.sources.streams.availability_strategy import AvailabilityStrategy -from airbyte_cdk.sources.streams.http import HttpStream - -from .errors import HTTP_ERROR_CODES, error_msg_from_status - - -class AmplitudeStream(HttpStream, ABC): - api_version = 2 - - def __init__(self, data_region: str, event_time_interval: dict = None, **kwargs): - if event_time_interval is None: - event_time_interval = {"size_unit": "days", "size": 1} - self.data_region = data_region - self.event_time_interval = event_time_interval - super().__init__(**kwargs) - - @property - def url_base(self) -> str: - subdomain = "analytics.eu." if self.data_region == "EU Residency Server" else "" - return f"https://{subdomain}amplitude.com/api/" - - @property - def availability_strategy(self) -> Optional["AvailabilityStrategy"]: - return None - - def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: - return None - - def parse_response(self, response: requests.Response, **kwargs) -> Iterable[Mapping]: - status = response.status_code - if status in HTTP_ERROR_CODES.keys(): - error_msg_from_status(status) - yield from [] - else: - yield from response.json().get(self.data_field, []) - - def path(self, **kwargs) -> str: - return f"{self.api_version}/{self.name}" - - -class Cohorts(AmplitudeStream): - primary_key = "id" - api_version = 3 - data_field = "cohorts" - - -class Annotations(AmplitudeStream): - primary_key = "id" - data_field = "data" - - -class IncrementalAmplitudeStream(AmplitudeStream, ABC): - state_checkpoint_interval = 10 - base_params = {} - cursor_field = "date" - date_template = "%Y%m%d" - compare_date_template = None - - def __init__(self, start_date: str, **kwargs): - super().__init__(**kwargs) - self._start_date = pendulum.parse(start_date) if isinstance(start_date, str) else start_date - - @property - @abstractmethod - def time_interval(self) -> dict: - """ - Defining the time interval to determine the difference between the end date and the start date. - """ - pass - - def _get_date_time_items_from_schema(self): - """ - Get all properties from schema with format: 'date-time' - """ - result = [] - schema = self.get_json_schema()["properties"] - for key, value in schema.items(): - if value.get("format") == "date-time": - result.append(key) - return result - - def _date_time_to_rfc3339(self, record: MutableMapping[str, Any]) -> MutableMapping[str, Any]: - """ - Transform 'date-time' items to RFC3339 format - """ - date_time_fields = self._get_date_time_items_from_schema() - for item in record: - if item in date_time_fields: - dt_value = record[item] - if not dt_value: - # either null or empty string, leave it as it - record[item] = dt_value - else: - record[item] = pendulum.parse(dt_value).to_rfc3339_string() - return record - - def _get_end_date(self, current_date: pendulum, end_date: pendulum = pendulum.now()): - if current_date.add(**self.time_interval).date() < end_date.date(): - end_date = current_date.add(**self.time_interval) - return end_date - - def get_updated_state(self, current_stream_state: MutableMapping[str, Any], latest_record: Mapping[str, Any]) -> Mapping[str, Any]: - # save state value in source native format - if self.compare_date_template: - latest_state = pendulum.parse(latest_record[self.cursor_field]).strftime(self.compare_date_template) - else: - latest_state = latest_record.get(self.cursor_field, "") - return {self.cursor_field: max(latest_state, current_stream_state.get(self.cursor_field, ""))} - - def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: - parsed = urlparse.urlparse(response.url) - end = parse_qs(parsed.query).get("end", None) - if end: - end_time = pendulum.parse(end[0]) - now = pendulum.now() - if end_time.date() < now.date(): - return {"start": end[0], "end": self._get_end_date(end_time).strftime(self.date_template)} - return None - - def request_params( - self, stream_state: Mapping[str, Any], stream_slice: Mapping[str, any] = None, next_page_token: Mapping[str, Any] = None - ) -> MutableMapping[str, Any]: - params = self.base_params - if next_page_token: - params.update(next_page_token) - else: - params.update({"start": stream_slice.get("start"), "end": stream_slice.get("end")}) - return params - - def stream_slices(self, stream_state: Mapping[str, Any] = None, **kwargs) -> Iterable[Optional[Mapping[str, Any]]]: - slices = [] - start = pendulum.parse(stream_state.get(self.cursor_field)) if stream_state else self._start_date - end = pendulum.now() - if start > end: - self.logger.info("The data cannot be requested in the future. Skipping stream.") - return [] - - while start <= end: - slices.append( - { - "start": start.strftime(self.date_template), - "end": self._get_end_date(start).strftime(self.date_template), - } - ) - start = start.add(**self.time_interval) - return slices - - -class Events(IncrementalAmplitudeStream): - cursor_field = "event_time" - date_template = "%Y%m%dT%H" - compare_date_template = "%Y-%m-%d %H:%M:%S.%f" - primary_key = "uuid" - state_checkpoint_interval = 1000 - - @property - def time_interval(self) -> dict: - return {self.event_time_interval.get("size_unit"): self.event_time_interval.get("size")} - - def parse_response(self, response: requests.Response, stream_state: Mapping[str, Any] = None, **kwargs) -> Iterable[Mapping]: - state_value = stream_state[self.cursor_field] if stream_state else self._start_date.strftime(self.compare_date_template) - try: - zip_file = zipfile.ZipFile(io.BytesIO(response.content)) - except zipfile.BadZipFile as e: - self.logger.exception(e) - self.logger.error( - f"Received an invalid zip file in response to URL: {response.request.url}." - f"The size of the response body is: {len(response.content)}" - ) - return [] - - for gzip_filename in zip_file.namelist(): - with zip_file.open(gzip_filename) as file: - for record in self._parse_zip_file(file): - if record[self.cursor_field] >= state_value: - yield self._date_time_to_rfc3339(record) # transform all `date-time` to RFC3339 - - def _parse_zip_file(self, zip_file: IO[bytes]) -> Iterable[MutableMapping]: - with gzip.open(zip_file) as file: - for record in file: - yield json.loads(record) - - def stream_slices(self, stream_state: Mapping[str, Any] = None, **kwargs) -> Iterable[Optional[Mapping[str, Any]]]: - slices = [] - start = pendulum.parse(stream_state.get(self.cursor_field)) if stream_state else self._start_date - end = pendulum.now() - if start > end: - self.logger.info("The data cannot be requested in the future. Skipping stream.") - return [] - - while start <= end: - slices.append( - { - "start": start.strftime(self.date_template), - "end": start.add(**self.time_interval).subtract(hours=1).strftime(self.date_template), - } - ) - start = start.add(**self.time_interval) - - return slices - - def read_records( - self, - sync_mode: SyncMode, - cursor_field: List[str] = None, - stream_slice: Mapping[str, Any] = None, - stream_state: Mapping[str, Any] = None, - ) -> Iterable[Mapping[str, Any]]: - stream_state = stream_state or {} - start = pendulum.parse(stream_slice["start"]) - end = pendulum.parse(stream_slice["end"]) - if start > end: - yield from [] - # sometimes the API throws a 404 error for not obvious reasons, we have to handle it and log it. - # for example, if there is no data from the specified time period, a 404 exception is thrown - # https://developers.amplitude.com/docs/export-api#status-codes - try: - self.logger.info(f"Fetching {self.name} time range: {start.strftime('%Y-%m-%dT%H')} - {end.strftime('%Y-%m-%dT%H')}") - records = super().read_records(sync_mode, cursor_field, stream_slice, stream_state) - yield from records - except requests.exceptions.HTTPError as error: - status = error.response.status_code - if status in HTTP_ERROR_CODES.keys(): - error_msg_from_status(status) - yield from [] - else: - self.logger.error(f"Error during syncing {self.name} stream - {error}") - raise - - def request_params(self, stream_slice: Mapping[str, Any], **kwargs) -> MutableMapping[str, Any]: - params = self.base_params - params["start"] = pendulum.parse(stream_slice["start"]).strftime(self.date_template) - params["end"] = pendulum.parse(stream_slice["end"]).strftime(self.date_template) - return params - - def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: - return None - - def path(self, **kwargs) -> str: - return f"{self.api_version}/export" - - -class ActiveUsers(IncrementalAmplitudeStream): - base_params = {"m": "active", "i": 1, "g": "country"} - name = "active_users" - primary_key = "date" - time_interval = {"months": 1} - data_field = "data" - - def parse_response(self, response: requests.Response, **kwargs) -> Iterable[Mapping]: - response_data = response.json().get(self.data_field, []) - if response_data: - series = list(map(list, zip(*response_data["series"]))) - for i, date in enumerate(response_data["xValues"]): - yield from [{"date": date, "statistics": dict(zip(response_data["seriesLabels"], series[i]))}] if series else [] - - def path(self, **kwargs) -> str: - return f"{self.api_version}/users" - - -class AverageSessionLength(IncrementalAmplitudeStream): - name = "average_session_length" - primary_key = "date" - time_interval = {"days": 15} - data_field = "data" - - def parse_response(self, response: requests.Response, **kwargs) -> Iterable[Mapping]: - response_data = response.json().get(self.data_field, []) - if response_data: - # From the Amplitude documentation it follows that "series" is an array with one element which is itself - # an array that contains the average session length for each day. - # https://developers.amplitude.com/docs/dashboard-rest-api#returns-2 - series = response_data.get("series", []) - if len(series) > 0: - series = series[0] # get the nested list - for i, date in enumerate(response_data["xValues"]): - yield {"date": date, "length": series[i]} - - def path(self, **kwargs) -> str: - return f"{self.api_version}/sessions/average" diff --git a/airbyte-integrations/connectors/source-amplitude/source_amplitude/components.py b/airbyte-integrations/connectors/source-amplitude/source_amplitude/components.py new file mode 100644 index 000000000000..3780fc77114f --- /dev/null +++ b/airbyte-integrations/connectors/source-amplitude/source_amplitude/components.py @@ -0,0 +1,119 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + +import gzip +import io +import json +import logging +import zipfile +from dataclasses import InitVar, dataclass +from typing import IO, Any, Iterable, List, Mapping, MutableMapping, Union + +import pendulum +import requests +from airbyte_cdk.sources.declarative.extractors.record_extractor import RecordExtractor +from airbyte_cdk.sources.declarative.schema.json_file_schema_loader import JsonFileSchemaLoader +from airbyte_cdk.sources.declarative.types import Config, Record + +logger = logging.getLogger("airbyte") + + +class AverageSessionLengthRecordExtractor(RecordExtractor): + """ + Create records from complex response structure + Issue: https://github.com/airbytehq/airbyte/issues/23145 + """ + + def extract_records(self, response: requests.Response) -> List[Record]: + response_data = response.json().get("data", []) + if response_data: + # From the Amplitude documentation it follows that "series" is an array with one element which is itself + # an array that contains the average session length for each day. + # https://developers.amplitude.com/docs/dashboard-rest-api#returns-2 + series = response_data.get("series", []) + if len(series) > 0: + series = series[0] # get the nested list + return [{"date": date, "length": length} for date, length in zip(response_data["xValues"], series)] + return [] + + +class ActiveUsersRecordExtractor(RecordExtractor): + """ + Create records from complex response structure + Issue: https://github.com/airbytehq/airbyte/issues/23145 + """ + + def extract_records(self, response: requests.Response) -> List[Record]: + response_data = response.json().get("data", []) + if response_data: + series = list(zip(*response_data["series"])) + if series: + return [ + {"date": date, "statistics": dict(zip(response_data["seriesLabels"], users))} + for date, users in zip(response_data["xValues"], series) + ] + return [] + + +@dataclass +class EventsExtractor(RecordExtractor): + """ + Response for event stream is a zip file with a list of gziped json files inside it. + Issue: https://github.com/airbytehq/airbyte/issues/23144 + """ + + config: Config + parameters: InitVar[Mapping[str, Any]] + + def __post_init__(self, parameters: Mapping[str, Any]): + self.name = parameters.get("name") + + def _get_schema_root_properties(self): + schema_loader = JsonFileSchemaLoader(config=self.config, parameters={"name": self.name}) + schema = schema_loader.get_json_schema() + return schema["properties"] + + def _get_date_time_items_from_schema(self): + """ + Get all properties from schema with format: 'date-time' + """ + result = [] + schema = self._get_schema_root_properties() + for key, value in schema.items(): + if value.get("format") == "date-time": + result.append(key) + return result + + def _date_time_to_rfc3339(self, record: MutableMapping[str, Any]) -> MutableMapping[str, Any]: + """ + Transform 'date-time' items to RFC3339 format + """ + date_time_fields = self._get_date_time_items_from_schema() + for item in record: + if item in date_time_fields and record[item]: + record[item] = pendulum.parse(record[item]).to_rfc3339_string() + return record + + def extract_records( + self, + response: requests.Response, + ) -> List[Record]: + try: + zip_file = zipfile.ZipFile(io.BytesIO(response.content)) + except zipfile.BadZipFile: + logger.exception( + f"Received an invalid zip file in response to URL: {response.request.url}." + f"The size of the response body is: {len(response.content)}" + ) + return [] + + for gzip_filename in zip_file.namelist(): + with zip_file.open(gzip_filename) as file: + for record in self._parse_zip_file(file): + yield self._date_time_to_rfc3339(record) # transform all `date-time` fields to RFC3339 + + def _parse_zip_file(self, zip_file: Union[IO[bytes], str]) -> Iterable[MutableMapping]: + with gzip.open(zip_file) as file: + for record in file: + yield json.loads(record) diff --git a/airbyte-integrations/connectors/source-amplitude/source_amplitude/errors.py b/airbyte-integrations/connectors/source-amplitude/source_amplitude/errors.py deleted file mode 100644 index abba9cb06ed6..000000000000 --- a/airbyte-integrations/connectors/source-amplitude/source_amplitude/errors.py +++ /dev/null @@ -1,34 +0,0 @@ -# -# Copyright (c) 2023 Airbyte, Inc., all rights reserved. -# - -import logging - -LOGGER = logging.getLogger("airbyte") - -HTTP_ERROR_CODES = { - 400: { - "msg": "The file size of the exported data is too large. Shorten the time ranges and try again. The limit size is 4GB.", - "lvl": "ERROR", - }, - 404: { - "msg": "No data collected", - "lvl": "WARN", - }, - 504: { - "msg": "The amount of data is large causing a timeout. For large amounts of data, the Amazon S3 destination is recommended.", - "lvl": "ERROR", - }, -} - - -def error_msg_from_status(status: int = None): - if status: - level = HTTP_ERROR_CODES[status]["lvl"] - message = HTTP_ERROR_CODES[status]["msg"] - if level == "ERROR": - LOGGER.error(message) - elif level == "WARN": - LOGGER.warn(message) - else: - LOGGER.error(f"Unknown error occured: code {status}") diff --git a/airbyte-integrations/connectors/source-amplitude/source_amplitude/manifest.yaml b/airbyte-integrations/connectors/source-amplitude/source_amplitude/manifest.yaml new file mode 100644 index 000000000000..a6625ad47e64 --- /dev/null +++ b/airbyte-integrations/connectors/source-amplitude/source_amplitude/manifest.yaml @@ -0,0 +1,164 @@ +version: "0.29.0" + +definitions: + selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [ "{{ parameters.get('data_field') }}" ] + requester: + type: HttpRequester + url_base: "https://{{'analytics.eu.' if config['data_region'] == 'EU Residency Server' else '' }}amplitude.com/api" + http_method: "GET" + authenticator: + type: BasicHttpAuthenticator + username: "{{ config['api_key'] }}" + password: "{{ config['secret_key'] }}" + error_handler: + type: DefaultErrorHandler + response_filters: + - http_codes: [ 400 ] + action: FAIL + error_message: The file size of the exported data is too large. Shorten the time ranges and try again. The limit size is 4GB. + - http_codes: [ 404 ] + action: IGNORE + error_message: No data collected + - http_codes: [ 504 ] + action: FAIL + error_message: The amount of data is large causing a timeout. For large amounts of data, the Amazon S3 destination is recommended. + + retriever: + type: SimpleRetriever + record_selector: + $ref: "#/definitions/selector" + paginator: + type: NoPagination + requester: + $ref: "#/definitions/requester" + + datetime_incremental_sync: + type: DatetimeBasedCursor + start_datetime: + datetime: "{{ format_datetime(config['start_date'], '%Y-%m-%d') }}" + end_datetime: + datetime: "{{ now_utc().strftime('%Y-%m-%d') }}" + datetime_format: "%Y-%m-%d" + cursor_granularity: P1D + step: P15D + cursor_field: "{{ parameters['stream_cursor_field'] }}" + + base_stream: + retriever: + $ref: "#/definitions/retriever" + + annotations_stream: + $ref: "#/definitions/base_stream" + $parameters: + name: "annotations" + primary_key: "id" + path: "/2/annotations" + data_field: "data" + + cohorts_stream: + $ref: "#/definitions/base_stream" + $parameters: + name: "cohorts" + primary_key: "id" + path: "/3/cohorts" + data_field: "cohorts" + + base_incremental_stream: + retriever: + $ref: "#/definitions/retriever" + requester: + $ref: "#/definitions/requester" + request_parameters: + start: "{{format_datetime(stream_slice.start_time, '%Y%m%d') }}" + end: "{{format_datetime(stream_slice.end_time, '%Y%m%d') }}" + incremental_sync: + $ref: "#/definitions/datetime_incremental_sync" + + average_session_length_stream: + $ref: "#/definitions/base_incremental_stream" + retriever: + $ref: "#/definitions/base_incremental_stream/retriever" + record_selector: + type: RecordSelector + extractor: + type: CustomRecordExtractor + class_name: source_amplitude.components.AverageSessionLengthRecordExtractor + $parameters: + name: "average_session_length" + primary_key: "date" + path: "/2/sessions/average" + stream_cursor_field: "date" + + active_users_stream: + $ref: "#/definitions/base_incremental_stream" + retriever: + $ref: "#/definitions/base_incremental_stream/retriever" + requester: + $ref: "#/definitions/base_incremental_stream/retriever/requester" + request_parameters: + start: "{{format_datetime(stream_slice.start_time, '%Y%m%d') }}" + end: "{{format_datetime(stream_slice.end_time, '%Y%m%d') }}" + m: "active" + i: "1" + g: "country" + record_selector: + type: RecordSelector + extractor: + type: CustomRecordExtractor + class_name: source_amplitude.components.ActiveUsersRecordExtractor + incremental_sync: + $ref: "#/definitions/datetime_incremental_sync" + step: P1M + cursor_field: "date" + $parameters: + name: "active_users" + primary_key: "date" + path: "/2/users" + + events_stream: + $ref: "#/definitions/base_incremental_stream" + retriever: + paginator: + type: NoPagination + requester: + $ref: "#/definitions/requester" + request_parameters: + start: "{{format_datetime(stream_slice.start_time, '%Y%m%dT%H') }}" + end: "{{format_datetime(stream_slice.end_time, '%Y%m%dT%H') }}" + record_selector: + type: RecordSelector + extractor: + type: CustomRecordExtractor + class_name: source_amplitude.components.EventsExtractor + record_filter: + condition: "{{ record[parameters['stream_cursor_field']] > stream_state.get(parameters['stream_cursor_field'],config['start_date']) }}" + incremental_sync: + $ref: "#/definitions/datetime_incremental_sync" + step: "PT{{config.get('request_time_range', 24)}}H" + cursor_field: "{{ parameters.get('stream_cursor_field') }}" + cursor_granularity: PT1H + start_datetime: + datetime: "{{ format_datetime(config['start_date'], '%Y-%m-%dT%H:%M:%S.%f%z') }}" + end_datetime: + datetime: "{{ now_utc().strftime('%Y-%m-%dT%H:%M:%S.%f%z') }}" + datetime_format: "%Y-%m-%dT%H:%M:%S.%f%z" + $parameters: + name: "events" + primary_key: "uuid" + path: "/2/export" + stream_cursor_field: "server_upload_time" + +streams: + - "#/definitions/annotations_stream" + - "#/definitions/cohorts_stream" + - "#/definitions/average_session_length_stream" + - "#/definitions/active_users_stream" + - "#/definitions/events_stream" + +check: + stream_names: + - "active_users" diff --git a/airbyte-integrations/connectors/source-amplitude/source_amplitude/schemas/active_users.json b/airbyte-integrations/connectors/source-amplitude/source_amplitude/schemas/active_users.json index fe21f00a5124..0bbda9452bd2 100644 --- a/airbyte-integrations/connectors/source-amplitude/source_amplitude/schemas/active_users.json +++ b/airbyte-integrations/connectors/source-amplitude/source_amplitude/schemas/active_users.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", + "$schema": "https://json-schema.org/draft-07/schema#", "type": "object", "properties": { "date": { diff --git a/airbyte-integrations/connectors/source-amplitude/source_amplitude/schemas/annotations.json b/airbyte-integrations/connectors/source-amplitude/source_amplitude/schemas/annotations.json index c58f3073d47c..420e65bc4412 100644 --- a/airbyte-integrations/connectors/source-amplitude/source_amplitude/schemas/annotations.json +++ b/airbyte-integrations/connectors/source-amplitude/source_amplitude/schemas/annotations.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", + "$schema": "https://json-schema.org/draft-07/schema#", "type": "object", "properties": { "date": { diff --git a/airbyte-integrations/connectors/source-amplitude/source_amplitude/schemas/average_session_length.json b/airbyte-integrations/connectors/source-amplitude/source_amplitude/schemas/average_session_length.json index 7f0e80192f55..0f13484727d3 100644 --- a/airbyte-integrations/connectors/source-amplitude/source_amplitude/schemas/average_session_length.json +++ b/airbyte-integrations/connectors/source-amplitude/source_amplitude/schemas/average_session_length.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", + "$schema": "https://json-schema.org/draft-07/schema#", "type": "object", "properties": { "date": { diff --git a/airbyte-integrations/connectors/source-amplitude/source_amplitude/schemas/cohorts.json b/airbyte-integrations/connectors/source-amplitude/source_amplitude/schemas/cohorts.json index 2f29eb48c231..c477473273bd 100644 --- a/airbyte-integrations/connectors/source-amplitude/source_amplitude/schemas/cohorts.json +++ b/airbyte-integrations/connectors/source-amplitude/source_amplitude/schemas/cohorts.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", + "$schema": "https://json-schema.org/draft-07/schema#", "type": "object", "properties": { "appId": { diff --git a/airbyte-integrations/connectors/source-amplitude/source_amplitude/schemas/events.json b/airbyte-integrations/connectors/source-amplitude/source_amplitude/schemas/events.json index dcc2aa12b5fd..9b9b0e79b9fa 100644 --- a/airbyte-integrations/connectors/source-amplitude/source_amplitude/schemas/events.json +++ b/airbyte-integrations/connectors/source-amplitude/source_amplitude/schemas/events.json @@ -1,5 +1,5 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", + "$schema": "https://json-schema.org/draft-07/schema#", "type": "object", "properties": { "server_received_time": { diff --git a/airbyte-integrations/connectors/source-amplitude/source_amplitude/source.py b/airbyte-integrations/connectors/source-amplitude/source_amplitude/source.py index c5f4aed73a46..aa2ac4e45a48 100644 --- a/airbyte-integrations/connectors/source-amplitude/source_amplitude/source.py +++ b/airbyte-integrations/connectors/source-amplitude/source_amplitude/source.py @@ -2,66 +2,17 @@ # Copyright (c) 2023 Airbyte, Inc., all rights reserved. # -import logging -from base64 import b64encode -from typing import Any, List, Mapping, Tuple +from airbyte_cdk.sources.declarative.yaml_declarative_source import YamlDeclarativeSource -import pendulum -from airbyte_cdk import AirbyteLogger -from airbyte_cdk.models import SyncMode -from airbyte_cdk.sources import AbstractSource -from airbyte_cdk.sources.streams import Stream -from airbyte_cdk.sources.streams.http.auth import TokenAuthenticator +""" +This file provides the necessary constructs to interpret a provided declarative YAML configuration file into +source connector. -from .api import ActiveUsers, Annotations, AverageSessionLength, Cohorts, Events +WARNING: Do not modify this file. +""" -class SourceAmplitude(AbstractSource): - def _convert_auth_to_token(self, username: str, password: str) -> str: - username = username.encode("latin1") - password = password.encode("latin1") - token = b64encode(b":".join((username, password))).strip().decode("ascii") - return token - - def check_connection(self, logger: AirbyteLogger, config: Mapping[str, Any]) -> Tuple[bool, any]: - try: - auth = TokenAuthenticator(token=self._convert_auth_to_token(config["api_key"], config["secret_key"]), auth_method="Basic") - list(Cohorts(authenticator=auth, data_region=config.get("data_region", "Standard Server")).read_records(SyncMode.full_refresh)) - return True, None - except Exception as error: - return False, f"Unable to connect to Amplitude API with the provided credentials - {repr(error)}" - - @staticmethod - def _validate_start_date(start_date): - now = pendulum.now() - start_date = pendulum.parse(start_date) - start_date_in_future = start_date > now - - if start_date_in_future: - logger = logging.getLogger("airbyte") - logger.info(f"Start date set to {now}.") - - return now - return start_date - - def streams(self, config: Mapping[str, Any]) -> List[Stream]: - """ - :param config: A Mapping of the user input configuration as defined in the connector spec. - """ - config["start_date"] = self._validate_start_date(config.get("start_date")) - if not config.get("data_region"): - config["data_region"] = "Standard Server" - - auth = TokenAuthenticator(token=self._convert_auth_to_token(config["api_key"], config["secret_key"]), auth_method="Basic") - return [ - Cohorts(authenticator=auth, data_region=config["data_region"]), - Annotations(authenticator=auth, data_region=config["data_region"]), - Events( - authenticator=auth, - start_date=config["start_date"], - data_region=config["data_region"], - event_time_interval=config.get("event_time_interval", None), - ), - ActiveUsers(authenticator=auth, start_date=config["start_date"], data_region=config["data_region"]), - AverageSessionLength(authenticator=auth, start_date=config["start_date"], data_region=config["data_region"]), - ] +# Declarative Source +class SourceAmplitude(YamlDeclarativeSource): + def __init__(self): + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-amplitude/source_amplitude/spec.json b/airbyte-integrations/connectors/source-amplitude/source_amplitude/spec.json deleted file mode 100644 index 6ee34049ac73..000000000000 --- a/airbyte-integrations/connectors/source-amplitude/source_amplitude/spec.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "documentationUrl": "https://docs.airbyte.com/integrations/sources/amplitude", - "connectionSpecification": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Amplitude Spec", - "type": "object", - "required": ["api_key", "secret_key", "start_date"], - "additionalProperties": true, - "properties": { - "data_region": { - "type": "string", - "title": "Data region", - "description": "Amplitude data region server", - "enum": ["Standard Server", "EU Residency Server"], - "default": "Standard Server" - }, - "api_key": { - "type": "string", - "title": "API Key", - "description": "Amplitude API Key. See the setup guide for more information on how to obtain this key.", - "airbyte_secret": true - }, - "secret_key": { - "type": "string", - "title": "Secret Key", - "description": "Amplitude Secret Key. See the setup guide for more information on how to obtain this key.", - "airbyte_secret": true - }, - "start_date": { - "type": "string", - "title": "Replication Start Date", - "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", - "description": "UTC date and time in the format 2021-01-25T00:00:00Z. Any data before this date will not be replicated.", - "examples": ["2021-01-25T00:00:00Z"] - }, - "event_time_interval": { - "type": "object", - "title": "Event Stream Time Interval", - "description": "Amplitude event stream time interval", - "required": ["size_unit", "size"], - "properties": { - "size_unit" : { - "type" : "string", - "title" : "Events Time Interval Size Unit", - "description" : "Amplitude event stream's interval size unit", - "enum" : [ - "days", - "hours", - "weeks", - "months" - ], - "default" : "days" - }, - "size" : { - "type" : "integer", - "title" : "Events Time Interval Size", - "description" : "Amplitude event stream's interval size unit", - "default" : 1 - } - } - } - } - } -} diff --git a/airbyte-integrations/connectors/source-amplitude/source_amplitude/spec.yaml b/airbyte-integrations/connectors/source-amplitude/source_amplitude/spec.yaml new file mode 100644 index 000000000000..8b14b1ca9f5e --- /dev/null +++ b/airbyte-integrations/connectors/source-amplitude/source_amplitude/spec.yaml @@ -0,0 +1,47 @@ +documentationUrl: https://docs.airbyte.com/integrations/sources/amplitude +connectionSpecification: + "$schema": https://json-schema.org/draft-07/schema# + title: Amplitude Spec + type: object + required: + - api_key + - secret_key + - start_date + additionalProperties: true + properties: + data_region: + type: string + title: Data region + description: Amplitude data region server + enum: + - Standard Server + - EU Residency Server + default: Standard Server + api_key: + type: string + title: API Key + description: Amplitude API Key. See the setup + guide for more information on how to obtain this key. + airbyte_secret: true + secret_key: + type: string + title: Secret Key + description: Amplitude Secret Key. See the setup + guide for more information on how to obtain this key. + airbyte_secret: true + start_date: + type: string + title: Replication Start Date + pattern: "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$" + description: UTC date and time in the format 2021-01-25T00:00:00Z. Any data + before this date will not be replicated. + examples: + - "2021-01-25T00:00:00Z" + request_time_range: + type: integer + title: Request time range + description: According to Considerations too + big time range in request can cause a timeout error. In this case, set shorter time interval in hours. + default: 24 + minimum: 1 + maximum: 8760 diff --git a/airbyte-integrations/connectors/source-amplitude/unit_tests/records.json.zip b/airbyte-integrations/connectors/source-amplitude/unit_tests/records.json.zip new file mode 100644 index 0000000000000000000000000000000000000000..7b084972d71a8faa6042b3b4f3d1322a0d6a7688 GIT binary patch literal 163 zcmWIWW@h1HU|`^2P^@$c%aQ!WtqtU905LZZ7o{faWfkY=>7`dqe*f%2ME$oiBj)13 ztW9xYg>`a=Uu_7sYnO?J3N#oAAlVV%&B_Ln NVFW@;ARPi$1_0@&B_{v? literal 0 HcmV?d00001 diff --git a/airbyte-integrations/connectors/source-amplitude/unit_tests/test_api.py b/airbyte-integrations/connectors/source-amplitude/unit_tests/test_api.py deleted file mode 100644 index 912cd034ec35..000000000000 --- a/airbyte-integrations/connectors/source-amplitude/unit_tests/test_api.py +++ /dev/null @@ -1,277 +0,0 @@ -# -# Copyright (c) 2023 Airbyte, Inc., all rights reserved. -# - - -import pendulum -import pytest -import requests -from source_amplitude.api import ActiveUsers, Annotations, AverageSessionLength, Cohorts, Events - - -class MockRequest: - def __init__(self, status_code): - self.status_code = status_code - - -class TestFullRefreshStreams: - @pytest.mark.parametrize( - "stream_cls, data, expected", - [ - (Cohorts, [{"key": "value"}], [{"key": "value"}]), - (Annotations, [{"key1": "value1"}], [{"key1": "value1"}]), - ], - ids=["Cohorts", "Annotations"], - ) - def test_parse_response(self, requests_mock, stream_cls, data, expected): - stream = stream_cls(data_region="Standard Server") - url = f"{stream.url_base}{stream.path()}" - data = {stream.data_field: data} - requests_mock.get(url, json=data) - response = requests.get(url) - assert list(stream.parse_response(response)) == expected - - @pytest.mark.parametrize( - "stream_cls, expected", - [ - (Cohorts, None), - (Annotations, None), - ], - ids=["Cohorts", "Annotations"], - ) - def test_next_page_token(self, requests_mock, stream_cls, expected): - stream = stream_cls(data_region="Standard Server") - url = f"{stream.url_base}{stream.path()}" - requests_mock.get(url, json={}) - response = requests.get(url) - assert stream.next_page_token(response) == expected - - @pytest.mark.parametrize( - "stream_cls, expected", - [ - (Cohorts, "3/cohorts"), - (Annotations, "2/annotations"), - ], - ids=["Cohorts", "Annotations"], - ) - def test_path(self, stream_cls, expected): - stream = stream_cls(data_region="Standard Server") - assert stream.path() == expected - - -class TestIncrementalStreams: - @pytest.mark.parametrize( - "stream_cls, data, expected", - [ - ( - ActiveUsers, - { - "xValues": ["2021-01-01", "2021-01-02"], - "series": [[1, 5]], - "seriesCollapsed": [[0]], - "seriesLabels": [0], - "seriesMeta": [{"segmentIndex": 0}], - }, - [{"date": "2021-01-01", "statistics": {0: 1}}, {"date": "2021-01-02", "statistics": {0: 5}}], - ), - ( - ActiveUsers, - { - "xValues": ["2021-01-01", "2021-01-02"], - "series": [], - "seriesCollapsed": [[0]], - "seriesLabels": [0], - "seriesMeta": [{"segmentIndex": 0}], - }, - [], - ), - ( - AverageSessionLength, - { - "xValues": ["2019-05-23", "2019-05-24"], - "series": [[2, 6]], - "seriesCollapsed": [[0]], - "seriesLabels": [0], - "seriesMeta": [{"segmentIndex": 0}], - }, - [{"date": "2019-05-23", "length": 2}, {"date": "2019-05-24", "length": 6}], - ), - ( - AverageSessionLength, - { - "xValues": ["2019-05-23", "2019-05-24"], - "series": [], - "seriesCollapsed": [[0]], - "seriesLabels": [0], - "seriesMeta": [{"segmentIndex": 0}], - }, - [], - ), - ], - ids=["ActiveUsers", "EmptyActiveUsers", "AverageSessionLength", "EmptyAverageSessionLength"], - ) - def test_parse_response(self, requests_mock, stream_cls, data, expected): - stream = stream_cls("2021-01-01T00:00:00Z", data_region="Standard Server") - url = f"{stream.url_base}{stream.path()}" - data = {stream.data_field: data} - requests_mock.get(url, json=data) - response = requests.get(url) - result = list(stream.parse_response(response)) - assert result == expected - - @pytest.mark.parametrize( - "stream_cls, expected", - [ - (ActiveUsers, "2/users"), - (AverageSessionLength, "2/sessions/average"), - (Events, "2/export"), - ], - ids=["ActiveUsers", "AverageSessionLength", "Events"], - ) - def test_path(self, stream_cls, expected): - stream = stream_cls(pendulum.now().isoformat(), data_region="Standard Server") - assert stream.path() == expected - - @pytest.mark.parametrize( - "stream_cls, expected", - [ - (ActiveUsers, {"m": "active", "i": 1, "g": "country"}), - (AverageSessionLength, {}), - ], - ids=["ActiveUsers", "AverageSessionLength"], - ) - def test_request_params(self, stream_cls, expected): - now = pendulum.now() - stream = stream_cls(now.isoformat(), data_region="Standard Server") - # update expected with valid start,end dates - slice = stream.stream_slices(stream_state={"date": now.to_date_string()})[0] - expected.update(**slice) - assert stream.request_params(stream_state=None, stream_slice=slice) == expected - - @pytest.mark.parametrize( - "stream_cls, expected", - [ - (ActiveUsers, {}), - (AverageSessionLength, {}), - ], - ids=["ActiveUsers", "AverageSessionLength"], - ) - def test_next_page_token(self, requests_mock, stream_cls, expected): - days_ago = pendulum.now().subtract(days=2) - stream = stream_cls(days_ago.isoformat(), data_region="Standard Server") - start = days_ago.strftime(stream.date_template) - end = pendulum.yesterday().strftime(stream.date_template) - url = f"{stream.url_base}{stream.path()}?start={start}&end={end}" - # update expected with test values. - expected.update( - **{"start": pendulum.yesterday().strftime(stream.date_template), "end": pendulum.now().strftime(stream.date_template)} - ) - requests_mock.get(url) - response = requests.get(url) - assert stream.next_page_token(response) == expected - - @pytest.mark.parametrize( - "stream_cls, expected", - [ - (ActiveUsers, ""), - (AverageSessionLength, ""), - (Events, ""), - ], - ids=["ActiveUsers", "AverageSessionLength", "Events"], - ) - def test_get_end_date(self, stream_cls, expected): - now = pendulum.now() - yesterday = pendulum.yesterday() - stream = stream_cls( - yesterday.isoformat(), - data_region="Standard Server", - event_time_interval={"size_unit": "days", "size": 1} - ) - # update expected with test values. - expected = now.strftime(stream.date_template) - assert stream._get_end_date(yesterday).strftime(stream.date_template) == expected - - -class TestEventsStream: - def test_parse_zip(self): - stream = Events( - pendulum.now().isoformat(), - data_region="Standard Server", - event_time_interval={"size_unit": "days", "size": 1} - ) - expected = [{"id": 123}] - result = list(stream._parse_zip_file("unit_tests/api_data/zipped.json")) - assert expected == result - - def test_stream_slices(self): - stream = Events( - pendulum.now().isoformat(), - data_region="Standard Server", - event_time_interval={"size_unit": "days", "size": 1} - ) - now = pendulum.now() - expected = [ - { - "start": now.strftime(stream.date_template), - "end": stream._get_end_date(now).add(**stream.time_interval).subtract(hours=1).strftime(stream.date_template), - } - ] - assert expected == stream.stream_slices() - - def test_request_params(self): - stream = Events( - pendulum.now().isoformat(), - data_region="Standard Server", - event_time_interval={"size_unit": "days", "size": 1} - ) - now = pendulum.now().subtract(hours=6) - slice = {"start": now.strftime(stream.date_template), "end": stream._get_end_date(now).strftime(stream.date_template)} - assert slice == stream.request_params(slice) - - def test_get_updated_state(self): - stream = Events( - pendulum.now().isoformat(), - data_region="Standard Server", - event_time_interval={"size_unit": "days", "size": 1} - ) - current_state = {"event_time": ""} - latest_record = {"event_time": "2021-05-27 11:59:53.710000"} - result = stream.get_updated_state(current_state, latest_record) - assert result == latest_record - - def test_get_date_time_items_from_schema(self): - stream = Events( - pendulum.now().isoformat(), - data_region="Standard Server", - event_time_interval={"size_unit": "days", "size": 1} - ) - expected = [ - "server_received_time", - "event_time", - "processed_time", - "user_creation_time", - "client_upload_time", - "server_upload_time", - "client_event_time", - ] - result = stream._get_date_time_items_from_schema() - assert result == expected - - @pytest.mark.parametrize( - "record, expected", - [ - ({}, {}), - ({"event_time": "2021-05-27 11:59:53.710000"}, {"event_time": "2021-05-27T11:59:53.710000+00:00"}), - ({"event_time": None}, {"event_time": None}), - ({"event_time": ""}, {"event_time": ""}), - ], - ids=["empty_record", "transformed_record", "null_value", "empty_value"], - ) - def test_date_time_to_rfc3339(self, record, expected): - stream = Events( - pendulum.now().isoformat(), - data_region="Standard Server", - event_time_interval={"size_unit": "days", "size": 1} - ) - result = stream._date_time_to_rfc3339(record) - assert result == expected diff --git a/airbyte-integrations/connectors/source-amplitude/unit_tests/test_custom_extractors.py b/airbyte-integrations/connectors/source-amplitude/unit_tests/test_custom_extractors.py new file mode 100644 index 000000000000..13ebf865ef3a --- /dev/null +++ b/airbyte-integrations/connectors/source-amplitude/unit_tests/test_custom_extractors.py @@ -0,0 +1,114 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + +import os +from unittest.mock import MagicMock + +import pytest +import requests +from source_amplitude.components import ActiveUsersRecordExtractor, AverageSessionLengthRecordExtractor, EventsExtractor + + +@pytest.mark.parametrize( + "custom_extractor, data, expected", + [ + ( + ActiveUsersRecordExtractor, + { + "xValues": ["2021-01-01", "2021-01-02"], + "series": [[1, 5]], + "seriesCollapsed": [[0]], + "seriesLabels": [0], + "seriesMeta": [{"segmentIndex": 0}], + }, + [{"date": "2021-01-01", "statistics": {0: 1}}, {"date": "2021-01-02", "statistics": {0: 5}}], + ), + ( + ActiveUsersRecordExtractor, + { + "xValues": ["2021-01-01", "2021-01-02"], + "series": [], + "seriesCollapsed": [[0]], + "seriesLabels": [0], + "seriesMeta": [{"segmentIndex": 0}], + }, + [], + ), + ( + AverageSessionLengthRecordExtractor, + { + "xValues": ["2019-05-23", "2019-05-24"], + "series": [[2, 6]], + "seriesCollapsed": [[0]], + "seriesLabels": [0], + "seriesMeta": [{"segmentIndex": 0}], + }, + [{"date": "2019-05-23", "length": 2}, {"date": "2019-05-24", "length": 6}], + ), + ( + AverageSessionLengthRecordExtractor, + { + "xValues": ["2019-05-23", "2019-05-24"], + "series": [], + "seriesCollapsed": [[0]], + "seriesLabels": [0], + "seriesMeta": [{"segmentIndex": 0}], + }, + [], + ), + ], + ids=["ActiveUsers", "EmptyActiveUsers", "AverageSessionLength", "EmptyAverageSessionLength"], +) +def test_parse_response(custom_extractor, data, expected): + extractor = custom_extractor() + response = requests.Response() + response.json = MagicMock(return_value={'data': data}) + result = extractor.extract_records(response) + assert result == expected + + +class TestEventsExtractor: + extractor = EventsExtractor(config={}, parameters={'name': 'events'}) + + def test_get_date_time_items_from_schema(self): + expected = [ + "server_received_time", + "event_time", + "processed_time", + "user_creation_time", + "client_upload_time", + "server_upload_time", + "client_event_time", + ] + result = self.extractor._get_date_time_items_from_schema() + assert result == expected + + @pytest.mark.parametrize( + "record, expected", + [ + ({}, {}), + ({"event_time": "2021-05-27 11:59:53.710000"}, {"event_time": "2021-05-27T11:59:53.710000+00:00"}), + ({"event_time": None}, {"event_time": None}), + ({"event_time": ""}, {"event_time": ""}), + ], + ids=["empty_record", "transformed_record", "null_value", "empty_value"], + ) + def test_date_time_to_rfc3339(self, record, expected): + result = self.extractor._date_time_to_rfc3339(record) + assert result == expected + + @pytest.mark.parametrize( + "file_name, expected_records", + [ + ('records.json.zip', [{"id": 123}]), + ('zipped.json.gz', []), + ], + ids=["normal_file", "wrong_file"], + ) + def test_parse_zip(self, requests_mock, file_name, expected_records): + with open(f"{os.path.dirname(__file__)}/{file_name}", 'rb') as zipped: + url = "https://amplitude.com/" + requests_mock.get(url, content=zipped.read()) + response = requests.get(url) + assert list(self.extractor.extract_records(response)) == expected_records diff --git a/airbyte-integrations/connectors/source-amplitude/unit_tests/test_errors.py b/airbyte-integrations/connectors/source-amplitude/unit_tests/test_errors.py deleted file mode 100755 index 6eb8e25855d3..000000000000 --- a/airbyte-integrations/connectors/source-amplitude/unit_tests/test_errors.py +++ /dev/null @@ -1,45 +0,0 @@ -# -# Copyright (c) 2023 Airbyte, Inc., all rights reserved. -# - -import pytest -import requests -from airbyte_cdk.models import SyncMode -from source_amplitude.api import Events - - -class MockRequest: - def __init__(self, status_code): - self.status_code = status_code - - -def test_incremental_http_error_handler(mocker): - stream = Events( - start_date="2021-01-01T00:00:00Z", - data_region="Standard Server", - event_time_interval={"size_unit": "days", "size": 1} - ) - stream_slice = stream.stream_slices()[0] - - mock_response = MockRequest(404) - send_request_mocker = mocker.patch.object(stream, "_send_request", side_effect=requests.HTTPError(**{"response": mock_response})) - with pytest.raises(StopIteration): - result = next(stream.read_records(sync_mode=SyncMode.full_refresh, stream_slice=stream_slice)) - assert result == [] - - mock_response = MockRequest(403) - send_request_mocker.side_effect = requests.HTTPError(**{"response": mock_response}) - with pytest.raises(requests.exceptions.HTTPError): - next(stream.read_records(sync_mode=SyncMode.full_refresh, stream_slice=stream_slice)) - - mock_response = MockRequest(400) - send_request_mocker.side_effect = requests.HTTPError(**{"response": mock_response}) - with pytest.raises(StopIteration): - result = next(stream.read_records(sync_mode=SyncMode.full_refresh, stream_slice=stream_slice)) - assert result == [] - - mock_response = MockRequest(504) - send_request_mocker.side_effect = requests.HTTPError(**{"response": mock_response}) - with pytest.raises(StopIteration): - result = next(stream.read_records(sync_mode=SyncMode.full_refresh, stream_slice=stream_slice)) - assert result == [] diff --git a/airbyte-integrations/connectors/source-amplitude/unit_tests/test_source.py b/airbyte-integrations/connectors/source-amplitude/unit_tests/test_source.py deleted file mode 100644 index 1d16d6069154..000000000000 --- a/airbyte-integrations/connectors/source-amplitude/unit_tests/test_source.py +++ /dev/null @@ -1,72 +0,0 @@ -# -# Copyright (c) 2023 Airbyte, Inc., all rights reserved. -# - - -from unittest.mock import patch - -import pendulum -import pytest -import requests -from airbyte_cdk import AirbyteLogger -from source_amplitude import SourceAmplitude -from source_amplitude.api import ActiveUsers, Annotations, AverageSessionLength, Cohorts, Events - -TEST_CONFIG: dict = { - "data_region": "test_data_region", - "api_key": "test_api_key", - "secret_key": "test_secret_key", - "start_date": "2022-05-01T00:00:00Z" -} -TEST_INSTANCE: SourceAmplitude = SourceAmplitude() - - -class MockRequest: - def __init__(self, status_code): - self.status_code = status_code - - -def test_convert_auth_to_token(): - expected = "dXNlcm5hbWU6cGFzc3dvcmQ=" - actual = TEST_INSTANCE._convert_auth_to_token("username", "password") - assert actual == expected - - -@pytest.mark.parametrize( - "response, check_passed", - [ - ({"id": 123}, True), - (requests.HTTPError(), False), - ], - ids=["Success", "Fail"], -) -def test_check(response, check_passed): - with patch.object(Cohorts, "read_records", return_value=response) as mock_method: - result = TEST_INSTANCE.check_connection(logger=AirbyteLogger, config=TEST_CONFIG) - mock_method.assert_called() - assert check_passed == result[0] - - -@pytest.mark.parametrize( - "expected_stream_cls", - [ - (Cohorts), - (Annotations), - (ActiveUsers), - (AverageSessionLength), - (Events), - ], - ids=["Cohorts", "Annotations", "ActiveUsers", "AverageSessionLength", "Events"], -) -def test_streams(expected_stream_cls): - TEST_CONFIG["start_date"] = pendulum.tomorrow().to_datetime_string() - streams = TEST_INSTANCE.streams(config=TEST_CONFIG) - for stream in streams: - if expected_stream_cls in streams: - assert isinstance(stream, expected_stream_cls) - - -def test_validate_start_date(): - start_date = pendulum.tomorrow().to_datetime_string() - now = pendulum.now().to_datetime_string() - assert TEST_INSTANCE._validate_start_date(start_date).to_datetime_string() == now diff --git a/airbyte-integrations/connectors/source-amplitude/unit_tests/api_data/zipped.json b/airbyte-integrations/connectors/source-amplitude/unit_tests/zipped.json.gz similarity index 100% rename from airbyte-integrations/connectors/source-amplitude/unit_tests/api_data/zipped.json rename to airbyte-integrations/connectors/source-amplitude/unit_tests/zipped.json.gz diff --git a/connectors.md b/connectors.md index 1e8c35ffd589..7aead45830f3 100644 --- a/connectors.md +++ b/connectors.md @@ -14,7 +14,7 @@ | **Amazon Ads** | Amazon Ads icon | Source | airbyte/source-amazon-ads:1.0.2 | generally_available | [link](https://docs.airbyte.com/integrations/sources/amazon-ads) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-amazon-ads) | `c6b0a29e-1da9-4512-9002-7bfd0cba2246` | | **Amazon SQS** | Amazon SQS icon | Source | airbyte/source-amazon-sqs:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/amazon-sqs) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-amazon-sqs) | `983fd355-6bf3-4709-91b5-37afa391eeb6` | | **Amazon Seller Partner** | Amazon Seller Partner icon | Source | airbyte/source-amazon-seller-partner:1.0.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/amazon-seller-partner) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-amazon-seller-partner) | `e55879a8-0ef8-4557-abcf-ab34c53ec460` | -| **Amplitude** | Amplitude icon | Source | airbyte/source-amplitude:0.1.24 | generally_available | [link](https://docs.airbyte.com/integrations/sources/amplitude) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-amplitude) | `fa9f58c6-2d03-4237-aaa4-07d75e0c1396` | +| **Amplitude** | Amplitude icon | Source | airbyte/source-amplitude:0.2.0 | generally_available | [link](https://docs.airbyte.com/integrations/sources/amplitude) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-amplitude) | `fa9f58c6-2d03-4237-aaa4-07d75e0c1396` | | **Apify Dataset** | Apify Dataset icon | Source | airbyte/source-apify-dataset:0.1.11 | alpha | [link](https://docs.airbyte.com/integrations/sources/apify-dataset) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-apify-dataset) | `47f17145-fe20-4ef5-a548-e29b048adf84` | | **Appfollow** | Appfollow icon | Source | airbyte/source-appfollow:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/appfollow) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-appfollow) | `b4375641-e270-41d3-9c20-4f9cecad87a8` | | **AppsFlyer** | AppsFlyer icon | Source | airbyte/source-appsflyer:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/appsflyer) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-appsflyer) | `16447954-e6a8-4593-b140-43dea13bc457` | diff --git a/docs/integrations/sources/amplitude.md b/docs/integrations/sources/amplitude.md index 05cb064168dc..400b64e9d3b0 100644 --- a/docs/integrations/sources/amplitude.md +++ b/docs/integrations/sources/amplitude.md @@ -43,6 +43,7 @@ The Amplitude connector ideally should gracefully handle Amplitude API limitatio | Version | Date | Pull Request | Subject | |:--------|:-----------|:---------------------------------------------------------|:------------------------------------------------------------------------------------------------| +| 0.2.0 | 2023-02-03 | [22362](https://github.com/airbytehq/airbyte/pull/22362) | Migrate to YAML | | 0.1.24 | 2023-03-28 | [21022](https://github.com/airbytehq/airbyte/pull/21022) | Enable event stream time interval selection | | 0.1.23 | 2023-03-02 | [23087](https://github.com/airbytehq/airbyte/pull/23087) | Specified date formatting in specification | | 0.1.22 | 2023-02-17 | [23192](https://github.com/airbytehq/airbyte/pull/23192) | Skip the stream if `start_date` is specified in the future. From d209b604bcb4d16d4b17768a09a22ba96a28637b Mon Sep 17 00:00:00 2001 From: Arsen Losenko <20901439+arsenlosenko@users.noreply.github.com> Date: Thu, 13 Apr 2023 17:03:24 +0300 Subject: [PATCH 044/187] Source Zendesk Support: update expected records (#25058) * Source Zendesk Support: skip stream * Add expected records for tags stream * Automated Change --------- Co-authored-by: arsenlosenko --- .../integration_tests/expected_records.jsonl | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/airbyte-integrations/connectors/source-zendesk-support/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-zendesk-support/integration_tests/expected_records.jsonl index 25b8f33ad2d4..06d364a37fcd 100644 --- a/airbyte-integrations/connectors/source-zendesk-support/integration_tests/expected_records.jsonl +++ b/airbyte-integrations/connectors/source-zendesk-support/integration_tests/expected_records.jsonl @@ -35,10 +35,6 @@ {"stream":"schedules","data":{"id":4567312249615,"name":"Test Schedule","time_zone":"New Caledonia","created_at":"2022-03-25T10:23:34Z","updated_at":"2022-03-25T10:23:34Z","intervals":[{"start_time":1980,"end_time":2460},{"start_time":3420,"end_time":3900},{"start_time":4860,"end_time":5340},{"start_time":6300,"end_time":6780},{"start_time":7740,"end_time":8220}]},"emitted_at":1673880699938} {"stream":"sla_policies","data":{"url":"https://d3v-airbyte.zendesk.com/api/v2/slas/policies/360001110696.json","id":360001110696,"title":"test police","description":"for tests","position":1,"filter":{"all":[{"field":"assignee_id","operator":"is","value":361089721035}],"any":[]},"policy_metrics":[{"priority":"high","metric":"first_reply_time","target":61,"business_hours":false}],"created_at":"2021-07-16T11:05:31Z","updated_at":"2021-07-16T11:05:31Z"},"emitted_at":1673880700970} {"stream":"sla_policies","data":{"url":"https://d3v-airbyte.zendesk.com/api/v2/slas/policies/360001113715.json","id":360001113715,"title":"test police 2","description":"test police 2","position":2,"filter":{"all":[{"field":"organization_id","operator":"is","value":360033549136}],"any":[]},"policy_metrics":[{"priority":"high","metric":"first_reply_time","target":121,"business_hours":false}],"created_at":"2021-07-16T11:06:01Z","updated_at":"2021-07-16T11:06:01Z"},"emitted_at":1673880700970} -{"stream":"tags","data":{"name":"test","count":3},"emitted_at":1673880702342} -{"stream":"tags","data":{"name":"tag2","count":1},"emitted_at":1673880702342} -{"stream":"tags","data":{"name":"tag1","count":1},"emitted_at":1673880702343} -{"stream":"tags","data":{"name":"tag","count":1},"emitted_at":1673880702343} {"stream":"ticket_audits","data":{"id":5909514817039,"ticket_id":25,"created_at":"2022-11-22T17:02:04Z","author_id":-1,"metadata":{"system":{},"custom":{}},"events":[{"id":5909514817167,"type":"Notification","subject":"Request #{{ticket.id}}: How would you rate the support you received?","body":"Hello {{ticket.requester.name}},\n\nWe'd love to hear what you think of our customer service. Please take a moment to answer one simple question by clicking either link below:\n\n{{satisfaction.rating_section}}\n\nHere's a reminder of what this request was about:\n\n{{ticket.comments_formatted}}\n","recipients":[360786799676]},{"id":5909514817295,"type":"Change","value":"offered","field_name":"satisfaction_score","previous_value":"unoffered"}],"via":{"channel":"rule","source":{"to":{},"from":{"deleted":false,"title":"Request customer satisfaction rating (system automation)","id":360021281435},"rel":"automation"}}},"emitted_at":1673880705813} {"stream":"ticket_audits","data":{"id":5909508365711,"ticket_id":141,"created_at":"2022-11-22T17:02:04Z","author_id":-1,"metadata":{"system":{},"custom":{}},"events":[{"id":5909502407183,"type":"Notification","subject":"Request #{{ticket.id}}: How would you rate the support you received?","body":"Hello {{ticket.requester.name}},\n\nWe'd love to hear what you think of our customer service. Please take a moment to answer one simple question by clicking either link below:\n\n{{satisfaction.rating_section}}\n\nHere's a reminder of what this request was about:\n\n{{ticket.comments_formatted}}\n","recipients":[360786799676]}],"via":{"channel":"rule","source":{"to":{},"from":{"deleted":false,"title":"Request customer satisfaction rating (system automation)","id":360021281435},"rel":"automation"}}},"emitted_at":1673880705814} {"stream":"ticket_audits","data":{"id":5909492139663,"ticket_id":130,"created_at":"2022-11-22T17:02:04Z","author_id":-1,"metadata":{"system":{},"custom":{}},"events":[{"id":5909502411919,"type":"Notification","subject":"Request #{{ticket.id}}: How would you rate the support you received?","body":"Hello {{ticket.requester.name}},\n\nWe'd love to hear what you think of our customer service. Please take a moment to answer one simple question by clicking either link below:\n\n{{satisfaction.rating_section}}\n\nHere's a reminder of what this request was about:\n\n{{ticket.comments_formatted}}\n","recipients":[360786799676]}],"via":{"channel":"rule","source":{"to":{},"from":{"deleted":false,"title":"Request customer satisfaction rating (system automation)","id":360021281435},"rel":"automation"}}},"emitted_at":1673880705814} @@ -103,3 +99,5 @@ {"stream":"users","data":{"id":5527111815439,"url":"https://d3v-airbyte.zendesk.com/api/v2/users/5527111815439.json","name":"Caller +1 (234) 601-8567","email":null,"created_at":"2022-09-19T14:53:48Z","updated_at":"2022-09-19T14:53:49Z","time_zone":"Pacific/Noumea","iana_time_zone":"Pacific/Noumea","phone":"+12346018567","shared_phone_number":false,"photo":null,"locale_id":1,"locale":"en-US","organization_id":null,"role":"end-user","verified":true,"external_id":null,"tags":[],"alias":null,"active":true,"shared":false,"shared_agent":false,"last_login_at":null,"two_factor_auth_enabled":false,"signature":null,"details":null,"notes":null,"role_type":null,"custom_role_id":null,"moderator":false,"ticket_restriction":"requested","only_private_comments":false,"restricted_agent":true,"suspended":false,"default_group_id":null,"report_csv":false,"user_fields":{}},"emitted_at":1673880717536} {"stream": "brands", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/brands/360000358316.json", "id": 360000358316, "name": "Airbyte", "brand_url": "https://d3v-airbyte.zendesk.com", "subdomain": "d3v-airbyte", "host_mapping": null, "has_help_center": false, "help_center_state": "disabled", "active": true, "default": true, "is_deleted": false, "logo": null, "ticket_form_ids": [360000084116], "signature_template": "{{agent.signature}}", "created_at": "2020-12-11T18:34:04Z", "updated_at": "2020-12-11T18:34:09Z"}, "emitted_at": 1673881264500} {"stream": "custom_roles", "data": {"id": 360000210636, "name": "Advisor", "description": "Can automate ticket workflows, manage channels and make private comments on tickets", "role_type": 0, "created_at": "2020-12-11T18:34:36Z", "updated_at": "2020-12-11T18:34:36Z", "configuration": {"chat_access": true, "manage_business_rules": true, "manage_dynamic_content": false, "manage_extensions_and_channels": true, "manage_facebook": true, "ticket_deletion": false, "view_deleted_tickets": false, "ticket_tag_editing": true, "twitter_search_access": false, "forum_access_restricted_content": false, "end_user_list_access": "full", "ticket_access": "within-groups", "ticket_comment_access": "none", "voice_access": true, "moderate_forums": false, "light_agent": false, "side_conversation_create": true, "group_access": false, "organization_editing": false, "organization_notes_editing": false, "assign_tickets_to_any_group": false, "end_user_profile_access": "readonly", "explore_access": "readonly", "forum_access": "readonly", "macro_access": "full", "report_access": "none", "ticket_editing": true, "ticket_merge": false, "view_access": "full", "user_view_access": "full", "voice_dashboard_access": false, "manage_contextual_workspaces": false, "manage_organization_fields": false, "manage_ticket_fields": false, "manage_ticket_forms": false, "manage_user_fields": false, "manage_automations": true, "manage_skills": true, "manage_slas": true, "manage_triggers": true, "ticket_redaction": false}, "team_member_count": 0}, "emitted_at": 1678472142307} +{"stream": "tags", "data": {"name": "test", "count": 1}, "emitted_at": 1681311413435} +{"stream": "tags", "data": {"name": "tag1204", "count": 1}, "emitted_at": 1681311413435} From 25850fae37690d55246d0a9b007ed668dd18d022 Mon Sep 17 00:00:00 2001 From: Marcos Marx Date: Thu, 13 Apr 2023 12:07:54 -0300 Subject: [PATCH 045/187] Source Surveymonkey: Fix spec.json required fields and update schema for surveys and survey_responses (#25080) * Fixes required fields on SurveyMonkey UI * fix integration test schema update for surveys and survey response * fix expected records * update dockerfile and docs * auto-bump connector version --------- Co-authored-by: Ali Hassan Co-authored-by: Ali Hassan <62539376+Alihassanc5@users.noreply.github.com> Co-authored-by: Octavia Squidington III --- .../src/main/resources/seed/oss_catalog.json | 2 +- .../resources/seed/source_definitions.yaml | 2 +- .../src/main/resources/seed/source_specs.yaml | 2 +- .../connectors/source-surveymonkey/Dockerfile | 2 +- .../acceptance-test-config.yml | 10 +- .../integration_tests/expected_records.txt | 287 +++++++++++++++++- .../schemas/survey_responses.json | 3 + .../source_surveymonkey/schemas/surveys.json | 3 + .../source_surveymonkey/source.py | 6 - .../unit_tests/test_source.py | 16 - connectors.md | 2 +- docs/integrations/sources/surveymonkey.md | 1 + 12 files changed, 299 insertions(+), 37 deletions(-) diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json index 99e0d82d61a2..158d76142951 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json @@ -24567,7 +24567,7 @@ "sourceDefinitionId": "badc5925-0485-42be-8caa-b34096cb71b5", "name": "SurveyMonkey", "dockerRepository": "airbyte/source-surveymonkey", - "dockerImageTag": "0.1.15", + "dockerImageTag": "0.1.16", "documentationUrl": "https://docs.airbyte.com/integrations/sources/surveymonkey", "icon": "surveymonkey.svg", "sourceType": "api", diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml index ca4661532cbc..31cce062ebc7 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml @@ -2026,7 +2026,7 @@ - name: SurveyMonkey sourceDefinitionId: badc5925-0485-42be-8caa-b34096cb71b5 dockerRepository: airbyte/source-surveymonkey - dockerImageTag: 0.1.15 + dockerImageTag: 0.1.16 documentationUrl: https://docs.airbyte.com/integrations/sources/surveymonkey icon: surveymonkey.svg sourceType: api diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml index 7ea13d11b471..ba13cf61a725 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml @@ -15184,7 +15184,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-surveymonkey:0.1.15" +- dockerImage: "airbyte/source-surveymonkey:0.1.16" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/surveymonkey" connectionSpecification: diff --git a/airbyte-integrations/connectors/source-surveymonkey/Dockerfile b/airbyte-integrations/connectors/source-surveymonkey/Dockerfile index 5e597041c7fe..2e5ecfc81652 100644 --- a/airbyte-integrations/connectors/source-surveymonkey/Dockerfile +++ b/airbyte-integrations/connectors/source-surveymonkey/Dockerfile @@ -12,5 +12,5 @@ RUN pip install . ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=0.1.15 +LABEL io.airbyte.version=0.1.16 LABEL io.airbyte.name=airbyte/source-surveymonkey diff --git a/airbyte-integrations/connectors/source-surveymonkey/acceptance-test-config.yml b/airbyte-integrations/connectors/source-surveymonkey/acceptance-test-config.yml index b2a21b386d8e..a75edaae460c 100644 --- a/airbyte-integrations/connectors/source-surveymonkey/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-surveymonkey/acceptance-test-config.yml @@ -6,10 +6,12 @@ acceptance_tests: - spec_path: "source_surveymonkey/spec.json" connection: tests: - - config_path: "secrets/config.json" - status: "succeed" - - config_path: "integration_tests/invalid_config.json" - status: "failed" + - config_path: "secrets/config_old.json" + status: "succeed" + - config_path: "secrets/config.json" + status: "succeed" + - config_path: "integration_tests/invalid_config.json" + status: "failed" discovery: tests: - config_path: "secrets/config.json" diff --git a/airbyte-integrations/connectors/source-surveymonkey/integration_tests/expected_records.txt b/airbyte-integrations/connectors/source-surveymonkey/integration_tests/expected_records.txt index 96edfa02aa3f..3ae61592160d 100644 --- a/airbyte-integrations/connectors/source-surveymonkey/integration_tests/expected_records.txt +++ b/airbyte-integrations/connectors/source-surveymonkey/integration_tests/expected_records.txt @@ -1,12 +1,287 @@ -{"stream":"surveys","data":{"title":"Market Research - Product Testing Template","nickname":"","language":"en","folder_id":"0","category":"market_research","question_count":13,"page_count":1,"response_count":13,"date_created":"2021-05-07T06:18:00","date_modified":"2021-06-08T18:09:00","id":"306079584","buttons_text":{"next_button":"Next >>","prev_button":"<< Prev","done_button":"Done","exit_button":""},"is_owner":true,"footer":true,"theme_id":"4510354","custom_variables":{},"href":"https://api.surveymonkey.com/v3/surveys/306079584","analyze_url":"https://www.surveymonkey.com/analyze/5jPPwKLnlqevaUQom_2BgYAWJWlrKNA2ZFTOYrMBrqW2c_3D","edit_url":"https://www.surveymonkey.com/create/?sm=5jPPwKLnlqevaUQom_2BgYAWJWlrKNA2ZFTOYrMBrqW2c_3D","collect_url":"https://www.surveymonkey.com/collect/list?sm=5jPPwKLnlqevaUQom_2BgYAWJWlrKNA2ZFTOYrMBrqW2c_3D","summary_url":"https://www.surveymonkey.com/summary/5jPPwKLnlqevaUQom_2BgYAWJWlrKNA2ZFTOYrMBrqW2c_3D","preview":"https://www.surveymonkey.com/r/Preview/?sm=8T1PwDGoJHE1lbkxjUnaGitKu8jxWzyoclw9fNsShflPlk6MYIzwJ2NgjlBw_2B7iV"},"emitted_at":1674149644633} -{"stream":"surveys","data":{"title":"yswa8kobijei1mkwaqxgy","nickname":"7b4p9vssf810mslcd0eqpcg9s7p0h","language":"it","folder_id":"0","category":"","question_count":10,"page_count":3,"response_count":18,"date_created":"2021-06-09T21:20:00","date_modified":"2021-06-10T10:59:00","id":"307785429","buttons_text":{"next_button":"Nex >>>>>","prev_button":"Nix <<<<<","done_button":"Nax_Don_Gon!","exit_button":""},"is_owner":true,"footer":true,"theme_id":"4510354","custom_variables":{},"href":"https://api.surveymonkey.com/v3/surveys/307785429","analyze_url":"https://www.surveymonkey.com/analyze/BPAkhAawaMN8C17tmmNFxoENnL6uEj_2FlAo5YSBwashU_3D","edit_url":"https://www.surveymonkey.com/create/?sm=BPAkhAawaMN8C17tmmNFxoENnL6uEj_2FlAo5YSBwashU_3D","collect_url":"https://www.surveymonkey.com/collect/list?sm=BPAkhAawaMN8C17tmmNFxoENnL6uEj_2FlAo5YSBwashU_3D","summary_url":"https://www.surveymonkey.com/summary/BPAkhAawaMN8C17tmmNFxoENnL6uEj_2FlAo5YSBwashU_3D","preview":"https://www.surveymonkey.com/r/Preview/?sm=YRpP3kxXMi2aJkgYoeyZrvuErii13mQ5DRN67Vm4WJ5avIMZ6YvzI_2Bc3FpERJDqx"},"emitted_at":1674149645341} -{"stream":"surveys","data":{"title":"wsfqk1di34d","nickname":"3pax9qjasev22ofir5dm4x45s","language":"ru","folder_id":"0","category":"","question_count":10,"page_count":3,"response_count":18,"date_created":"2021-06-09T21:20:00","date_modified":"2021-06-10T11:00:00","id":"307785444","buttons_text":{"next_button":"Nex >>>>>","prev_button":"Nix <<<<<","done_button":"Nax_Don_Gon!","exit_button":""},"is_owner":true,"footer":true,"theme_id":"4510354","custom_variables":{},"href":"https://api.surveymonkey.com/v3/surveys/307785444","analyze_url":"https://www.surveymonkey.com/analyze/BPAkhAawaMN8C17tmmNFxrQYdYnKpzayiBZVWsmE3jE_3D","edit_url":"https://www.surveymonkey.com/create/?sm=BPAkhAawaMN8C17tmmNFxrQYdYnKpzayiBZVWsmE3jE_3D","collect_url":"https://www.surveymonkey.com/collect/list?sm=BPAkhAawaMN8C17tmmNFxrQYdYnKpzayiBZVWsmE3jE_3D","summary_url":"https://www.surveymonkey.com/summary/BPAkhAawaMN8C17tmmNFxrQYdYnKpzayiBZVWsmE3jE_3D","preview":"https://www.surveymonkey.com/r/Preview/?sm=8fhTDITxRdeFQ_2BLWzVWxsJSU0nfgGgIbcvuAJ6C8LCdfivLn4FPj6xZP2o8_2FINMc"},"emitted_at":1674149646672} -{"stream": "survey_responses", "data": {"id": "12706126725", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "124.123.178.184", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405437100", "survey_id": "306079584", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=hNu3QJYf07WiUPOwxCYcARURFGB3ruOrs9slcTHVhmhgDhoNJ0k7w3jCvo0nLM40", "analyze_url": "https://www.surveymonkey.com/analyze/browse/5jPPwKLnlqevaUQom_2BgYAWJWlrKNA2ZFTOYrMBrqW2c_3D?respondent_id=12706126725", "total_time": 62, "date_modified": "2021-06-01T17:40:54+00:00", "date_created": "2021-06-01T17:39:51+00:00", "href": "https://api.surveymonkey.com/v3/surveys/306079584/responses/12706126725", "pages": [{"id": "165250506", "questions": [{"id": "652286715", "answers": [{"choice_id": "4285525064"}]}, {"id": "652286721", "answers": [{"choice_id": "4285525084"}]}, {"id": "652286716", "answers": [{"choice_id": "4285525070"}]}, {"id": "652286718", "answers": [{"choice_id": "4285525079"}]}, {"id": "652286722", "answers": [{"choice_id": "4285525089"}]}, {"id": "652286717", "answers": [{"choice_id": "4285525074"}]}, {"id": "652286723", "answers": [{"choice_id": "4285525095"}]}, {"id": "652286714", "answers": [{"choice_id": "4285525058", "row_id": "4285525061", "choice_metadata": {"weight": "0"}}]}]}]}, "emitted_at": 1678795515393} -{"stream": "survey_responses", "data": {"id": "12706152767", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "37.229.17.15", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405437100", "survey_id": "306079584", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=YIZz5DiXEDES47ARxTbRPzAA9ZOwCjcN_2FDSFTYGWgCVPQCo_2B3EeLirGlON5_2BjrX5", "analyze_url": "https://www.surveymonkey.com/analyze/browse/5jPPwKLnlqevaUQom_2BgYAWJWlrKNA2ZFTOYrMBrqW2c_3D?respondent_id=12706152767", "total_time": 55, "date_modified": "2021-06-01T17:50:03+00:00", "date_created": "2021-06-01T17:49:08+00:00", "href": "https://api.surveymonkey.com/v3/surveys/306079584/responses/12706152767", "pages": [{"id": "165250506", "questions": [{"id": "652286726", "answers": [{"tag_data": [], "text": "fuck this"}]}, {"id": "652286715", "answers": [{"choice_id": "4285525067"}]}, {"id": "652286721", "answers": [{"choice_id": "4285525087"}]}, {"id": "652286716", "answers": [{"choice_id": "4285525072"}]}, {"id": "652286718", "answers": [{"choice_id": "4285525081"}]}, {"id": "652286722", "answers": [{"choice_id": "4285525091"}]}, {"id": "652286717", "answers": [{"choice_id": "4285525077"}]}, {"id": "652286723", "answers": [{"choice_id": "4285525097"}]}, {"id": "652286714", "answers": [{"choice_id": "4285525052", "row_id": "4285525061", "choice_metadata": {"weight": "-100"}}]}, {"id": "652286719", "answers": [{"tag_data": [], "text": "waste of time"}]}]}]}, "emitted_at": 1678795515396} -{"stream": "survey_responses", "data": {"id": "12706159691", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "157.48.231.67", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405437100", "survey_id": "306079584", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=P4z1eeLex6p2OQEYYXRJKBxPyHk6ljkOskXPds2olEToYrU_2FwTZWAyllEtgJRyQL", "analyze_url": "https://www.surveymonkey.com/analyze/browse/5jPPwKLnlqevaUQom_2BgYAWJWlrKNA2ZFTOYrMBrqW2c_3D?respondent_id=12706159691", "total_time": 104, "date_modified": "2021-06-01T17:52:27+00:00", "date_created": "2021-06-01T17:50:43+00:00", "href": "https://api.surveymonkey.com/v3/surveys/306079584/responses/12706159691", "pages": [{"id": "165250506", "questions": [{"id": "652286724", "answers": [{"row_id": "4285525098", "x": "78.63", "y": "13.19"}]}, {"id": "652286725", "answers": [{"row_id": "4285525102", "x": "41.94", "y": "50.16"}]}, {"id": "652286715", "answers": [{"choice_id": "4285525065"}]}, {"id": "652286721", "answers": [{"choice_id": "4285525086"}]}, {"id": "652286716", "answers": [{"choice_id": "4285525071"}]}, {"id": "652286718", "answers": [{"choice_id": "4285525079"}]}, {"id": "652286722", "answers": [{"choice_id": "4285525090"}]}, {"id": "652286717", "answers": [{"choice_id": "4285525076"}]}, {"id": "652286723", "answers": [{"choice_id": "4285525095"}]}, {"id": "652286714", "answers": [{"choice_id": "4285525055", "row_id": "4285525061", "choice_metadata": {"weight": "-100"}}]}]}]}, "emitted_at": 1678795515398} +{"stream": "surveys", "data": {"title": "Market Research - Product Testing Template", "nickname": "", "language": "en", "folder_id": "0", "category": "market_research", "question_count": 13, "page_count": 1, "response_count": 13, "date_created": "2021-05-07T06:18:00", "date_modified": "2021-06-08T18:09:00", "id": "306079584", "buttons_text": {"next_button": "Next >>", "prev_button": "<< Prev", "done_button": "Done", "exit_button": ""}, "is_owner": true, "footer": true, "theme_id": "4510354", "custom_variables": {}, "href": "https://api.surveymonkey.com/v3/surveys/306079584", "analyze_url": "https://www.surveymonkey.com/analyze/5jPPwKLnlqevaUQom_2BgYAWJWlrKNA2ZFTOYrMBrqW2c_3D", "edit_url": "https://www.surveymonkey.com/create/?sm=5jPPwKLnlqevaUQom_2BgYAWJWlrKNA2ZFTOYrMBrqW2c_3D", "collect_url": "https://www.surveymonkey.com/collect/list?sm=5jPPwKLnlqevaUQom_2BgYAWJWlrKNA2ZFTOYrMBrqW2c_3D", "summary_url": "https://www.surveymonkey.com/summary/5jPPwKLnlqevaUQom_2BgYAWJWlrKNA2ZFTOYrMBrqW2c_3D", "preview": "https://www.surveymonkey.com/r/Preview/?sm=8T1PwDGoJHE1lbkxjUnaGitKu8jxWzyoclw9fNsShflPlk6MYIzwJ2NgjlBw_2B7iV"}, "emitted_at": 1681237932194} +{"stream": "surveys", "data": {"title": "yswa8kobijei1mkwaqxgy", "nickname": "7b4p9vssf810mslcd0eqpcg9s7p0h", "language": "it", "folder_id": "0", "category": "", "question_count": 10, "page_count": 3, "response_count": 18, "date_created": "2021-06-09T21:20:00", "date_modified": "2021-06-10T10:59:00", "id": "307785429", "buttons_text": {"next_button": "Nex >>>>>", "prev_button": "Nix <<<<<", "done_button": "Nax_Don_Gon!", "exit_button": ""}, "is_owner": true, "footer": true, "theme_id": "4510354", "custom_variables": {}, "href": "https://api.surveymonkey.com/v3/surveys/307785429", "analyze_url": "https://www.surveymonkey.com/analyze/BPAkhAawaMN8C17tmmNFxoENnL6uEj_2FlAo5YSBwashU_3D", "edit_url": "https://www.surveymonkey.com/create/?sm=BPAkhAawaMN8C17tmmNFxoENnL6uEj_2FlAo5YSBwashU_3D", "collect_url": "https://www.surveymonkey.com/collect/list?sm=BPAkhAawaMN8C17tmmNFxoENnL6uEj_2FlAo5YSBwashU_3D", "summary_url": "https://www.surveymonkey.com/summary/BPAkhAawaMN8C17tmmNFxoENnL6uEj_2FlAo5YSBwashU_3D", "preview": "https://www.surveymonkey.com/r/Preview/?sm=YRpP3kxXMi2aJkgYoeyZrvuErii13mQ5DRN67Vm4WJ5avIMZ6YvzI_2Bc3FpERJDqx"}, "emitted_at": 1681237933081} +{"stream": "surveys", "data": {"title": "wsfqk1di34d", "nickname": "3pax9qjasev22ofir5dm4x45s", "language": "ru", "folder_id": "0", "category": "", "question_count": 10, "page_count": 3, "response_count": 18, "date_created": "2021-06-09T21:20:00", "date_modified": "2021-06-10T11:00:00", "id": "307785444", "buttons_text": {"next_button": "Nex >>>>>", "prev_button": "Nix <<<<<", "done_button": "Nax_Don_Gon!", "exit_button": ""}, "is_owner": true, "footer": true, "theme_id": "4510354", "custom_variables": {}, "href": "https://api.surveymonkey.com/v3/surveys/307785444", "analyze_url": "https://www.surveymonkey.com/analyze/BPAkhAawaMN8C17tmmNFxrQYdYnKpzayiBZVWsmE3jE_3D", "edit_url": "https://www.surveymonkey.com/create/?sm=BPAkhAawaMN8C17tmmNFxrQYdYnKpzayiBZVWsmE3jE_3D", "collect_url": "https://www.surveymonkey.com/collect/list?sm=BPAkhAawaMN8C17tmmNFxrQYdYnKpzayiBZVWsmE3jE_3D", "summary_url": "https://www.surveymonkey.com/summary/BPAkhAawaMN8C17tmmNFxrQYdYnKpzayiBZVWsmE3jE_3D", "preview": "https://www.surveymonkey.com/r/Preview/?sm=8fhTDITxRdeFQ_2BLWzVWxsJSU0nfgGgIbcvuAJ6C8LCdfivLn4FPj6xZP2o8_2FINMc"}, "emitted_at": 1681237934177} +{"stream": "surveys", "data": {"title": "vpoha5euc66vp", "nickname": "etv0tds1e45", "language": "en", "folder_id": "0", "category": "", "question_count": 10, "page_count": 3, "response_count": 18, "date_created": "2021-06-09T21:19:00", "date_modified": "2021-06-10T11:01:00", "id": "307785394", "buttons_text": {"next_button": "Nex >>>>>", "prev_button": "Nix <<<<<", "done_button": "Nax_Don_Gon!", "exit_button": ""}, "is_owner": true, "footer": true, "theme_id": "4510354", "custom_variables": {}, "href": "https://api.surveymonkey.com/v3/surveys/307785394", "analyze_url": "https://www.surveymonkey.com/analyze/5QHdVgvFd_2Bn4fvmj_2F1aNt3d6AR0J1aeeTU4KsCULsx8_3D", "edit_url": "https://www.surveymonkey.com/create/?sm=5QHdVgvFd_2Bn4fvmj_2F1aNt3d6AR0J1aeeTU4KsCULsx8_3D", "collect_url": "https://www.surveymonkey.com/collect/list?sm=5QHdVgvFd_2Bn4fvmj_2F1aNt3d6AR0J1aeeTU4KsCULsx8_3D", "summary_url": "https://www.surveymonkey.com/summary/5QHdVgvFd_2Bn4fvmj_2F1aNt3d6AR0J1aeeTU4KsCULsx8_3D", "preview": "https://www.surveymonkey.com/r/Preview/?sm=RPtFlMc_2B10dLjP_2BMbJ9eseMZkg_2FE5of5WUErPhwmC57Ij1xz0JOW7uC8i49BGEl8"}, "emitted_at": 1681237935248} +{"stream": "surveys", "data": {"title": "s2d9px7cdril0v7789ab4f", "nickname": "wnhin1ctnss8ebdgjef", "language": "ru", "folder_id": "0", "category": "", "question_count": 10, "page_count": 3, "response_count": 18, "date_created": "2021-06-09T21:20:00", "date_modified": "2021-06-10T11:02:00", "id": "307785402", "buttons_text": {"next_button": "Nex >>>>>", "prev_button": "Nix <<<<<", "done_button": "Nax_Don_Gon!", "exit_button": ""}, "is_owner": true, "footer": true, "theme_id": "4510354", "custom_variables": {}, "href": "https://api.surveymonkey.com/v3/surveys/307785402", "analyze_url": "https://www.surveymonkey.com/analyze/BPAkhAawaMN8C17tmmNFxuFqiaqWbXDPfS4KhzQnJ4c_3D", "edit_url": "https://www.surveymonkey.com/create/?sm=BPAkhAawaMN8C17tmmNFxuFqiaqWbXDPfS4KhzQnJ4c_3D", "collect_url": "https://www.surveymonkey.com/collect/list?sm=BPAkhAawaMN8C17tmmNFxuFqiaqWbXDPfS4KhzQnJ4c_3D", "summary_url": "https://www.surveymonkey.com/summary/BPAkhAawaMN8C17tmmNFxuFqiaqWbXDPfS4KhzQnJ4c_3D", "preview": "https://www.surveymonkey.com/r/Preview/?sm=RId_2BH4A8CUUX6zNvnFnfsb3wKFGuv8kLhz_2BApiG6Mbvu_2BLypJpz_2BM9EfoUuRXBcL"}, "emitted_at": 1681237936370} +{"stream": "surveys", "data": {"title": "muxx41av9mp", "nickname": "hfs5uo9cw1ce3j7rn7n8ncu88myc", "language": "de", "folder_id": "0", "category": "", "question_count": 10, "page_count": 3, "response_count": 18, "date_created": "2021-06-09T21:20:00", "date_modified": "2021-06-10T11:02:00", "id": "307785408", "buttons_text": {"next_button": "Nex >>>>>", "prev_button": "Nix <<<<<", "done_button": "Nax_Don_Gon!", "exit_button": ""}, "is_owner": true, "footer": true, "theme_id": "4510354", "custom_variables": {}, "href": "https://api.surveymonkey.com/v3/surveys/307785408", "analyze_url": "https://www.surveymonkey.com/analyze/BPAkhAawaMN8C17tmmNFxvvr7YEM4YZ5j7dMDUtBHEw_3D", "edit_url": "https://www.surveymonkey.com/create/?sm=BPAkhAawaMN8C17tmmNFxvvr7YEM4YZ5j7dMDUtBHEw_3D", "collect_url": "https://www.surveymonkey.com/collect/list?sm=BPAkhAawaMN8C17tmmNFxvvr7YEM4YZ5j7dMDUtBHEw_3D", "summary_url": "https://www.surveymonkey.com/summary/BPAkhAawaMN8C17tmmNFxvvr7YEM4YZ5j7dMDUtBHEw_3D", "preview": "https://www.surveymonkey.com/r/Preview/?sm=aPPwgAP8stOxnud8WXi8VHKMrUtKIqvd7JhVnp1f0Ucqjb7cbMATzGizMgcLO_2BzA"}, "emitted_at": 1681237937523} +{"stream": "surveys", "data": {"title": "2iokp4jvp9ru5", "nickname": "j2a0kxhq8lmawfqjkg0hx", "language": "ru", "folder_id": "0", "category": "", "question_count": 10, "page_count": 3, "response_count": 21, "date_created": "2021-06-09T21:07:00", "date_modified": "2021-06-10T11:03:00", "id": "307784834", "buttons_text": {"next_button": "Nex >>>>>", "prev_button": "Nix <<<<<", "done_button": "Nax_Don_Gon!", "exit_button": ""}, "is_owner": true, "footer": true, "theme_id": "4510354", "custom_variables": {}, "href": "https://api.surveymonkey.com/v3/surveys/307784834", "analyze_url": "https://www.surveymonkey.com/analyze/moGgts_2Bl1LYlJ1mbVw6XGwf91XTSWLx4XNlQvyUVl4Y_3D", "edit_url": "https://www.surveymonkey.com/create/?sm=moGgts_2Bl1LYlJ1mbVw6XGwf91XTSWLx4XNlQvyUVl4Y_3D", "collect_url": "https://www.surveymonkey.com/collect/list?sm=moGgts_2Bl1LYlJ1mbVw6XGwf91XTSWLx4XNlQvyUVl4Y_3D", "summary_url": "https://www.surveymonkey.com/summary/moGgts_2Bl1LYlJ1mbVw6XGwf91XTSWLx4XNlQvyUVl4Y_3D", "preview": "https://www.surveymonkey.com/r/Preview/?sm=5ovW9LrIPsdAlqAloFxtr_2BhNVquSJyqeGOsrEnkZn56chkdLSKQISgfvIUejUonU"}, "emitted_at": 1681237938633} +{"stream": "surveys", "data": {"title": "9cnwcmdn39ox", "nickname": "vih7eeixclb", "language": "ru", "folder_id": "0", "category": "", "question_count": 10, "page_count": 3, "response_count": 18, "date_created": "2021-06-09T21:20:00", "date_modified": "2021-06-10T11:03:00", "id": "307785448", "buttons_text": {"next_button": "Nex >>>>>", "prev_button": "Nix <<<<<", "done_button": "Nax_Don_Gon!", "exit_button": ""}, "is_owner": true, "footer": true, "theme_id": "4510354", "custom_variables": {}, "href": "https://api.surveymonkey.com/v3/surveys/307785448", "analyze_url": "https://www.surveymonkey.com/analyze/BPAkhAawaMN8C17tmmNFxi9bVow7JzoPHlGgDld6S4o_3D", "edit_url": "https://www.surveymonkey.com/create/?sm=BPAkhAawaMN8C17tmmNFxi9bVow7JzoPHlGgDld6S4o_3D", "collect_url": "https://www.surveymonkey.com/collect/list?sm=BPAkhAawaMN8C17tmmNFxi9bVow7JzoPHlGgDld6S4o_3D", "summary_url": "https://www.surveymonkey.com/summary/BPAkhAawaMN8C17tmmNFxi9bVow7JzoPHlGgDld6S4o_3D", "preview": "https://www.surveymonkey.com/r/Preview/?sm=CJF1TcWP7MthjVWkHhiX8ggWVFe484BBhGYkoi2XqDCTB9FcR1nlBSJ_2FeL47hNDV"}, "emitted_at": 1681237939742} +{"stream": "surveys", "data": {"title": "i2bm4lqt5hxv614n4jcl0guxt5ehgf", "nickname": "ti241ke4qo1i8iyqgpo0u6b2", "language": "de", "folder_id": "0", "category": "", "question_count": 2, "page_count": 3, "response_count": 20, "date_created": "2021-06-09T21:07:00", "date_modified": "2021-06-10T11:04:00", "id": "307784863", "buttons_text": {"next_button": "Nex >>>>>", "prev_button": "Nix <<<<<", "done_button": "Nax_Don_Gon!", "exit_button": ""}, "is_owner": true, "footer": true, "theme_id": "4510354", "custom_variables": {}, "href": "https://api.surveymonkey.com/v3/surveys/307784863", "analyze_url": "https://www.surveymonkey.com/analyze/moGgts_2Bl1LYlJ1mbVw6XGwAs0GsZ1qsocisThgUFPk0_3D", "edit_url": "https://www.surveymonkey.com/create/?sm=moGgts_2Bl1LYlJ1mbVw6XGwAs0GsZ1qsocisThgUFPk0_3D", "collect_url": "https://www.surveymonkey.com/collect/list?sm=moGgts_2Bl1LYlJ1mbVw6XGwAs0GsZ1qsocisThgUFPk0_3D", "summary_url": "https://www.surveymonkey.com/summary/moGgts_2Bl1LYlJ1mbVw6XGwAs0GsZ1qsocisThgUFPk0_3D", "preview": "https://www.surveymonkey.com/r/Preview/?sm=kSWrVa29zWxvAB20ibAMkgPUDRBw_2B_2BTV0eX3oRPIEDNdxc2vxtOGJkQUGITIEart"}, "emitted_at": 1681237940944} +{"stream": "surveys", "data": {"title": "j057iyqgxlotswo070", "nickname": "wxuyqq4cgmfo69ik778r", "language": "ru", "folder_id": "0", "category": "", "question_count": 6, "page_count": 3, "response_count": 20, "date_created": "2021-06-09T21:07:00", "date_modified": "2021-06-10T11:05:00", "id": "307784846", "buttons_text": {"next_button": "Nex >>>>>", "prev_button": "Nix <<<<<", "done_button": "Nax_Don_Gon!", "exit_button": ""}, "is_owner": true, "footer": true, "theme_id": "4510354", "custom_variables": {}, "href": "https://api.surveymonkey.com/v3/surveys/307784846", "analyze_url": "https://www.surveymonkey.com/analyze/moGgts_2Bl1LYlJ1mbVw6XG0D0cevwMQIvVNwWzg_2Bmm4o_3D", "edit_url": "https://www.surveymonkey.com/create/?sm=moGgts_2Bl1LYlJ1mbVw6XG0D0cevwMQIvVNwWzg_2Bmm4o_3D", "collect_url": "https://www.surveymonkey.com/collect/list?sm=moGgts_2Bl1LYlJ1mbVw6XG0D0cevwMQIvVNwWzg_2Bmm4o_3D", "summary_url": "https://www.surveymonkey.com/summary/moGgts_2Bl1LYlJ1mbVw6XG0D0cevwMQIvVNwWzg_2Bmm4o_3D", "preview": "https://www.surveymonkey.com/r/Preview/?sm=c5YOr2YH8sSXNlr7K0Tsuhs54aXml2seWFuXS8MIqk7n5MinBfQ7OjzW_2BtjWV1Cv"}, "emitted_at": 1681237942123} +{"stream": "surveys", "data": {"title": "u7r02s47jr", "nickname": "ye7fubxhua91ce0fxm", "language": "ru", "folder_id": "0", "category": "", "question_count": 3, "page_count": 3, "response_count": 20, "date_created": "2021-06-09T21:07:00", "date_modified": "2021-06-10T11:05:00", "id": "307784856", "buttons_text": {"next_button": "Nex >>>>>", "prev_button": "Nix <<<<<", "done_button": "Nax_Don_Gon!", "exit_button": ""}, "is_owner": true, "footer": true, "theme_id": "4510354", "custom_variables": {}, "href": "https://api.surveymonkey.com/v3/surveys/307784856", "analyze_url": "https://www.surveymonkey.com/analyze/moGgts_2Bl1LYlJ1mbVw6XG6cfdBSOknoT0fzVp7iTUO4_3D", "edit_url": "https://www.surveymonkey.com/create/?sm=moGgts_2Bl1LYlJ1mbVw6XG6cfdBSOknoT0fzVp7iTUO4_3D", "collect_url": "https://www.surveymonkey.com/collect/list?sm=moGgts_2Bl1LYlJ1mbVw6XG6cfdBSOknoT0fzVp7iTUO4_3D", "summary_url": "https://www.surveymonkey.com/summary/moGgts_2Bl1LYlJ1mbVw6XG6cfdBSOknoT0fzVp7iTUO4_3D", "preview": "https://www.surveymonkey.com/r/Preview/?sm=hW7YBNPL4euOVIMWVdvchE0xWtfXGoQrT7wUyFAtDel65HbgmAwoV7JJRkkkFmhn"}, "emitted_at": 1681237943258} +{"stream": "surveys", "data": {"title": "igpfp2yfsw90df6nxbsb49v", "nickname": "h23gl22ulmfsyt4q7xt", "language": "ru", "folder_id": "0", "category": "", "question_count": 10, "page_count": 3, "response_count": 20, "date_created": "2021-06-09T21:19:00", "date_modified": "2021-06-10T11:06:00", "id": "307785388", "buttons_text": {"next_button": "Nex >>>>>", "prev_button": "Nix <<<<<", "done_button": "Nax_Don_Gon!", "exit_button": ""}, "is_owner": true, "footer": true, "theme_id": "4510354", "custom_variables": {}, "href": "https://api.surveymonkey.com/v3/surveys/307785388", "analyze_url": "https://www.surveymonkey.com/analyze/5QHdVgvFd_2Bn4fvmj_2F1aNtwM9q4oP_2B3VqXy_2BeJTiumoQ_3D", "edit_url": "https://www.surveymonkey.com/create/?sm=5QHdVgvFd_2Bn4fvmj_2F1aNtwM9q4oP_2B3VqXy_2BeJTiumoQ_3D", "collect_url": "https://www.surveymonkey.com/collect/list?sm=5QHdVgvFd_2Bn4fvmj_2F1aNtwM9q4oP_2B3VqXy_2BeJTiumoQ_3D", "summary_url": "https://www.surveymonkey.com/summary/5QHdVgvFd_2Bn4fvmj_2F1aNtwM9q4oP_2B3VqXy_2BeJTiumoQ_3D", "preview": "https://www.surveymonkey.com/r/Preview/?sm=khUJQv9z4_2FXXzGUox57WEUPwppIr8YqRqVru77WpakX1HW8hHMmGXZiDGslFZym6"}, "emitted_at": 1681237944338} +{"stream": "surveys", "data": {"title": "b9jo5h23l7pa", "nickname": "qhs5vg2qi0o4arsjiwy2ay00n82n", "language": "ru", "folder_id": "0", "category": "", "question_count": 10, "page_count": 3, "response_count": 20, "date_created": "2021-06-09T21:20:00", "date_modified": "2021-06-10T11:07:00", "id": "307785415", "buttons_text": {"next_button": "Nex >>>>>", "prev_button": "Nix <<<<<", "done_button": "Nax_Don_Gon!", "exit_button": ""}, "is_owner": true, "footer": true, "theme_id": "4510354", "custom_variables": {}, "href": "https://api.surveymonkey.com/v3/surveys/307785415", "analyze_url": "https://www.surveymonkey.com/analyze/BPAkhAawaMN8C17tmmNFxjZ0KOiJJ3FCQU4krShVQhg_3D", "edit_url": "https://www.surveymonkey.com/create/?sm=BPAkhAawaMN8C17tmmNFxjZ0KOiJJ3FCQU4krShVQhg_3D", "collect_url": "https://www.surveymonkey.com/collect/list?sm=BPAkhAawaMN8C17tmmNFxjZ0KOiJJ3FCQU4krShVQhg_3D", "summary_url": "https://www.surveymonkey.com/summary/BPAkhAawaMN8C17tmmNFxjZ0KOiJJ3FCQU4krShVQhg_3D", "preview": "https://www.surveymonkey.com/r/Preview/?sm=YVdtL_2BP5oiGTrfksyofvENkBr7v87Xfh8hbcJr8rbqgesWvwJjz5N1F7pCSRcDoy"}, "emitted_at": 1681237945500} +{"stream": "surveys", "data": {"title": "jjj", "nickname": "", "language": "en", "folder_id": "0", "category": "", "question_count": 0, "page_count": 1, "response_count": 0, "date_created": "2023-01-17T09:17:00", "date_modified": "2023-01-17T09:17:00", "id": "510388524", "buttons_text": {"next_button": "Next", "prev_button": "Prev", "done_button": "Done", "exit_button": ""}, "is_owner": true, "footer": true, "theme_id": "10292568", "custom_variables": {}, "href": "https://api.surveymonkey.com/v3/surveys/510388524", "analyze_url": "https://www.surveymonkey.com/analyze/VXMmVNBbmOp9KTSvXdhjIr3FHnqleAX32lr9MLBIOE0_3D", "edit_url": "https://www.surveymonkey.com/create/?sm=VXMmVNBbmOp9KTSvXdhjIr3FHnqleAX32lr9MLBIOE0_3D", "collect_url": "https://www.surveymonkey.com/collect/list?sm=VXMmVNBbmOp9KTSvXdhjIr3FHnqleAX32lr9MLBIOE0_3D", "summary_url": "https://www.surveymonkey.com/summary/VXMmVNBbmOp9KTSvXdhjIr3FHnqleAX32lr9MLBIOE0_3D", "preview": "https://www.surveymonkey.com/r/Preview/?sm=TPlNncbuCs17cvxwjuS74VC03_2FOcqpP_2F03m2gerTSI_2FQvLWoY2yn_2FWxLDmxYOp5L"}, "emitted_at": 1681237946415} +{"stream": "survey_responses", "data": {"id": "12706126725", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "124.123.178.184", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405437100", "survey_id": "306079584", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=hNu3QJYf07WiUPOwxCYcARURFGB3ruOrs9slcTHVhmhgDhoNJ0k7w3jCvo0nLM40", "analyze_url": "https://www.surveymonkey.com/analyze/browse/5jPPwKLnlqevaUQom_2BgYAWJWlrKNA2ZFTOYrMBrqW2c_3D?respondent_id=12706126725", "total_time": 62, "date_modified": "2021-06-01T17:40:54+00:00", "date_created": "2021-06-01T17:39:51+00:00", "href": "https://api.surveymonkey.com/v3/surveys/306079584/responses/12706126725", "pages": [{"id": "165250506", "questions": [{"id": "652286715", "answers": [{"choice_id": "4285525064"}]}, {"id": "652286721", "answers": [{"choice_id": "4285525084"}]}, {"id": "652286716", "answers": [{"choice_id": "4285525070"}]}, {"id": "652286718", "answers": [{"choice_id": "4285525079"}]}, {"id": "652286722", "answers": [{"choice_id": "4285525089"}]}, {"id": "652286717", "answers": [{"choice_id": "4285525074"}]}, {"id": "652286723", "answers": [{"choice_id": "4285525095"}]}, {"id": "652286714", "answers": [{"choice_id": "4285525058", "row_id": "4285525061", "choice_metadata": {"weight": "0"}}]}]}]}, "emitted_at": 1681238097211} +{"stream": "survey_responses", "data": {"id": "12706152767", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "37.229.17.15", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405437100", "survey_id": "306079584", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=YIZz5DiXEDES47ARxTbRPzAA9ZOwCjcN_2FDSFTYGWgCVPQCo_2B3EeLirGlON5_2BjrX5", "analyze_url": "https://www.surveymonkey.com/analyze/browse/5jPPwKLnlqevaUQom_2BgYAWJWlrKNA2ZFTOYrMBrqW2c_3D?respondent_id=12706152767", "total_time": 55, "date_modified": "2021-06-01T17:50:03+00:00", "date_created": "2021-06-01T17:49:08+00:00", "href": "https://api.surveymonkey.com/v3/surveys/306079584/responses/12706152767", "pages": [{"id": "165250506", "questions": [{"id": "652286726", "answers": [{"tag_data": [], "text": "fuck this"}]}, {"id": "652286715", "answers": [{"choice_id": "4285525067"}]}, {"id": "652286721", "answers": [{"choice_id": "4285525087"}]}, {"id": "652286716", "answers": [{"choice_id": "4285525072"}]}, {"id": "652286718", "answers": [{"choice_id": "4285525081"}]}, {"id": "652286722", "answers": [{"choice_id": "4285525091"}]}, {"id": "652286717", "answers": [{"choice_id": "4285525077"}]}, {"id": "652286723", "answers": [{"choice_id": "4285525097"}]}, {"id": "652286714", "answers": [{"choice_id": "4285525052", "row_id": "4285525061", "choice_metadata": {"weight": "-100"}}]}, {"id": "652286719", "answers": [{"tag_data": [], "text": "waste of time"}]}]}]}, "emitted_at": 1681238097211} +{"stream": "survey_responses", "data": {"id": "12706159691", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "157.48.231.67", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405437100", "survey_id": "306079584", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=P4z1eeLex6p2OQEYYXRJKBxPyHk6ljkOskXPds2olEToYrU_2FwTZWAyllEtgJRyQL", "analyze_url": "https://www.surveymonkey.com/analyze/browse/5jPPwKLnlqevaUQom_2BgYAWJWlrKNA2ZFTOYrMBrqW2c_3D?respondent_id=12706159691", "total_time": 104, "date_modified": "2021-06-01T17:52:27+00:00", "date_created": "2021-06-01T17:50:43+00:00", "href": "https://api.surveymonkey.com/v3/surveys/306079584/responses/12706159691", "pages": [{"id": "165250506", "questions": [{"id": "652286724", "answers": [{"row_id": "4285525098", "x": "78.63", "y": "13.19"}]}, {"id": "652286725", "answers": [{"row_id": "4285525102", "x": "41.94", "y": "50.16"}]}, {"id": "652286715", "answers": [{"choice_id": "4285525065"}]}, {"id": "652286721", "answers": [{"choice_id": "4285525086"}]}, {"id": "652286716", "answers": [{"choice_id": "4285525071"}]}, {"id": "652286718", "answers": [{"choice_id": "4285525079"}]}, {"id": "652286722", "answers": [{"choice_id": "4285525090"}]}, {"id": "652286717", "answers": [{"choice_id": "4285525076"}]}, {"id": "652286723", "answers": [{"choice_id": "4285525095"}]}, {"id": "652286714", "answers": [{"choice_id": "4285525055", "row_id": "4285525061", "choice_metadata": {"weight": "-100"}}]}]}]}, "emitted_at": 1681238097211} +{"stream": "survey_responses", "data": {"id": "12706182356", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "76.14.176.236", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405437100", "survey_id": "306079584", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=oRBufZrmuNVZW5ou_2B4ZICuFqW6p3uYPmpjTb5IJ5Zf_2BH4FPoHKfnz_2BSC_2FR_2FpxWNq", "analyze_url": "https://www.surveymonkey.com/analyze/browse/5jPPwKLnlqevaUQom_2BgYAWJWlrKNA2ZFTOYrMBrqW2c_3D?respondent_id=12706182356", "total_time": 36, "date_modified": "2021-06-01T18:00:12+00:00", "date_created": "2021-06-01T17:59:35+00:00", "href": "https://api.surveymonkey.com/v3/surveys/306079584/responses/12706182356", "pages": [{"id": "165250506", "questions": [{"id": "652286724", "answers": [{"row_id": "4285525098", "x": "58.66", "y": "54.49"}]}, {"id": "652286725", "answers": [{"row_id": "4285525102", "x": "56.64", "y": "71.09"}]}, {"id": "652286715", "answers": [{"choice_id": "4285525063"}]}, {"id": "652286721", "answers": [{"choice_id": "4285525085"}]}, {"id": "652286716", "answers": [{"choice_id": "4285525072"}]}, {"id": "652286718", "answers": [{"choice_id": "4285525082"}]}, {"id": "652286722", "answers": [{"choice_id": "4285525092"}]}, {"id": "652286717", "answers": [{"choice_id": "4285525077"}]}, {"id": "652286723", "answers": [{"choice_id": "4285525097"}]}, {"id": "652286714", "answers": [{"choice_id": "4285525060", "row_id": "4285525061", "choice_metadata": {"weight": "100"}}]}, {"id": "652286719", "answers": [{"tag_data": [], "text": "gekkiadsuigasdf;oij sefhello \ud83c\udf50\ud83c\udf50\ud83c\udf50\ud83c\udf50\ud83c\udf50"}]}, {"id": "652286720", "answers": [{"tag_data": [], "text": "good"}]}]}]}, "emitted_at": 1681238097212} +{"stream": "survey_responses", "data": {"id": "12706201784", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "49.37.158.6", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405437100", "survey_id": "306079584", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=MD0lXMX2bJm93XLiSKWuW2p52_2BwlWpayf88naadbuO5wITz0TijA3kwSis907xu1", "analyze_url": "https://www.surveymonkey.com/analyze/browse/5jPPwKLnlqevaUQom_2BgYAWJWlrKNA2ZFTOYrMBrqW2c_3D?respondent_id=12706201784", "total_time": 183, "date_modified": "2021-06-01T18:06:11+00:00", "date_created": "2021-06-01T18:03:07+00:00", "href": "https://api.surveymonkey.com/v3/surveys/306079584/responses/12706201784", "pages": [{"id": "165250506", "questions": [{"id": "652286724", "answers": [{"row_id": "4285525098", "x": "87.90", "y": "67.29"}]}, {"id": "652286725", "answers": [{"row_id": "4285525102", "x": "7.66", "y": "92.21"}]}, {"id": "652286726", "answers": [{"tag_data": [], "text": "Colour"}]}, {"id": "652286715", "answers": [{"choice_id": "4285525064"}]}, {"id": "652286721", "answers": [{"choice_id": "4285525085"}]}, {"id": "652286716", "answers": [{"choice_id": "4285525070"}]}, {"id": "652286718", "answers": [{"choice_id": "4285525079"}]}, {"id": "652286722", "answers": [{"choice_id": "4285525090"}]}, {"id": "652286717", "answers": [{"choice_id": "4285525076"}]}, {"id": "652286723", "answers": [{"choice_id": "4285525097"}]}, {"id": "652286714", "answers": [{"choice_id": "4285525055", "row_id": "4285525061", "choice_metadata": {"weight": "-100"}}]}, {"id": "652286719", "answers": [{"tag_data": [], "text": "Nothing"}]}, {"id": "652286720", "answers": [{"tag_data": [], "text": "I don't know"}]}]}]}, "emitted_at": 1681238097212} +{"stream": "survey_responses", "data": {"id": "12706203862", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "49.205.239.133", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405437100", "survey_id": "306079584", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=sNkTdEY_2FEibixIxcUhotq6hQ3muFVlLkg0cE531VDB5Ya2U21pwazZRwwSXFqqtK", "analyze_url": "https://www.surveymonkey.com/analyze/browse/5jPPwKLnlqevaUQom_2BgYAWJWlrKNA2ZFTOYrMBrqW2c_3D?respondent_id=12706203862", "total_time": 114, "date_modified": "2021-06-01T18:06:49+00:00", "date_created": "2021-06-01T18:04:54+00:00", "href": "https://api.surveymonkey.com/v3/surveys/306079584/responses/12706203862", "pages": [{"id": "165250506", "questions": [{"id": "652286724", "answers": [{"row_id": "4285525098", "x": "40.32", "y": "93.35"}]}, {"id": "652286725", "answers": [{"row_id": "4285525102", "x": "37.10", "y": "66.67"}]}, {"id": "652286726", "answers": [{"tag_data": [], "text": "because pets should not be tied,they should have their own freedom to move"}]}, {"id": "652286715", "answers": [{"choice_id": "4285525065"}]}, {"id": "652286721", "answers": [{"choice_id": "4285525085"}]}, {"id": "652286716", "answers": [{"choice_id": "4285525071"}]}, {"id": "652286718", "answers": [{"choice_id": "4285525080"}]}, {"id": "652286722", "answers": [{"choice_id": "4285525090"}]}, {"id": "652286717", "answers": [{"choice_id": "4285525076"}]}, {"id": "652286723", "answers": [{"choice_id": "4285525096"}]}, {"id": "652286714", "answers": [{"choice_id": "4285525055", "row_id": "4285525061", "choice_metadata": {"weight": "-100"}}]}]}]}, "emitted_at": 1681238097213} +{"stream": "survey_responses", "data": {"id": "12706264166", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "27.6.69.132", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405437100", "survey_id": "306079584", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=OboVhBA1nCZ4ejfYCmJ6WDu5SxhIUnnNn2dCz_2BTqxksFnjOSpy88MtS4B5Wbpk_2BW", "analyze_url": "https://www.surveymonkey.com/analyze/browse/5jPPwKLnlqevaUQom_2BgYAWJWlrKNA2ZFTOYrMBrqW2c_3D?respondent_id=12706264166", "total_time": 309, "date_modified": "2021-06-01T18:27:03+00:00", "date_created": "2021-06-01T18:21:54+00:00", "href": "https://api.surveymonkey.com/v3/surveys/306079584/responses/12706264166", "pages": [{"id": "165250506", "questions": [{"id": "652286724", "answers": [{"row_id": "4285525098", "x": "43.59", "y": "28.51"}]}, {"id": "652286725", "answers": [{"row_id": "4285525102", "x": "41.31", "y": "91.08"}]}, {"id": "652286726", "answers": [{"tag_data": [], "text": "\ud83e\udd14"}]}, {"id": "652286715", "answers": [{"choice_id": "4285525065"}]}, {"id": "652286721", "answers": [{"choice_id": "4285525085"}]}, {"id": "652286716", "answers": [{"choice_id": "4285525070"}]}, {"id": "652286718", "answers": [{"choice_id": "4285525081"}]}, {"id": "652286722", "answers": [{"choice_id": "4285525091"}]}, {"id": "652286717", "answers": [{"choice_id": "4285525076"}]}, {"id": "652286723", "answers": [{"choice_id": "4285525096"}]}, {"id": "652286714", "answers": [{"choice_id": "4285525058", "row_id": "4285525061", "choice_metadata": {"weight": "0"}}]}, {"id": "652286719", "answers": [{"tag_data": [], "text": "\ud83e\uddb4"}]}, {"id": "652286720", "answers": [{"tag_data": [], "text": "\ud83d\udcaa"}]}]}]}, "emitted_at": 1681238097213} +{"stream": "survey_responses", "data": {"id": "12706274940", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "49.205.116.166", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405437100", "survey_id": "306079584", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=D1IcNXq6BKOBmkySTfHcUfHuH3_2Fa0aniMPQEG23UrQ16iSsyx8ye2hPRQt3C61Jd", "analyze_url": "https://www.surveymonkey.com/analyze/browse/5jPPwKLnlqevaUQom_2BgYAWJWlrKNA2ZFTOYrMBrqW2c_3D?respondent_id=12706274940", "total_time": 105, "date_modified": "2021-06-01T18:30:56+00:00", "date_created": "2021-06-01T18:29:10+00:00", "href": "https://api.surveymonkey.com/v3/surveys/306079584/responses/12706274940", "pages": [{"id": "165250506", "questions": [{"id": "652286724", "answers": [{"row_id": "4285525098", "x": "7.12", "y": "89.86"}]}, {"id": "652286725", "answers": [{"row_id": "4285525102", "x": "87.90", "y": "9.02"}]}, {"id": "652286726", "answers": [{"tag_data": [], "text": "Didn't like the product"}]}, {"id": "652286715", "answers": [{"choice_id": "4285525067"}]}, {"id": "652286721", "answers": [{"choice_id": "4285525087"}]}, {"id": "652286716", "answers": [{"choice_id": "4285525072"}]}, {"id": "652286718", "answers": [{"choice_id": "4285525081"}]}, {"id": "652286722", "answers": [{"choice_id": "4285525092"}]}, {"id": "652286717", "answers": [{"choice_id": "4285525077"}]}, {"id": "652286723", "answers": [{"choice_id": "4285525097"}]}, {"id": "652286714", "answers": [{"choice_id": "4285525050", "row_id": "4285525061", "choice_metadata": {"weight": "-100"}}]}, {"id": "652286719", "answers": [{"tag_data": [], "text": "Nothing"}]}, {"id": "652286720", "answers": [{"tag_data": [], "text": "Better don't try to work on it"}]}]}]}, "emitted_at": 1681238097214} +{"stream": "survey_responses", "data": {"id": "12706353147", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "176.37.67.33", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405437100", "survey_id": "306079584", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=qwY5AKZSqBd7DfoZDGr4x_2FJr28RhtoeaQ7_2F6VBS1G3yK_2FPH86sPCcFs1zACVlbMO", "analyze_url": "https://www.surveymonkey.com/analyze/browse/5jPPwKLnlqevaUQom_2BgYAWJWlrKNA2ZFTOYrMBrqW2c_3D?respondent_id=12706353147", "total_time": 162, "date_modified": "2021-06-01T18:58:44+00:00", "date_created": "2021-06-01T18:56:02+00:00", "href": "https://api.surveymonkey.com/v3/surveys/306079584/responses/12706353147", "pages": [{"id": "165250506", "questions": [{"id": "652286724", "answers": [{"row_id": "4285525098", "x": "78.00", "y": "6.84"}]}, {"id": "652286725", "answers": [{"row_id": "4285525102", "x": "77.62", "y": "8.50"}]}, {"id": "652286726", "answers": [{"tag_data": [], "text": "I like logo."}]}, {"id": "652286715", "answers": [{"choice_id": "4285525065"}]}, {"id": "652286721", "answers": [{"choice_id": "4285525085"}]}, {"id": "652286716", "answers": [{"choice_id": "4285525071"}]}, {"id": "652286718", "answers": [{"choice_id": "4285525081"}]}, {"id": "652286722", "answers": [{"choice_id": "4285525090"}]}, {"id": "652286717", "answers": [{"choice_id": "4285525076"}]}, {"id": "652286723", "answers": [{"choice_id": "4285525096"}]}, {"id": "652286714", "answers": [{"choice_id": "4285525056", "row_id": "4285525061", "choice_metadata": {"weight": "-100"}}]}, {"id": "652286719", "answers": [{"tag_data": [], "text": "Logo."}]}, {"id": "652286720", "answers": [{"tag_data": [], "text": "Nothing."}]}]}]}, "emitted_at": 1681238097215} +{"stream": "survey_responses", "data": {"id": "12707255568", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "157.48.145.117", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405437100", "survey_id": "306079584", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=3XYG_2F55lVJgeQ0_2FWG3xyRxOF5gCKFR0p1HPkdv1iiMZ1h5MIYxNR12enFBgK9TCS", "analyze_url": "https://www.surveymonkey.com/analyze/browse/5jPPwKLnlqevaUQom_2BgYAWJWlrKNA2ZFTOYrMBrqW2c_3D?respondent_id=12707255568", "total_time": 263, "date_modified": "2021-06-02T01:13:33+00:00", "date_created": "2021-06-02T01:09:10+00:00", "href": "https://api.surveymonkey.com/v3/surveys/306079584/responses/12707255568", "pages": [{"id": "165250506", "questions": [{"id": "652286724", "answers": [{"row_id": "4285525098", "x": "38.17", "y": "40.98"}]}, {"id": "652286725", "answers": [{"row_id": "4285525102", "x": "42.90", "y": "93.75"}]}, {"id": "652286726", "answers": [{"tag_data": [], "text": "I love puppies but hate heart symbol"}]}, {"id": "652286715", "answers": [{"choice_id": "4285525063"}]}, {"id": "652286721", "answers": [{"choice_id": "4285525084"}]}, {"id": "652286716", "answers": [{"choice_id": "4285525070"}]}, {"id": "652286718", "answers": [{"choice_id": "4285525080"}]}, {"id": "652286722", "answers": [{"choice_id": "4285525089"}]}, {"id": "652286717", "answers": [{"choice_id": "4285525075"}]}, {"id": "652286723", "answers": [{"choice_id": "4285525095"}]}, {"id": "652286714", "answers": [{"choice_id": "4285525056", "row_id": "4285525061", "choice_metadata": {"weight": "-100"}}]}, {"id": "652286719", "answers": [{"tag_data": [], "text": "It's for animals"}]}, {"id": "652286720", "answers": [{"tag_data": [], "text": "Approach to customer"}]}]}]}, "emitted_at": 1681238097216} +{"stream": "survey_responses", "data": {"id": "12707566461", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "106.195.73.137", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405437100", "survey_id": "306079584", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=FskCSEofrdcabC7MVfRNtzeiZ4C4kiwx_2FpBdpRfIsd5SgVGi4N9znXMS9exRXf27", "analyze_url": "https://www.surveymonkey.com/analyze/browse/5jPPwKLnlqevaUQom_2BgYAWJWlrKNA2ZFTOYrMBrqW2c_3D?respondent_id=12707566461", "total_time": 233, "date_modified": "2021-06-02T04:06:48+00:00", "date_created": "2021-06-02T04:02:54+00:00", "href": "https://api.surveymonkey.com/v3/surveys/306079584/responses/12707566461", "pages": [{"id": "165250506", "questions": [{"id": "652286724", "answers": [{"row_id": "4285525098", "x": "32.67", "y": "32.51"}]}, {"id": "652286725", "answers": [{"row_id": "4285525102", "x": "89.00", "y": "55.34"}]}, {"id": "652286715", "answers": [{"choice_id": "4285525065"}]}, {"id": "652286721", "answers": [{"choice_id": "4285525084"}]}, {"id": "652286716", "answers": [{"choice_id": "4285525069"}]}, {"id": "652286718", "answers": [{"choice_id": "4285525080"}]}, {"id": "652286722", "answers": [{"choice_id": "4285525090"}]}, {"id": "652286717", "answers": [{"choice_id": "4285525075"}]}, {"id": "652286723", "answers": [{"choice_id": "4285525096"}]}, {"id": "652286714", "answers": [{"choice_id": "4285525058", "row_id": "4285525061", "choice_metadata": {"weight": "0"}}]}]}]}, "emitted_at": 1681238097216} +{"stream": "survey_responses", "data": {"id": "12709748835", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.196.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405437100", "survey_id": "306079584", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=x5BdjfYWF_2B2dRs9qPRcHJ_2BqMN8Dpfn_2FfhKhtD7G8W4_2BX9ECDWh9wAXjYd4mxXk_2F_2B", "analyze_url": "https://www.surveymonkey.com/analyze/browse/5jPPwKLnlqevaUQom_2BgYAWJWlrKNA2ZFTOYrMBrqW2c_3D?respondent_id=12709748835", "total_time": 127, "date_modified": "2021-06-02T18:14:19+00:00", "date_created": "2021-06-02T18:12:12+00:00", "href": "https://api.surveymonkey.com/v3/surveys/306079584/responses/12709748835", "pages": [{"id": "165250506", "questions": [{"id": "652286724", "answers": [{"row_id": "4285525098", "x": "41.85", "y": "55.96"}]}, {"id": "652286725", "answers": [{"row_id": "4285525102", "x": "31.35", "y": "35.64"}]}, {"id": "652286726", "answers": [{"tag_data": [], "text": "because"}]}, {"id": "652286715", "answers": [{"choice_id": "4285525063"}]}, {"id": "652286721", "answers": [{"choice_id": "4285525084"}]}, {"id": "652286716", "answers": [{"choice_id": "4285525069"}]}, {"id": "652286718", "answers": [{"choice_id": "4285525079"}]}, {"id": "652286722", "answers": [{"choice_id": "4285525089"}]}, {"id": "652286717", "answers": [{"choice_id": "4285525074"}]}, {"id": "652286723", "answers": [{"choice_id": "4285525095"}]}, {"id": "652286714", "answers": [{"choice_id": "4285525060", "row_id": "4285525061", "choice_metadata": {"weight": "100"}}]}, {"id": "652286719", "answers": [{"tag_data": [], "text": "u"}]}, {"id": "652286720", "answers": [{"tag_data": [], "text": "f"}]}]}]}, "emitted_at": 1681238097217} +{"stream": "survey_responses", "data": {"id": "12706107193", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "49.37.150.53", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405437100", "survey_id": "306079584", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=7vMzRy38ln3J_2FJiU8YD1uve9yI6cAQIQ_2FuVxRipS_2FyB57w9vo9xpgShOuFWVcoI2", "analyze_url": "https://www.surveymonkey.com/analyze/browse/5jPPwKLnlqevaUQom_2BgYAWJWlrKNA2ZFTOYrMBrqW2c_3D?respondent_id=12706107193", "total_time": 607550, "date_modified": "2021-06-08T18:17:17+00:00", "date_created": "2021-06-01T17:31:26+00:00", "href": "https://api.surveymonkey.com/v3/surveys/306079584/responses/12706107193", "pages": [{"id": "165250506", "questions": [{"id": "652286724", "answers": [{"row_id": "4285525098", "x": "77.56", "y": "6.01"}]}, {"id": "652286725", "answers": [{"row_id": "4285525102", "x": "15.71", "y": "8.23"}]}, {"id": "652286726", "answers": [{"tag_data": [], "text": "It seems in that way"}]}, {"id": "652286715", "answers": [{"choice_id": "4285525065"}]}, {"id": "652286721", "answers": [{"choice_id": "4285525085"}]}, {"id": "652286716", "answers": [{"choice_id": "4285525071"}]}, {"id": "652286718", "answers": [{"choice_id": "4285525081"}]}, {"id": "652286722", "answers": [{"choice_id": "4285525090"}]}, {"id": "652286717", "answers": [{"choice_id": "4285525075"}]}, {"id": "652286723", "answers": [{"choice_id": "4285525096"}]}, {"id": "652286714", "answers": [{"choice_id": "4285525050", "row_id": "4285525061", "choice_metadata": {"weight": "-100"}}]}, {"id": "652286719", "answers": [{"tag_data": [], "text": "Nothing much"}]}, {"id": "652286720", "answers": [{"tag_data": [], "text": "Will include Tagline"}]}]}]}, "emitted_at": 1681238097217} +{"stream": "survey_responses", "data": {"id": "12731040927", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843657", "survey_id": "307785429", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=YORvkBiLvNm2647vGYxs1GGGoUjDrz_2FRfIWw1i07UtykH_2BBJHDTB3ujkOPfyAxqP", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxoENnL6uEj_2FlAo5YSBwashU_3D?respondent_id=12731040927", "total_time": 31, "date_modified": "2021-06-10T08:46:53+00:00", "date_created": "2021-06-10T08:46:22+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785429/responses/12731040927", "pages": [{"id": "168831413", "questions": []}, {"id": "168831415", "questions": [{"id": "667461858", "answers": [{"choice_id": "4385175368"}]}, {"id": "667461861", "answers": [{"choice_id": "4385175382"}]}, {"id": "667461876", "answers": [{"choice_id": "4385175448"}]}, {"id": "667461897", "answers": [{"choice_id": "4385175533"}]}, {"id": "667461902", "answers": [{"choice_id": "4385175563"}]}]}, {"id": "168831437", "questions": [{"id": "667461933", "answers": [{"choice_id": "4385175735"}]}, {"id": "667461934", "answers": [{"choice_id": "4385175737"}]}, {"id": "667461936", "answers": [{"choice_id": "4385175742"}]}, {"id": "667461937", "answers": [{"choice_id": "4385175749"}]}, {"id": "667461986", "answers": [{"choice_id": "4385175881"}]}]}]}, "emitted_at": 1681238098508} +{"stream": "survey_responses", "data": {"id": "12731055204", "recipient_id": "", "collection_mode": "default", "response_status": "partial", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": ["168831413", "168831415", "168831437"], "collector_id": "405843657", "survey_id": "307785429", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=tcbSSptg67E5MmPiY_2BCTC0GEk5rcm_2FHHcASKwxBGLOX_2BBByesO_2Fh848B_2FqaaVF8d", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxoENnL6uEj_2FlAo5YSBwashU_3D?respondent_id=12731055204", "total_time": 15, "date_modified": "2021-06-10T08:54:22+00:00", "date_created": "2021-06-10T08:54:07+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785429/responses/12731055204", "pages": [{"id": "168831413", "questions": []}, {"id": "168831415", "questions": [{"id": "667461858", "answers": [{"choice_id": "4385175369"}]}, {"id": "667461861", "answers": [{"choice_id": "4385175382"}]}, {"id": "667461876", "answers": [{"choice_id": "4385175447"}]}, {"id": "667461897", "answers": [{"choice_id": "4385175534"}]}, {"id": "667461902", "answers": [{"choice_id": "4385175563"}]}]}, {"id": "168831437", "questions": []}]}, "emitted_at": 1681238098508} +{"stream": "survey_responses", "data": {"id": "12731069666", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843657", "survey_id": "307785429", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=tHWbA6E0Q6UEylVBreS0XaGKh3GcjDQu_2FBytp_2F_2FcCSkYTgRKkVt3jyyhUFoh6T_2Bs", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxoENnL6uEj_2FlAo5YSBwashU_3D?respondent_id=12731069666", "total_time": 33, "date_modified": "2021-06-10T09:02:19+00:00", "date_created": "2021-06-10T09:01:46+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785429/responses/12731069666", "pages": [{"id": "168831413", "questions": []}, {"id": "168831415", "questions": [{"id": "667461858", "answers": [{"choice_id": "4385175366"}]}, {"id": "667461861", "answers": [{"choice_id": "4385175380"}]}, {"id": "667461876", "answers": [{"choice_id": "4385175448"}]}, {"id": "667461897", "answers": [{"choice_id": "4385175534"}]}, {"id": "667461902", "answers": [{"choice_id": "4385175559"}]}]}, {"id": "168831437", "questions": [{"id": "667461933", "answers": [{"choice_id": "4385175733"}]}, {"id": "667461934", "answers": [{"choice_id": "4385175736"}]}, {"id": "667461936", "answers": [{"choice_id": "4385175741"}]}, {"id": "667461937", "answers": [{"choice_id": "4385175752"}]}, {"id": "667461986", "answers": [{"choice_id": "4385175878"}]}]}]}, "emitted_at": 1681238098509} +{"stream": "survey_responses", "data": {"id": "12731085951", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843657", "survey_id": "307785429", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=c_2B3Xk1rn3Lhz9GqaPNSRmjd03YiGx88BQu_2BtAvHiMmp5a0BR68kWLCOfALzBwKH4", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxoENnL6uEj_2FlAo5YSBwashU_3D?respondent_id=12731085951", "total_time": 31, "date_modified": "2021-06-10T09:10:05+00:00", "date_created": "2021-06-10T09:09:34+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785429/responses/12731085951", "pages": [{"id": "168831413", "questions": []}, {"id": "168831415", "questions": [{"id": "667461858", "answers": [{"choice_id": "4385175368"}]}, {"id": "667461861", "answers": [{"choice_id": "4385175382"}]}, {"id": "667461876", "answers": [{"choice_id": "4385175448"}]}, {"id": "667461897", "answers": [{"choice_id": "4385175533"}]}, {"id": "667461902", "answers": [{"choice_id": "4385175564"}]}]}, {"id": "168831437", "questions": [{"id": "667461933", "answers": [{"choice_id": "4385175732"}]}, {"id": "667461934", "answers": [{"choice_id": "4385175737"}]}, {"id": "667461936", "answers": [{"choice_id": "4385175741"}]}, {"id": "667461937", "answers": [{"choice_id": "4385175745"}]}, {"id": "667461986", "answers": [{"choice_id": "4385175880"}]}]}]}, "emitted_at": 1681238098509} +{"stream": "survey_responses", "data": {"id": "12731102076", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843657", "survey_id": "307785429", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=s_2BQLUH6Nb049vqmxYdKTQlIV_2FCXzxmRR5F_2B_2Fe9FaqXRh3H_2FZAFF51mqyI3e8s666", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxoENnL6uEj_2FlAo5YSBwashU_3D?respondent_id=12731102076", "total_time": 32, "date_modified": "2021-06-10T09:17:44+00:00", "date_created": "2021-06-10T09:17:12+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785429/responses/12731102076", "pages": [{"id": "168831413", "questions": []}, {"id": "168831415", "questions": [{"id": "667461858", "answers": [{"choice_id": "4385175369"}]}, {"id": "667461861", "answers": [{"choice_id": "4385175381"}]}, {"id": "667461876", "answers": [{"choice_id": "4385175447"}]}, {"id": "667461897", "answers": [{"choice_id": "4385175535"}]}, {"id": "667461902", "answers": [{"choice_id": "4385175561"}]}]}, {"id": "168831437", "questions": [{"id": "667461933", "answers": [{"choice_id": "4385175735"}]}, {"id": "667461934", "answers": [{"choice_id": "4385175739"}]}, {"id": "667461936", "answers": [{"choice_id": "4385175740"}]}, {"id": "667461937", "answers": [{"choice_id": "4385175745"}]}, {"id": "667461986", "answers": [{"choice_id": "4385175880"}]}]}]}, "emitted_at": 1681238098510} +{"stream": "survey_responses", "data": {"id": "12731118899", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843657", "survey_id": "307785429", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=hRALwRgDjAOTNk8Hpt0wWWn9X3xurqWW9vynXjPkvIvI4Xofu_2FJSgEVwtWK23vLd", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxoENnL6uEj_2FlAo5YSBwashU_3D?respondent_id=12731118899", "total_time": 31, "date_modified": "2021-06-10T09:25:25+00:00", "date_created": "2021-06-10T09:24:53+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785429/responses/12731118899", "pages": [{"id": "168831413", "questions": []}, {"id": "168831415", "questions": [{"id": "667461858", "answers": [{"choice_id": "4385175369"}]}, {"id": "667461861", "answers": [{"choice_id": "4385175382"}]}, {"id": "667461876", "answers": [{"choice_id": "4385175447"}]}, {"id": "667461897", "answers": [{"choice_id": "4385175533"}]}, {"id": "667461902", "answers": [{"choice_id": "4385175559"}]}]}, {"id": "168831437", "questions": [{"id": "667461933", "answers": [{"choice_id": "4385175734"}]}, {"id": "667461934", "answers": [{"choice_id": "4385175737"}]}, {"id": "667461936", "answers": [{"choice_id": "4385175742"}]}, {"id": "667461937", "answers": [{"choice_id": "4385175745"}]}, {"id": "667461986", "answers": [{"choice_id": "4385175878"}]}]}]}, "emitted_at": 1681238098510} +{"stream": "survey_responses", "data": {"id": "12731135865", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843657", "survey_id": "307785429", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=OEPuy4AY_2B47LLaYrOMe90r_2BJdHiKxv12FpoQr0N94GGA0TFN7l7tk5QH14HD_2FaBy", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxoENnL6uEj_2FlAo5YSBwashU_3D?respondent_id=12731135865", "total_time": 31, "date_modified": "2021-06-10T09:33:08+00:00", "date_created": "2021-06-10T09:32:37+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785429/responses/12731135865", "pages": [{"id": "168831413", "questions": []}, {"id": "168831415", "questions": [{"id": "667461858", "answers": [{"choice_id": "4385175368"}]}, {"id": "667461861", "answers": [{"choice_id": "4385175381"}]}, {"id": "667461876", "answers": [{"choice_id": "4385175449"}]}, {"id": "667461897", "answers": [{"choice_id": "4385175535"}]}, {"id": "667461902", "answers": [{"choice_id": "4385175563"}]}]}, {"id": "168831437", "questions": [{"id": "667461933", "answers": [{"choice_id": "4385175735"}]}, {"id": "667461934", "answers": [{"choice_id": "4385175737"}]}, {"id": "667461936", "answers": [{"choice_id": "4385175742"}]}, {"id": "667461937", "answers": [{"choice_id": "4385175748"}]}, {"id": "667461986", "answers": [{"choice_id": "4385175880"}]}]}]}, "emitted_at": 1681238098511} +{"stream": "survey_responses", "data": {"id": "12731153599", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843657", "survey_id": "307785429", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=KPgqZwkF7GLrzwtQWhwpZBCuPbq_2F_2BuXfuUXpCBXX1y_2BwKBvvXi7s1ob9AMVJymCk", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxoENnL6uEj_2FlAo5YSBwashU_3D?respondent_id=12731153599", "total_time": 31, "date_modified": "2021-06-10T09:40:49+00:00", "date_created": "2021-06-10T09:40:18+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785429/responses/12731153599", "pages": [{"id": "168831413", "questions": []}, {"id": "168831415", "questions": [{"id": "667461858", "answers": [{"choice_id": "4385175366"}]}, {"id": "667461861", "answers": [{"choice_id": "4385175382"}]}, {"id": "667461876", "answers": [{"choice_id": "4385175448"}]}, {"id": "667461897", "answers": [{"choice_id": "4385175534"}]}, {"id": "667461902", "answers": [{"choice_id": "4385175561"}]}]}, {"id": "168831437", "questions": [{"id": "667461933", "answers": [{"choice_id": "4385175732"}]}, {"id": "667461934", "answers": [{"choice_id": "4385175737"}]}, {"id": "667461936", "answers": [{"choice_id": "4385175740"}]}, {"id": "667461937", "answers": [{"choice_id": "4385175751"}]}, {"id": "667461986", "answers": [{"choice_id": "4385175880"}]}]}]}, "emitted_at": 1681238098511} +{"stream": "survey_responses", "data": {"id": "12731170943", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843657", "survey_id": "307785429", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=e6QtiM7XZfbHB3Ln1ifDr6Ct8PD0j6Nikh_2BTvBikLVfpeCSzS5WYkg2D_2BDVygAee", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxoENnL6uEj_2FlAo5YSBwashU_3D?respondent_id=12731170943", "total_time": 31, "date_modified": "2021-06-10T09:48:36+00:00", "date_created": "2021-06-10T09:48:04+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785429/responses/12731170943", "pages": [{"id": "168831413", "questions": []}, {"id": "168831415", "questions": [{"id": "667461858", "answers": [{"choice_id": "4385175366"}]}, {"id": "667461861", "answers": [{"choice_id": "4385175382"}]}, {"id": "667461876", "answers": [{"choice_id": "4385175447"}]}, {"id": "667461897", "answers": [{"choice_id": "4385175534"}]}, {"id": "667461902", "answers": [{"choice_id": "4385175563"}]}]}, {"id": "168831437", "questions": [{"id": "667461933", "answers": [{"choice_id": "4385175733"}]}, {"id": "667461934", "answers": [{"choice_id": "4385175736"}]}, {"id": "667461936", "answers": [{"choice_id": "4385175740"}]}, {"id": "667461937", "answers": [{"choice_id": "4385175748"}]}, {"id": "667461986", "answers": [{"choice_id": "4385175879"}]}]}]}, "emitted_at": 1681238098513} +{"stream": "survey_responses", "data": {"id": "12731188992", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843657", "survey_id": "307785429", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=VATG0VEAVLLh8CTsnDoMZ_2FR3ida2C_2FIqVwt3FHGuc0GRu_2BA6Qa9E4Ewd3iEHt5YQ", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxoENnL6uEj_2FlAo5YSBwashU_3D?respondent_id=12731188992", "total_time": 35, "date_modified": "2021-06-10T09:56:51+00:00", "date_created": "2021-06-10T09:56:15+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785429/responses/12731188992", "pages": [{"id": "168831413", "questions": []}, {"id": "168831415", "questions": [{"id": "667461858", "answers": [{"choice_id": "4385175366"}]}, {"id": "667461861", "answers": [{"choice_id": "4385175381"}]}, {"id": "667461876", "answers": [{"choice_id": "4385175447"}]}, {"id": "667461897", "answers": [{"choice_id": "4385175533"}]}, {"id": "667461902", "answers": [{"choice_id": "4385175559"}]}]}, {"id": "168831437", "questions": [{"id": "667461933", "answers": [{"choice_id": "4385175735"}]}, {"id": "667461934", "answers": [{"choice_id": "4385175738"}]}, {"id": "667461936", "answers": [{"choice_id": "4385175741"}]}, {"id": "667461937", "answers": [{"choice_id": "4385175749"}]}, {"id": "667461986", "answers": [{"choice_id": "4385175881"}]}]}]}, "emitted_at": 1681238098513} +{"stream": "survey_responses", "data": {"id": "12731208790", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843657", "survey_id": "307785429", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=KH_2Bhsc8oIpTdaX60RIwFQ1SDyudOf2_2B61W7cPCZGGXEKsY5_2FN_2BA_2B_2FXh0DeOOdA7F", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxoENnL6uEj_2FlAo5YSBwashU_3D?respondent_id=12731208790", "total_time": 32, "date_modified": "2021-06-10T10:05:01+00:00", "date_created": "2021-06-10T10:04:28+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785429/responses/12731208790", "pages": [{"id": "168831413", "questions": []}, {"id": "168831415", "questions": [{"id": "667461858", "answers": [{"choice_id": "4385175368"}]}, {"id": "667461861", "answers": [{"choice_id": "4385175380"}]}, {"id": "667461876", "answers": [{"choice_id": "4385175449"}]}, {"id": "667461897", "answers": [{"choice_id": "4385175534"}]}, {"id": "667461902", "answers": [{"choice_id": "4385175559"}]}]}, {"id": "168831437", "questions": [{"id": "667461933", "answers": [{"choice_id": "4385175735"}]}, {"id": "667461934", "answers": [{"choice_id": "4385175737"}]}, {"id": "667461936", "answers": [{"choice_id": "4385175741"}]}, {"id": "667461937", "answers": [{"choice_id": "4385175752"}]}, {"id": "667461986", "answers": [{"choice_id": "4385175880"}]}]}]}, "emitted_at": 1681238098514} +{"stream": "survey_responses", "data": {"id": "12731228560", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843657", "survey_id": "307785429", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=vbsxUKDxxVbnJW7Gng6Y5VblTyjW_2F29grieRYQImUaIVF77GuhY3KDlqPsNfIlx6", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxoENnL6uEj_2FlAo5YSBwashU_3D?respondent_id=12731228560", "total_time": 31, "date_modified": "2021-06-10T10:12:51+00:00", "date_created": "2021-06-10T10:12:19+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785429/responses/12731228560", "pages": [{"id": "168831413", "questions": []}, {"id": "168831415", "questions": [{"id": "667461858", "answers": [{"choice_id": "4385175369"}]}, {"id": "667461861", "answers": [{"choice_id": "4385175380"}]}, {"id": "667461876", "answers": [{"choice_id": "4385175449"}]}, {"id": "667461897", "answers": [{"choice_id": "4385175534"}]}, {"id": "667461902", "answers": [{"choice_id": "4385175561"}]}]}, {"id": "168831437", "questions": [{"id": "667461933", "answers": [{"choice_id": "4385175735"}]}, {"id": "667461934", "answers": [{"choice_id": "4385175737"}]}, {"id": "667461936", "answers": [{"choice_id": "4385175741"}]}, {"id": "667461937", "answers": [{"choice_id": "4385175749"}]}, {"id": "667461986", "answers": [{"choice_id": "4385175882"}]}]}]}, "emitted_at": 1681238098514} +{"stream": "survey_responses", "data": {"id": "12731247619", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843657", "survey_id": "307785429", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=8lyrgf9sVRbhXAHse5glKYEJoYMvqlR2TNQIhI8Ycw716W_2FHlQeX6Ru4SKObInXR", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxoENnL6uEj_2FlAo5YSBwashU_3D?respondent_id=12731247619", "total_time": 31, "date_modified": "2021-06-10T10:20:41+00:00", "date_created": "2021-06-10T10:20:09+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785429/responses/12731247619", "pages": [{"id": "168831413", "questions": []}, {"id": "168831415", "questions": [{"id": "667461858", "answers": [{"choice_id": "4385175366"}]}, {"id": "667461861", "answers": [{"choice_id": "4385175382"}]}, {"id": "667461876", "answers": [{"choice_id": "4385175448"}]}, {"id": "667461897", "answers": [{"choice_id": "4385175535"}]}, {"id": "667461902", "answers": [{"choice_id": "4385175563"}]}]}, {"id": "168831437", "questions": [{"id": "667461933", "answers": [{"choice_id": "4385175734"}]}, {"id": "667461934", "answers": [{"choice_id": "4385175736"}]}, {"id": "667461936", "answers": [{"choice_id": "4385175740"}]}, {"id": "667461937", "answers": [{"choice_id": "4385175747"}]}, {"id": "667461986", "answers": [{"choice_id": "4385175881"}]}]}]}, "emitted_at": 1681238098515} +{"stream": "survey_responses", "data": {"id": "12731266056", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843657", "survey_id": "307785429", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=tkqgGP2ApNTakGiA0JrfYbKgIZElTj6_2FPaJ_2FDj0QNjpJDKCexid0Z_2Bq8vZoam1vK", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxoENnL6uEj_2FlAo5YSBwashU_3D?respondent_id=12731266056", "total_time": 31, "date_modified": "2021-06-10T10:28:20+00:00", "date_created": "2021-06-10T10:27:49+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785429/responses/12731266056", "pages": [{"id": "168831413", "questions": []}, {"id": "168831415", "questions": [{"id": "667461858", "answers": [{"choice_id": "4385175369"}]}, {"id": "667461861", "answers": [{"choice_id": "4385175381"}]}, {"id": "667461876", "answers": [{"choice_id": "4385175449"}]}, {"id": "667461897", "answers": [{"choice_id": "4385175534"}]}, {"id": "667461902", "answers": [{"choice_id": "4385175563"}]}]}, {"id": "168831437", "questions": [{"id": "667461933", "answers": [{"choice_id": "4385175732"}]}, {"id": "667461934", "answers": [{"choice_id": "4385175738"}]}, {"id": "667461936", "answers": [{"choice_id": "4385175740"}]}, {"id": "667461937", "answers": [{"choice_id": "4385175747"}]}, {"id": "667461986", "answers": [{"choice_id": "4385175882"}]}]}]}, "emitted_at": 1681238098515} +{"stream": "survey_responses", "data": {"id": "12731286200", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843657", "survey_id": "307785429", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=nYsBr3IsP19O_2BhTeV_2BWGnAdXc_2FFsnqMT6maJ0BS3QD9FqjkWLrNYzzEqKsT7c191", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxoENnL6uEj_2FlAo5YSBwashU_3D?respondent_id=12731286200", "total_time": 35, "date_modified": "2021-06-10T10:36:27+00:00", "date_created": "2021-06-10T10:35:52+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785429/responses/12731286200", "pages": [{"id": "168831413", "questions": []}, {"id": "168831415", "questions": [{"id": "667461858", "answers": [{"choice_id": "4385175367"}]}, {"id": "667461861", "answers": [{"choice_id": "4385175382"}]}, {"id": "667461876", "answers": [{"choice_id": "4385175447"}]}, {"id": "667461897", "answers": [{"choice_id": "4385175534"}]}, {"id": "667461902", "answers": [{"choice_id": "4385175564"}]}]}, {"id": "168831437", "questions": [{"id": "667461933", "answers": [{"choice_id": "4385175735"}]}, {"id": "667461934", "answers": [{"choice_id": "4385175738"}]}, {"id": "667461936", "answers": [{"choice_id": "4385175741"}]}, {"id": "667461937", "answers": [{"choice_id": "4385175752"}]}, {"id": "667461986", "answers": [{"choice_id": "4385175878"}]}]}]}, "emitted_at": 1681238098516} +{"stream": "survey_responses", "data": {"id": "12731305366", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843657", "survey_id": "307785429", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=iIxE7kshwG8vR6T6c2D0swVsNTfDLqcBVkfrnf_2FGZBTuoHjMm9ksd3LbOIXuF6lp", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxoENnL6uEj_2FlAo5YSBwashU_3D?respondent_id=12731305366", "total_time": 34, "date_modified": "2021-06-10T10:44:10+00:00", "date_created": "2021-06-10T10:43:36+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785429/responses/12731305366", "pages": [{"id": "168831413", "questions": []}, {"id": "168831415", "questions": [{"id": "667461858", "answers": [{"choice_id": "4385175366"}]}, {"id": "667461861", "answers": [{"choice_id": "4385175380"}]}, {"id": "667461876", "answers": [{"choice_id": "4385175447"}]}, {"id": "667461897", "answers": [{"choice_id": "4385175533"}]}, {"id": "667461902", "answers": [{"choice_id": "4385175559"}]}]}, {"id": "168831437", "questions": [{"id": "667461933", "answers": [{"choice_id": "4385175732"}]}, {"id": "667461934", "answers": [{"choice_id": "4385175736"}]}, {"id": "667461936", "answers": [{"choice_id": "4385175741"}]}, {"id": "667461937", "answers": [{"choice_id": "4385175749"}]}, {"id": "667461986", "answers": [{"choice_id": "4385175879"}]}]}]}, "emitted_at": 1681238098516} +{"stream": "survey_responses", "data": {"id": "12731325134", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843657", "survey_id": "307785429", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=cUq2_2BSagT6pk152_2BsGjjMAAQ2Qq0R0cxleIxEdHEEVKwV5oPCvktmmnTV82pa5S_2F", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxoENnL6uEj_2FlAo5YSBwashU_3D?respondent_id=12731325134", "total_time": 31, "date_modified": "2021-06-10T10:52:02+00:00", "date_created": "2021-06-10T10:51:30+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785429/responses/12731325134", "pages": [{"id": "168831413", "questions": []}, {"id": "168831415", "questions": [{"id": "667461858", "answers": [{"choice_id": "4385175369"}]}, {"id": "667461861", "answers": [{"choice_id": "4385175382"}]}, {"id": "667461876", "answers": [{"choice_id": "4385175447"}]}, {"id": "667461897", "answers": [{"choice_id": "4385175535"}]}, {"id": "667461902", "answers": [{"choice_id": "4385175559"}]}]}, {"id": "168831437", "questions": [{"id": "667461933", "answers": [{"choice_id": "4385175735"}]}, {"id": "667461934", "answers": [{"choice_id": "4385175739"}]}, {"id": "667461936", "answers": [{"choice_id": "4385175742"}]}, {"id": "667461937", "answers": [{"choice_id": "4385175751"}]}, {"id": "667461986", "answers": [{"choice_id": "4385175878"}]}]}]}, "emitted_at": 1681238098517} +{"stream": "survey_responses", "data": {"id": "12731344038", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843657", "survey_id": "307785429", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=F_2BuWfRunQKdf1g0xuu4mTzXMCAlXia21_2BnF47p_2FbjU4QII1hLaE3Xo6tWdfbzKqr", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxoENnL6uEj_2FlAo5YSBwashU_3D?respondent_id=12731344038", "total_time": 31, "date_modified": "2021-06-10T10:59:42+00:00", "date_created": "2021-06-10T10:59:10+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785429/responses/12731344038", "pages": [{"id": "168831413", "questions": []}, {"id": "168831415", "questions": [{"id": "667461858", "answers": [{"choice_id": "4385175368"}]}, {"id": "667461861", "answers": [{"choice_id": "4385175381"}]}, {"id": "667461876", "answers": [{"choice_id": "4385175448"}]}, {"id": "667461897", "answers": [{"choice_id": "4385175534"}]}, {"id": "667461902", "answers": [{"choice_id": "4385175563"}]}]}, {"id": "168831437", "questions": [{"id": "667461933", "answers": [{"choice_id": "4385175733"}]}, {"id": "667461934", "answers": [{"choice_id": "4385175739"}]}, {"id": "667461936", "answers": [{"choice_id": "4385175740"}]}, {"id": "667461937", "answers": [{"choice_id": "4385175750"}]}, {"id": "667461986", "answers": [{"choice_id": "4385175880"}]}]}]}, "emitted_at": 1681238098517} +{"stream": "survey_responses", "data": {"id": "12731042086", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843665", "survey_id": "307785444", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=SvCebsqkF1mO3kCZX7XsmQ4ABz0LFCf_2FyW5N2JOLuGh5ixjzbj2i04SarOUiUgPa", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxrQYdYnKpzayiBZVWsmE3jE_3D?respondent_id=12731042086", "total_time": 31, "date_modified": "2021-06-10T08:47:30+00:00", "date_created": "2021-06-10T08:46:58+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785444/responses/12731042086", "pages": [{"id": "168831459", "questions": []}, {"id": "168831461", "questions": [{"id": "667462078", "answers": [{"choice_id": "4385176724"}]}, {"id": "667462079", "answers": [{"choice_id": "4385176728"}]}, {"id": "667462082", "answers": [{"choice_id": "4385176739"}]}, {"id": "667462084", "answers": [{"choice_id": "4385176764"}]}, {"id": "667462086", "answers": [{"choice_id": "4385176919"}]}]}, {"id": "168831467", "questions": [{"id": "667462094", "answers": [{"choice_id": "4385176960"}]}, {"id": "667462096", "answers": [{"choice_id": "4385176970"}]}, {"id": "667462099", "answers": [{"choice_id": "4385176977"}]}, {"id": "667462100", "answers": [{"choice_id": "4385176987"}]}, {"id": "667462102", "answers": [{"choice_id": "4385177005"}]}]}]}, "emitted_at": 1681238099800} +{"stream": "survey_responses", "data": {"id": "12731056238", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843665", "survey_id": "307785444", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=r7v44AE_2Bx_2Fam5dgCBnlUkUkL0aSWyzhJkIPWmmYa5VnqMtd4X2DBzf9U9erpnCvI", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxrQYdYnKpzayiBZVWsmE3jE_3D?respondent_id=12731056238", "total_time": 31, "date_modified": "2021-06-10T08:55:13+00:00", "date_created": "2021-06-10T08:54:41+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785444/responses/12731056238", "pages": [{"id": "168831459", "questions": []}, {"id": "168831461", "questions": [{"id": "667462078", "answers": [{"choice_id": "4385176723"}]}, {"id": "667462079", "answers": [{"choice_id": "4385176729"}]}, {"id": "667462082", "answers": [{"choice_id": "4385176738"}]}, {"id": "667462084", "answers": [{"choice_id": "4385176763"}]}, {"id": "667462086", "answers": [{"choice_id": "4385176919"}]}]}, {"id": "168831467", "questions": [{"id": "667462094", "answers": [{"choice_id": "4385176962"}]}, {"id": "667462096", "answers": [{"choice_id": "4385176970"}]}, {"id": "667462099", "answers": [{"choice_id": "4385176979"}]}, {"id": "667462100", "answers": [{"choice_id": "4385176986"}]}, {"id": "667462102", "answers": [{"choice_id": "4385177005"}]}]}]}, "emitted_at": 1681238099800} +{"stream": "survey_responses", "data": {"id": "12731070937", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843665", "survey_id": "307785444", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=_2FuS4ZECIFCnV4LLPEe6gryzUPrf_2FMB8MB51Cv5cU6IQGsWb_2FRIb0BOaRXRodLTAq", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxrQYdYnKpzayiBZVWsmE3jE_3D?respondent_id=12731070937", "total_time": 32, "date_modified": "2021-06-10T09:02:57+00:00", "date_created": "2021-06-10T09:02:25+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785444/responses/12731070937", "pages": [{"id": "168831459", "questions": []}, {"id": "168831461", "questions": [{"id": "667462078", "answers": [{"choice_id": "4385176724"}]}, {"id": "667462079", "answers": [{"choice_id": "4385176728"}]}, {"id": "667462082", "answers": [{"choice_id": "4385176735"}]}, {"id": "667462084", "answers": [{"choice_id": "4385176767"}]}, {"id": "667462086", "answers": [{"choice_id": "4385176920"}]}]}, {"id": "168831467", "questions": [{"id": "667462094", "answers": [{"choice_id": "4385176961"}]}, {"id": "667462096", "answers": [{"choice_id": "4385176975"}]}, {"id": "667462099", "answers": [{"choice_id": "4385176978"}]}, {"id": "667462100", "answers": [{"choice_id": "4385176990"}]}, {"id": "667462102", "answers": [{"choice_id": "4385177007"}]}]}]}, "emitted_at": 1681238099801} +{"stream": "survey_responses", "data": {"id": "12731087215", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843665", "survey_id": "307785444", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=eSF0qBZZ3aR1SHBtkTZz83mgEBvJuBfou_2BJGBoFPbxv5bluXZuIMKDaGn5x5xba5", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxrQYdYnKpzayiBZVWsmE3jE_3D?respondent_id=12731087215", "total_time": 31, "date_modified": "2021-06-10T09:10:42+00:00", "date_created": "2021-06-10T09:10:10+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785444/responses/12731087215", "pages": [{"id": "168831459", "questions": []}, {"id": "168831461", "questions": [{"id": "667462078", "answers": [{"choice_id": "4385176721"}]}, {"id": "667462079", "answers": [{"choice_id": "4385176727"}]}, {"id": "667462082", "answers": [{"choice_id": "4385176736"}]}, {"id": "667462084", "answers": [{"choice_id": "4385176763"}]}, {"id": "667462086", "answers": [{"choice_id": "4385176918"}]}]}, {"id": "168831467", "questions": [{"id": "667462094", "answers": [{"choice_id": "4385176962"}]}, {"id": "667462096", "answers": [{"choice_id": "4385176972"}]}, {"id": "667462099", "answers": [{"choice_id": "4385176983"}]}, {"id": "667462100", "answers": [{"choice_id": "4385176988"}]}, {"id": "667462102", "answers": [{"choice_id": "4385177007"}]}]}]}, "emitted_at": 1681238099801} +{"stream": "survey_responses", "data": {"id": "12731103402", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843665", "survey_id": "307785444", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=QOikOvuCCRFkDsJoRozKO9_2BNPZmp7mliotl5xt4QnStPgBKgrvz6GZ7vdHXf3eMG", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxrQYdYnKpzayiBZVWsmE3jE_3D?respondent_id=12731103402", "total_time": 31, "date_modified": "2021-06-10T09:18:22+00:00", "date_created": "2021-06-10T09:17:50+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785444/responses/12731103402", "pages": [{"id": "168831459", "questions": []}, {"id": "168831461", "questions": [{"id": "667462078", "answers": [{"choice_id": "4385176721"}]}, {"id": "667462079", "answers": [{"choice_id": "4385176729"}]}, {"id": "667462082", "answers": [{"choice_id": "4385176736"}]}, {"id": "667462084", "answers": [{"choice_id": "4385176764"}]}, {"id": "667462086", "answers": [{"choice_id": "4385176921"}]}]}, {"id": "168831467", "questions": [{"id": "667462094", "answers": [{"choice_id": "4385176962"}]}, {"id": "667462096", "answers": [{"choice_id": "4385176974"}]}, {"id": "667462099", "answers": [{"choice_id": "4385176978"}]}, {"id": "667462100", "answers": [{"choice_id": "4385176987"}]}, {"id": "667462102", "answers": [{"choice_id": "4385177002"}]}]}]}, "emitted_at": 1681238099802} +{"stream": "survey_responses", "data": {"id": "12731120214", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843665", "survey_id": "307785444", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=sV4Oq2KXvMuxWQpflbd5L_2FyoB6ImaDnm9BFwJGk9W_2BwE7YWlvW6MsxaqaeWWY_2Fzh", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxrQYdYnKpzayiBZVWsmE3jE_3D?respondent_id=12731120214", "total_time": 31, "date_modified": "2021-06-10T09:26:01+00:00", "date_created": "2021-06-10T09:25:29+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785444/responses/12731120214", "pages": [{"id": "168831459", "questions": []}, {"id": "168831461", "questions": [{"id": "667462078", "answers": [{"choice_id": "4385176723"}]}, {"id": "667462079", "answers": [{"choice_id": "4385176728"}]}, {"id": "667462082", "answers": [{"choice_id": "4385176734"}]}, {"id": "667462084", "answers": [{"choice_id": "4385176765"}]}, {"id": "667462086", "answers": [{"choice_id": "4385176920"}]}]}, {"id": "168831467", "questions": [{"id": "667462094", "answers": [{"choice_id": "4385176960"}]}, {"id": "667462096", "answers": [{"choice_id": "4385176968"}]}, {"id": "667462099", "answers": [{"choice_id": "4385176976"}]}, {"id": "667462100", "answers": [{"choice_id": "4385176987"}]}, {"id": "667462102", "answers": [{"choice_id": "4385177009"}]}]}]}, "emitted_at": 1681238099802} +{"stream": "survey_responses", "data": {"id": "12731137499", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843665", "survey_id": "307785444", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=Hy3W8rkVoiYFKw_2BdJM6cChYRJWAXaGTQTol4ykCh_2FxYDhPmBpC753rbLshVSZjNE", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxrQYdYnKpzayiBZVWsmE3jE_3D?respondent_id=12731137499", "total_time": 31, "date_modified": "2021-06-10T09:33:45+00:00", "date_created": "2021-06-10T09:33:13+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785444/responses/12731137499", "pages": [{"id": "168831459", "questions": []}, {"id": "168831461", "questions": [{"id": "667462078", "answers": [{"choice_id": "4385176721"}]}, {"id": "667462079", "answers": [{"choice_id": "4385176729"}]}, {"id": "667462082", "answers": [{"choice_id": "4385176738"}]}, {"id": "667462084", "answers": [{"choice_id": "4385176766"}]}, {"id": "667462086", "answers": [{"choice_id": "4385176920"}]}]}, {"id": "168831467", "questions": [{"id": "667462094", "answers": [{"choice_id": "4385176961"}]}, {"id": "667462096", "answers": [{"choice_id": "4385176970"}]}, {"id": "667462099", "answers": [{"choice_id": "4385176982"}]}, {"id": "667462100", "answers": [{"choice_id": "4385176988"}]}, {"id": "667462102", "answers": [{"choice_id": "4385177008"}]}]}]}, "emitted_at": 1681238099803} +{"stream": "survey_responses", "data": {"id": "12731154912", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843665", "survey_id": "307785444", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=BLjiuDSDI39GvYDURd_2FmEfCd9jRrZ5nLwAgWG65zJj2dA1DskdMkMBHVZjzLHkk6", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxrQYdYnKpzayiBZVWsmE3jE_3D?respondent_id=12731154912", "total_time": 31, "date_modified": "2021-06-10T09:41:24+00:00", "date_created": "2021-06-10T09:40:52+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785444/responses/12731154912", "pages": [{"id": "168831459", "questions": []}, {"id": "168831461", "questions": [{"id": "667462078", "answers": [{"choice_id": "4385176723"}]}, {"id": "667462079", "answers": [{"choice_id": "4385176728"}]}, {"id": "667462082", "answers": [{"choice_id": "4385176738"}]}, {"id": "667462084", "answers": [{"choice_id": "4385176764"}]}, {"id": "667462086", "answers": [{"choice_id": "4385176921"}]}]}, {"id": "168831467", "questions": [{"id": "667462094", "answers": [{"choice_id": "4385176963"}]}, {"id": "667462096", "answers": [{"choice_id": "4385176970"}]}, {"id": "667462099", "answers": [{"choice_id": "4385176977"}]}, {"id": "667462100", "answers": [{"choice_id": "4385176988"}]}, {"id": "667462102", "answers": [{"choice_id": "4385177006"}]}]}]}, "emitted_at": 1681238099803} +{"stream": "survey_responses", "data": {"id": "12731172230", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843665", "survey_id": "307785444", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=jiMm_2FJVQj8fPN6i2HlASqxeTd4rx_2FcPoCLMAznqiCWgY_2B98x39SfA1kKHTo8CgEC", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxrQYdYnKpzayiBZVWsmE3jE_3D?respondent_id=12731172230", "total_time": 31, "date_modified": "2021-06-10T09:49:12+00:00", "date_created": "2021-06-10T09:48:40+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785444/responses/12731172230", "pages": [{"id": "168831459", "questions": []}, {"id": "168831461", "questions": [{"id": "667462078", "answers": [{"choice_id": "4385176723"}]}, {"id": "667462079", "answers": [{"choice_id": "4385176728"}]}, {"id": "667462082", "answers": [{"choice_id": "4385176737"}]}, {"id": "667462084", "answers": [{"choice_id": "4385176767"}]}, {"id": "667462086", "answers": [{"choice_id": "4385176921"}]}]}, {"id": "168831467", "questions": [{"id": "667462094", "answers": [{"choice_id": "4385176963"}]}, {"id": "667462096", "answers": [{"choice_id": "4385176972"}]}, {"id": "667462099", "answers": [{"choice_id": "4385176977"}]}, {"id": "667462100", "answers": [{"choice_id": "4385176990"}]}, {"id": "667462102", "answers": [{"choice_id": "4385177006"}]}]}]}, "emitted_at": 1681238099804} +{"stream": "survey_responses", "data": {"id": "12731190528", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843665", "survey_id": "307785444", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=VrEu2qgFZYPclcWCzyV5DO0WUUCjOIMFC77k1XLOofwOqYD5vHAej03viembeuF8", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxrQYdYnKpzayiBZVWsmE3jE_3D?respondent_id=12731190528", "total_time": 35, "date_modified": "2021-06-10T09:57:32+00:00", "date_created": "2021-06-10T09:56:57+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785444/responses/12731190528", "pages": [{"id": "168831459", "questions": []}, {"id": "168831461", "questions": [{"id": "667462078", "answers": [{"choice_id": "4385176725"}]}, {"id": "667462079", "answers": [{"choice_id": "4385176729"}]}, {"id": "667462082", "answers": [{"choice_id": "4385176739"}]}, {"id": "667462084", "answers": [{"choice_id": "4385176763"}]}, {"id": "667462086", "answers": [{"choice_id": "4385176920"}]}]}, {"id": "168831467", "questions": [{"id": "667462094", "answers": [{"choice_id": "4385176959"}]}, {"id": "667462096", "answers": [{"choice_id": "4385176972"}]}, {"id": "667462099", "answers": [{"choice_id": "4385176978"}]}, {"id": "667462100", "answers": [{"choice_id": "4385176987"}]}, {"id": "667462102", "answers": [{"choice_id": "4385177004"}]}]}]}, "emitted_at": 1681238099804} +{"stream": "survey_responses", "data": {"id": "12731210366", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843665", "survey_id": "307785444", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=xOrc7mbcYE0NFiqzEpenJPpJJ1OHiCt_2FUDSohMb9nmqttp0v1il2MNjb_2BRGE177T", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxrQYdYnKpzayiBZVWsmE3jE_3D?respondent_id=12731210366", "total_time": 33, "date_modified": "2021-06-10T10:05:40+00:00", "date_created": "2021-06-10T10:05:06+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785444/responses/12731210366", "pages": [{"id": "168831459", "questions": []}, {"id": "168831461", "questions": [{"id": "667462078", "answers": [{"choice_id": "4385176722"}]}, {"id": "667462079", "answers": [{"choice_id": "4385176728"}]}, {"id": "667462082", "answers": [{"choice_id": "4385176739"}]}, {"id": "667462084", "answers": [{"choice_id": "4385176763"}]}, {"id": "667462086", "answers": [{"choice_id": "4385176919"}]}]}, {"id": "168831467", "questions": [{"id": "667462094", "answers": [{"choice_id": "4385176961"}]}, {"id": "667462096", "answers": [{"choice_id": "4385176971"}]}, {"id": "667462099", "answers": [{"choice_id": "4385176977"}]}, {"id": "667462100", "answers": [{"choice_id": "4385176986"}]}, {"id": "667462102", "answers": [{"choice_id": "4385177003"}]}]}]}, "emitted_at": 1681238099805} +{"stream": "survey_responses", "data": {"id": "12731230116", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843665", "survey_id": "307785444", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=xmmEsbDmCA6Nvi6PKgkHAZR5hqRDTYPELB_2BIyMCUzF63brYH0R2ZrSJb9f_2BXtWRa", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxrQYdYnKpzayiBZVWsmE3jE_3D?respondent_id=12731230116", "total_time": 32, "date_modified": "2021-06-10T10:13:28+00:00", "date_created": "2021-06-10T10:12:55+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785444/responses/12731230116", "pages": [{"id": "168831459", "questions": []}, {"id": "168831461", "questions": [{"id": "667462078", "answers": [{"choice_id": "4385176724"}]}, {"id": "667462079", "answers": [{"choice_id": "4385176727"}]}, {"id": "667462082", "answers": [{"choice_id": "4385176735"}]}, {"id": "667462084", "answers": [{"choice_id": "4385176765"}]}, {"id": "667462086", "answers": [{"choice_id": "4385176920"}]}]}, {"id": "168831467", "questions": [{"id": "667462094", "answers": [{"choice_id": "4385176959"}]}, {"id": "667462096", "answers": [{"choice_id": "4385176973"}]}, {"id": "667462099", "answers": [{"choice_id": "4385176977"}]}, {"id": "667462100", "answers": [{"choice_id": "4385176988"}]}, {"id": "667462102", "answers": [{"choice_id": "4385177007"}]}]}]}, "emitted_at": 1681238099805} +{"stream": "survey_responses", "data": {"id": "12731249077", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843665", "survey_id": "307785444", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=1cQksQ2IA1zuU8mpR9JawSnSqr2zaPV1juVQ7ZEPrEqxr231kL_2F2eIW48UokyJBm", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxrQYdYnKpzayiBZVWsmE3jE_3D?respondent_id=12731249077", "total_time": 31, "date_modified": "2021-06-10T10:21:17+00:00", "date_created": "2021-06-10T10:20:46+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785444/responses/12731249077", "pages": [{"id": "168831459", "questions": []}, {"id": "168831461", "questions": [{"id": "667462078", "answers": [{"choice_id": "4385176724"}]}, {"id": "667462079", "answers": [{"choice_id": "4385176729"}]}, {"id": "667462082", "answers": [{"choice_id": "4385176735"}]}, {"id": "667462084", "answers": [{"choice_id": "4385176764"}]}, {"id": "667462086", "answers": [{"choice_id": "4385176921"}]}]}, {"id": "168831467", "questions": [{"id": "667462094", "answers": [{"choice_id": "4385176963"}]}, {"id": "667462096", "answers": [{"choice_id": "4385176968"}]}, {"id": "667462099", "answers": [{"choice_id": "4385176982"}]}, {"id": "667462100", "answers": [{"choice_id": "4385176989"}]}, {"id": "667462102", "answers": [{"choice_id": "4385177008"}]}]}]}, "emitted_at": 1681238099806} +{"stream": "survey_responses", "data": {"id": "12731267503", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843665", "survey_id": "307785444", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=zOrptpJoo7QbXn1DoS0HIo4GcoAK8cIZ83MYidVo_2FuK_2FDvnnrsXK2SDzhyjssMdI", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxrQYdYnKpzayiBZVWsmE3jE_3D?respondent_id=12731267503", "total_time": 31, "date_modified": "2021-06-10T10:28:56+00:00", "date_created": "2021-06-10T10:28:25+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785444/responses/12731267503", "pages": [{"id": "168831459", "questions": []}, {"id": "168831461", "questions": [{"id": "667462078", "answers": [{"choice_id": "4385176721"}]}, {"id": "667462079", "answers": [{"choice_id": "4385176727"}]}, {"id": "667462082", "answers": [{"choice_id": "4385176736"}]}, {"id": "667462084", "answers": [{"choice_id": "4385176765"}]}, {"id": "667462086", "answers": [{"choice_id": "4385176921"}]}]}, {"id": "168831467", "questions": [{"id": "667462094", "answers": [{"choice_id": "4385176961"}]}, {"id": "667462096", "answers": [{"choice_id": "4385176970"}]}, {"id": "667462099", "answers": [{"choice_id": "4385176983"}]}, {"id": "667462100", "answers": [{"choice_id": "4385176986"}]}, {"id": "667462102", "answers": [{"choice_id": "4385177003"}]}]}]}, "emitted_at": 1681238099806} +{"stream": "survey_responses", "data": {"id": "12731287789", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843665", "survey_id": "307785444", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=zXARfqNZgptvNWp9PboSVlElugTboBiAj_2FSG_2BkbD8e8OUJGsJ8FMRpMFap0qzcYY", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxrQYdYnKpzayiBZVWsmE3jE_3D?respondent_id=12731287789", "total_time": 31, "date_modified": "2021-06-10T10:37:03+00:00", "date_created": "2021-06-10T10:36:32+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785444/responses/12731287789", "pages": [{"id": "168831459", "questions": []}, {"id": "168831461", "questions": [{"id": "667462078", "answers": [{"choice_id": "4385176726"}]}, {"id": "667462079", "answers": [{"choice_id": "4385176728"}]}, {"id": "667462082", "answers": [{"choice_id": "4385176735"}]}, {"id": "667462084", "answers": [{"choice_id": "4385176763"}]}, {"id": "667462086", "answers": [{"choice_id": "4385176918"}]}]}, {"id": "168831467", "questions": [{"id": "667462094", "answers": [{"choice_id": "4385176965"}]}, {"id": "667462096", "answers": [{"choice_id": "4385176971"}]}, {"id": "667462099", "answers": [{"choice_id": "4385176981"}]}, {"id": "667462100", "answers": [{"choice_id": "4385176989"}]}, {"id": "667462102", "answers": [{"choice_id": "4385177004"}]}]}]}, "emitted_at": 1681238099807} +{"stream": "survey_responses", "data": {"id": "12731307187", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843665", "survey_id": "307785444", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=d07mxUJIp3BjkeFrp8gTQvz67vJrBUQWNX2tzrHPvkrZ0piZOPTQDKl_2BrNNjOvJO", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxrQYdYnKpzayiBZVWsmE3jE_3D?respondent_id=12731307187", "total_time": 35, "date_modified": "2021-06-10T10:44:49+00:00", "date_created": "2021-06-10T10:44:14+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785444/responses/12731307187", "pages": [{"id": "168831459", "questions": []}, {"id": "168831461", "questions": [{"id": "667462078", "answers": [{"choice_id": "4385176724"}]}, {"id": "667462079", "answers": [{"choice_id": "4385176727"}]}, {"id": "667462082", "answers": [{"choice_id": "4385176734"}]}, {"id": "667462084", "answers": [{"choice_id": "4385176765"}]}, {"id": "667462086", "answers": [{"choice_id": "4385176921"}]}]}, {"id": "168831467", "questions": [{"id": "667462094", "answers": [{"choice_id": "4385176964"}]}, {"id": "667462096", "answers": [{"choice_id": "4385176975"}]}, {"id": "667462099", "answers": [{"choice_id": "4385176982"}]}, {"id": "667462100", "answers": [{"choice_id": "4385176986"}]}, {"id": "667462102", "answers": [{"choice_id": "4385177004"}]}]}]}, "emitted_at": 1681238099807} +{"stream": "survey_responses", "data": {"id": "12731326595", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843665", "survey_id": "307785444", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=BCy4vPYrkiObJMS9B6GjZD2jwLTDr1luSZYtqGxH8zxGvmteSPixhqGNTTdp_2BRwb", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxrQYdYnKpzayiBZVWsmE3jE_3D?respondent_id=12731326595", "total_time": 32, "date_modified": "2021-06-10T10:52:38+00:00", "date_created": "2021-06-10T10:52:05+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785444/responses/12731326595", "pages": [{"id": "168831459", "questions": []}, {"id": "168831461", "questions": [{"id": "667462078", "answers": [{"choice_id": "4385176722"}]}, {"id": "667462079", "answers": [{"choice_id": "4385176728"}]}, {"id": "667462082", "answers": [{"choice_id": "4385176739"}]}, {"id": "667462084", "answers": [{"choice_id": "4385176767"}]}, {"id": "667462086", "answers": [{"choice_id": "4385176918"}]}]}, {"id": "168831467", "questions": [{"id": "667462094", "answers": [{"choice_id": "4385176959"}]}, {"id": "667462096", "answers": [{"choice_id": "4385176974"}]}, {"id": "667462099", "answers": [{"choice_id": "4385176981"}]}, {"id": "667462100", "answers": [{"choice_id": "4385176990"}]}, {"id": "667462102", "answers": [{"choice_id": "4385177003"}]}]}]}, "emitted_at": 1681238099808} +{"stream": "survey_responses", "data": {"id": "12731345509", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843665", "survey_id": "307785444", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=KmG9rTOuf2GcFWGtNhaBIfC5S80jehYrziix2nmuPzJw9_2FzLpaENGb_2F8j4NkPfTJ", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxrQYdYnKpzayiBZVWsmE3jE_3D?respondent_id=12731345509", "total_time": 31, "date_modified": "2021-06-10T11:00:18+00:00", "date_created": "2021-06-10T10:59:46+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785444/responses/12731345509", "pages": [{"id": "168831459", "questions": []}, {"id": "168831461", "questions": [{"id": "667462078", "answers": [{"choice_id": "4385176725"}]}, {"id": "667462079", "answers": [{"choice_id": "4385176729"}]}, {"id": "667462082", "answers": [{"choice_id": "4385176734"}]}, {"id": "667462084", "answers": [{"choice_id": "4385176766"}]}, {"id": "667462086", "answers": [{"choice_id": "4385176919"}]}]}, {"id": "168831467", "questions": [{"id": "667462094", "answers": [{"choice_id": "4385176964"}]}, {"id": "667462096", "answers": [{"choice_id": "4385176968"}]}, {"id": "667462099", "answers": [{"choice_id": "4385176983"}]}, {"id": "667462100", "answers": [{"choice_id": "4385176991"}]}, {"id": "667462102", "answers": [{"choice_id": "4385177005"}]}]}]}, "emitted_at": 1681238099808} +{"stream": "survey_responses", "data": {"id": "12731043150", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843672", "survey_id": "307785394", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=LKTTnPMSZ1aoM4WL0f1Ja7_2FdIZyTQ0DexNwU_2FFgEeZeT6B9T2m2HJuQjxPHn2OpZ", "analyze_url": "https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNt3d6AR0J1aeeTU4KsCULsx8_3D?respondent_id=12731043150", "total_time": 36, "date_modified": "2021-06-10T08:48:12+00:00", "date_created": "2021-06-10T08:47:35+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785394/responses/12731043150", "pages": [{"id": "168831344", "questions": []}, {"id": "168831345", "questions": [{"id": "667461468", "answers": [{"choice_id": "4385173227"}]}, {"id": "667461471", "answers": [{"choice_id": "4385173238"}]}, {"id": "667461473", "answers": [{"choice_id": "4385173258"}]}, {"id": "667461476", "answers": [{"choice_id": "4385173269"}]}, {"id": "667461498", "answers": [{"choice_id": "4385173412"}]}]}, {"id": "168831352", "questions": [{"id": "667461513", "answers": [{"choice_id": "4385173457"}]}, {"id": "667461516", "answers": [{"choice_id": "4385173477"}]}, {"id": "667461517", "answers": [{"choice_id": "4385173482"}]}, {"id": "667461521", "answers": [{"choice_id": "4385173493"}]}, {"id": "667461526", "answers": [{"choice_id": "4385173525"}]}]}]}, "emitted_at": 1681238101175} +{"stream": "survey_responses", "data": {"id": "12731057303", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843672", "survey_id": "307785394", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=Tj5vPzxUmWLsaqGk6A3N4tXy8F1lrXDh3cgduiFC1tcjk3fKqd5Jc_2FYl9kqbrtXl", "analyze_url": "https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNt3d6AR0J1aeeTU4KsCULsx8_3D?respondent_id=12731057303", "total_time": 35, "date_modified": "2021-06-10T08:55:53+00:00", "date_created": "2021-06-10T08:55:17+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785394/responses/12731057303", "pages": [{"id": "168831344", "questions": []}, {"id": "168831345", "questions": [{"id": "667461468", "answers": [{"choice_id": "4385173227"}]}, {"id": "667461471", "answers": [{"choice_id": "4385173237"}]}, {"id": "667461473", "answers": [{"choice_id": "4385173256"}]}, {"id": "667461476", "answers": [{"choice_id": "4385173270"}]}, {"id": "667461498", "answers": [{"choice_id": "4385173414"}]}]}, {"id": "168831352", "questions": [{"id": "667461513", "answers": [{"choice_id": "4385173457"}]}, {"id": "667461516", "answers": [{"choice_id": "4385173478"}]}, {"id": "667461517", "answers": [{"choice_id": "4385173481"}]}, {"id": "667461521", "answers": [{"choice_id": "4385173494"}]}, {"id": "667461526", "answers": [{"choice_id": "4385173523"}]}]}]}, "emitted_at": 1681238101176} +{"stream": "survey_responses", "data": {"id": "12731072147", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843672", "survey_id": "307785394", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=bAFsDUmEPpCdobkl_2BIl_2F6rdICCatPVmCxnojDaOR9ZJwGzYj7h29WMvC195fRe31", "analyze_url": "https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNt3d6AR0J1aeeTU4KsCULsx8_3D?respondent_id=12731072147", "total_time": 35, "date_modified": "2021-06-10T09:03:38+00:00", "date_created": "2021-06-10T09:03:02+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785394/responses/12731072147", "pages": [{"id": "168831344", "questions": []}, {"id": "168831345", "questions": [{"id": "667461468", "answers": [{"choice_id": "4385173229"}]}, {"id": "667461471", "answers": [{"choice_id": "4385173240"}]}, {"id": "667461473", "answers": [{"choice_id": "4385173257"}]}, {"id": "667461476", "answers": [{"choice_id": "4385173268"}]}, {"id": "667461498", "answers": [{"choice_id": "4385173413"}]}]}, {"id": "168831352", "questions": [{"id": "667461513", "answers": [{"choice_id": "4385173452"}]}, {"id": "667461516", "answers": [{"choice_id": "4385173476"}]}, {"id": "667461517", "answers": [{"choice_id": "4385173483"}]}, {"id": "667461521", "answers": [{"choice_id": "4385173492"}]}, {"id": "667461526", "answers": [{"choice_id": "4385173523"}]}]}]}, "emitted_at": 1681238101176} +{"stream": "survey_responses", "data": {"id": "12731088506", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843672", "survey_id": "307785394", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=MrquTcpA82ItgrSQWG_2BswTK4ClFm9rTuG5GWb85hiLDvaK2dr6F7vrYvOlwqkkC6", "analyze_url": "https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNt3d6AR0J1aeeTU4KsCULsx8_3D?respondent_id=12731088506", "total_time": 35, "date_modified": "2021-06-10T09:11:22+00:00", "date_created": "2021-06-10T09:10:46+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785394/responses/12731088506", "pages": [{"id": "168831344", "questions": []}, {"id": "168831345", "questions": [{"id": "667461468", "answers": [{"choice_id": "4385173227"}]}, {"id": "667461471", "answers": [{"choice_id": "4385173236"}]}, {"id": "667461473", "answers": [{"choice_id": "4385173256"}]}, {"id": "667461476", "answers": [{"choice_id": "4385173269"}]}, {"id": "667461498", "answers": [{"choice_id": "4385173413"}]}]}, {"id": "168831352", "questions": [{"id": "667461513", "answers": [{"choice_id": "4385173458"}]}, {"id": "667461516", "answers": [{"choice_id": "4385173475"}]}, {"id": "667461517", "answers": [{"choice_id": "4385173484"}]}, {"id": "667461521", "answers": [{"choice_id": "4385173492"}]}, {"id": "667461526", "answers": [{"choice_id": "4385173525"}]}]}]}, "emitted_at": 1681238101177} +{"stream": "survey_responses", "data": {"id": "12731104696", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843672", "survey_id": "307785394", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=RO8uULIefm7fQ9VJXKzxtKBfRj4g0rYOE0LRuSA8OT2GVPEFDFQFmSOII7UlshDk", "analyze_url": "https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNt3d6AR0J1aeeTU4KsCULsx8_3D?respondent_id=12731104696", "total_time": 36, "date_modified": "2021-06-10T09:19:03+00:00", "date_created": "2021-06-10T09:18:26+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785394/responses/12731104696", "pages": [{"id": "168831344", "questions": []}, {"id": "168831345", "questions": [{"id": "667461468", "answers": [{"choice_id": "4385173229"}]}, {"id": "667461471", "answers": [{"choice_id": "4385173240"}]}, {"id": "667461473", "answers": [{"choice_id": "4385173256"}]}, {"id": "667461476", "answers": [{"choice_id": "4385173271"}]}, {"id": "667461498", "answers": [{"choice_id": "4385173414"}]}]}, {"id": "168831352", "questions": [{"id": "667461513", "answers": [{"choice_id": "4385173457"}]}, {"id": "667461516", "answers": [{"choice_id": "4385173474"}]}, {"id": "667461517", "answers": [{"choice_id": "4385173481"}]}, {"id": "667461521", "answers": [{"choice_id": "4385173493"}]}, {"id": "667461526", "answers": [{"choice_id": "4385173526"}]}]}]}, "emitted_at": 1681238101177} +{"stream": "survey_responses", "data": {"id": "12731121617", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843672", "survey_id": "307785394", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=Z_2BP_2BwLxa1Cmlcetqz6B1oaPvJSUU_2F5d018eOau5jIs8q4IlOyw7MT9YtxrlZnZHx", "analyze_url": "https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNt3d6AR0J1aeeTU4KsCULsx8_3D?respondent_id=12731121617", "total_time": 37, "date_modified": "2021-06-10T09:26:44+00:00", "date_created": "2021-06-10T09:26:07+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785394/responses/12731121617", "pages": [{"id": "168831344", "questions": []}, {"id": "168831345", "questions": [{"id": "667461468", "answers": [{"choice_id": "4385173228"}]}, {"id": "667461471", "answers": [{"choice_id": "4385173237"}]}, {"id": "667461473", "answers": [{"choice_id": "4385173258"}]}, {"id": "667461476", "answers": [{"choice_id": "4385173268"}]}, {"id": "667461498", "answers": [{"choice_id": "4385173414"}]}]}, {"id": "168831352", "questions": [{"id": "667461513", "answers": [{"choice_id": "4385173458"}]}, {"id": "667461516", "answers": [{"choice_id": "4385173477"}]}, {"id": "667461517", "answers": [{"choice_id": "4385173481"}]}, {"id": "667461521", "answers": [{"choice_id": "4385173493"}]}, {"id": "667461526", "answers": [{"choice_id": "4385173523"}]}]}]}, "emitted_at": 1681238101178} +{"stream": "survey_responses", "data": {"id": "12731139029", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843672", "survey_id": "307785394", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=R0ZtH7VCYs_2FMuOE8hZBLqJdLMcu2RDqvrV04C34ivpIzGYhRzaVoAG0LDF83Ln_2B2", "analyze_url": "https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNt3d6AR0J1aeeTU4KsCULsx8_3D?respondent_id=12731139029", "total_time": 37, "date_modified": "2021-06-10T09:34:27+00:00", "date_created": "2021-06-10T09:33:50+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785394/responses/12731139029", "pages": [{"id": "168831344", "questions": []}, {"id": "168831345", "questions": [{"id": "667461468", "answers": [{"choice_id": "4385173229"}]}, {"id": "667461471", "answers": [{"choice_id": "4385173239"}]}, {"id": "667461473", "answers": [{"choice_id": "4385173256"}]}, {"id": "667461476", "answers": [{"choice_id": "4385173269"}]}, {"id": "667461498", "answers": [{"choice_id": "4385173415"}]}]}, {"id": "168831352", "questions": [{"id": "667461513", "answers": [{"choice_id": "4385173459"}]}, {"id": "667461516", "answers": [{"choice_id": "4385173477"}]}, {"id": "667461517", "answers": [{"choice_id": "4385173482"}]}, {"id": "667461521", "answers": [{"choice_id": "4385173492"}]}, {"id": "667461526", "answers": [{"choice_id": "4385173523"}]}]}]}, "emitted_at": 1681238101178} +{"stream": "survey_responses", "data": {"id": "12731156353", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843672", "survey_id": "307785394", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=t_2BeAHBUtkTES9TALR_2F4aDfYgtWlbqJv08b_2B6EYbplYKefvn8GrYTkoGugKOevrCn", "analyze_url": "https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNt3d6AR0J1aeeTU4KsCULsx8_3D?respondent_id=12731156353", "total_time": 35, "date_modified": "2021-06-10T09:42:06+00:00", "date_created": "2021-06-10T09:41:30+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785394/responses/12731156353", "pages": [{"id": "168831344", "questions": []}, {"id": "168831345", "questions": [{"id": "667461468", "answers": [{"choice_id": "4385173229"}]}, {"id": "667461471", "answers": [{"choice_id": "4385173237"}]}, {"id": "667461473", "answers": [{"choice_id": "4385173256"}]}, {"id": "667461476", "answers": [{"choice_id": "4385173271"}]}, {"id": "667461498", "answers": [{"choice_id": "4385173416"}]}]}, {"id": "168831352", "questions": [{"id": "667461513", "answers": [{"choice_id": "4385173455"}]}, {"id": "667461516", "answers": [{"choice_id": "4385173474"}]}, {"id": "667461517", "answers": [{"choice_id": "4385173481"}]}, {"id": "667461521", "answers": [{"choice_id": "4385173493"}]}, {"id": "667461526", "answers": [{"choice_id": "4385173523"}]}]}]}, "emitted_at": 1681238101178} +{"stream": "survey_responses", "data": {"id": "12731173574", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843672", "survey_id": "307785394", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=mVe08d8mokL6AWRdTdpFz7jaz6dJhmAV4ZlfpEH6B8OQwQXlC2RxAxy2Z_2BtSrLXG", "analyze_url": "https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNt3d6AR0J1aeeTU4KsCULsx8_3D?respondent_id=12731173574", "total_time": 36, "date_modified": "2021-06-10T09:49:53+00:00", "date_created": "2021-06-10T09:49:16+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785394/responses/12731173574", "pages": [{"id": "168831344", "questions": []}, {"id": "168831345", "questions": [{"id": "667461468", "answers": [{"choice_id": "4385173227"}]}, {"id": "667461471", "answers": [{"choice_id": "4385173241"}]}, {"id": "667461473", "answers": [{"choice_id": "4385173258"}]}, {"id": "667461476", "answers": [{"choice_id": "4385173270"}]}, {"id": "667461498", "answers": [{"choice_id": "4385173414"}]}]}, {"id": "168831352", "questions": [{"id": "667461513", "answers": [{"choice_id": "4385173458"}]}, {"id": "667461516", "answers": [{"choice_id": "4385173475"}]}, {"id": "667461517", "answers": [{"choice_id": "4385173486"}]}, {"id": "667461521", "answers": [{"choice_id": "4385173492"}]}, {"id": "667461526", "answers": [{"choice_id": "4385173526"}]}]}]}, "emitted_at": 1681238101179} +{"stream": "survey_responses", "data": {"id": "12731192021", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843672", "survey_id": "307785394", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=XFNknH0sj9IIdSvzYR75kcMldl4TuTz7kma3E7SGri2Rq_2FvcCRLj4ug5HOCnqMQz", "analyze_url": "https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNt3d6AR0J1aeeTU4KsCULsx8_3D?respondent_id=12731192021", "total_time": 39, "date_modified": "2021-06-10T09:58:16+00:00", "date_created": "2021-06-10T09:57:36+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785394/responses/12731192021", "pages": [{"id": "168831344", "questions": []}, {"id": "168831345", "questions": [{"id": "667461468", "answers": [{"choice_id": "4385173227"}]}, {"id": "667461471", "answers": [{"choice_id": "4385173239"}]}, {"id": "667461473", "answers": [{"choice_id": "4385173258"}]}, {"id": "667461476", "answers": [{"choice_id": "4385173270"}]}, {"id": "667461498", "answers": [{"choice_id": "4385173416"}]}]}, {"id": "168831352", "questions": [{"id": "667461513", "answers": [{"choice_id": "4385173456"}]}, {"id": "667461516", "answers": [{"choice_id": "4385173475"}]}, {"id": "667461517", "answers": [{"choice_id": "4385173481"}]}, {"id": "667461521", "answers": [{"choice_id": "4385173494"}]}, {"id": "667461526", "answers": [{"choice_id": "4385173523"}]}]}]}, "emitted_at": 1681238101179} +{"stream": "survey_responses", "data": {"id": "12731211903", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843672", "survey_id": "307785394", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=V3KUOw0NUFH27PiVeUNuTKv_2BkMDveRdHYnln_2FOZcYY0I7L0VIMlksx3CdNizHX_2BP", "analyze_url": "https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNt3d6AR0J1aeeTU4KsCULsx8_3D?respondent_id=12731211903", "total_time": 36, "date_modified": "2021-06-10T10:06:21+00:00", "date_created": "2021-06-10T10:05:44+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785394/responses/12731211903", "pages": [{"id": "168831344", "questions": []}, {"id": "168831345", "questions": [{"id": "667461468", "answers": [{"choice_id": "4385173229"}]}, {"id": "667461471", "answers": [{"choice_id": "4385173239"}]}, {"id": "667461473", "answers": [{"choice_id": "4385173256"}]}, {"id": "667461476", "answers": [{"choice_id": "4385173271"}]}, {"id": "667461498", "answers": [{"choice_id": "4385173416"}]}]}, {"id": "168831352", "questions": [{"id": "667461513", "answers": [{"choice_id": "4385173456"}]}, {"id": "667461516", "answers": [{"choice_id": "4385173477"}]}, {"id": "667461517", "answers": [{"choice_id": "4385173484"}]}, {"id": "667461521", "answers": [{"choice_id": "4385173494"}]}, {"id": "667461526", "answers": [{"choice_id": "4385173526"}]}]}]}, "emitted_at": 1681238101180} +{"stream": "survey_responses", "data": {"id": "12731231636", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843672", "survey_id": "307785394", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=xv8ZLGu_2FUg9VAJ8hvx10oji6MvB1PbiAyA98qWpExvZvSaPKJ7cIFH8nZktkDKH0", "analyze_url": "https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNt3d6AR0J1aeeTU4KsCULsx8_3D?respondent_id=12731231636", "total_time": 36, "date_modified": "2021-06-10T10:14:08+00:00", "date_created": "2021-06-10T10:13:32+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785394/responses/12731231636", "pages": [{"id": "168831344", "questions": []}, {"id": "168831345", "questions": [{"id": "667461468", "answers": [{"choice_id": "4385173226"}]}, {"id": "667461471", "answers": [{"choice_id": "4385173237"}]}, {"id": "667461473", "answers": [{"choice_id": "4385173258"}]}, {"id": "667461476", "answers": [{"choice_id": "4385173270"}]}, {"id": "667461498", "answers": [{"choice_id": "4385173413"}]}]}, {"id": "168831352", "questions": [{"id": "667461513", "answers": [{"choice_id": "4385173454"}]}, {"id": "667461516", "answers": [{"choice_id": "4385173475"}]}, {"id": "667461517", "answers": [{"choice_id": "4385173486"}]}, {"id": "667461521", "answers": [{"choice_id": "4385173492"}]}, {"id": "667461526", "answers": [{"choice_id": "4385173527"}]}]}]}, "emitted_at": 1681238101180} +{"stream": "survey_responses", "data": {"id": "12731250495", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843672", "survey_id": "307785394", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=juR_2BEnc_2BsJLlCc6Sg7p2Ql_2B4icSx_2BsZwo_2FU1RVgYxqI2OzngMKnAUlrdJUS39ewn", "analyze_url": "https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNt3d6AR0J1aeeTU4KsCULsx8_3D?respondent_id=12731250495", "total_time": 36, "date_modified": "2021-06-10T10:21:58+00:00", "date_created": "2021-06-10T10:21:21+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785394/responses/12731250495", "pages": [{"id": "168831344", "questions": []}, {"id": "168831345", "questions": [{"id": "667461468", "answers": [{"choice_id": "4385173229"}]}, {"id": "667461471", "answers": [{"choice_id": "4385173237"}]}, {"id": "667461473", "answers": [{"choice_id": "4385173257"}]}, {"id": "667461476", "answers": [{"choice_id": "4385173268"}]}, {"id": "667461498", "answers": [{"choice_id": "4385173415"}]}]}, {"id": "168831352", "questions": [{"id": "667461513", "answers": [{"choice_id": "4385173459"}]}, {"id": "667461516", "answers": [{"choice_id": "4385173474"}]}, {"id": "667461517", "answers": [{"choice_id": "4385173486"}]}, {"id": "667461521", "answers": [{"choice_id": "4385173492"}]}, {"id": "667461526", "answers": [{"choice_id": "4385173526"}]}]}]}, "emitted_at": 1681238101181} +{"stream": "survey_responses", "data": {"id": "12731268932", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843672", "survey_id": "307785394", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=vXLZxpfaNUwy1JRrQLJCNL0kcVa5U5M5FtCofSN4MCcTJt9om9nRi2D4C4xJeXUg", "analyze_url": "https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNt3d6AR0J1aeeTU4KsCULsx8_3D?respondent_id=12731268932", "total_time": 35, "date_modified": "2021-06-10T10:29:36+00:00", "date_created": "2021-06-10T10:29:00+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785394/responses/12731268932", "pages": [{"id": "168831344", "questions": []}, {"id": "168831345", "questions": [{"id": "667461468", "answers": [{"choice_id": "4385173228"}]}, {"id": "667461471", "answers": [{"choice_id": "4385173242"}]}, {"id": "667461473", "answers": [{"choice_id": "4385173257"}]}, {"id": "667461476", "answers": [{"choice_id": "4385173271"}]}, {"id": "667461498", "answers": [{"choice_id": "4385173412"}]}]}, {"id": "168831352", "questions": [{"id": "667461513", "answers": [{"choice_id": "4385173454"}]}, {"id": "667461516", "answers": [{"choice_id": "4385173475"}]}, {"id": "667461517", "answers": [{"choice_id": "4385173483"}]}, {"id": "667461521", "answers": [{"choice_id": "4385173493"}]}, {"id": "667461526", "answers": [{"choice_id": "4385173524"}]}]}]}, "emitted_at": 1681238101181} +{"stream": "survey_responses", "data": {"id": "12731289280", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843672", "survey_id": "307785394", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=M4Lzmv89J2ZSnoBKgwxsZqDP3em9icPdsBglzN7NQB_2BM5AQ1bWpjH53fB0IsVZi6", "analyze_url": "https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNt3d6AR0J1aeeTU4KsCULsx8_3D?respondent_id=12731289280", "total_time": 36, "date_modified": "2021-06-10T10:37:44+00:00", "date_created": "2021-06-10T10:37:08+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785394/responses/12731289280", "pages": [{"id": "168831344", "questions": []}, {"id": "168831345", "questions": [{"id": "667461468", "answers": [{"choice_id": "4385173227"}]}, {"id": "667461471", "answers": [{"choice_id": "4385173242"}]}, {"id": "667461473", "answers": [{"choice_id": "4385173258"}]}, {"id": "667461476", "answers": [{"choice_id": "4385173270"}]}, {"id": "667461498", "answers": [{"choice_id": "4385173416"}]}]}, {"id": "168831352", "questions": [{"id": "667461513", "answers": [{"choice_id": "4385173454"}]}, {"id": "667461516", "answers": [{"choice_id": "4385173477"}]}, {"id": "667461517", "answers": [{"choice_id": "4385173485"}]}, {"id": "667461521", "answers": [{"choice_id": "4385173492"}]}, {"id": "667461526", "answers": [{"choice_id": "4385173526"}]}]}]}, "emitted_at": 1681238101182} +{"stream": "survey_responses", "data": {"id": "12731308800", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843672", "survey_id": "307785394", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=GQAEVhmAlwb5r_2FWfXNC_2Fqzqv5ULovU_2BGovk8oDp5nCvL2982DEXHbEhjSg4A3FdA", "analyze_url": "https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNt3d6AR0J1aeeTU4KsCULsx8_3D?respondent_id=12731308800", "total_time": 39, "date_modified": "2021-06-10T10:45:33+00:00", "date_created": "2021-06-10T10:44:54+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785394/responses/12731308800", "pages": [{"id": "168831344", "questions": []}, {"id": "168831345", "questions": [{"id": "667461468", "answers": [{"choice_id": "4385173227"}]}, {"id": "667461471", "answers": [{"choice_id": "4385173239"}]}, {"id": "667461473", "answers": [{"choice_id": "4385173256"}]}, {"id": "667461476", "answers": [{"choice_id": "4385173271"}]}, {"id": "667461498", "answers": [{"choice_id": "4385173412"}]}]}, {"id": "168831352", "questions": [{"id": "667461513", "answers": [{"choice_id": "4385173459"}]}, {"id": "667461516", "answers": [{"choice_id": "4385173473"}]}, {"id": "667461517", "answers": [{"choice_id": "4385173482"}]}, {"id": "667461521", "answers": [{"choice_id": "4385173494"}]}, {"id": "667461526", "answers": [{"choice_id": "4385173526"}]}]}]}, "emitted_at": 1681238101182} +{"stream": "survey_responses", "data": {"id": "12731328082", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843672", "survey_id": "307785394", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=MwpXysDo7Lhe8X4oi_2BfwDcfgG4XMlnjXbj783SvdsQcVCLn0Y0mvT87cyq6wLtri", "analyze_url": "https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNt3d6AR0J1aeeTU4KsCULsx8_3D?respondent_id=12731328082", "total_time": 36, "date_modified": "2021-06-10T10:53:17+00:00", "date_created": "2021-06-10T10:52:41+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785394/responses/12731328082", "pages": [{"id": "168831344", "questions": []}, {"id": "168831345", "questions": [{"id": "667461468", "answers": [{"choice_id": "4385173227"}]}, {"id": "667461471", "answers": [{"choice_id": "4385173241"}]}, {"id": "667461473", "answers": [{"choice_id": "4385173256"}]}, {"id": "667461476", "answers": [{"choice_id": "4385173271"}]}, {"id": "667461498", "answers": [{"choice_id": "4385173413"}]}]}, {"id": "168831352", "questions": [{"id": "667461513", "answers": [{"choice_id": "4385173456"}]}, {"id": "667461516", "answers": [{"choice_id": "4385173477"}]}, {"id": "667461517", "answers": [{"choice_id": "4385173486"}]}, {"id": "667461521", "answers": [{"choice_id": "4385173492"}]}, {"id": "667461526", "answers": [{"choice_id": "4385173524"}]}]}]}, "emitted_at": 1681238101183} +{"stream": "survey_responses", "data": {"id": "12731346960", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843672", "survey_id": "307785394", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=i9GzbJPTq_2BCfXqXCYc91kWSkkbD40J_2FGL8hESaU68w7nuZXOyFZ7xNpNth1mmf72", "analyze_url": "https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNt3d6AR0J1aeeTU4KsCULsx8_3D?respondent_id=12731346960", "total_time": 35, "date_modified": "2021-06-10T11:00:58+00:00", "date_created": "2021-06-10T11:00:22+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785394/responses/12731346960", "pages": [{"id": "168831344", "questions": []}, {"id": "168831345", "questions": [{"id": "667461468", "answers": [{"choice_id": "4385173229"}]}, {"id": "667461471", "answers": [{"choice_id": "4385173241"}]}, {"id": "667461473", "answers": [{"choice_id": "4385173256"}]}, {"id": "667461476", "answers": [{"choice_id": "4385173270"}]}, {"id": "667461498", "answers": [{"choice_id": "4385173412"}]}]}, {"id": "168831352", "questions": [{"id": "667461513", "answers": [{"choice_id": "4385173457"}]}, {"id": "667461516", "answers": [{"choice_id": "4385173476"}]}, {"id": "667461517", "answers": [{"choice_id": "4385173483"}]}, {"id": "667461521", "answers": [{"choice_id": "4385173493"}]}, {"id": "667461526", "answers": [{"choice_id": "4385173527"}]}]}]}, "emitted_at": 1681238101183} +{"stream": "survey_responses", "data": {"id": "12731044345", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843682", "survey_id": "307785402", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=RiSWqWbbXVsX_2BRIyudfJwY_2BODcC0aHC0L77gSNMTF5T_2BsPWUy2vlIWpXf01Hqy8k", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxuFqiaqWbXDPfS4KhzQnJ4c_3D?respondent_id=12731044345", "total_time": 34, "date_modified": "2021-06-10T08:48:50+00:00", "date_created": "2021-06-10T08:48:16+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785402/responses/12731044345", "pages": [{"id": "168831357", "questions": []}, {"id": "168831358", "questions": [{"id": "667461529", "answers": [{"choice_id": "4385173538"}]}, {"id": "667461530", "answers": [{"choice_id": "4385173549"}]}, {"id": "667461549", "answers": [{"choice_id": "4385173661"}]}, {"id": "667461551", "answers": [{"choice_id": "4385173676"}]}, {"id": "667461553", "answers": [{"choice_id": "4385173681"}]}]}, {"id": "168831365", "questions": [{"id": "667461555", "answers": [{"choice_id": "4385173713"}]}, {"id": "667461558", "answers": [{"choice_id": "4385173732"}]}, {"id": "667461561", "answers": [{"choice_id": "4385173756"}]}, {"id": "667461580", "answers": [{"choice_id": "4385174059"}]}, {"id": "667461598", "answers": [{"choice_id": "4385174182"}]}]}]}, "emitted_at": 1681238102523} +{"stream": "survey_responses", "data": {"id": "12731058644", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843682", "survey_id": "307785402", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=8fjqeuyiG6EvuMWbYy64yqPXBnCSWaEpW8DInIUYXRbFyqerWPCENf5izNrPGoNw", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxuFqiaqWbXDPfS4KhzQnJ4c_3D?respondent_id=12731058644", "total_time": 33, "date_modified": "2021-06-10T08:56:31+00:00", "date_created": "2021-06-10T08:55:58+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785402/responses/12731058644", "pages": [{"id": "168831357", "questions": []}, {"id": "168831358", "questions": [{"id": "667461529", "answers": [{"choice_id": "4385173537"}]}, {"id": "667461530", "answers": [{"choice_id": "4385173550"}]}, {"id": "667461549", "answers": [{"choice_id": "4385173662"}]}, {"id": "667461551", "answers": [{"choice_id": "4385173677"}]}, {"id": "667461553", "answers": [{"choice_id": "4385173678"}]}]}, {"id": "168831365", "questions": [{"id": "667461555", "answers": [{"choice_id": "4385173713"}]}, {"id": "667461558", "answers": [{"choice_id": "4385173729"}]}, {"id": "667461561", "answers": [{"choice_id": "4385173755"}]}, {"id": "667461580", "answers": [{"choice_id": "4385174063"}]}, {"id": "667461598", "answers": [{"choice_id": "4385174183"}]}]}]}, "emitted_at": 1681238102523} +{"stream": "survey_responses", "data": {"id": "12731073567", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843682", "survey_id": "307785402", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=ILVcHPPYp1qBeboZrnUw9zU8OfPDI3pBaSHE_2FPA1mcsZYgDgyEvD2DNJEXG50BwI", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxuFqiaqWbXDPfS4KhzQnJ4c_3D?respondent_id=12731073567", "total_time": 34, "date_modified": "2021-06-10T09:04:16+00:00", "date_created": "2021-06-10T09:03:42+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785402/responses/12731073567", "pages": [{"id": "168831357", "questions": []}, {"id": "168831358", "questions": [{"id": "667461529", "answers": [{"choice_id": "4385173537"}]}, {"id": "667461530", "answers": [{"choice_id": "4385173552"}]}, {"id": "667461549", "answers": [{"choice_id": "4385173663"}]}, {"id": "667461551", "answers": [{"choice_id": "4385173675"}]}, {"id": "667461553", "answers": [{"choice_id": "4385173681"}]}]}, {"id": "168831365", "questions": [{"id": "667461555", "answers": [{"choice_id": "4385173711"}]}, {"id": "667461558", "answers": [{"choice_id": "4385173734"}]}, {"id": "667461561", "answers": [{"choice_id": "4385173756"}]}, {"id": "667461580", "answers": [{"choice_id": "4385174066"}]}, {"id": "667461598", "answers": [{"choice_id": "4385174183"}]}]}]}, "emitted_at": 1681238102524} +{"stream": "survey_responses", "data": {"id": "12731089919", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843682", "survey_id": "307785402", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=WJVGjucUzW8fBD4StuC_2FFZoPB0pCtugYpTzgDrCOMnJyyzUp5Q2v55jJ8xqcAaJv", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxuFqiaqWbXDPfS4KhzQnJ4c_3D?respondent_id=12731089919", "total_time": 33, "date_modified": "2021-06-10T09:12:00+00:00", "date_created": "2021-06-10T09:11:26+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785402/responses/12731089919", "pages": [{"id": "168831357", "questions": []}, {"id": "168831358", "questions": [{"id": "667461529", "answers": [{"choice_id": "4385173536"}]}, {"id": "667461530", "answers": [{"choice_id": "4385173551"}]}, {"id": "667461549", "answers": [{"choice_id": "4385173658"}]}, {"id": "667461551", "answers": [{"choice_id": "4385173675"}]}, {"id": "667461553", "answers": [{"choice_id": "4385173681"}]}]}, {"id": "168831365", "questions": [{"id": "667461555", "answers": [{"choice_id": "4385173714"}]}, {"id": "667461558", "answers": [{"choice_id": "4385173728"}]}, {"id": "667461561", "answers": [{"choice_id": "4385173755"}]}, {"id": "667461580", "answers": [{"choice_id": "4385174060"}]}, {"id": "667461598", "answers": [{"choice_id": "4385174184"}]}]}]}, "emitted_at": 1681238102524} +{"stream": "survey_responses", "data": {"id": "12731106311", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843682", "survey_id": "307785402", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=pYr2BTIwVP0O3EzGC27aOOaCA0hnWvJ3FzJOiB_2Fhgw0UUSDh2QpQTcjrfXltZ8dv", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxuFqiaqWbXDPfS4KhzQnJ4c_3D?respondent_id=12731106311", "total_time": 33, "date_modified": "2021-06-10T09:19:41+00:00", "date_created": "2021-06-10T09:19:07+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785402/responses/12731106311", "pages": [{"id": "168831357", "questions": []}, {"id": "168831358", "questions": [{"id": "667461529", "answers": [{"choice_id": "4385173537"}]}, {"id": "667461530", "answers": [{"choice_id": "4385173549"}]}, {"id": "667461549", "answers": [{"choice_id": "4385173663"}]}, {"id": "667461551", "answers": [{"choice_id": "4385173675"}]}, {"id": "667461553", "answers": [{"choice_id": "4385173680"}]}]}, {"id": "168831365", "questions": [{"id": "667461555", "answers": [{"choice_id": "4385173712"}]}, {"id": "667461558", "answers": [{"choice_id": "4385173727"}]}, {"id": "667461561", "answers": [{"choice_id": "4385173757"}]}, {"id": "667461580", "answers": [{"choice_id": "4385174061"}]}, {"id": "667461598", "answers": [{"choice_id": "4385174186"}]}]}]}, "emitted_at": 1681238102525} +{"stream": "survey_responses", "data": {"id": "12731123001", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843682", "survey_id": "307785402", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=iMOq3PmDu_2Fpfu6Lqltp5VPoRV2azTczcfDSAY7AjMIzECAtQhUwU_2FNMCCwq_2BSvsN", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxuFqiaqWbXDPfS4KhzQnJ4c_3D?respondent_id=12731123001", "total_time": 34, "date_modified": "2021-06-10T09:27:23+00:00", "date_created": "2021-06-10T09:26:49+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785402/responses/12731123001", "pages": [{"id": "168831357", "questions": []}, {"id": "168831358", "questions": [{"id": "667461529", "answers": [{"choice_id": "4385173540"}]}, {"id": "667461530", "answers": [{"choice_id": "4385173550"}]}, {"id": "667461549", "answers": [{"choice_id": "4385173658"}]}, {"id": "667461551", "answers": [{"choice_id": "4385173676"}]}, {"id": "667461553", "answers": [{"choice_id": "4385173682"}]}]}, {"id": "168831365", "questions": [{"id": "667461555", "answers": [{"choice_id": "4385173713"}]}, {"id": "667461558", "answers": [{"choice_id": "4385173727"}]}, {"id": "667461561", "answers": [{"choice_id": "4385173757"}]}, {"id": "667461580", "answers": [{"choice_id": "4385174059"}]}, {"id": "667461598", "answers": [{"choice_id": "4385174186"}]}]}]}, "emitted_at": 1681238102525} +{"stream": "survey_responses", "data": {"id": "12731140625", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843682", "survey_id": "307785402", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=QTesi81CB_2BwJ62wJ8op06oDEuscTPvq1ke99azBrWELfhmlgdyrrpw0NVegVV_2BE7", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxuFqiaqWbXDPfS4KhzQnJ4c_3D?respondent_id=12731140625", "total_time": 33, "date_modified": "2021-06-10T09:35:05+00:00", "date_created": "2021-06-10T09:34:32+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785402/responses/12731140625", "pages": [{"id": "168831357", "questions": []}, {"id": "168831358", "questions": [{"id": "667461529", "answers": [{"choice_id": "4385173538"}]}, {"id": "667461530", "answers": [{"choice_id": "4385173553"}]}, {"id": "667461549", "answers": [{"choice_id": "4385173661"}]}, {"id": "667461551", "answers": [{"choice_id": "4385173675"}]}, {"id": "667461553", "answers": [{"choice_id": "4385173678"}]}]}, {"id": "168831365", "questions": [{"id": "667461555", "answers": [{"choice_id": "4385173713"}]}, {"id": "667461558", "answers": [{"choice_id": "4385173729"}]}, {"id": "667461561", "answers": [{"choice_id": "4385173755"}]}, {"id": "667461580", "answers": [{"choice_id": "4385174062"}]}, {"id": "667461598", "answers": [{"choice_id": "4385174185"}]}]}]}, "emitted_at": 1681238102526} +{"stream": "survey_responses", "data": {"id": "12731157855", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843682", "survey_id": "307785402", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=Y_2BseyWnN45hqrdC63g5th2srbJCqZZuaaHgJaVUVwfuBPwNI2IdB2Dc1yEhLsRcy", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxuFqiaqWbXDPfS4KhzQnJ4c_3D?respondent_id=12731157855", "total_time": 33, "date_modified": "2021-06-10T09:42:46+00:00", "date_created": "2021-06-10T09:42:12+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785402/responses/12731157855", "pages": [{"id": "168831357", "questions": []}, {"id": "168831358", "questions": [{"id": "667461529", "answers": [{"choice_id": "4385173536"}]}, {"id": "667461530", "answers": [{"choice_id": "4385173553"}]}, {"id": "667461549", "answers": [{"choice_id": "4385173661"}]}, {"id": "667461551", "answers": [{"choice_id": "4385173676"}]}, {"id": "667461553", "answers": [{"choice_id": "4385173681"}]}]}, {"id": "168831365", "questions": [{"id": "667461555", "answers": [{"choice_id": "4385173713"}]}, {"id": "667461558", "answers": [{"choice_id": "4385173727"}]}, {"id": "667461561", "answers": [{"choice_id": "4385173756"}]}, {"id": "667461580", "answers": [{"choice_id": "4385174060"}]}, {"id": "667461598", "answers": [{"choice_id": "4385174183"}]}]}]}, "emitted_at": 1681238102526} +{"stream": "survey_responses", "data": {"id": "12731175182", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843682", "survey_id": "307785402", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=wvlpuaxYEnle4EG2hvBzqRUelWi_2BwXRQmZSU2ru959wJ7Ly3p7I9sg1wjhKu7Bm_2F", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxuFqiaqWbXDPfS4KhzQnJ4c_3D?respondent_id=12731175182", "total_time": 27, "date_modified": "2021-06-10T09:50:26+00:00", "date_created": "2021-06-10T09:49:58+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785402/responses/12731175182", "pages": [{"id": "168831357", "questions": []}, {"id": "168831358", "questions": []}, {"id": "168831365", "questions": [{"id": "667461555", "answers": [{"choice_id": "4385173713"}]}, {"id": "667461558", "answers": [{"choice_id": "4385173731"}]}, {"id": "667461561", "answers": [{"choice_id": "4385173756"}]}, {"id": "667461580", "answers": [{"choice_id": "4385174061"}]}, {"id": "667461598", "answers": [{"choice_id": "4385174186"}]}]}]}, "emitted_at": 1681238102527} +{"stream": "survey_responses", "data": {"id": "12731193598", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843682", "survey_id": "307785402", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=mqmf_2BkbhXVJbx4WQXC0_2F72pU_2FFf6FkOVA8_2F7REJy4j9HAEPKg_2BCPmL8F2wfc6SKi", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxuFqiaqWbXDPfS4KhzQnJ4c_3D?respondent_id=12731193598", "total_time": 37, "date_modified": "2021-06-10T09:58:58+00:00", "date_created": "2021-06-10T09:58:20+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785402/responses/12731193598", "pages": [{"id": "168831357", "questions": []}, {"id": "168831358", "questions": [{"id": "667461529", "answers": [{"choice_id": "4385173539"}]}, {"id": "667461530", "answers": [{"choice_id": "4385173553"}]}, {"id": "667461549", "answers": [{"choice_id": "4385173657"}]}, {"id": "667461551", "answers": [{"choice_id": "4385173676"}]}, {"id": "667461553", "answers": [{"choice_id": "4385173681"}]}]}, {"id": "168831365", "questions": [{"id": "667461555", "answers": [{"choice_id": "4385173714"}]}, {"id": "667461558", "answers": [{"choice_id": "4385173733"}]}, {"id": "667461561", "answers": [{"choice_id": "4385173757"}]}, {"id": "667461580", "answers": [{"choice_id": "4385174065"}]}, {"id": "667461598", "answers": [{"choice_id": "4385174185"}]}]}]}, "emitted_at": 1681238102527} +{"stream": "survey_responses", "data": {"id": "12731213708", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843682", "survey_id": "307785402", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=FmbWXWfmfbsDK8MEuKSsHPviZSUYgchniK99dQeGSFpf_2BWnh6cTWlg0o5YRIRtn7", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxuFqiaqWbXDPfS4KhzQnJ4c_3D?respondent_id=12731213708", "total_time": 33, "date_modified": "2021-06-10T10:06:59+00:00", "date_created": "2021-06-10T10:06:25+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785402/responses/12731213708", "pages": [{"id": "168831357", "questions": []}, {"id": "168831358", "questions": [{"id": "667461529", "answers": [{"choice_id": "4385173537"}]}, {"id": "667461530", "answers": [{"choice_id": "4385173550"}]}, {"id": "667461549", "answers": [{"choice_id": "4385173663"}]}, {"id": "667461551", "answers": [{"choice_id": "4385173677"}]}, {"id": "667461553", "answers": [{"choice_id": "4385173683"}]}]}, {"id": "168831365", "questions": [{"id": "667461555", "answers": [{"choice_id": "4385173712"}]}, {"id": "667461558", "answers": [{"choice_id": "4385173729"}]}, {"id": "667461561", "answers": [{"choice_id": "4385173755"}]}, {"id": "667461580", "answers": [{"choice_id": "4385174061"}]}, {"id": "667461598", "answers": [{"choice_id": "4385174182"}]}]}]}, "emitted_at": 1681238102527} +{"stream": "survey_responses", "data": {"id": "12731233283", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843682", "survey_id": "307785402", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=VRo6oIX2X5OOWhsAVRYKuhrXr5zszr6duv29Vq3RdwAJMtFNcQqAJk71Bi4Oq3Bo", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxuFqiaqWbXDPfS4KhzQnJ4c_3D?respondent_id=12731233283", "total_time": 33, "date_modified": "2021-06-10T10:14:47+00:00", "date_created": "2021-06-10T10:14:13+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785402/responses/12731233283", "pages": [{"id": "168831357", "questions": []}, {"id": "168831358", "questions": [{"id": "667461529", "answers": [{"choice_id": "4385173540"}]}, {"id": "667461530", "answers": [{"choice_id": "4385173554"}]}, {"id": "667461549", "answers": [{"choice_id": "4385173656"}]}, {"id": "667461551", "answers": [{"choice_id": "4385173676"}]}, {"id": "667461553", "answers": [{"choice_id": "4385173679"}]}]}, {"id": "168831365", "questions": [{"id": "667461555", "answers": [{"choice_id": "4385173715"}]}, {"id": "667461558", "answers": [{"choice_id": "4385173727"}]}, {"id": "667461561", "answers": [{"choice_id": "4385173756"}]}, {"id": "667461580", "answers": [{"choice_id": "4385174063"}]}, {"id": "667461598", "answers": [{"choice_id": "4385174185"}]}]}]}, "emitted_at": 1681238102528} +{"stream": "survey_responses", "data": {"id": "12731252105", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843682", "survey_id": "307785402", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=TQiDe8sSx4_2FuWzT1Lr7RKGOBO2iwOmTuPPOzcvcHL45tRjbdZSW9UHv6_2B2nLtY6n", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxuFqiaqWbXDPfS4KhzQnJ4c_3D?respondent_id=12731252105", "total_time": 34, "date_modified": "2021-06-10T10:22:37+00:00", "date_created": "2021-06-10T10:22:03+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785402/responses/12731252105", "pages": [{"id": "168831357", "questions": []}, {"id": "168831358", "questions": [{"id": "667461529", "answers": [{"choice_id": "4385173537"}]}, {"id": "667461530", "answers": [{"choice_id": "4385173552"}]}, {"id": "667461549", "answers": [{"choice_id": "4385173659"}]}, {"id": "667461551", "answers": [{"choice_id": "4385173675"}]}, {"id": "667461553", "answers": [{"choice_id": "4385173682"}]}]}, {"id": "168831365", "questions": [{"id": "667461555", "answers": [{"choice_id": "4385173712"}]}, {"id": "667461558", "answers": [{"choice_id": "4385173731"}]}, {"id": "667461561", "answers": [{"choice_id": "4385173755"}]}, {"id": "667461580", "answers": [{"choice_id": "4385174062"}]}, {"id": "667461598", "answers": [{"choice_id": "4385174182"}]}]}]}, "emitted_at": 1681238102529} +{"stream": "survey_responses", "data": {"id": "12731270690", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843682", "survey_id": "307785402", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=ipONp_2F6FrM7HwOh1_2BpJXXqL65aZR6EN_2BmCdmmlM4Etuv_2BqfU5P8wsYtpW2_2BvsbR2", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxuFqiaqWbXDPfS4KhzQnJ4c_3D?respondent_id=12731270690", "total_time": 33, "date_modified": "2021-06-10T10:30:16+00:00", "date_created": "2021-06-10T10:29:42+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785402/responses/12731270690", "pages": [{"id": "168831357", "questions": []}, {"id": "168831358", "questions": [{"id": "667461529", "answers": [{"choice_id": "4385173536"}]}, {"id": "667461530", "answers": [{"choice_id": "4385173550"}]}, {"id": "667461549", "answers": [{"choice_id": "4385173656"}]}, {"id": "667461551", "answers": [{"choice_id": "4385173677"}]}, {"id": "667461553", "answers": [{"choice_id": "4385173681"}]}]}, {"id": "168831365", "questions": [{"id": "667461555", "answers": [{"choice_id": "4385173715"}]}, {"id": "667461558", "answers": [{"choice_id": "4385173734"}]}, {"id": "667461561", "answers": [{"choice_id": "4385173757"}]}, {"id": "667461580", "answers": [{"choice_id": "4385174064"}]}, {"id": "667461598", "answers": [{"choice_id": "4385174186"}]}]}]}, "emitted_at": 1681238102529} +{"stream": "survey_responses", "data": {"id": "12731290962", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843682", "survey_id": "307785402", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=eWOUaV5xBiUO9JblKm5rYeLfk2_2FPRiygYknRKYIPlBC3Vl9805OBGP8f2kjnm0r2", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxuFqiaqWbXDPfS4KhzQnJ4c_3D?respondent_id=12731290962", "total_time": 33, "date_modified": "2021-06-10T10:38:22+00:00", "date_created": "2021-06-10T10:37:48+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785402/responses/12731290962", "pages": [{"id": "168831357", "questions": []}, {"id": "168831358", "questions": [{"id": "667461529", "answers": [{"choice_id": "4385173538"}]}, {"id": "667461530", "answers": [{"choice_id": "4385173553"}]}, {"id": "667461549", "answers": [{"choice_id": "4385173658"}]}, {"id": "667461551", "answers": [{"choice_id": "4385173675"}]}, {"id": "667461553", "answers": [{"choice_id": "4385173678"}]}]}, {"id": "168831365", "questions": [{"id": "667461555", "answers": [{"choice_id": "4385173715"}]}, {"id": "667461558", "answers": [{"choice_id": "4385173729"}]}, {"id": "667461561", "answers": [{"choice_id": "4385173757"}]}, {"id": "667461580", "answers": [{"choice_id": "4385174066"}]}, {"id": "667461598", "answers": [{"choice_id": "4385174182"}]}]}]}, "emitted_at": 1681238102530} +{"stream": "survey_responses", "data": {"id": "12731310541", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843682", "survey_id": "307785402", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=wFNF4x4oPfyHaT5uvGstRuK1DUDfrHJyxBXB95bRgrB_2FdJojFuoGIhxA0BIH0XSO", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxuFqiaqWbXDPfS4KhzQnJ4c_3D?respondent_id=12731310541", "total_time": 37, "date_modified": "2021-06-10T10:46:14+00:00", "date_created": "2021-06-10T10:45:37+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785402/responses/12731310541", "pages": [{"id": "168831357", "questions": []}, {"id": "168831358", "questions": [{"id": "667461529", "answers": [{"choice_id": "4385173540"}]}, {"id": "667461530", "answers": [{"choice_id": "4385173551"}]}, {"id": "667461549", "answers": [{"choice_id": "4385173661"}]}, {"id": "667461551", "answers": [{"choice_id": "4385173677"}]}, {"id": "667461553", "answers": [{"choice_id": "4385173682"}]}]}, {"id": "168831365", "questions": [{"id": "667461555", "answers": [{"choice_id": "4385173712"}]}, {"id": "667461558", "answers": [{"choice_id": "4385173732"}]}, {"id": "667461561", "answers": [{"choice_id": "4385173756"}]}, {"id": "667461580", "answers": [{"choice_id": "4385174059"}]}, {"id": "667461598", "answers": [{"choice_id": "4385174184"}]}]}]}, "emitted_at": 1681238102530} +{"stream": "survey_responses", "data": {"id": "12731329746", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843682", "survey_id": "307785402", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=vGkpaT5QedSZDkH1LkdPEMwKHIlyZ2mKjKyt8tgek5uzfoU30oxZnac34WvjYm1h", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxuFqiaqWbXDPfS4KhzQnJ4c_3D?respondent_id=12731329746", "total_time": 33, "date_modified": "2021-06-10T10:53:55+00:00", "date_created": "2021-06-10T10:53:21+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785402/responses/12731329746", "pages": [{"id": "168831357", "questions": []}, {"id": "168831358", "questions": [{"id": "667461529", "answers": [{"choice_id": "4385173540"}]}, {"id": "667461530", "answers": [{"choice_id": "4385173551"}]}, {"id": "667461549", "answers": [{"choice_id": "4385173661"}]}, {"id": "667461551", "answers": [{"choice_id": "4385173677"}]}, {"id": "667461553", "answers": [{"choice_id": "4385173682"}]}]}, {"id": "168831365", "questions": [{"id": "667461555", "answers": [{"choice_id": "4385173711"}]}, {"id": "667461558", "answers": [{"choice_id": "4385173732"}]}, {"id": "667461561", "answers": [{"choice_id": "4385173755"}]}, {"id": "667461580", "answers": [{"choice_id": "4385174059"}]}, {"id": "667461598", "answers": [{"choice_id": "4385174182"}]}]}]}, "emitted_at": 1681238102531} +{"stream": "survey_responses", "data": {"id": "12731348717", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843682", "survey_id": "307785402", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=vuWK6q7Hz9dNybRoH2rP8Ux0qNc_2B0E3lMUmtDlPUbslKbHc7FranQhTJxg_2BIo3Pw", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxuFqiaqWbXDPfS4KhzQnJ4c_3D?respondent_id=12731348717", "total_time": 26, "date_modified": "2021-06-10T11:01:30+00:00", "date_created": "2021-06-10T11:01:03+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785402/responses/12731348717", "pages": [{"id": "168831357", "questions": []}, {"id": "168831358", "questions": []}, {"id": "168831365", "questions": [{"id": "667461555", "answers": [{"choice_id": "4385173714"}]}, {"id": "667461558", "answers": [{"choice_id": "4385173729"}]}, {"id": "667461561", "answers": [{"choice_id": "4385173755"}]}, {"id": "667461580", "answers": [{"choice_id": "4385174059"}]}, {"id": "667461598", "answers": [{"choice_id": "4385174186"}]}]}]}, "emitted_at": 1681238102531} +{"stream": "survey_responses", "data": {"id": "12731045521", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843688", "survey_id": "307785408", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=0SWEpDfTb_2FAVFz7Ddryxk5koNgVExk8Oke4TJ8tz6QD5Eqc7uoqHQWRcLUi7yOAb", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxvvr7YEM4YZ5j7dMDUtBHEw_3D?respondent_id=12731045521", "total_time": 32, "date_modified": "2021-06-10T08:49:26+00:00", "date_created": "2021-06-10T08:48:54+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785408/responses/12731045521", "pages": [{"id": "168831381", "questions": []}, {"id": "168831382", "questions": [{"id": "667461606", "answers": [{"choice_id": "4385174255"}]}, {"id": "667461628", "answers": [{"choice_id": "4385174361"}]}, {"id": "667461630", "answers": [{"choice_id": "4385174372"}]}, {"id": "667461651", "answers": [{"choice_id": "4385174482"}]}, {"id": "667461652", "answers": [{"choice_id": "4385174496"}]}]}, {"id": "168831388", "questions": [{"id": "667461666", "answers": [{"choice_id": "4385174598"}]}, {"id": "667461670", "answers": [{"choice_id": "4385174621"}]}, {"id": "667461674", "answers": [{"choice_id": "4385174634"}]}, {"id": "667461676", "answers": [{"choice_id": "4385174649"}]}, {"id": "667461686", "answers": [{"choice_id": "4385174678"}]}]}]}, "emitted_at": 1681238104077} +{"stream": "survey_responses", "data": {"id": "12731059832", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843688", "survey_id": "307785408", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=vhiMNZdaQtV6_2FPkJM_2BP8UtinkM87qYXz4VjmfwvWnjK1NFrLnN1P_2FH3w9GU7JUxX", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxvvr7YEM4YZ5j7dMDUtBHEw_3D?respondent_id=12731059832", "total_time": 32, "date_modified": "2021-06-10T08:57:08+00:00", "date_created": "2021-06-10T08:56:36+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785408/responses/12731059832", "pages": [{"id": "168831381", "questions": []}, {"id": "168831382", "questions": [{"id": "667461606", "answers": [{"choice_id": "4385174252"}]}, {"id": "667461628", "answers": [{"choice_id": "4385174361"}]}, {"id": "667461630", "answers": [{"choice_id": "4385174370"}]}, {"id": "667461651", "answers": [{"choice_id": "4385174485"}]}, {"id": "667461652", "answers": [{"choice_id": "4385174497"}]}]}, {"id": "168831388", "questions": [{"id": "667461666", "answers": [{"choice_id": "4385174600"}]}, {"id": "667461670", "answers": [{"choice_id": "4385174621"}]}, {"id": "667461674", "answers": [{"choice_id": "4385174635"}]}, {"id": "667461676", "answers": [{"choice_id": "4385174644"}]}, {"id": "667461686", "answers": [{"choice_id": "4385174677"}]}]}]}, "emitted_at": 1681238104078} +{"stream": "survey_responses", "data": {"id": "12731074829", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843688", "survey_id": "307785408", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=ZUZi7r7io9fCwXP7l4K5oirdqpAhNEdbesFS73p617lSOzxuK5oKGDsqiK8zdA8E", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxvvr7YEM4YZ5j7dMDUtBHEw_3D?respondent_id=12731074829", "total_time": 31, "date_modified": "2021-06-10T09:04:52+00:00", "date_created": "2021-06-10T09:04:20+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785408/responses/12731074829", "pages": [{"id": "168831381", "questions": []}, {"id": "168831382", "questions": [{"id": "667461606", "answers": [{"choice_id": "4385174255"}]}, {"id": "667461628", "answers": [{"choice_id": "4385174360"}]}, {"id": "667461630", "answers": [{"choice_id": "4385174372"}]}, {"id": "667461651", "answers": [{"choice_id": "4385174485"}]}, {"id": "667461652", "answers": [{"choice_id": "4385174498"}]}]}, {"id": "168831388", "questions": [{"id": "667461666", "answers": [{"choice_id": "4385174599"}]}, {"id": "667461670", "answers": [{"choice_id": "4385174622"}]}, {"id": "667461674", "answers": [{"choice_id": "4385174634"}]}, {"id": "667461676", "answers": [{"choice_id": "4385174645"}]}, {"id": "667461686", "answers": [{"choice_id": "4385174678"}]}]}]}, "emitted_at": 1681238104078} +{"stream": "survey_responses", "data": {"id": "12731091270", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843688", "survey_id": "307785408", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=eL4vDkGrDZfi5BiJC001E_2FoL_2Bo1mAtZxB97VuOw0Ue7x2Y_2Fvj9cWXWEFAG1_2For6z", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxvvr7YEM4YZ5j7dMDUtBHEw_3D?respondent_id=12731091270", "total_time": 33, "date_modified": "2021-06-10T09:12:38+00:00", "date_created": "2021-06-10T09:12:05+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785408/responses/12731091270", "pages": [{"id": "168831381", "questions": []}, {"id": "168831382", "questions": [{"id": "667461606", "answers": [{"choice_id": "4385174252"}]}, {"id": "667461628", "answers": [{"choice_id": "4385174360"}]}, {"id": "667461630", "answers": [{"choice_id": "4385174372"}]}, {"id": "667461651", "answers": [{"choice_id": "4385174483"}]}, {"id": "667461652", "answers": [{"choice_id": "4385174493"}]}]}, {"id": "168831388", "questions": [{"id": "667461666", "answers": [{"choice_id": "4385174600"}]}, {"id": "667461670", "answers": [{"choice_id": "4385174623"}]}, {"id": "667461674", "answers": [{"choice_id": "4385174634"}]}, {"id": "667461676", "answers": [{"choice_id": "4385174646"}]}, {"id": "667461686", "answers": [{"choice_id": "4385174678"}]}]}]}, "emitted_at": 1681238104079} +{"stream": "survey_responses", "data": {"id": "12731107632", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843688", "survey_id": "307785408", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=VzELV_2Bc1GPJfJsXsRIabrQVAi9_2BSDOS6F_2B68zR_2BP4u98MGtxvy_2BeSOjCh5s1HKa5", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxvvr7YEM4YZ5j7dMDUtBHEw_3D?respondent_id=12731107632", "total_time": 32, "date_modified": "2021-06-10T09:20:17+00:00", "date_created": "2021-06-10T09:19:44+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785408/responses/12731107632", "pages": [{"id": "168831381", "questions": []}, {"id": "168831382", "questions": [{"id": "667461606", "answers": [{"choice_id": "4385174254"}]}, {"id": "667461628", "answers": [{"choice_id": "4385174360"}]}, {"id": "667461630", "answers": [{"choice_id": "4385174370"}]}, {"id": "667461651", "answers": [{"choice_id": "4385174483"}]}, {"id": "667461652", "answers": [{"choice_id": "4385174496"}]}]}, {"id": "168831388", "questions": [{"id": "667461666", "answers": [{"choice_id": "4385174598"}]}, {"id": "667461670", "answers": [{"choice_id": "4385174621"}]}, {"id": "667461674", "answers": [{"choice_id": "4385174636"}]}, {"id": "667461676", "answers": [{"choice_id": "4385174649"}]}, {"id": "667461686", "answers": [{"choice_id": "4385174678"}]}]}]}, "emitted_at": 1681238104079} +{"stream": "survey_responses", "data": {"id": "12731124423", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843688", "survey_id": "307785408", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=QIT1tkBlcTVTBkkHm7dpbWllNNXyBriN0RSobCplWUm5LoJpA_2FC93B5N8fFbc0Zs", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxvvr7YEM4YZ5j7dMDUtBHEw_3D?respondent_id=12731124423", "total_time": 31, "date_modified": "2021-06-10T09:28:00+00:00", "date_created": "2021-06-10T09:27:28+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785408/responses/12731124423", "pages": [{"id": "168831381", "questions": []}, {"id": "168831382", "questions": [{"id": "667461606", "answers": [{"choice_id": "4385174252"}]}, {"id": "667461628", "answers": [{"choice_id": "4385174362"}]}, {"id": "667461630", "answers": [{"choice_id": "4385174371"}]}, {"id": "667461651", "answers": [{"choice_id": "4385174484"}]}, {"id": "667461652", "answers": [{"choice_id": "4385174498"}]}]}, {"id": "168831388", "questions": [{"id": "667461666", "answers": [{"choice_id": "4385174598"}]}, {"id": "667461670", "answers": [{"choice_id": "4385174620"}]}, {"id": "667461674", "answers": [{"choice_id": "4385174634"}]}, {"id": "667461676", "answers": [{"choice_id": "4385174645"}]}, {"id": "667461686", "answers": [{"choice_id": "4385174677"}]}]}]}, "emitted_at": 1681238104080} +{"stream": "survey_responses", "data": {"id": "12731142107", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843688", "survey_id": "307785408", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=URkLmYAmILJkZgOzrwRncRyLAGrxL_2FGHdeqmjSqrSYjS_2F7cjqy4e3nBWqRsOOv0r", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxvvr7YEM4YZ5j7dMDUtBHEw_3D?respondent_id=12731142107", "total_time": 31, "date_modified": "2021-06-10T09:35:42+00:00", "date_created": "2021-06-10T09:35:10+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785408/responses/12731142107", "pages": [{"id": "168831381", "questions": []}, {"id": "168831382", "questions": [{"id": "667461606", "answers": [{"choice_id": "4385174252"}]}, {"id": "667461628", "answers": [{"choice_id": "4385174361"}]}, {"id": "667461630", "answers": [{"choice_id": "4385174370"}]}, {"id": "667461651", "answers": [{"choice_id": "4385174482"}]}, {"id": "667461652", "answers": [{"choice_id": "4385174498"}]}]}, {"id": "168831388", "questions": [{"id": "667461666", "answers": [{"choice_id": "4385174601"}]}, {"id": "667461670", "answers": [{"choice_id": "4385174621"}]}, {"id": "667461674", "answers": [{"choice_id": "4385174636"}]}, {"id": "667461676", "answers": [{"choice_id": "4385174643"}]}, {"id": "667461686", "answers": [{"choice_id": "4385174677"}]}]}]}, "emitted_at": 1681238104080} +{"stream": "survey_responses", "data": {"id": "12731159230", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843688", "survey_id": "307785408", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=O0O262_2ByzCPZXGbz3NLSBdAJfB9rNAyLSz4YX4ubxd_2BIrVIo2jJ_2Bzk8KQNxCcjXb", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxvvr7YEM4YZ5j7dMDUtBHEw_3D?respondent_id=12731159230", "total_time": 31, "date_modified": "2021-06-10T09:43:20+00:00", "date_created": "2021-06-10T09:42:49+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785408/responses/12731159230", "pages": [{"id": "168831381", "questions": []}, {"id": "168831382", "questions": [{"id": "667461606", "answers": [{"choice_id": "4385174252"}]}, {"id": "667461628", "answers": [{"choice_id": "4385174361"}]}, {"id": "667461630", "answers": [{"choice_id": "4385174371"}]}, {"id": "667461651", "answers": [{"choice_id": "4385174482"}]}, {"id": "667461652", "answers": [{"choice_id": "4385174497"}]}]}, {"id": "168831388", "questions": [{"id": "667461666", "answers": [{"choice_id": "4385174600"}]}, {"id": "667461670", "answers": [{"choice_id": "4385174623"}]}, {"id": "667461674", "answers": [{"choice_id": "4385174636"}]}, {"id": "667461676", "answers": [{"choice_id": "4385174643"}]}, {"id": "667461686", "answers": [{"choice_id": "4385174677"}]}]}]}, "emitted_at": 1681238104080} +{"stream": "survey_responses", "data": {"id": "12731176347", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843688", "survey_id": "307785408", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=LVM3eoF2xyKmckO7bkvBEw0i_2FoajMZMA_2Fc_2FVcI95ReDdVUuQQ_2Babxm1nILbPUISC", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxvvr7YEM4YZ5j7dMDUtBHEw_3D?respondent_id=12731176347", "total_time": 33, "date_modified": "2021-06-10T09:51:04+00:00", "date_created": "2021-06-10T09:50:30+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785408/responses/12731176347", "pages": [{"id": "168831381", "questions": []}, {"id": "168831382", "questions": [{"id": "667461606", "answers": [{"choice_id": "4385174253"}]}, {"id": "667461628", "answers": [{"choice_id": "4385174361"}]}, {"id": "667461630", "answers": [{"choice_id": "4385174370"}]}, {"id": "667461651", "answers": [{"choice_id": "4385174486"}]}, {"id": "667461652", "answers": [{"choice_id": "4385174497"}]}]}, {"id": "168831388", "questions": [{"id": "667461666", "answers": [{"choice_id": "4385174600"}]}, {"id": "667461670", "answers": [{"choice_id": "4385174621"}]}, {"id": "667461674", "answers": [{"choice_id": "4385174634"}]}, {"id": "667461676", "answers": [{"choice_id": "4385174649"}]}, {"id": "667461686", "answers": [{"choice_id": "4385174676"}]}]}]}, "emitted_at": 1681238104081} +{"stream": "survey_responses", "data": {"id": "12731195152", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843688", "survey_id": "307785408", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=SDlGK5Xxc7lpBehXWM_2B47eY24yPtwGB4NBBehIidUXtChXAXOgjA_2F8CxAHW97nUA", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxvvr7YEM4YZ5j7dMDUtBHEw_3D?respondent_id=12731195152", "total_time": 35, "date_modified": "2021-06-10T09:59:39+00:00", "date_created": "2021-06-10T09:59:03+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785408/responses/12731195152", "pages": [{"id": "168831381", "questions": []}, {"id": "168831382", "questions": [{"id": "667461606", "answers": [{"choice_id": "4385174253"}]}, {"id": "667461628", "answers": [{"choice_id": "4385174360"}]}, {"id": "667461630", "answers": [{"choice_id": "4385174372"}]}, {"id": "667461651", "answers": [{"choice_id": "4385174485"}]}, {"id": "667461652", "answers": [{"choice_id": "4385174497"}]}]}, {"id": "168831388", "questions": [{"id": "667461666", "answers": [{"choice_id": "4385174598"}]}, {"id": "667461670", "answers": [{"choice_id": "4385174621"}]}, {"id": "667461674", "answers": [{"choice_id": "4385174635"}]}, {"id": "667461676", "answers": [{"choice_id": "4385174647"}]}, {"id": "667461686", "answers": [{"choice_id": "4385174677"}]}]}]}, "emitted_at": 1681238104081} +{"stream": "survey_responses", "data": {"id": "12731215248", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843688", "survey_id": "307785408", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=ft3pzaYpicC1h6Ah26Wj0wRkCmTK1Yu7BTxxTQ0po_2FC00oJaK3YHuX9XV5WB5T60", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxvvr7YEM4YZ5j7dMDUtBHEw_3D?respondent_id=12731215248", "total_time": 32, "date_modified": "2021-06-10T10:07:34+00:00", "date_created": "2021-06-10T10:07:02+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785408/responses/12731215248", "pages": [{"id": "168831381", "questions": []}, {"id": "168831382", "questions": [{"id": "667461606", "answers": [{"choice_id": "4385174253"}]}, {"id": "667461628", "answers": [{"choice_id": "4385174360"}]}, {"id": "667461630", "answers": [{"choice_id": "4385174370"}]}, {"id": "667461651", "answers": [{"choice_id": "4385174485"}]}, {"id": "667461652", "answers": [{"choice_id": "4385174493"}]}]}, {"id": "168831388", "questions": [{"id": "667461666", "answers": [{"choice_id": "4385174599"}]}, {"id": "667461670", "answers": [{"choice_id": "4385174623"}]}, {"id": "667461674", "answers": [{"choice_id": "4385174635"}]}, {"id": "667461676", "answers": [{"choice_id": "4385174646"}]}, {"id": "667461686", "answers": [{"choice_id": "4385174676"}]}]}]}, "emitted_at": 1681238104082} +{"stream": "survey_responses", "data": {"id": "12731234853", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843688", "survey_id": "307785408", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=2W_2B7kOeuvhHSN7s0oUQZQwt3iySUHWLv5qq0xw8gojd0RWsFcAMM6NILAk_2FZJbdX", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxvvr7YEM4YZ5j7dMDUtBHEw_3D?respondent_id=12731234853", "total_time": 31, "date_modified": "2021-06-10T10:15:23+00:00", "date_created": "2021-06-10T10:14:51+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785408/responses/12731234853", "pages": [{"id": "168831381", "questions": []}, {"id": "168831382", "questions": [{"id": "667461606", "answers": [{"choice_id": "4385174252"}]}, {"id": "667461628", "answers": [{"choice_id": "4385174361"}]}, {"id": "667461630", "answers": [{"choice_id": "4385174372"}]}, {"id": "667461651", "answers": [{"choice_id": "4385174485"}]}, {"id": "667461652", "answers": [{"choice_id": "4385174497"}]}]}, {"id": "168831388", "questions": [{"id": "667461666", "answers": [{"choice_id": "4385174601"}]}, {"id": "667461670", "answers": [{"choice_id": "4385174622"}]}, {"id": "667461674", "answers": [{"choice_id": "4385174634"}]}, {"id": "667461676", "answers": [{"choice_id": "4385174650"}]}, {"id": "667461686", "answers": [{"choice_id": "4385174678"}]}]}]}, "emitted_at": 1681238104082} +{"stream": "survey_responses", "data": {"id": "12731253651", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843688", "survey_id": "307785408", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=0yectjqXWcCHTMhyv3pd4HqlpH_2FjslmIWhw59V07Em7ASx_2FsHGk5ZFvSKThLEb3f", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxvvr7YEM4YZ5j7dMDUtBHEw_3D?respondent_id=12731253651", "total_time": 31, "date_modified": "2021-06-10T10:23:12+00:00", "date_created": "2021-06-10T10:22:41+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785408/responses/12731253651", "pages": [{"id": "168831381", "questions": []}, {"id": "168831382", "questions": [{"id": "667461606", "answers": [{"choice_id": "4385174252"}]}, {"id": "667461628", "answers": [{"choice_id": "4385174362"}]}, {"id": "667461630", "answers": [{"choice_id": "4385174370"}]}, {"id": "667461651", "answers": [{"choice_id": "4385174482"}]}, {"id": "667461652", "answers": [{"choice_id": "4385174497"}]}]}, {"id": "168831388", "questions": [{"id": "667461666", "answers": [{"choice_id": "4385174600"}]}, {"id": "667461670", "answers": [{"choice_id": "4385174621"}]}, {"id": "667461674", "answers": [{"choice_id": "4385174636"}]}, {"id": "667461676", "answers": [{"choice_id": "4385174646"}]}, {"id": "667461686", "answers": [{"choice_id": "4385174677"}]}]}]}, "emitted_at": 1681238104082} +{"stream": "survey_responses", "data": {"id": "12731272195", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843688", "survey_id": "307785408", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=owJREFrbM6_2Fu6fqPiWbW3rJ15U9q9DLJ_2BlAZMq6Gi_2BGKjQ2AGiWVNE5RBM_2FKLyMs", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxvvr7YEM4YZ5j7dMDUtBHEw_3D?respondent_id=12731272195", "total_time": 31, "date_modified": "2021-06-10T10:30:52+00:00", "date_created": "2021-06-10T10:30:20+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785408/responses/12731272195", "pages": [{"id": "168831381", "questions": []}, {"id": "168831382", "questions": [{"id": "667461606", "answers": [{"choice_id": "4385174255"}]}, {"id": "667461628", "answers": [{"choice_id": "4385174361"}]}, {"id": "667461630", "answers": [{"choice_id": "4385174371"}]}, {"id": "667461651", "answers": [{"choice_id": "4385174482"}]}, {"id": "667461652", "answers": [{"choice_id": "4385174495"}]}]}, {"id": "168831388", "questions": [{"id": "667461666", "answers": [{"choice_id": "4385174600"}]}, {"id": "667461670", "answers": [{"choice_id": "4385174623"}]}, {"id": "667461674", "answers": [{"choice_id": "4385174634"}]}, {"id": "667461676", "answers": [{"choice_id": "4385174646"}]}, {"id": "667461686", "answers": [{"choice_id": "4385174677"}]}]}]}, "emitted_at": 1681238104083} +{"stream": "survey_responses", "data": {"id": "12731292534", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843688", "survey_id": "307785408", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=zAYnDyr9Dxd9Em4YpxVpKH7_2BtJbsMFiI0bH89dH2LhhokCrBrNjKYFI0nacFEIpq", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxvvr7YEM4YZ5j7dMDUtBHEw_3D?respondent_id=12731292534", "total_time": 32, "date_modified": "2021-06-10T10:38:57+00:00", "date_created": "2021-06-10T10:38:25+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785408/responses/12731292534", "pages": [{"id": "168831381", "questions": []}, {"id": "168831382", "questions": [{"id": "667461606", "answers": [{"choice_id": "4385174254"}]}, {"id": "667461628", "answers": [{"choice_id": "4385174362"}]}, {"id": "667461630", "answers": [{"choice_id": "4385174370"}]}, {"id": "667461651", "answers": [{"choice_id": "4385174483"}]}, {"id": "667461652", "answers": [{"choice_id": "4385174494"}]}]}, {"id": "168831388", "questions": [{"id": "667461666", "answers": [{"choice_id": "4385174599"}]}, {"id": "667461670", "answers": [{"choice_id": "4385174623"}]}, {"id": "667461674", "answers": [{"choice_id": "4385174634"}]}, {"id": "667461676", "answers": [{"choice_id": "4385174649"}]}, {"id": "667461686", "answers": [{"choice_id": "4385174678"}]}]}]}, "emitted_at": 1681238104083} +{"stream": "survey_responses", "data": {"id": "12731312208", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843688", "survey_id": "307785408", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=uSGoF1sumsyf_2B3iBhadh_2F73k_2BM0dxEwFfAlWl70AwraHwQHcfj64cL0FUt9StbRx", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxvvr7YEM4YZ5j7dMDUtBHEw_3D?respondent_id=12731312208", "total_time": 34, "date_modified": "2021-06-10T10:46:52+00:00", "date_created": "2021-06-10T10:46:18+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785408/responses/12731312208", "pages": [{"id": "168831381", "questions": []}, {"id": "168831382", "questions": [{"id": "667461606", "answers": [{"choice_id": "4385174255"}]}, {"id": "667461628", "answers": [{"choice_id": "4385174361"}]}, {"id": "667461630", "answers": [{"choice_id": "4385174371"}]}, {"id": "667461651", "answers": [{"choice_id": "4385174486"}]}, {"id": "667461652", "answers": [{"choice_id": "4385174495"}]}]}, {"id": "168831388", "questions": [{"id": "667461666", "answers": [{"choice_id": "4385174598"}]}, {"id": "667461670", "answers": [{"choice_id": "4385174621"}]}, {"id": "667461674", "answers": [{"choice_id": "4385174635"}]}, {"id": "667461676", "answers": [{"choice_id": "4385174643"}]}, {"id": "667461686", "answers": [{"choice_id": "4385174677"}]}]}]}, "emitted_at": 1681238104084} +{"stream": "survey_responses", "data": {"id": "12731331308", "recipient_id": "", "collection_mode": "default", "response_status": "completed", "custom_value": "", "first_name": "", "last_name": "", "email_address": "", "ip_address": "91.242.192.88", "language": null, "logic_path": {}, "metadata": {"contact": {}}, "page_path": [], "collector_id": "405843688", "survey_id": "307785408", "custom_variables": {}, "edit_url": "https://www.surveymonkey.com/r/?sm=vQGF4JMphBOwv8kJxOmtjdRG81lTGr7CW73feMGxDEMLSwybystpUFV76KKxYQR6", "analyze_url": "https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxvvr7YEM4YZ5j7dMDUtBHEw_3D?respondent_id=12731331308", "total_time": 31, "date_modified": "2021-06-10T10:54:29+00:00", "date_created": "2021-06-10T10:53:58+00:00", "href": "https://api.surveymonkey.com/v3/surveys/307785408/responses/12731331308", "pages": [{"id": "168831381", "questions": []}, {"id": "168831382", "questions": [{"id": "667461606", "answers": [{"choice_id": "4385174253"}]}, {"id": "667461628", "answers": [{"choice_id": "4385174362"}]}, {"id": "667461630", "answers": [{"choice_id": "4385174370"}]}, {"id": "667461651", "answers": [{"choice_id": "4385174486"}]}, {"id": "667461652", "answers": [{"choice_id": "4385174498"}]}]}, {"id": "168831388", "questions": [{"id": "667461666", "answers": [{"choice_id": "4385174598"}]}, {"id": "667461670", "answers": [{"choice_id": "4385174620"}]}, {"id": "667461674", "answers": [{"choice_id": "4385174636"}]}, {"id": "667461676", "answers": [{"choice_id": "4385174644"}]}, {"id": "667461686", "answers": [{"choice_id": "4385174676"}]}]}]}, "emitted_at": 1681238104084} {"stream":"survey_pages","data":{"title":"sy4ara","description":"Сурвейманки жлобы","position":1,"question_count":13,"id":"165250506","href":"https://api.surveymonkey.com/v3/surveys/306079584/pages/165250506"},"emitted_at":1674149681286} {"stream":"survey_pages","data":{"title":"","description":"","position":1,"question_count":0,"id":"168831413","href":"https://api.surveymonkey.com/v3/surveys/307785429/pages/168831413"},"emitted_at":1674149682414} {"stream":"survey_pages","data":{"title":"xsgqdhdakh7x","description":"wlju6xsgkxyig0s1","position":2,"question_count":5,"id":"168831415","href":"https://api.surveymonkey.com/v3/surveys/307785429/pages/168831415"},"emitted_at":1674149682415} +{"stream":"survey_pages","data":{"title":"ajsn8v0tvicgt7u063","description":"dcwmhxdx6p8buu","position":3,"question_count":5,"id":"168831437","href":"https://api.surveymonkey.com/v3/surveys/307785429/pages/168831437"},"emitted_at":1674149682415} +{"stream":"survey_pages","data":{"title":"","description":"","position":1,"question_count":0,"id":"168831459","href":"https://api.surveymonkey.com/v3/surveys/307785444/pages/168831459"},"emitted_at":1674149683744} +{"stream":"survey_pages","data":{"title":"ijw0pw2tlfb0vd3","description":"k8tycaedxbl4","position":2,"question_count":5,"id":"168831461","href":"https://api.surveymonkey.com/v3/surveys/307785444/pages/168831461"},"emitted_at":1674149683744} +{"stream":"survey_pages","data":{"title":"krd3l3bj7vaym6pc4","description":"oy458fugj0k","position":3,"question_count":5,"id":"168831467","href":"https://api.surveymonkey.com/v3/surveys/307785444/pages/168831467"},"emitted_at":1674149683745} +{"stream":"survey_pages","data":{"title":"","description":"","position":1,"question_count":0,"id":"168831344","href":"https://api.surveymonkey.com/v3/surveys/307785394/pages/168831344"},"emitted_at":1674149684444} +{"stream":"survey_pages","data":{"title":"q4fuvltqc6","description":"7kfibw7aer8mr937a3ko","position":2,"question_count":5,"id":"168831345","href":"https://api.surveymonkey.com/v3/surveys/307785394/pages/168831345"},"emitted_at":1674149684445} +{"stream":"survey_pages","data":{"title":"p5sdpb0pus6","description":"o9gbkpmfik2x","position":3,"question_count":5,"id":"168831352","href":"https://api.surveymonkey.com/v3/surveys/307785394/pages/168831352"},"emitted_at":1674149684445} +{"stream":"survey_pages","data":{"title":"","description":"","position":1,"question_count":0,"id":"168831357","href":"https://api.surveymonkey.com/v3/surveys/307785402/pages/168831357"},"emitted_at":1674149685687} +{"stream":"survey_pages","data":{"title":"133nvr2cx99r","description":"shwtfx0edv","position":2,"question_count":5,"id":"168831358","href":"https://api.surveymonkey.com/v3/surveys/307785402/pages/168831358"},"emitted_at":1674149685687} +{"stream":"survey_pages","data":{"title":"otgwn5b4wicdemu1q","description":"s3ndgrck3qr4898qwtgh","position":3,"question_count":5,"id":"168831365","href":"https://api.surveymonkey.com/v3/surveys/307785402/pages/168831365"},"emitted_at":1674149685687} +{"stream":"survey_pages","data":{"title":"","description":"","position":1,"question_count":0,"id":"168831381","href":"https://api.surveymonkey.com/v3/surveys/307785408/pages/168831381"},"emitted_at":1674149686909} +{"stream":"survey_pages","data":{"title":"ooj54g8q2thh","description":"8hrryr258se","position":2,"question_count":5,"id":"168831382","href":"https://api.surveymonkey.com/v3/surveys/307785408/pages/168831382"},"emitted_at":1674149686909} +{"stream":"survey_pages","data":{"title":"mva5ojqgmx6wnv62as","description":"wq6q460p143mi0","position":3,"question_count":5,"id":"168831388","href":"https://api.surveymonkey.com/v3/surveys/307785408/pages/168831388"},"emitted_at":1674149686909} +{"stream":"survey_pages","data":{"title":"","description":"","position":1,"question_count":0,"id":"168830049","href":"https://api.surveymonkey.com/v3/surveys/307784834/pages/168830049"},"emitted_at":1674149687592} +{"stream":"survey_pages","data":{"title":"v3q97ckq2438fqkppcyn","description":"oforikk3wu4gin","position":2,"question_count":5,"id":"168830050","href":"https://api.surveymonkey.com/v3/surveys/307784834/pages/168830050"},"emitted_at":1674149687593} +{"stream":"survey_pages","data":{"title":"t57ybjyll8fwgu39w","description":"ttlkuqp07ua6kpsh","position":3,"question_count":5,"id":"168830060","href":"https://api.surveymonkey.com/v3/surveys/307784834/pages/168830060"},"emitted_at":1674149687594} +{"stream":"survey_pages","data":{"title":"","description":"","position":1,"question_count":0,"id":"168831470","href":"https://api.surveymonkey.com/v3/surveys/307785448/pages/168831470"},"emitted_at":1674149688355} +{"stream":"survey_pages","data":{"title":"q3wpp1ufpi5r058o","description":"ay91aymge2vuacmrl9co","position":2,"question_count":5,"id":"168831471","href":"https://api.surveymonkey.com/v3/surveys/307785448/pages/168831471"},"emitted_at":1674149688356} +{"stream":"survey_pages","data":{"title":"m345ab1u6tjjo4nn3d","description":"ec22umvdkhxd0ne575","position":3,"question_count":5,"id":"168831478","href":"https://api.surveymonkey.com/v3/surveys/307785448/pages/168831478"},"emitted_at":1674149688357} +{"stream":"survey_pages","data":{"title":"","description":"","position":1,"question_count":0,"id":"168830093","href":"https://api.surveymonkey.com/v3/surveys/307784863/pages/168830093"},"emitted_at":1674149689582} +{"stream":"survey_pages","data":{"title":"7t9dgejtlw5wsofbt","description":"mfqrejibgc831bp31","position":2,"question_count":5,"id":"168830094","href":"https://api.surveymonkey.com/v3/surveys/307784863/pages/168830094"},"emitted_at":1674149689583} +{"stream":"survey_pages","data":{"title":"9kri0ao4fh8e3i0j2hms","description":"dh7qg9jc1k65x","position":3,"question_count":5,"id":"168830108","href":"https://api.surveymonkey.com/v3/surveys/307784863/pages/168830108"},"emitted_at":1674149689583} +{"stream":"survey_pages","data":{"title":"","description":"","position":1,"question_count":0,"id":"168830067","href":"https://api.surveymonkey.com/v3/surveys/307784846/pages/168830067"},"emitted_at":1674149690505} +{"stream":"survey_pages","data":{"title":"9vpm4e5ecjis5hge0p","description":"r6e38n2fp33skkjrl","position":2,"question_count":5,"id":"168830068","href":"https://api.surveymonkey.com/v3/surveys/307784846/pages/168830068"},"emitted_at":1674149690506} +{"stream":"survey_pages","data":{"title":"nvv6kl2njpt5b1l2p","description":"rd2j09sxv4ssu976g","position":3,"question_count":5,"id":"168830074","href":"https://api.surveymonkey.com/v3/surveys/307784846/pages/168830074"},"emitted_at":1674149690506} +{"stream":"survey_pages","data":{"title":"","description":"","position":1,"question_count":0,"id":"168830082","href":"https://api.surveymonkey.com/v3/surveys/307784856/pages/168830082"},"emitted_at":1674149691681} +{"stream":"survey_pages","data":{"title":"v1yxmq6n1ix","description":"aeoyc3hiak9vui1hevm","position":2,"question_count":5,"id":"168830083","href":"https://api.surveymonkey.com/v3/surveys/307784856/pages/168830083"},"emitted_at":1674149691682} +{"stream":"survey_pages","data":{"title":"g84sqoltkc2jen8iaj0","description":"ss2439kly1u4j1k1","position":3,"question_count":5,"id":"168830087","href":"https://api.surveymonkey.com/v3/surveys/307784856/pages/168830087"},"emitted_at":1674149691682} +{"stream":"survey_pages","data":{"title":"","description":"","position":1,"question_count":0,"id":"168831335","href":"https://api.surveymonkey.com/v3/surveys/307785388/pages/168831335"},"emitted_at":1674149692346} +{"stream":"survey_pages","data":{"title":"k91l1laduo8","description":"4tmb1eke23bi1l2ev","position":2,"question_count":5,"id":"168831336","href":"https://api.surveymonkey.com/v3/surveys/307785388/pages/168831336"},"emitted_at":1674149692347} +{"stream":"survey_pages","data":{"title":"gisj5ms868kxxv","description":"4g1iiqg0sa15pbk","position":3,"question_count":5,"id":"168831340","href":"https://api.surveymonkey.com/v3/surveys/307785388/pages/168831340"},"emitted_at":1674149692348} +{"stream":"survey_pages","data":{"title":"","description":"","position":1,"question_count":0,"id":"168831392","href":"https://api.surveymonkey.com/v3/surveys/307785415/pages/168831392"},"emitted_at":1674149693064} +{"stream":"survey_pages","data":{"title":"p71uerk2uh7k5","description":"92cb9d98j15jmfo","position":2,"question_count":5,"id":"168831393","href":"https://api.surveymonkey.com/v3/surveys/307785415/pages/168831393"},"emitted_at":1674149693064} +{"stream":"survey_pages","data":{"title":"bqd6mn6bdgv5u1rnstkx","description":"e0jrpexyx6t","position":3,"question_count":5,"id":"168831402","href":"https://api.surveymonkey.com/v3/surveys/307785415/pages/168831402"},"emitted_at":1674149693065} +{"stream":"survey_pages","data":{"title":"","description":"","position":1,"question_count":0,"id":"36710109","href":"https://api.surveymonkey.com/v3/surveys/510388524/pages/36710109"},"emitted_at":1674149694191} {"stream":"survey_questions","data":{"id":"652286724","position":1,"visible":true,"family":"click_map","subtype":"single","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"Click on the area you like best about this product.","image":{"url":"https://surveymonkey-assets.s3.amazonaws.com/survey/306079584/20535460-8f99-41b0-ac96-b9f4f2aecb96.png"}}],"href":"https://api.surveymonkey.com/v3/surveys/306079584/pages/165250506/questions/652286724","answers":{"rows":[{"position":1,"visible":true,"text":"Click 1","id":"4285525098"}]},"page_id":"165250506"},"emitted_at":1674149694470} {"stream":"survey_questions","data":{"id":"652286725","position":2,"visible":true,"family":"click_map","subtype":"single","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"Click on the area you like least about this product.","image":{"url":"https://surveymonkey-assets.s3.amazonaws.com/survey/306079584/79215d25-9dbc-4870-91cd-3a36778aae52.png"}}],"href":"https://api.surveymonkey.com/v3/surveys/306079584/pages/165250506/questions/652286725","answers":{"rows":[{"position":1,"visible":true,"text":"Click 1","id":"4285525102"}]},"page_id":"165250506"},"emitted_at":1674149694470} {"stream":"survey_questions","data":{"id":"652286726","position":3,"visible":true,"family":"open_ended","subtype":"essay","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"Why did you make that selection?"}],"href":"https://api.surveymonkey.com/v3/surveys/306079584/pages/165250506/questions/652286726","page_id":"165250506"},"emitted_at":1674149694471} +{"stream":"survey_questions","data":{"id":"652286715","position":4,"visible":true,"family":"single_choice","subtype":"vertical_two_col","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"What is your first reaction to the product?"}],"href":"https://api.surveymonkey.com/v3/surveys/306079584/pages/165250506/questions/652286715","answers":{"choices":[{"position":1,"visible":true,"text":"Very positive","quiz_options":{"score":0},"id":"4285525063"},{"position":2,"visible":true,"text":"Somewhat positive","quiz_options":{"score":0},"id":"4285525064"},{"position":3,"visible":true,"text":"Neutral","quiz_options":{"score":0},"id":"4285525065"},{"position":4,"visible":true,"text":"Somewhat negative","quiz_options":{"score":0},"id":"4285525066"},{"position":5,"visible":true,"text":"Very negative","quiz_options":{"score":0},"id":"4285525067"}]},"page_id":"165250506"},"emitted_at":1674149694471} +{"stream":"survey_questions","data":{"id":"652286721","position":5,"visible":true,"family":"single_choice","subtype":"vertical_two_col","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"How would you rate the quality of the product?"}],"href":"https://api.surveymonkey.com/v3/surveys/306079584/pages/165250506/questions/652286721","answers":{"choices":[{"position":1,"visible":true,"text":"Very high quality","quiz_options":{"score":0},"id":"4285525083"},{"position":2,"visible":true,"text":"High quality","quiz_options":{"score":0},"id":"4285525084"},{"position":3,"visible":true,"text":"Neither high nor low quality","quiz_options":{"score":0},"id":"4285525085"},{"position":4,"visible":true,"text":"Low quality","quiz_options":{"score":0},"id":"4285525086"},{"position":5,"visible":true,"text":"Very low quality","quiz_options":{"score":0},"id":"4285525087"}]},"page_id":"165250506"},"emitted_at":1674149694472} +{"stream":"survey_questions","data":{"id":"652286716","position":6,"visible":true,"family":"single_choice","subtype":"vertical_two_col","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"How innovative is the product?"}],"href":"https://api.surveymonkey.com/v3/surveys/306079584/pages/165250506/questions/652286716","answers":{"choices":[{"position":1,"visible":true,"text":"Extremely innovative","quiz_options":{"score":0},"id":"4285525068"},{"position":2,"visible":true,"text":"Very innovative","quiz_options":{"score":0},"id":"4285525069"},{"position":3,"visible":true,"text":"Somewhat innovative","quiz_options":{"score":0},"id":"4285525070"},{"position":4,"visible":true,"text":"Not so innovative","quiz_options":{"score":0},"id":"4285525071"},{"position":5,"visible":true,"text":"Not at all innovative","quiz_options":{"score":0},"id":"4285525072"}]},"page_id":"165250506"},"emitted_at":1674149694473} +{"stream":"survey_questions","data":{"id":"652286718","position":7,"visible":true,"family":"single_choice","subtype":"vertical_two_col","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"When you think about the product, do you think of it as something you need or don’t need?"}],"href":"https://api.surveymonkey.com/v3/surveys/306079584/pages/165250506/questions/652286718","answers":{"choices":[{"position":1,"visible":true,"text":"Definitely need","quiz_options":{"score":0},"id":"4285525078"},{"position":2,"visible":true,"text":"Probably need","quiz_options":{"score":0},"id":"4285525079"},{"position":3,"visible":true,"text":"Neutral","quiz_options":{"score":0},"id":"4285525080"},{"position":4,"visible":true,"text":"Probably don’t need","quiz_options":{"score":0},"id":"4285525081"},{"position":5,"visible":true,"text":"Definitely don’t need","quiz_options":{"score":0},"id":"4285525082"}]},"page_id":"165250506"},"emitted_at":1674149694474} +{"stream":"survey_questions","data":{"id":"652286722","position":8,"visible":true,"family":"single_choice","subtype":"vertical_two_col","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"How would you rate the value for money of the product?"}],"href":"https://api.surveymonkey.com/v3/surveys/306079584/pages/165250506/questions/652286722","answers":{"choices":[{"position":1,"visible":true,"text":"Excellent","quiz_options":{"score":0},"id":"4285525088"},{"position":2,"visible":true,"text":"Above average","quiz_options":{"score":0},"id":"4285525089"},{"position":3,"visible":true,"text":"Average","quiz_options":{"score":0},"id":"4285525090"},{"position":4,"visible":true,"text":"Below average","quiz_options":{"score":0},"id":"4285525091"},{"position":5,"visible":true,"text":"Poor","quiz_options":{"score":0},"id":"4285525092"}]},"page_id":"165250506"},"emitted_at":1674149694474} +{"stream":"survey_questions","data":{"id":"652286717","position":9,"visible":true,"family":"single_choice","subtype":"vertical_two_col","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"If the product were available today, how likely would you be to buy the product?"}],"href":"https://api.surveymonkey.com/v3/surveys/306079584/pages/165250506/questions/652286717","answers":{"choices":[{"position":1,"visible":true,"text":"Extremely likely","quiz_options":{"score":0},"id":"4285525073"},{"position":2,"visible":true,"text":"Very likely","quiz_options":{"score":0},"id":"4285525074"},{"position":3,"visible":true,"text":"Somewhat likely","quiz_options":{"score":0},"id":"4285525075"},{"position":4,"visible":true,"text":"Not so likely","quiz_options":{"score":0},"id":"4285525076"},{"position":5,"visible":true,"text":"Not at all likely","quiz_options":{"score":0},"id":"4285525077"}]},"page_id":"165250506"},"emitted_at":1674149694475} +{"stream":"survey_questions","data":{"id":"652286723","position":10,"visible":true,"family":"single_choice","subtype":"vertical_two_col","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"How likely are you to replace your current product with the product?"}],"href":"https://api.surveymonkey.com/v3/surveys/306079584/pages/165250506/questions/652286723","answers":{"choices":[{"position":1,"visible":true,"text":"Extremely likely ","quiz_options":{"score":0},"id":"4285525093"},{"position":2,"visible":true,"text":"Very likely ","quiz_options":{"score":0},"id":"4285525094"},{"position":3,"visible":true,"text":"Somewhat likely","quiz_options":{"score":0},"id":"4285525095"},{"position":4,"visible":true,"text":"Not so likely","quiz_options":{"score":0},"id":"4285525096"},{"position":5,"visible":true,"text":"Not at all likely","quiz_options":{"score":0},"id":"4285525097"}]},"page_id":"165250506"},"emitted_at":1674149694475} +{"stream":"survey_questions","data":{"id":"652286714","position":11,"visible":true,"family":"matrix","subtype":"rating","layout":{"bottom_spacing":0,"col_width":80,"col_width_format":"percent","left_spacing":0,"num_chars":null,"num_lines":null,"position":"new_row","right_spacing":0,"top_spacing":0,"width":100,"width_format":"percent"},"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"How likely is it that you would recommend our new product to a friend or colleague?"}],"href":"https://api.surveymonkey.com/v3/surveys/306079584/pages/165250506/questions/652286714","answers":{"rows":[{"position":1,"visible":true,"text":"","id":"4285525061"}],"choices":[{"position":1,"visible":true,"text":"Not at all likely - 0","id":"4285525050","is_na":false,"weight":-100,"description":"Not at all likely"},{"position":2,"visible":true,"text":"1","id":"4285525051","is_na":false,"weight":-100,"description":""},{"position":3,"visible":true,"text":"2","id":"4285525052","is_na":false,"weight":-100,"description":""},{"position":4,"visible":true,"text":"3","id":"4285525053","is_na":false,"weight":-100,"description":""},{"position":5,"visible":true,"text":"4","id":"4285525054","is_na":false,"weight":-100,"description":""},{"position":6,"visible":true,"text":"5","id":"4285525055","is_na":false,"weight":-100,"description":""},{"position":7,"visible":true,"text":"6","id":"4285525056","is_na":false,"weight":-100,"description":""},{"position":8,"visible":true,"text":"7","id":"4285525057","is_na":false,"weight":0,"description":""},{"position":9,"visible":true,"text":"8","id":"4285525058","is_na":false,"weight":0,"description":""},{"position":10,"visible":true,"text":"9","id":"4285525059","is_na":false,"weight":100,"description":""},{"position":11,"visible":true,"text":"Extremely likely - 10","id":"4285525060","is_na":false,"weight":100,"description":"Extremely likely"}]},"page_id":"165250506"},"emitted_at":1674149694476} +{"stream":"survey_questions","data":{"id":"652286719","position":12,"visible":true,"family":"open_ended","subtype":"essay","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"In your own words, what are the things that you like most about this new product?"}],"href":"https://api.surveymonkey.com/v3/surveys/306079584/pages/165250506/questions/652286719","page_id":"165250506"},"emitted_at":1674149694476} +{"stream":"survey_questions","data":{"id":"652286720","position":13,"visible":true,"family":"open_ended","subtype":"essay","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"In your own words, what are the things that you would most like to improve in this new product?"}],"href":"https://api.surveymonkey.com/v3/surveys/306079584/pages/165250506/questions/652286720","page_id":"165250506"},"emitted_at":1674149694477} +{"stream":"survey_questions","data":{"id":"667461858","position":1,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"vprw9pgg3d xiygcvd0suru k7rews838g6qc ndsukv2 7sa31urnvoskixw c52sg4uoete874i"}],"href":"https://api.surveymonkey.com/v3/surveys/307785429/pages/168831415/questions/667461858","answers":{"choices":[{"position":1,"visible":true,"text":"m5kpo9621yynjey kdt5w6pkkit yqyocxqf yw1p3uh2e5b 7gtmvs4 6em5ugqat x6pmhcfrvq4pit t67pif54aj jbgure","quiz_options":{"score":0},"id":"4385175366"},{"position":2,"visible":true,"text":"usdfft kvi9yqh1m38w3m 6uxryyvhrk1 nfxlt gnhjy826e rqks3jjuyj9hd 3y8755o","quiz_options":{"score":0},"id":"4385175367"},{"position":3,"visible":true,"text":"m6xv3yca7 up9u0qwx23h2skj 0cjlw19k5emypgm awi5tg l9atp kv4jrd73y9","quiz_options":{"score":0},"id":"4385175368"},{"position":4,"visible":true,"text":"todhc7 krw2v8qa rt2iu19vhxyw1dp x6oav54yak4vj yu4le2fc7 fksvl ejbr7x2u69 k9n9n7g3f","quiz_options":{"score":0},"id":"4385175369"}]},"page_id":"168831415"},"emitted_at":1674149694578} +{"stream":"survey_questions","data":{"id":"667461861","position":2,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"rl3uabslq46p mnwh0fle3xfs ejupx8e26q55va svfm11o"}],"href":"https://api.surveymonkey.com/v3/surveys/307785429/pages/168831415/questions/667461861","answers":{"choices":[{"position":1,"visible":true,"text":"m6g15xqsuwpbh3 x0116lkpod 5vkgg7duiq23sp ot884xd67v6fv2q 1u2mpgo ttj3ehahbljf1j6 pwj46w1d","quiz_options":{"score":0},"id":"4385175380"},{"position":2,"visible":true,"text":"cuff7 mbn2k1hxd6n6 jg9kffdkccjh bpodqpt2wtxu 7x38qxmvg42ap qpv0cddfumvix s0vv161iytceelx","quiz_options":{"score":0},"id":"4385175381"},{"position":3,"visible":true,"text":"jm5q6yu4rn pl8wwv23lnxs ou5r8m3np4fis6 6wlatg yeh3kafns0 h8u0o8f yhqni064ev6","quiz_options":{"score":0},"id":"4385175382"}]},"page_id":"168831415"},"emitted_at":1674149694579} +{"stream":"survey_questions","data":{"id":"667461876","position":3,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"hn4xnf ox0joj4inoy6ja jh02428n qeqxm9nopevjca sccwladi v63ks6mdqf0h0 4pug94eya 5et1g3t4 exbryyy6hv9mvd"}],"href":"https://api.surveymonkey.com/v3/surveys/307785429/pages/168831415/questions/667461876","answers":{"choices":[{"position":1,"visible":true,"text":"w6nvr mkrj8q1g 740smg3nda m3afibg8 224jb59fon975t w9t8ma","quiz_options":{"score":0},"id":"4385175447"},{"position":2,"visible":true,"text":"cerw942pk xv1wg4gk4l7jq q3grdgasaol 75ghj ppo6ivm3r hxodiktx9rxs","quiz_options":{"score":0},"id":"4385175448"},{"position":3,"visible":true,"text":"5os82a1jwgygye 61dhsf6v sgy0ui7ib78ws7f j3pymv","quiz_options":{"score":0},"id":"4385175449"}]},"page_id":"168831415"},"emitted_at":1674149694580} +{"stream":"survey_questions","data":{"id":"667461897","position":4,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"5a32s3dhl a967a54aoj3cr ttu0uk4hu4h1 r360wdohq1x9xu7 qvqpg1eb6qg3 01ogn ucbhive fpwstwi6hre0ynb xu3c3txpma7eoh3"}],"href":"https://api.surveymonkey.com/v3/surveys/307785429/pages/168831415/questions/667461897","answers":{"choices":[{"position":1,"visible":true,"text":"6gngt 5w10n7fl47r07 68t8t79 66pqqth5urrw 1ve2kn385x0u9s 99vcfs08at","quiz_options":{"score":0},"id":"4385175533"},{"position":2,"visible":true,"text":"pnwrx dwj1dx dpdan1wpqs 9lhgks36 1w8a2utjbxas31t rlc1u51mdpjr 90tcj6i8ibicvxt q1ahtd2x doujpba kjjjdi0","quiz_options":{"score":0},"id":"4385175534"},{"position":3,"visible":true,"text":"wu74ewyb4grv fqb8h3yoldsn 0nxv5844yn0lpx jct7na y9sp3u ueq7vk83ix7g7sx f5sl73r2r29e84","quiz_options":{"score":0},"id":"4385175535"}]},"page_id":"168831415"},"emitted_at":1674149694581} +{"stream":"survey_questions","data":{"id":"667461902","position":5,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"sdek6wejcdn 82r223sfhy6xkm5 65gns2m7phi 0fx8dx5bp psvndjnn5b 5kki467 a8faadeid0gl13 x2t3e 03xco2 cf39nv9mdq3vj"}],"href":"https://api.surveymonkey.com/v3/surveys/307785429/pages/168831415/questions/667461902","answers":{"choices":[{"position":1,"visible":true,"text":"nfiq0 d7gwft9 8bhinfrsv6r6 k3vylofokamx3 9hrik k2ageb5amyj89a toli0yrsq bqbrcp","quiz_options":{"score":0},"id":"4385175559"},{"position":2,"visible":true,"text":"8c5qdiklqb8tb 5uhc6w1a1o9 er8h4w0mf779o 14nsksqs65j10","quiz_options":{"score":0},"id":"4385175561"},{"position":3,"visible":true,"text":"5wpggsufojm 4decq179m5 0brpk1la0kyno e8ctqi fxa4j0uo9atp","quiz_options":{"score":0},"id":"4385175563"},{"position":4,"visible":true,"text":"5it4y4q 49im15osxk2j0 j8twpv8j nei1egowtm9a lyrigqwu0eby tpg5o7kuvgn34l spdu5icxlc 2f4qf qb55g 8si14ri4bdw1v72","quiz_options":{"score":0},"id":"4385175564"}]},"page_id":"168831415"},"emitted_at":1674149694582} +{"stream":"survey_questions","data":{"id":"667461933","position":1,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"4vnmxluvh7a l8s5r0i5ck pa7pckqf tnah7fan76p38n8 m1i5r ea9ib0t823amcn k98290k23wh7qn"}],"href":"https://api.surveymonkey.com/v3/surveys/307785429/pages/168831437/questions/667461933","answers":{"choices":[{"position":1,"visible":true,"text":"aldwijo3p9mh3 v26dql0wbrctg0 98sqogqfmi2 558gsvip","quiz_options":{"score":0},"id":"4385175732"},{"position":2,"visible":true,"text":"c5fqe o43qm3oq9i 23qgoxg85 cg5hr5wj79469n 328j7ji1kugb 60jlwtbu4eoh63 alyho5","quiz_options":{"score":0},"id":"4385175733"},{"position":3,"visible":true,"text":"882jtclxvq15yk dgive oqhqdf a8a2rgxse4b8fw 87oeyfbk7 wcevsx 4mv1lyp6lyxysrm 3m8yayarq7wm 9bpmul9 el2j1j4yw","quiz_options":{"score":0},"id":"4385175734"},{"position":4,"visible":true,"text":"3so1buxa 88ypp61nq6bhi0 lwa2pfg6tg lra8e1r5bn4k umstgwdck9 wslq681gvn3g2f a20nr1eovr3 feo0p5bqbgrcvun np851e23cojfv1 uqlwg","quiz_options":{"score":0},"id":"4385175735"}]},"page_id":"168831437"},"emitted_at":1674149694582} +{"stream":"survey_questions","data":{"id":"667461934","position":2,"visible":true,"family":"single_choice","subtype":"horiz","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"k6ba3wdl 6c0nvj5es h0dttl3krobdcd va6klkdyf 79e2a lhmov"}],"href":"https://api.surveymonkey.com/v3/surveys/307785429/pages/168831437/questions/667461934","answers":{"choices":[{"position":1,"visible":true,"text":"h8dywnj ithq4el 98e20manw xxyp0f9oike55 t56arby dhmmxh4pehs","quiz_options":{"score":0},"id":"4385175736"},{"position":2,"visible":true,"text":"14p6263c 7khx2y rpjy6432cy7kkr 0po0vol3uk1cuf 1oejmy viircj9b nyw76yqpf","quiz_options":{"score":0},"id":"4385175737"},{"position":3,"visible":true,"text":"vtdf2x 2kme3 vhpqi5s82k7v4 1mjr5r jp0ox03i6t d5ef5228du3ck 536btd7etv","quiz_options":{"score":0},"id":"4385175738"},{"position":4,"visible":true,"text":"yt2e6nk6 v2wl4k047h1n5 civs8 tjjr7lkeay9i3","quiz_options":{"score":0},"id":"4385175739"}]},"page_id":"168831437"},"emitted_at":1674149694583} +{"stream":"survey_questions","data":{"id":"667461936","position":3,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"u1jbhrxyrg30ra9 qs6b5m237lag 7tlvv 05okuge2imipht bg813 hixvf9bd9n10gk lwxdjnajbu9gsra uyh3fjd40bs"}],"href":"https://api.surveymonkey.com/v3/surveys/307785429/pages/168831437/questions/667461936","answers":{"choices":[{"position":1,"visible":true,"text":"yl8yqqhtr9rxi 049x312 oogub1figyg4e tixix79g85hxi2l bin0fp5g goq3kwu2eaase x9mihu0erdhl9v4 4yausp34y2rgyx iwyfuo4b7yme8lr","quiz_options":{"score":0},"id":"4385175740"},{"position":2,"visible":true,"text":"gfqbxk8 3tosymacon00av uoxydvdy28 iuce5bjdvpg gwxdpkudg24ouk u2ns1u x10hujmiiy9l62i soln75a14nm8q0","quiz_options":{"score":0},"id":"4385175741"},{"position":3,"visible":true,"text":"j299iy64y804 k709a5kk9 yjsifyt4ksu b4fnp4a","quiz_options":{"score":0},"id":"4385175742"}]},"page_id":"168831437"},"emitted_at":1674149694584} +{"stream":"survey_questions","data":{"id":"667461937","position":4,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"06qgl j7f89g3 5ok0ilvhvpa ojcs6ixbovvf u6xympul0 o00vc 6bjg7jmvy9s 543ndxd jmugw njqhxa3phj4jd"}],"href":"https://api.surveymonkey.com/v3/surveys/307785429/pages/168831437/questions/667461937","answers":{"choices":[{"position":1,"visible":true,"text":"5v1hangb7u0bj8 44xo3y4o inytm95s16m dvn5e2leb6sf7 hamaw8l538eph 6xuyp5030i538c 0ym6m831 duar0bo76 kl36ykf5w9ugh","quiz_options":{"score":0},"id":"4385175745"},{"position":2,"visible":true,"text":"3iiaxf5dgi tr6crqs i51ocgg ka1ri0ffd8xeh cv12807q5pq 7fmq8lxy7 5wuas7gcn4kln tv6mf3pqq4jm x3yfr sm7idq2nvoonk","quiz_options":{"score":0},"id":"4385175746"},{"position":3,"visible":true,"text":"mj5cmssx3htoni ld622ppaiqr uw63p1q4up3 lfxioj94gd3jky0 2tj631 5ql6116xsyp r5hwhy2","quiz_options":{"score":0},"id":"4385175747"},{"position":4,"visible":true,"text":"llb9oe7fk8v3w4q xpd66rgbyp9m 0opo19df7n6 scr70cg86pn o1qtr7rclqxjl kmpnf79790 6wmig6mjwflh2vq 1oe033jyd","quiz_options":{"score":0},"id":"4385175748"},{"position":5,"visible":true,"text":"pg851 mju7py cdp1jqcaeg66 3gv05ohwromt u0uot","quiz_options":{"score":0},"id":"4385175749"},{"position":6,"visible":true,"text":"mu0hn799v 4ch8i7j5o5tf8s 6rn9y0ft67mchc u5ds14s9 aj1qg26dwf41suc i1mdhdk","quiz_options":{"score":0},"id":"4385175750"},{"position":7,"visible":true,"text":"6w4xjejtc9j 50n12 u1cdbulvkqykvci x79sdq9y hmbem37x7 s7pwufdjnmn xo8qy81a3fjmv","quiz_options":{"score":0},"id":"4385175751"},{"position":8,"visible":true,"text":"k582dst vgjvse b2h3mxi dteo4p9lrtx m54ug","quiz_options":{"score":0},"id":"4385175752"}]},"page_id":"168831437"},"emitted_at":1674149694585} +{"stream":"survey_questions","data":{"id":"667461986","position":5,"visible":true,"family":"single_choice","subtype":"horiz","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"gjahy0fl7 fs6b3q6e7 rsvbmotgt9p7 w9l2l7 hvj8fhrqwc vays8 4yh7qch hjj5lx0 co6a5rqd 5pt79or0a7evc"}],"href":"https://api.surveymonkey.com/v3/surveys/307785429/pages/168831437/questions/667461986","answers":{"choices":[{"position":1,"visible":true,"text":"b7fbynqu hwhvtbqwbmxy 9bjgxs1 1e05mo toj685p5v w34e97j","quiz_options":{"score":0},"id":"4385175878"},{"position":2,"visible":true,"text":"n5e5yl9c6 yw12588olh swl7nwm1dl9n2l 9v7n8wursm6739 p67woq9u27w7p y3ge5y1iji819g7 uklmy7q8 7ocv68por","quiz_options":{"score":0},"id":"4385175879"},{"position":3,"visible":true,"text":"h08nyyi 1393hst fcdij6j yepfw2","quiz_options":{"score":0},"id":"4385175880"},{"position":4,"visible":true,"text":"rdme8pwwjl07 4ju4xn47ofvbj i31u4ty4f4 wteatx2 gc3nqgji pu9h7","quiz_options":{"score":0},"id":"4385175881"},{"position":5,"visible":true,"text":"jxkod8gx x8tcsxxle4f0lv4 vcmjicpk7v i19dxl3 3lvmmdkx","quiz_options":{"score":0},"id":"4385175882"}]},"page_id":"168831437"},"emitted_at":1674149694587} +{"stream":"survey_questions","data":{"id":"667462078","position":1,"visible":true,"family":"single_choice","subtype":"horiz","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"vrwr5e5qwxqu4 mn9jcdpf 0e5u3k ansge 2hwkipig u0wn3acc2sct xnv4y8 3irjcv i0cgva8762tfosw"}],"href":"https://api.surveymonkey.com/v3/surveys/307785444/pages/168831461/questions/667462078","answers":{"choices":[{"position":1,"visible":true,"text":"55yvst1hihf4br ialhkcxm73fjln 1lelxuw93g0 nukml0","quiz_options":{"score":0},"id":"4385176721"},{"position":2,"visible":true,"text":"okdweedyn93 mua59r2l4haj orem637bgltyb 7jc2yral4o8qov j15ry fkkgjxdea rjd297yot eq57kefir4if3c 2l098 ech2y5fv","quiz_options":{"score":0},"id":"4385176722"},{"position":3,"visible":true,"text":"b3sgu7kkbjowg ux7qqyw41yb umfqpq6 dfgu4awr uy2i4j626 cb17jp5xal6","quiz_options":{"score":0},"id":"4385176723"},{"position":4,"visible":true,"text":"5igq4pw5ul la3i72sh30 uk24o0qi jh51hl9s3a43s 9tgq0ip8k1nev ar6it adgfobu491 f8qke95 o2f9u2ubb49t28c obyoj9cfsl","quiz_options":{"score":0},"id":"4385176724"},{"position":5,"visible":true,"text":"r73ge7qkd8mjfu d7kdhfmco d0pcoyqqyjrph4g 06xs83492x 5ajmrgy1 x4ev3aroh9q86r gwiu17g02i6h75c np3r62er4x5n 73hbkk43af 7f5b333hk7tkc","quiz_options":{"score":0},"id":"4385176725"},{"position":6,"visible":true,"text":"vo6u3 9gpy2s57xh u8dcib 4f8gbbng3wq0h36","quiz_options":{"score":0},"id":"4385176726"}]},"page_id":"168831461"},"emitted_at":1674149694691} +{"stream":"survey_questions","data":{"id":"667462079","position":2,"visible":true,"family":"single_choice","subtype":"horiz","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"6d3w2gqt8056 h5vl4u3kcuvlqc lk2ip62d kpkowwj"}],"href":"https://api.surveymonkey.com/v3/surveys/307785444/pages/168831461/questions/667462079","answers":{"choices":[{"position":1,"visible":true,"text":"agvpu24j1 g51hr01jbjsk vw6gq cftg9oeklijpda qbibhtf35pl4gtq wu48wsd5 c6jifqlyt4e","quiz_options":{"score":0},"id":"4385176727"},{"position":2,"visible":true,"text":"4kbb46n 0vmm0c4we qwaiv1f731l y8iaiu3bkcb6 loqrsy","quiz_options":{"score":0},"id":"4385176728"},{"position":3,"visible":true,"text":"rwm2cgejb qc4g9 7y68obgewd fou0um xh7dkb89o bfosq3 v9bdp7s9450","quiz_options":{"score":0},"id":"4385176729"}]},"page_id":"168831461"},"emitted_at":1674149694692} +{"stream":"survey_questions","data":{"id":"667462082","position":3,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"dvpu842k yh6g475bbwk75 qtkq7f5yd01igo ixldsnn uqbpr ngarg6pf f6ueafaq 4ch8dhr nqsm5uydajns9"}],"href":"https://api.surveymonkey.com/v3/surveys/307785444/pages/168831461/questions/667462082","answers":{"choices":[{"position":1,"visible":true,"text":"hfrp92k576cl 4yjdkhqj0vr9 qx16a oc86p8hhonp5xs fn4lo1wmewe5n7 sue7kinfb6 8qpyh auccq7xlw1b","quiz_options":{"score":0},"id":"4385176734"},{"position":2,"visible":true,"text":"lqon4mp qhj98iee7o 37f50nvkrs3va 18vxkbch636kh yn8ih 8jxqpq03v 6j5lurdu7c17 knmjb3 0868hyuu7","quiz_options":{"score":0},"id":"4385176735"},{"position":3,"visible":true,"text":"obj26 pb0pwmt gxvk8isp04c42 77ocbs1 y7jyxsbl vbbtsy d1t8el31vu7x6d r44iyhr2y810o0o","quiz_options":{"score":0},"id":"4385176736"},{"position":4,"visible":true,"text":"yebv8qvq dd5qeecs45k 2un02jrywfqf1 u96tcry54cxiyu mnbgr2mqe a43wm7 1rnggj b99hudv2g0kgor","quiz_options":{"score":0},"id":"4385176737"},{"position":5,"visible":true,"text":"b6v1txm65a40 h1sah8 84enie0e 57clim 2eew4","quiz_options":{"score":0},"id":"4385176738"},{"position":6,"visible":true,"text":"d88o04mls0oddci d61gj k4acpqp r3ugg2t1e55s ldb3ll5gjkn ruerq4w4w95j649 c3bea007si4t 4jp1ctllptvfao2 m78584fllehmi b9fpb","quiz_options":{"score":0},"id":"4385176739"}]},"page_id":"168831461"},"emitted_at":1674149694692} +{"stream":"survey_questions","data":{"id":"667462084","position":4,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"n6y1nnlv45movkl vkjge u5wp4unnsf cp6y14e"}],"href":"https://api.surveymonkey.com/v3/surveys/307785444/pages/168831461/questions/667462084","answers":{"choices":[{"position":1,"visible":true,"text":"2ak2bbt6l 958nphvdetkv4 ycoevsx u49by0 eohbcorqyd2fk","quiz_options":{"score":0},"id":"4385176763"},{"position":2,"visible":true,"text":"6lnrx0h 8rtivmuwxpy8wv ebygucb3xu1m42 iyep7ijy4gu0mvl s1oco7cxc0","quiz_options":{"score":0},"id":"4385176764"},{"position":3,"visible":true,"text":"m5ysyahej9ffbl hiob9pqg7je5r oqyup1bmda i142y odbg2sgkibp5a5n","quiz_options":{"score":0},"id":"4385176765"},{"position":4,"visible":true,"text":"r56bqr7ts07qj7l 0odv2rxnmffpw ctmr30tp61ibr l64xab0cs nmqjd 21rw3b cy2xks0me55b05","quiz_options":{"score":0},"id":"4385176766"},{"position":5,"visible":true,"text":"wjnn6f 4at64hj rif45s1bu9asypf vmjw8wv55isa 87va6t705w","quiz_options":{"score":0},"id":"4385176767"}]},"page_id":"168831461"},"emitted_at":1674149694693} +{"stream":"survey_questions","data":{"id":"667462086","position":5,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"ikhsonq7 fadyfis1w 1qmo7d2wgcq 5nht9h9j esydnd1m a5ehikxk6ypubk dtanss721p6"}],"href":"https://api.surveymonkey.com/v3/surveys/307785444/pages/168831461/questions/667462086","answers":{"choices":[{"position":1,"visible":true,"text":"3p8dvrh6lr0 iejlsiah ch3n24c7d9tt 7w9rvdkxpqe8xh fo9jq7k8sa1 er31i44d633 xurs2ie khm8mmp5d8gc9 egn43 86jj22","quiz_options":{"score":0},"id":"4385176918"},{"position":2,"visible":true,"text":"r5qhjy06onu7loq n6htekeur 2xm1jh99 ibsp4oat8878fy 940xq9 n4tmuhn e5901s317nbq pevqvednus0ph8g","quiz_options":{"score":0},"id":"4385176919"},{"position":3,"visible":true,"text":"at4b6f9tud4tvpl uf1d5p jgci9m0u17qkj 8tmdkc9o lb7b63gth6 6ds89i5 uu91pd2ybc wwk60i ntwtf5enlg5h8o","quiz_options":{"score":0},"id":"4385176920"},{"position":4,"visible":true,"text":"ovrn2np gg0nxt88wji6fp ckphrf1l3 0um296qkhvgh","quiz_options":{"score":0},"id":"4385176921"}]},"page_id":"168831461"},"emitted_at":1674149694694} +{"stream":"survey_questions","data":{"id":"667462094","position":1,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"uhxc9mpgrh9c9aa 05iqvfqi y8rip1qcmmxh b8jj5k cavri2y5 1sqge 7ywuxm3awoh ddul9pvje6dcr kggd2y4"}],"href":"https://api.surveymonkey.com/v3/surveys/307785444/pages/168831467/questions/667462094","answers":{"choices":[{"position":1,"visible":true,"text":"t30umxtof3b6e 9o88p i9hcrmm57pq42 16pnnhw idraibx70sby1i","quiz_options":{"score":0},"id":"4385176959"},{"position":2,"visible":true,"text":"xnxw9wa4fo 157vk4i0d 1m9fluu gmmy39m41 icu2b548yd9p3o 3yj0tyamvyjci1 1c19qkbuqb031r","quiz_options":{"score":0},"id":"4385176960"},{"position":3,"visible":true,"text":"ehjwxib3hha9 bjj11etv shhdikfh1iy0u nioigschrcpqi2 v7mgatm l98c4no7k9 bf2j11cmi1dgbt2 f8etga4g kg2w2yngt62","quiz_options":{"score":0},"id":"4385176961"},{"position":4,"visible":true,"text":"uyqt6g2o61rc wcwn8q7ohbhegr wtwkdefljgy uli9v6","quiz_options":{"score":0},"id":"4385176962"},{"position":5,"visible":true,"text":"7pg26slappuq1 aw3vsgc4317be eqe9a8v6s5whg0 dvrw9imoe o9wl91vi282 4h7f26","quiz_options":{"score":0},"id":"4385176963"},{"position":6,"visible":true,"text":"wjipnxgtewp8r ddtad8 yqo4rj5x657nge ykw2qghp3e r3tqrvk1m7l ir60pwi5g5 h7exqf4","quiz_options":{"score":0},"id":"4385176964"},{"position":7,"visible":true,"text":"aafwgbh80 ip6mgadg 8ls8v4ss2fk4y s19ti1jvfnaey g0v4qdn ifk0ve j2trlbjolhuc3 op07p93t1xsh0 kqiw7s ktofe9muryqxe","quiz_options":{"score":0},"id":"4385176965"}]},"page_id":"168831467"},"emitted_at":1674149694694} +{"stream":"survey_questions","data":{"id":"667462096","position":2,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"hh8r3c6evhaj2ug 34w4tpf8 b41jtyj tn7vh1hwl 7rrs5 p5rct6v9pg7k 7nw3etg9"}],"href":"https://api.surveymonkey.com/v3/surveys/307785444/pages/168831467/questions/667462096","answers":{"choices":[{"position":1,"visible":true,"text":"4jlthohsbk gq1uy9yt 83htjom d5udup0g0jfsido a6nxtc2vkdn 7tfgt9 6e6wsq","quiz_options":{"score":0},"id":"4385176968"},{"position":2,"visible":true,"text":"nt9b0e1tk eq9ckgs2u2fiu probh n7929oe950jcs7c uvdxlffx66obu 6oschegtcq q2a7d hwp71gp7 s3b03f5p3g24h","quiz_options":{"score":0},"id":"4385176969"},{"position":3,"visible":true,"text":"u1p9r on01v021jli y4n4d2gpcbvk fe3y53pjwje6ms atckrpa2r44f 5lkaim1 coo8gs4mer wfbusogrereep 3r2i1qlkh6097d1","quiz_options":{"score":0},"id":"4385176970"},{"position":4,"visible":true,"text":"i4liv68323s xc5i56ba5pa osxulquad221n xbmov jnhv1ogkdw9","quiz_options":{"score":0},"id":"4385176971"},{"position":5,"visible":true,"text":"tlinp 6b4ig tcw2f9no5xm7stv qv6l4foeesgh","quiz_options":{"score":0},"id":"4385176972"},{"position":6,"visible":true,"text":"jfxlbnonc tee9khi75t0ah wr83dgnnsc0l pvyf5t266eq1ev","quiz_options":{"score":0},"id":"4385176973"},{"position":7,"visible":true,"text":"rv7aly5o19 y3hvj5byk uojji58u9thv w8dnv stba3pan 5yho9m1f3o097n7","quiz_options":{"score":0},"id":"4385176974"},{"position":8,"visible":true,"text":"0kmmyvxkq0ixg wmm2bnydk3xg nf2e5e3fn4e 0jd59 tu9bib d6i9t6 3ikku8yd42gnt 0uusc9kip2w","quiz_options":{"score":0},"id":"4385176975"}]},"page_id":"168831467"},"emitted_at":1674149694695} +{"stream":"survey_questions","data":{"id":"667462099","position":3,"visible":true,"family":"single_choice","subtype":"horiz","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"952l4noismh4 jwlr6yhgbpo 9waador5oikm xg4aqk0w5o08j 7bg3d02bw22df 84xdy6eq34snqhk h4ngqp6rpih4 9jevsisqvxcv"}],"href":"https://api.surveymonkey.com/v3/surveys/307785444/pages/168831467/questions/667462099","answers":{"choices":[{"position":1,"visible":true,"text":"lknhasa3eu03sf p1uflsed0h3sr q1b0gmga v8swv5rbv","quiz_options":{"score":0},"id":"4385176976"},{"position":2,"visible":true,"text":"u6hdwwqb4cc84s8 8jo8vmqx7 klsxteic7f 9m3mg59ov s7npsi1 89i5dq8chb 919k2r7u0t","quiz_options":{"score":0},"id":"4385176977"},{"position":3,"visible":true,"text":"xjpll0bpay536 2ex024o9rd 7boywqww rktvkxinf9fmoh 7d9cb06es933e jm2hsgge2cjy5jj 1ecnm8shkp a3flgyb gcf1622ijpsj ydnun9wos44","quiz_options":{"score":0},"id":"4385176978"},{"position":4,"visible":true,"text":"n7q0ogrerpn8dl qmip86lbe sl1xjutnlap7 3bov7 5fihf81ek49s 9p0f4 r1rptp","quiz_options":{"score":0},"id":"4385176979"},{"position":5,"visible":true,"text":"kwdbb5 hi349arw9 r2f0df eee097e k5035hpewmi6 ky0f9 kh7oio2u0bilxue 5l0moimxob7fid oeno82n5rkplm6i","quiz_options":{"score":0},"id":"4385176980"},{"position":6,"visible":true,"text":"finhomjk 48ciiw7x1g2f c50x4 9kenej45r","quiz_options":{"score":0},"id":"4385176981"},{"position":7,"visible":true,"text":"e7ravpe7reoe5il 9kgwh794cl9x0w snp3wnpq1ryga p4vpk03q7","quiz_options":{"score":0},"id":"4385176982"},{"position":8,"visible":true,"text":"ao3rdw8o5r0xvy x07pd7op60cce ylfrtqpvu81e3u 3f7jtv448v mfoeywlt","quiz_options":{"score":0},"id":"4385176983"}]},"page_id":"168831467"},"emitted_at":1674149694695} +{"stream":"survey_questions","data":{"id":"667462100","position":4,"visible":true,"family":"single_choice","subtype":"horiz","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"onm04qqjiu e5hh4bm1nrm 4lql830cednt4y m4vd6n kk1rvup ghucvtc uw8xrjg6 u6giu1qxo oywqk5fc4elxs"}],"href":"https://api.surveymonkey.com/v3/surveys/307785444/pages/168831467/questions/667462100","answers":{"choices":[{"position":1,"visible":true,"text":"n66vr4n4vn w57cw3jovcl9 9xhjvp8 mkuivep2954e71r","quiz_options":{"score":0},"id":"4385176986"},{"position":2,"visible":true,"text":"dncqrcm vkp1wf2u0d9j 9o2d4ag7rwt827i wo23d8v14j1e3p 8wty8ixwwhnc6 huw4we49ag40 fruxk5p9080lxhb hjvf468vja8rcxr","quiz_options":{"score":0},"id":"4385176987"},{"position":3,"visible":true,"text":"54u3kd450tpm i9jjwlr8r3xbduw 3k1ic1tg4 4tijdweafs ypprmy7wcpxeg yvvc4l19sd5p gmleu45","quiz_options":{"score":0},"id":"4385176988"},{"position":4,"visible":true,"text":"a1hrtqesu1ph 88spqcx6hyo7 dt64okx798gal cy3tbwljajmrr","quiz_options":{"score":0},"id":"4385176989"},{"position":5,"visible":true,"text":"ehg03 uyx121pwsyo 7rhvgcdfy2st8p 7ahaiboegtn5kd iu8bkj3imm3eo8d k2s2gg4g 2ys9hfx 8vpui26opm6n vsf5rfq6tqi2 jwxoe4suo4","quiz_options":{"score":0},"id":"4385176990"},{"position":6,"visible":true,"text":"c7lxx90luvc6y ogvbopnx 12v4swfg lofg3gcj dq1r6s8ptp5qho h04pqe67tbcnno xhyh0rp62kqkb dvtuwyu u89ppkdl876m","quiz_options":{"score":0},"id":"4385176991"}]},"page_id":"168831467"},"emitted_at":1674149694696} +{"stream":"survey_questions","data":{"id":"667462102","position":5,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"bwurewbkcd12 acvusgq 3u00c224nnv iyfj31 i9qtkl9tolx2fjr"}],"href":"https://api.surveymonkey.com/v3/surveys/307785444/pages/168831467/questions/667462102","answers":{"choices":[{"position":1,"visible":true,"text":"m6ihyhdpxt1 0xf9391 y8wvcnlw tfvxn6m 0bswb5w5p4","quiz_options":{"score":0},"id":"4385177002"},{"position":2,"visible":true,"text":"2kdjxc93o enx72tbxki oj43409eg90kt1 5fbnj d8rvo5c7a7vrgf 3c66h1 guo3c x6uv8kl qy0ttl 8r8dgqope","quiz_options":{"score":0},"id":"4385177003"},{"position":3,"visible":true,"text":"h3292 dtp4cjf11njvbhh huvgv1 onie86 tvdr09jg2lvp","quiz_options":{"score":0},"id":"4385177004"},{"position":4,"visible":true,"text":"16ua2fvav 75q7b2odhv fbw0xrnfn 2t3ivdrphr agrq241x d447hwdy rxa3g9gwe23","quiz_options":{"score":0},"id":"4385177005"},{"position":5,"visible":true,"text":"1dl0nhl0bx 7v1hc ooiv3gogf nxecupy","quiz_options":{"score":0},"id":"4385177006"},{"position":6,"visible":true,"text":"97geexnx4ussry4 s2x8sduenrfgwq y4s8f5v e6nrx0st23b f1xq1ax2xwl6yl c1to792d3i l0aq9 92s0aix8l31n5 qnnn38brgah","quiz_options":{"score":0},"id":"4385177007"},{"position":7,"visible":true,"text":"cg3w94v47ecgrik hviug 5xub14 808gw4 g0j3vn 5y58dv7vn8r5 xg72mp91 2l4ubwdo1wrw0t6","quiz_options":{"score":0},"id":"4385177008"},{"position":8,"visible":true,"text":"t92n3lmvuxaf5o5 29jh4afc h2wvqr9xf1q4w 27xf5d9ij1on qvbuiu7 8oghx0dt3nr5 g1mw6f9y6 muu0hhili","quiz_options":{"score":0},"id":"4385177009"}]},"page_id":"168831467"},"emitted_at":1674149694697} +{"stream":"survey_questions","data":{"id":"667461468","position":1,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"fn1i25upg io6aniuf yrrrp8vt07fo19 48d5ol09146s8m ldy0ebojp819g"}],"href":"https://api.surveymonkey.com/v3/surveys/307785394/pages/168831345/questions/667461468","answers":{"choices":[{"position":1,"visible":true,"text":"t56ghqeix s9huggwiub4 7tqxa1m0h7kj5 yk8r2 0f65tvl3fnpo 0gebiihpxcovnht","quiz_options":{"score":0},"id":"4385173226"},{"position":2,"visible":true,"text":"5o75tse0c okpssn319qiklp 5uyby90fx7n slfgxco07i ejp0kn xmr7ghykkxbypc","quiz_options":{"score":0},"id":"4385173227"},{"position":3,"visible":true,"text":"qe6tkjiccorb lxdmlb30 jmh6j4d6p vces42b344ry gbgmssamx0tvcs 785dl brkbvpl3ctq4nj2 yjjy0hh9b4sr yq2v7lhwtje33x2 7pbqmqgul4gqg","quiz_options":{"score":0},"id":"4385173228"},{"position":4,"visible":true,"text":"lyn712e8uyrrar 0qvy855feo 5l3egg 6t5uin58qrj1hj","quiz_options":{"score":0},"id":"4385173229"}]},"page_id":"168831345"},"emitted_at":1674149694802} +{"stream":"survey_questions","data":{"id":"667461471","position":2,"visible":true,"family":"single_choice","subtype":"horiz","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"wcrsas 0v14j5i3e8eb2an ymydb45sqwsn g8j35s649o3rq g582wdp eoraxaf8dc7gf qtdw5a27iucmesj"}],"href":"https://api.surveymonkey.com/v3/surveys/307785394/pages/168831345/questions/667461471","answers":{"choices":[{"position":1,"visible":true,"text":"nd18cy2gv u2bvpyki k0f38w8 qtlqut6ttsdyk83 pptqq84jmec6bfd a1aks3iy0i oykgg4gv0 busn0o8cc","quiz_options":{"score":0},"id":"4385173236"},{"position":2,"visible":true,"text":"mbd0ll7jes0qm 02w87s60 jslfxkj7yeh1 ol4yj 405yk1b kddsvxnk4hsw7 v1t7q9h8k26rt","quiz_options":{"score":0},"id":"4385173237"},{"position":3,"visible":true,"text":"jl49hsj6tjdf aq1njo56no2 f2gw9 eyqqekovg0c7ov kwwlc9b77 i4yu6aa7uxu","quiz_options":{"score":0},"id":"4385173238"},{"position":4,"visible":true,"text":"5v78pcotkwvvlr 7gvcf3xsd1s2 1y6oc8df 3n3f0 d3cg8ihr3ox9qdc rnyw7g 0lv7p6bka ia0p1tqjcew","quiz_options":{"score":0},"id":"4385173239"},{"position":5,"visible":true,"text":"xtha0tjj1 1j0vri su2xvilf9734 te51yhl03q558lc","quiz_options":{"score":0},"id":"4385173240"},{"position":6,"visible":true,"text":"w4st1 gljqfop06 2bu4fs7b fiia7kj22xl0i4v dl88vjnwo3pf","quiz_options":{"score":0},"id":"4385173241"},{"position":7,"visible":true,"text":"ivfna3y9ru jhxob vuncvdavfek1dsd 80ha2m2 8raod4lyb40 3r895onujni4onh xm9h0g6di g8e735xi ax62ju3eihf9a84","quiz_options":{"score":0},"id":"4385173242"}]},"page_id":"168831345"},"emitted_at":1674149694803} +{"stream":"survey_questions","data":{"id":"667461473","position":3,"visible":true,"family":"single_choice","subtype":"horiz","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"xc4wjnko0i6 g7p33u41n 1tjsntksw58hn4 ewweiwcgt 58rs9ek5qi1bgvx"}],"href":"https://api.surveymonkey.com/v3/surveys/307785394/pages/168831345/questions/667461473","answers":{"choices":[{"position":1,"visible":true,"text":"t09fsskd08sl88r 36sh46a2jva sd91wxy 5dncy1vabsf yfkliw o2spc5k ud2oktdabb7bv l76he8ba3y6 1veap0sd vh2aeoqb5","quiz_options":{"score":0},"id":"4385173256"},{"position":2,"visible":true,"text":"fvdf828g92n4cr4 jt9qg8529uihyge n69seyn8haq ido6m3","quiz_options":{"score":0},"id":"4385173257"},{"position":3,"visible":true,"text":"4n2rpc6iv82cene b7pvp 9fakf0 qmfrbf3","quiz_options":{"score":0},"id":"4385173258"}]},"page_id":"168831345"},"emitted_at":1674149694804} +{"stream":"survey_questions","data":{"id":"667461476","position":4,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"wojs6fb lri4g 9cd8kjrhy9rd3 j9s5e32o8i l82xpfkqgwhj jma6htdue e1kk3u071rcef 9ivvnisv asaqww"}],"href":"https://api.surveymonkey.com/v3/surveys/307785394/pages/168831345/questions/667461476","answers":{"choices":[{"position":1,"visible":true,"text":"j5lja4pu f0iq7pnkrk 9pra3hkah6abp 92wxt7ox6c dcukwklc k46geqe 2xk4g405p39t62 516tsgu xes5tkhjts","quiz_options":{"score":0},"id":"4385173268"},{"position":2,"visible":true,"text":"1l04q3mtxn75 t7ghyls2hqug j2hu42 uyoecoks6edsqns 57ya7vtyoyt u6k0gtnmf 1mm6wtektvp808 fkk89 qqprq k07oheboie1tfhs","quiz_options":{"score":0},"id":"4385173269"},{"position":3,"visible":true,"text":"9kvc37 gqyklsggws9 db070xge8y7fjr qmdym3ft1jp 5rh1txs","quiz_options":{"score":0},"id":"4385173270"},{"position":4,"visible":true,"text":"y9obh2bu8yk7e94 0ftyrjtcxhicd4 iobxi70wog4vf uokiplls1e ah0g8v mpsslhisijk lmomrov 07cfwh auqwaujyytig","quiz_options":{"score":0},"id":"4385173271"}]},"page_id":"168831345"},"emitted_at":1674149694805} +{"stream":"survey_questions","data":{"id":"667461498","position":5,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"0tljucg0y3kh l2fh1q1i umeldoo665wgb 92c0k ldeevedeust7pg icrfpt7m1cq l6sfwhhk3vtql qpue297bcaeb7 yrn4gauy007n8q"}],"href":"https://api.surveymonkey.com/v3/surveys/307785394/pages/168831345/questions/667461498","answers":{"choices":[{"position":1,"visible":true,"text":"8lcirsh0a t4ydqb06w0pqv 54k3qmnrjdyf j3ebgxwih2m4wa calo6wrbt 88n96xatpw3 hxaq56r brlwuuymmm jc5psliso3joc aoa41qwdhm0inny","quiz_options":{"score":0},"id":"4385173412"},{"position":2,"visible":true,"text":"bxc3u7guumu w525yaov3om5 3n0ld61 bhlpnw e252afl6giiia 56ybyswiyivgqs s1svdd30gf9kqks 522nxgw3obgj","quiz_options":{"score":0},"id":"4385173413"},{"position":3,"visible":true,"text":"dc3t2djjjqkvmfi cu7osl pxtlaevr117irr ji3qcr","quiz_options":{"score":0},"id":"4385173414"},{"position":4,"visible":true,"text":"qqr9ksi gob32wx p01fp4yqobput39 fryunx r020wh2ctxg 7hxy9g8m9m nuqel75h vwr1mjecaopo1hi o9fc3o","quiz_options":{"score":0},"id":"4385173415"},{"position":5,"visible":true,"text":"cf6162qvdywm crcubxjk5m5ju 7vhy5q5kj4j2q 5b55n9h w9v6c9n r7m6xx","quiz_options":{"score":0},"id":"4385173416"}]},"page_id":"168831345"},"emitted_at":1674149694806} +{"stream":"survey_questions","data":{"id":"667461513","position":1,"visible":true,"family":"single_choice","subtype":"horiz","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"18i8lhabavlr 32wsccj5f rx8pvk4unsgm7r s5x7es2uepdb 96xgtjo7voy08d7 n4e9p fayts khd1nb8pow rpjp6"}],"href":"https://api.surveymonkey.com/v3/surveys/307785394/pages/168831352/questions/667461513","answers":{"choices":[{"position":1,"visible":true,"text":"b0wj1y3wel57 ktqj3mdnpi dhr0k r3tasjvw 5mx1wclhjj","quiz_options":{"score":0},"id":"4385173452"},{"position":2,"visible":true,"text":"qott2n8w37qaai 1qn102yos4 imupcls4nm th4ob4","quiz_options":{"score":0},"id":"4385173453"},{"position":3,"visible":true,"text":"9uksb 862xwr8j1 6vxdyc4 goi32thkhq93 helvbkt266nnrw xvit2acd67olt pvvkx","quiz_options":{"score":0},"id":"4385173454"},{"position":4,"visible":true,"text":"ees3ivm7fphpd 9jj95pohh4 8sc972k8tyxk ge9j787 nxjkeee670jiec o36kcvbluxrp03 mb4e0et0qwqjxyc d13juonhq","quiz_options":{"score":0},"id":"4385173455"},{"position":5,"visible":true,"text":"294dtkjuyn ttbf6ikcy7s 84hmb t17hw 82aljhi8fwnf65 usuwl5d7ytrca x52ehyic447miq isobapv 3gkr1 2wphdit0p","quiz_options":{"score":0},"id":"4385173456"},{"position":6,"visible":true,"text":"nc1kush2rbxkqrr rhbdvjy xn4au2o0o94 xjq5ll","quiz_options":{"score":0},"id":"4385173457"},{"position":7,"visible":true,"text":"mh1igjt m7gteqlf8 q87g5gj n1g1w7s80","quiz_options":{"score":0},"id":"4385173458"},{"position":8,"visible":true,"text":"sfnq7n g13n21dx5cy aky2s t6h2y8j 5rbdufdcu7i ji8jgrcanxhxv piyrbdr72031gh6 7nna7 gn4gfqo3o 9tbatn8r","quiz_options":{"score":0},"id":"4385173459"}]},"page_id":"168831352"},"emitted_at":1674149694807} +{"stream":"survey_questions","data":{"id":"667461516","position":2,"visible":true,"family":"single_choice","subtype":"horiz","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"7gnta43 5s7jfw8axcw3tkf vkg8bmasyo6u 91wwhy c1pae9eu342 3tg0jl70wuoc9 yyxo4v8se myu4ls9xoaiqsep"}],"href":"https://api.surveymonkey.com/v3/surveys/307785394/pages/168831352/questions/667461516","answers":{"choices":[{"position":1,"visible":true,"text":"qfjo9n 5a7yv16lp71 ow2bbt3n2ke 0jb1xfpxf51s1u f4k77hkwmu wprku4 55311lxm0wcpw0 c53g4v24","quiz_options":{"score":0},"id":"4385173473"},{"position":2,"visible":true,"text":"j4n9jfdyr4cgs gfc0c a8trns3c4m 5mem4dona y097q wxpm5 q4gqos2ukx ufjxck1lmi1nn1","quiz_options":{"score":0},"id":"4385173474"},{"position":3,"visible":true,"text":"4kb04jje8c8d m12jddaa1iljt fr4qqhj 579w6 6u57xdn gaduvgl0u3 887ffq2vq9b58 q4r02mfsjdx6 3v8yskph8uyu srpxeiuxm0ber3","quiz_options":{"score":0},"id":"4385173475"},{"position":4,"visible":true,"text":"biom7l20wjpvl la1rwpf51ia1ex 23gosg8xvae87 ev2iaj4bo c2581d1re2 93rl9 tmj3467ajulb","quiz_options":{"score":0},"id":"4385173476"},{"position":5,"visible":true,"text":"om88wcjqp6f 5fn54j nmdg9 1sriyr pt6p1h4cm vkdmgxanhh 96847e1mgp l8b2t jl8oxa ifs1c","quiz_options":{"score":0},"id":"4385173477"},{"position":6,"visible":true,"text":"l8bo1yes158 w294970vmw33c yp6x582 6sa834 j86xhb qfm2f2 tj7gt7g xkgtymut","quiz_options":{"score":0},"id":"4385173478"}]},"page_id":"168831352"},"emitted_at":1674149694808} +{"stream":"survey_questions","data":{"id":"667461517","position":3,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"uy1ifum6sjcimr he9dly7g it4v8exuhulo ffdod9aof90 9cdfum2phl11nin 5habw5hvuj9pqio ce6ftayekj"}],"href":"https://api.surveymonkey.com/v3/surveys/307785394/pages/168831352/questions/667461517","answers":{"choices":[{"position":1,"visible":true,"text":"gd5221owwi1 tjya80m2al3k62t xq0sa9fp leyp52b5ahghpaa","quiz_options":{"score":0},"id":"4385173481"},{"position":2,"visible":true,"text":"lk1rk9 94xju3kfoc1w5 8dybd90 9qdq98 rxu5edq9gs99 kks85ifc03qye","quiz_options":{"score":0},"id":"4385173482"},{"position":3,"visible":true,"text":"ykpin7yh wv14vdjfwf0l 295s1en8cwa2 s6vafhu1fops 8k2vvkt9pftfc2 d1jxuoudjb 614hx251hr6fouy x3w49ql1 7b50ohc76","quiz_options":{"score":0},"id":"4385173483"},{"position":4,"visible":true,"text":"dewxv4aajhaw yij71ndhch8 76bjhg71csdc4w 5gn1l cmu7yo vdn7mtuy 6oplwmikjyvv1bi l3kw7j","quiz_options":{"score":0},"id":"4385173484"},{"position":5,"visible":true,"text":"kuoin09q0 lm3vqjykpb ji7lrp5ylkt58 qb0mhh86kcgm crjjoqq gvfejauprgj mlsjegwm 7psv8r4tc4365j8 98t96g2ifjm","quiz_options":{"score":0},"id":"4385173485"},{"position":6,"visible":true,"text":"5c8y8 f7droof ha5vfclhyivm6kl bfylm txvwxasx1j9l qpyifm4y qwhcsobdo 3ui2qts 97h9i1v5jv5g7","quiz_options":{"score":0},"id":"4385173486"}]},"page_id":"168831352"},"emitted_at":1674149694809} +{"stream":"survey_questions","data":{"id":"667461521","position":4,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"pgb7ltsb96ed dep0echkqixfc l4rcb230c wl14ohr2hre1o fn94g0r87nde"}],"href":"https://api.surveymonkey.com/v3/surveys/307785394/pages/168831352/questions/667461521","answers":{"choices":[{"position":1,"visible":true,"text":"55yon1b4lyavl 6v6trvxwrc8 s1hwd2 d4hrxv9tbga9e0","quiz_options":{"score":0},"id":"4385173492"},{"position":2,"visible":true,"text":"x8ak4mn2 601o7cb6qnhxox2 k8q23 24nb8q6tx diuko kre6p82em vrf8yxch2 53klbp1xtber s29v8xwbiqm4s8 trwpy6qd1464q","quiz_options":{"score":0},"id":"4385173493"},{"position":3,"visible":true,"text":"s1pxp wsngl9et r2o40 18ltd3 r1b8qpyqskyx a94qup","quiz_options":{"score":0},"id":"4385173494"}]},"page_id":"168831352"},"emitted_at":1674149694810} +{"stream":"survey_questions","data":{"id":"667461526","position":5,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"q859nk 369qqyw7scs77jo 9ji0c9vow2uv yjucgiioytvwm x0x95w 222dyntjt8pue 1ndsg06k"}],"href":"https://api.surveymonkey.com/v3/surveys/307785394/pages/168831352/questions/667461526","answers":{"choices":[{"position":1,"visible":true,"text":"tnea3634 p2lnkyut0h yllu3g pufn062o 2etbix7jtgiqx4","quiz_options":{"score":0},"id":"4385173522"},{"position":2,"visible":true,"text":"0qf4fyco1ea itos8brey3wgkp xje8mlffe4m8wlv a9b44 jgmtf","quiz_options":{"score":0},"id":"4385173523"},{"position":3,"visible":true,"text":"hc4a1wgbqqryji 4x7enmw1nam8o1o yn3nxtni y7bwpr wm1oww66f5ox","quiz_options":{"score":0},"id":"4385173524"},{"position":4,"visible":true,"text":"0giuwu7l3v 5ufp8 u3mupcfr0 r8977cguqc2 hrfeq0ug7wo0 fjmkook g8up66tqb7shgg","quiz_options":{"score":0},"id":"4385173525"},{"position":5,"visible":true,"text":"xp5qsik ipf6q be83j63io 5kw68q bwb1mxf gt4l3besb ikfckl9f f3lgigcoib t8wa3hjgn00 csln5ikv2a","quiz_options":{"score":0},"id":"4385173526"},{"position":6,"visible":true,"text":"ai0mef32co1ohl qfwbhctboxq89ye u5v2kyq ebo7e 2u7q9yvlgd1oc 8uxx84l65n7lf0","quiz_options":{"score":0},"id":"4385173527"}]},"page_id":"168831352"},"emitted_at":1674149694811} +{"stream":"survey_questions","data":{"id":"667461529","position":1,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"5c2dy1fcqn80 athbhqoadncx3n v1lt9m7799 6s154slj6ga"}],"href":"https://api.surveymonkey.com/v3/surveys/307785402/pages/168831358/questions/667461529","answers":{"choices":[{"position":1,"visible":true,"text":"rqa77mh3qxuc 6c5uywhchx1bgd f6or0t6s ds7hiuwb3bu9 u9x2d8hs 52pocgqntfeejo4 oaryhk woq1xb7akj","quiz_options":{"score":0},"id":"4385173536"},{"position":2,"visible":true,"text":"hxex6h1upkfw81 pad50wjl 8fo1fiqvtqfe 3xg4xms66g6l luckdtn1 udk8r284o iwpvh21 xotxpvww6p29 4gmqucj4 my8vynnaemow89q","quiz_options":{"score":0},"id":"4385173537"},{"position":3,"visible":true,"text":"jyb1qcl8o2gtte jlwtdhkxh65a9e q6xfymirg7g 24hkqyd0x0 9w4wb4dostk 6i8s8mh5 rxmq5y8ti r99xgye0urvl bdq2598nnha o6gaqqdvg5q","quiz_options":{"score":0},"id":"4385173538"},{"position":4,"visible":true,"text":"qtgjiim109 xoslnipbfe v28m271knt yquk8m2j96w6 xff8kw1 1jhr5l14","quiz_options":{"score":0},"id":"4385173539"},{"position":5,"visible":true,"text":"me39vca xqytbsfb 8uiad g1elq77xy1 tv88etyc gj1g8580e1lbmg4 bjnj4es","quiz_options":{"score":0},"id":"4385173540"}]},"page_id":"168831358"},"emitted_at":1674149694919} +{"stream":"survey_questions","data":{"id":"667461530","position":2,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"v2whrhb82ev kvvqlgl ek50nx1ar9 a7h4fo9xuaynt2"}],"href":"https://api.surveymonkey.com/v3/surveys/307785402/pages/168831358/questions/667461530","answers":{"choices":[{"position":1,"visible":true,"text":"e8nxccvdcdm 6wfcehdl1 o7g5ce64yvs efob6e 9bj7ny6aipb 4dc2wsqwtr6u24 xsxa081k8 4fyis3oyl9t42 lmu0hhgj4ok24m6 fg0p0lt","quiz_options":{"score":0},"id":"4385173549"},{"position":2,"visible":true,"text":"a5cw9gn7fy95q 8ui6bhr1j0djvtl sr2o8a3 kojha7w 1itxl7twgq avmrl2q5jbwds9 gva3tqhpgk8y5 v4aylod k5ci4cngn6h44jv","quiz_options":{"score":0},"id":"4385173550"},{"position":3,"visible":true,"text":"s3s7w5clw y2uvtas6qhvbk qc1vwrlyi2bk goqfgfe1 1ayx9l73nb78dq a0ykwprnx8gxm1 xn695vlym9rt4mk","quiz_options":{"score":0},"id":"4385173551"},{"position":4,"visible":true,"text":"c4qwlt8a dgnsqhqut5cy iq1htk kitbw 5mwuqxv92w70s c8hxelnesk 75craldvy4w","quiz_options":{"score":0},"id":"4385173552"},{"position":5,"visible":true,"text":"qp2pgo2f63 wmlcuryftjwedj yq0xo a1n5ayjf jikmqnf4mdbw 02r05wsu14a146b","quiz_options":{"score":0},"id":"4385173553"},{"position":6,"visible":true,"text":"ootl4 kp8ae6ggbjabg hgusbwsla83 rnl7dnuqo","quiz_options":{"score":0},"id":"4385173554"}]},"page_id":"168831358"},"emitted_at":1674149694920} +{"stream":"survey_questions","data":{"id":"667461549","position":3,"visible":true,"family":"single_choice","subtype":"horiz","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"sn8gp1r0uc1og wobjh 6x0e6t4wug m6466nxyawm k81p20 883oi8u wgeeiqdcmxwa1rt mc0fnojb"}],"href":"https://api.surveymonkey.com/v3/surveys/307785402/pages/168831358/questions/667461549","answers":{"choices":[{"position":1,"visible":true,"text":"wy826 0uog090ox923 2m3arldq 9v6wr7xwvxfk lbxye5v0svm7 93ji5 vkfvxgr7iy 1r09yxnkpjm23 0bbktk3rfg0bscf","quiz_options":{"score":0},"id":"4385173656"},{"position":2,"visible":true,"text":"krqy1l9f dj0wppa p93gk rvffc v6cfo0 o1areevq8 jbhm4t gcc224tu 3thelsk2","quiz_options":{"score":0},"id":"4385173657"},{"position":3,"visible":true,"text":"f1cpwqowl4ju9 43sdy2 qdqyqw17lxw2v enee166iohhy kq5khb6s r3pucoufnsh hrhcpt q4ukten6scjuvg ldvapiy bg61mb0pf8ofd5i","quiz_options":{"score":0},"id":"4385173658"},{"position":4,"visible":true,"text":"eq2hnewfaec e9jxrip xrrkl1wh3rbcx7 23t2bp5535o2e qwjbhf5051mi iqgykvmdvsbqr 8s3wwn8tqc513c 4q3a2gr6uhdvlc 7dr6m","quiz_options":{"score":0},"id":"4385173659"},{"position":5,"visible":true,"text":"jth67q sto4nhh23s op593ly6lw4p1o gxwnyfr4m99nbvc dplgcarhd m24hy6i1d n28tg7mytetk","quiz_options":{"score":0},"id":"4385173660"},{"position":6,"visible":true,"text":"rlo3t 7ppem2 bx29gt ucqxmy0 jm67u2dynhq iqfpiyufxif 8lm6ydc9u16rj y7ombxa0meqr2","quiz_options":{"score":0},"id":"4385173661"},{"position":7,"visible":true,"text":"vijhvdm7x6h6 4swh9tom vcr06ugp1hl6 50al5 3ndajrt9ilers 2gnm8il0h ry9dtv jqpu16b0ukt qsb5rqrnmglh arno84j1kroy3","quiz_options":{"score":0},"id":"4385173662"},{"position":8,"visible":true,"text":"3ujkb4krosaln 4lk1ckhounns7qy ap07a65ruvnjed vygxbabompj8dn op8annyrush8v p6t0nd2qi w4pp18y4x lljwuc ubknhjf31m6l1tu","quiz_options":{"score":0},"id":"4385173663"}]},"page_id":"168831358"},"emitted_at":1674149694920} +{"stream":"survey_questions","data":{"id":"667461551","position":4,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"jf7fw46e14 vd9x8vs6f0av npyn7 ymxbaq24mqtvj bci1xcln9ch6302 eeghuyauh mjkw9hkx0oooduf 0ui0l93x 6m5tbpl yoplf8cqmbl"}],"href":"https://api.surveymonkey.com/v3/surveys/307785402/pages/168831358/questions/667461551","answers":{"choices":[{"position":1,"visible":true,"text":"rwk1x rtfy9upgpmj xkawlfe0vo8 3ounnnx3e9rl2d4 e8pqns3nwx pr5st9qy o6yi4klar9onlp innrgi2ua3f","quiz_options":{"score":0},"id":"4385173675"},{"position":2,"visible":true,"text":"pcupu8t3iodmw34 67g78ktu6rmr6nq 8nph4ohmv 9xtmtr2a7p9 6rb6h6","quiz_options":{"score":0},"id":"4385173676"},{"position":3,"visible":true,"text":"m6xlaj5xutmgw l08mgyjovq 6vk9sibk r9am0kbr 9qmm4d18mxnx u1sw4to 3a8ek ekp479980 hbuxaj2bf sbio7yw7","quiz_options":{"score":0},"id":"4385173677"}]},"page_id":"168831358"},"emitted_at":1674149694921} +{"stream":"survey_questions","data":{"id":"667461553","position":5,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"uue1b3 s4rj4 dawj4ao j5xhorntprj5p9s obfe7 y47vcjc s2gp2fh6 oysg9o5"}],"href":"https://api.surveymonkey.com/v3/surveys/307785402/pages/168831358/questions/667461553","answers":{"choices":[{"position":1,"visible":true,"text":"bf1i44 xxi5e2h7orevv2 d737wgpt4pu3 pmbeixrmvw1 ya3ww2x gpvmeo04nh5 sx2a7ey cv9ldq57qkus","quiz_options":{"score":0},"id":"4385173678"},{"position":2,"visible":true,"text":"ocmcxbjsqw o1vr3t 8fhpimedvui rn1hqm5m559bcq kw3138dxm77 vsdor8m v55p3f tn721 l4w4a6j3c","quiz_options":{"score":0},"id":"4385173679"},{"position":3,"visible":true,"text":"sme3nthgos 7c5bv0n80ymsa7 x02op26 jjum7w0s7lt2ll6","quiz_options":{"score":0},"id":"4385173680"},{"position":4,"visible":true,"text":"3p2mj4nlrsgu4d 8rygmmsqqxm2pl6 yshbvwq l5mcc5a kdpqvuul","quiz_options":{"score":0},"id":"4385173681"},{"position":5,"visible":true,"text":"o7ehnkg 134kywmgi wm8jcrpnl45if j86ffs6jfgcp 2e25qvayvwj18pp 3rduk lqjqyar2 xhq7yxb8i9ef6u","quiz_options":{"score":0},"id":"4385173682"},{"position":6,"visible":true,"text":"axh7312qg827nk s7tl78iwcr h1b6pv7hn6 o51sbag","quiz_options":{"score":0},"id":"4385173683"},{"position":7,"visible":true,"text":"onu50gtox9de40 v638eyavt886 mu6y85 6a54r1n9","quiz_options":{"score":0},"id":"4385173684"},{"position":8,"visible":true,"text":"0on3vhb3 94ujem74f4 0git5 fr73t6hds rfc4iyd4gwc","quiz_options":{"score":0},"id":"4385173685"}]},"page_id":"168831358"},"emitted_at":1674149694921} +{"stream":"survey_questions","data":{"id":"667461555","position":1,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"8nym349ifndc4 1ergxvcs rg8nxji7wngvfo ha1fx7qgh0p4m 3tkgf"}],"href":"https://api.surveymonkey.com/v3/surveys/307785402/pages/168831365/questions/667461555","answers":{"choices":[{"position":1,"visible":true,"text":"r7wm8q65rf0ed wj7kk61hjpqrt nkjjva6busq fuhp9098sc6 8ro2p6ww","quiz_options":{"score":0},"id":"4385173711"},{"position":2,"visible":true,"text":"wjxlbkjgaps2 sep73b5ia8yj5 a9wr0gq 9o2wqf7du1v0tl 81u2apxnt ww3588h","quiz_options":{"score":0},"id":"4385173712"},{"position":3,"visible":true,"text":"8r7tkvpljdu 8a667c88iw vtasj a5vacvo6pbxwsw 8in6kb nv2yeug1x 3lv9de7rw8rtq","quiz_options":{"score":0},"id":"4385173713"},{"position":4,"visible":true,"text":"obyau9nl8c9 jj7tk8n3wv1gb qmiuhuql 1m01qx26c213r6 aj6u9iw459er mxax2id3o8iv riondp2tea3 ay77ba gpl30307 440clb21coauy","quiz_options":{"score":0},"id":"4385173714"},{"position":5,"visible":true,"text":"0wm0f2w wykr4 9lcofhvrxdiwlp0 u8yf3 p1bwwa","quiz_options":{"score":0},"id":"4385173715"}]},"page_id":"168831365"},"emitted_at":1674149694922} +{"stream":"survey_questions","data":{"id":"667461558","position":2,"visible":true,"family":"single_choice","subtype":"horiz","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"0wjijbi1kwvxt h19om9 kjvx4 jqeprmna15i bwqfaihmlk0"}],"href":"https://api.surveymonkey.com/v3/surveys/307785402/pages/168831365/questions/667461558","answers":{"choices":[{"position":1,"visible":true,"text":"q7y7hkgfgi1plk s1nwdd 0d7dt14f q604qs 47cwawfbo m1mmdsyi3fsp3l r0qma8q f5buoh","quiz_options":{"score":0},"id":"4385173727"},{"position":2,"visible":true,"text":"sn5hskkfn0ykw if30ikcbmfjsxj g6u5fay eauotfitd2 9cg6qkon 9t0l88ops7633","quiz_options":{"score":0},"id":"4385173728"},{"position":3,"visible":true,"text":"c678ymx 92bxd icea1i4p cjdl771k u37cuw rnjvrihdi89s2x a1vef","quiz_options":{"score":0},"id":"4385173729"},{"position":4,"visible":true,"text":"uqlmm5yk5 1v12y59qw hv82bo91a0leef 111gmwav8pnwe np5mfx6nsq6 cxgilxkmtvmm2kw 8mb5wiet5q wdbyo993 uh7kcfhy59 sebg3lik","quiz_options":{"score":0},"id":"4385173730"},{"position":5,"visible":true,"text":"uq2uqj20gchd ly2k4d4goq1 ehe66mwx ei0a0d4ggv0al9a 744s2h u254g40o5m 0i9o7dqjdkrtys","quiz_options":{"score":0},"id":"4385173731"},{"position":6,"visible":true,"text":"nyy288shht 3eibqfcm69se94 de2u01w0k5o 342ouq sb68ogkspj61j3p blbhcqok 8vdd2u7b2 su21c5iwou qgi1dj","quiz_options":{"score":0},"id":"4385173732"},{"position":7,"visible":true,"text":"fkidasstba rfn3erxiv282 vy0fqx 3acgtlyka1 mykyngnc 8u2kws4tp 35wst9aglv2 chbms5wm974 ajaygp8vjkhq","quiz_options":{"score":0},"id":"4385173733"},{"position":8,"visible":true,"text":"lmp71nc3bt 6eic0k8kacvx 17ititl v9u25fh1x78 vgfpglqvf6j ajv15gaccdsa elo40oe8ht75c","quiz_options":{"score":0},"id":"4385173734"}]},"page_id":"168831365"},"emitted_at":1674149694922} +{"stream":"survey_questions","data":{"id":"667461561","position":3,"visible":true,"family":"single_choice","subtype":"horiz","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"su1ullpk4 t553g unva8lk6wfw7 ipvkkika"}],"href":"https://api.surveymonkey.com/v3/surveys/307785402/pages/168831365/questions/667461561","answers":{"choices":[{"position":1,"visible":true,"text":"j463gx5a 1n4fa1q94 x4yw9ack6xoh u5l2fmvwlvktyw7 kpgulj5y49q d03pdq 0bl58ibk39hpe g6m66xw y8ajm5qk2uyu 02pbmuywb7h9m","quiz_options":{"score":0},"id":"4385173755"},{"position":2,"visible":true,"text":"4w8kyesurm3674 est71dh9qi23fw jbowojvmon40p jeggkq5soym 4dgqd70 6fx65rd2f94b5t lnsm1pjg0bypfv jt7d9jj","quiz_options":{"score":0},"id":"4385173756"},{"position":3,"visible":true,"text":"atun8p07f006myd wotd669048pp4 j2wa6v97pbj d7uvpqvrv7omvxw p8ef7giw88ft04 rgn3uwqgx08 rhe5yu0hg16b tdaflfh 2jpl4e","quiz_options":{"score":0},"id":"4385173757"}]},"page_id":"168831365"},"emitted_at":1674149694923} +{"stream":"survey_questions","data":{"id":"667461580","position":4,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"in0q9d6e580p28o 65hh3n3rbth4000 jowj89wgvpem9u lc918vs7s pt2r8mt n5t61mrm1nw i64uqjqjxw jhpgayjd"}],"href":"https://api.surveymonkey.com/v3/surveys/307785402/pages/168831365/questions/667461580","answers":{"choices":[{"position":1,"visible":true,"text":"d1k3kg doxgp648opvyvwx o6xwbacsy2nvo oglkc2p5fegn l7cfksxmkd3ekk es7rvcb8t8v243","quiz_options":{"score":0},"id":"4385174059"},{"position":2,"visible":true,"text":"tc374t uo4de jkgh56fi 7ttvi102i5fbjw 78i6rml o5gekwgh5r rtxw6mrnqi9","quiz_options":{"score":0},"id":"4385174060"},{"position":3,"visible":true,"text":"mfwrrhume d5c5kcy7n32d ovt2xo d3cm1 shv19 r339qbp","quiz_options":{"score":0},"id":"4385174061"},{"position":4,"visible":true,"text":"l4pnl52o9gc 6q4ufrpc7q bw16kqt 6bagaclfl21f9 x92gg7slb2h gs7qxwmj6mg o81ntc46r8q3 3tkbuhrp0","quiz_options":{"score":0},"id":"4385174062"},{"position":5,"visible":true,"text":"9nbdwy6f06wn g2tdvcsqsg 74jmcd ulao4 i4f5y r3yn39fp vsxqmxocm59s10d 9l98r8lp7554 eek3weuw","quiz_options":{"score":0},"id":"4385174063"},{"position":6,"visible":true,"text":"l7am7i8hxiy u3ylucwt8lvms bl5ftdk19mxheie gt5x6 4eiq6 7an0oa731ay2p a9gyy1qsjse xif4ton3b hu5v6cg kuasc8ce9ihbjxi","quiz_options":{"score":0},"id":"4385174064"},{"position":7,"visible":true,"text":"iw5t0k3fr7tv454 lmsbkhfkfx6 vq5ds3yhq20b2 jom26vaad fu7w8 f0t9nanj2","quiz_options":{"score":0},"id":"4385174065"},{"position":8,"visible":true,"text":"18u6s9r5 na05j55lqd i6its t96py9n9q h03ueyjkfewy rhiv9a8nxh 3adtql0ksc9l2s","quiz_options":{"score":0},"id":"4385174066"}]},"page_id":"168831365"},"emitted_at":1674149694923} +{"stream":"survey_questions","data":{"id":"667461598","position":5,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"fg2ok1k5x73j xi2i2leb9xip0jl nbjab ut48risbmg0 cmxjg1y14a b350n2yl90sq r2fpg 9u3fc44vd"}],"href":"https://api.surveymonkey.com/v3/surveys/307785402/pages/168831365/questions/667461598","answers":{"choices":[{"position":1,"visible":true,"text":"6ia2cfy435ajc4 qwja8 186ntjx 8jshqf5 i32esbjh08 yhf12enewt5 8shld76x18d18 qw01jndxbuhj50 4mtgy6fbn7nfbs","quiz_options":{"score":0},"id":"4385174182"},{"position":2,"visible":true,"text":"e5phn4tqfq 5xee0uu5x v4lw52 hkhk8lpakvb 304yi j23bhqyat9h5c j52nrstj5cqo3q5","quiz_options":{"score":0},"id":"4385174183"},{"position":3,"visible":true,"text":"swapu0ru 89dqkvum0e2 ybf7xmg d0atxxfgpb3ag ylnjkwaufdj8 rj6dedrfte xkc6hqtimwg","quiz_options":{"score":0},"id":"4385174184"},{"position":4,"visible":true,"text":"n4l9n4wq5yas blbdmjmr nkhx7l gh95jmffy0p69j 8kg39ic3a05l41 dmjd7","quiz_options":{"score":0},"id":"4385174185"},{"position":5,"visible":true,"text":"du734l u98n1d5ovgxe 1i94woho8w2k u16an6dw ha0sc8v11aeep 1p9pawo5f6v 9s6ysd nv3v3","quiz_options":{"score":0},"id":"4385174186"}]},"page_id":"168831365"},"emitted_at":1674149694924} +{"stream":"survey_questions","data":{"id":"667461606","position":1,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"f9jgr myr928nokvyw5jg fqoan6w aqdnfas0gapwd 9hobof x7d7vy7xd9il kh6cd dteve1vnaoq6o uccii826ldkj1c"}],"href":"https://api.surveymonkey.com/v3/surveys/307785408/pages/168831382/questions/667461606","answers":{"choices":[{"position":1,"visible":true,"text":"1ak71apsl1lb2 dtgtym8ftk 52syq wtnfautgqxev t2sp9icu3465pll i4rhctmtx rh5yifue1 k91tlt","quiz_options":{"score":0},"id":"4385174252"},{"position":2,"visible":true,"text":"3t2uxb my2rtujx8njmbtm a2cyspuk yvfub6ofm8a9 819o7h8o eac0xea","quiz_options":{"score":0},"id":"4385174253"},{"position":3,"visible":true,"text":"4t3bj1jwi5bo ofhe7 cg6nbcys7lu v2qv7q11u48 7oowwv12fndqe","quiz_options":{"score":0},"id":"4385174254"},{"position":4,"visible":true,"text":"7etbg4thd4k k6d0nlv 02cobf bby0p2i","quiz_options":{"score":0},"id":"4385174255"}]},"page_id":"168831382"},"emitted_at":1674149695048} +{"stream":"survey_questions","data":{"id":"667461628","position":2,"visible":true,"family":"single_choice","subtype":"horiz","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"fx8h961tahe na1oufba ybjyqi qm6girwad8b1xq"}],"href":"https://api.surveymonkey.com/v3/surveys/307785408/pages/168831382/questions/667461628","answers":{"choices":[{"position":1,"visible":true,"text":"lakrew7c6qd wsih7a2nkq0no4 94gtxvs36 87wp1kbadg1l 1hkmpi6 2g1juofi5a fmmygrjehmcuygi 0bs6ka 2pj0gvmjpd6b","quiz_options":{"score":0},"id":"4385174360"},{"position":2,"visible":true,"text":"jjsfl l1sxtcih8fyeeof 6m9lk94qqmuaegl ki7wf11a9i93 xypqh9bjq1av7d1","quiz_options":{"score":0},"id":"4385174361"},{"position":3,"visible":true,"text":"eb4np f3xpqwjcv ypljmiu0y337 lu913m i9uet4t 6dvp7afcy3uqh 1xiu25 1qqn7cyv","quiz_options":{"score":0},"id":"4385174362"}]},"page_id":"168831382"},"emitted_at":1674149695048} +{"stream":"survey_questions","data":{"id":"667461630","position":3,"visible":true,"family":"single_choice","subtype":"horiz","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"576vlo18en3 1bxycqddfhn6v rsbd7a1e4bbyf ugieqgvywq4 g3qltn1jy8 0ebdn 78lxt9iwu1jx rbdjre1cujgtsq"}],"href":"https://api.surveymonkey.com/v3/surveys/307785408/pages/168831382/questions/667461630","answers":{"choices":[{"position":1,"visible":true,"text":"5k5p528j2o b9frywomc0 aukxrjdqt wiuvud9asln2f3w 6a4mdsa22mygo bnwh1sv 5l5s9ae rbo5hecsrd w0x40 6a86lloan5","quiz_options":{"score":0},"id":"4385174370"},{"position":2,"visible":true,"text":"o8jtnh4keupcl6 ff77c s862cc89 avdo6n25pw","quiz_options":{"score":0},"id":"4385174371"},{"position":3,"visible":true,"text":"vq7kbm97 p8svkwom2lo dg91j0 i570c 7gve09y 9xn2svsiu 22oh8ub7crysocm","quiz_options":{"score":0},"id":"4385174372"}]},"page_id":"168831382"},"emitted_at":1674149695049} +{"stream":"survey_questions","data":{"id":"667461651","position":4,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"799t8 uw9o03 89r6ndohi8r8bvs gv887i 14be70qd88w qgux0yh3"}],"href":"https://api.surveymonkey.com/v3/surveys/307785408/pages/168831382/questions/667461651","answers":{"choices":[{"position":1,"visible":true,"text":"dtvq3u jyp1h165k86n y0rkc4ich02nw qshv8da ppf7j9x raeq9k abqfxgd","quiz_options":{"score":0},"id":"4385174481"},{"position":2,"visible":true,"text":"i2muubbwbuf 3ffi5361bv wdoq2xkw2hsgpkj t45p9rr5mhi 8xwetg9 gc9u9p4hpmkkev do1ik5y 1439x s9k4vbcj4uaay8","quiz_options":{"score":0},"id":"4385174482"},{"position":3,"visible":true,"text":"0bwq2juhggn68 d2ioj rs8ybqs07gxkcri pgqiiha ir4cb94rbh71q u5mssukw nsyithmc5ismqc fyjxgqjx48fsdp dcua4s9spewq63","quiz_options":{"score":0},"id":"4385174483"},{"position":4,"visible":true,"text":"t3298cfyqx7toco rvkbw4338qk9 k5vd0u42if tkkkkm hfxufgj1i3f7vm8 69yd8hxcl5 swv8ipasty 4g6qsfyb0hdpa mx6s5tmxs","quiz_options":{"score":0},"id":"4385174484"},{"position":5,"visible":true,"text":"o7itx tcbcw8snyw 6jmor7biu7 x59bcw2hwr t94tgt axflfvftpmd0h 46td0yk 67ydkpti6t m3v2de7","quiz_options":{"score":0},"id":"4385174485"},{"position":6,"visible":true,"text":"u7s76bgo3nsbob i7yi958x br6wqw77f3mv b4f5yubeq q7ubaeju1t x5t0cx1bc25jhy acvms2 pggajefpr6 c7prvy9 6ain0uox3g3rd95","quiz_options":{"score":0},"id":"4385174486"}]},"page_id":"168831382"},"emitted_at":1674149695050} +{"stream":"survey_questions","data":{"id":"667461652","position":5,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"ske92t16t19co1u 3qou5xj75ksuy 1rfxe q5tbfl9xa6dx"}],"href":"https://api.surveymonkey.com/v3/surveys/307785408/pages/168831382/questions/667461652","answers":{"choices":[{"position":1,"visible":true,"text":"gn0e03jdsij ops28 wxpn34 o9q6o9otb uxw5rwr5xh g855ayu37wsg","quiz_options":{"score":0},"id":"4385174493"},{"position":2,"visible":true,"text":"6yft8d7xv vwn2h vrlpr8r7ppbnfr vtvgbje916jf5 kv7g2ax 292bgj62fdk","quiz_options":{"score":0},"id":"4385174494"},{"position":3,"visible":true,"text":"iicugnyhyj 0t742iccrlgnc olaw2v e67g2xd1etgcq","quiz_options":{"score":0},"id":"4385174495"},{"position":4,"visible":true,"text":"55ganyc qk6vvo 1gfswk294 t4qxy0nirv3a y1wr6vmvd","quiz_options":{"score":0},"id":"4385174496"},{"position":5,"visible":true,"text":"5hjxv2qf8jr svkm4b90cs6n7u 44ewbk0getyk g6hhmaqvlcdj9g7 if6lqdknx rr5abg5ylw7ho2f rabuvef2t0k5x 0a7x5oqof9xhi8 o8tv6ke3ev7r","quiz_options":{"score":0},"id":"4385174497"},{"position":6,"visible":true,"text":"sy4uf cxu4rsabrlmaw kdov7 hx6ta8d4c0x290","quiz_options":{"score":0},"id":"4385174498"}]},"page_id":"168831382"},"emitted_at":1674149695051} +{"stream":"survey_questions","data":{"id":"667461666","position":1,"visible":true,"family":"single_choice","subtype":"horiz","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"ssubl 48hjj9vj31v omr18dpic pp65f94 j35xxoh u04pidx8dp7i bo1ae4ptsntu3 o6v99q"}],"href":"https://api.surveymonkey.com/v3/surveys/307785408/pages/168831388/questions/667461666","answers":{"choices":[{"position":1,"visible":true,"text":"04s0qv msoghfkw0fr4hmq kdv92tuo2 l8htirpt 4h2nxjcla5rjor n1wy2w5","quiz_options":{"score":0},"id":"4385174598"},{"position":2,"visible":true,"text":"64o6m jya4p7twvvs ls75jv9lvf 8gr7y35au5hcqfq","quiz_options":{"score":0},"id":"4385174599"},{"position":3,"visible":true,"text":"x6ijo4tj5qrljkh dk5dmknmhn 3rm63 kdym4 bxjsru9kvh1 g2vp966a8nkh 6dhh6k99a88gt 9b7emois0ldfr swbnqor4k66","quiz_options":{"score":0},"id":"4385174600"},{"position":4,"visible":true,"text":"4uhchfo7n2wmrtx e211emk0v53w a7ckw5lg40n qrx8pw0r5xrph q8ndfdm5g08tex8","quiz_options":{"score":0},"id":"4385174601"}]},"page_id":"168831388"},"emitted_at":1674149695052} +{"stream":"survey_questions","data":{"id":"667461670","position":2,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"lbje0ppud4so8xk ax7vnbef0l3fv7j alcnsi48jehkf8c 9fghb3uop 8qfnul9 w8d6lma9 ejcm4j9x604p t7b7dk"}],"href":"https://api.surveymonkey.com/v3/surveys/307785408/pages/168831388/questions/667461670","answers":{"choices":[{"position":1,"visible":true,"text":"i6exa76ck98 9pkrhl37j88s 8k6dvdhxg5axw3q 0dtn8xt6 ji1gm0qu 9pie3iotb","quiz_options":{"score":0},"id":"4385174620"},{"position":2,"visible":true,"text":"knjsfkea66j bp5sxiba qa1yvg m3vul 96hgbjtin7ux7","quiz_options":{"score":0},"id":"4385174621"},{"position":3,"visible":true,"text":"jf90cc rc80q71mvp1 8f3qlcc4pls wvixh60l7b","quiz_options":{"score":0},"id":"4385174622"},{"position":4,"visible":true,"text":"u8275ses4k sq0bax8 vbpfs7qwh yhbborapj3ai t6eo1n6o9rf uitrqawsi p2oe4x5ie","quiz_options":{"score":0},"id":"4385174623"}]},"page_id":"168831388"},"emitted_at":1674149695053} +{"stream":"survey_questions","data":{"id":"667461674","position":3,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"7xuudm hd85d2fbd49 hxo4gmsnhaxn53y r3oo0piiij5 hvifmm5 mfep196v1yi q9o6w9gksyedtgs o3y01cyw4ca91"}],"href":"https://api.surveymonkey.com/v3/surveys/307785408/pages/168831388/questions/667461674","answers":{"choices":[{"position":1,"visible":true,"text":"7h3hoeucihjd41o 4la76h8i8 8dgl2v5eub 962jah6wws8 qdtm85x9t3y96w5 mkq9yvj 81nsju0 koqkfhpe7pw","quiz_options":{"score":0},"id":"4385174634"},{"position":2,"visible":true,"text":"vpmf8jyppptscjq 3ujxkee7dye ggqm9tg9svjgx ashilo1ffin","quiz_options":{"score":0},"id":"4385174635"},{"position":3,"visible":true,"text":"nselknrgymf vq2vd1efu 3a9b7whs2k7bj5 nujxdbcbg8qcjp 2va7wdag r0k00wo6 bd5u5 btk0p","quiz_options":{"score":0},"id":"4385174636"}]},"page_id":"168831388"},"emitted_at":1674149695053} +{"stream":"survey_questions","data":{"id":"667461676","position":4,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"0g353xw0tmg9uj yjpp4gp6d kkvtb90xqw7se5s 1rtjhd"}],"href":"https://api.surveymonkey.com/v3/surveys/307785408/pages/168831388/questions/667461676","answers":{"choices":[{"position":1,"visible":true,"text":"qi3ml trfm3r0 hij01mx6lt6 olgi265lrg7a45","quiz_options":{"score":0},"id":"4385174643"},{"position":2,"visible":true,"text":"sip0lix7kpf g1vjmce6cj u3qgbnitdp2w3 gxgg5cc 53rn81g6mr 008agselt2cfwmo","quiz_options":{"score":0},"id":"4385174644"},{"position":3,"visible":true,"text":"29qp4n5j92gre bwkmqp821xab2ri kyqdft g46vvp19jlvq1k 2sgm90q2b6 1ewvm 8491gfakn3p esqiug2cxmg6ka gb9cdrtlc9qs","quiz_options":{"score":0},"id":"4385174645"},{"position":4,"visible":true,"text":"mcijdsetfwvx 9b6tmxv phlw18ap37 20s5wv","quiz_options":{"score":0},"id":"4385174646"},{"position":5,"visible":true,"text":"3g748xwkq6o 2ut8g nb63dyj stbl5wm 2dkk61h6 29bjrer dxet33 v6f36uqes9qu vgqoxu1nmi5lm gtuqaph","quiz_options":{"score":0},"id":"4385174647"},{"position":6,"visible":true,"text":"j5p31 t1ltv5rpt 85q5tlwq2sfsv3l bh4a2e rev7lbj7 2qwf83ylrc3n fiufpgf h3fp2fd0y5o uw3phwkrek ihy0faqy9s1rsp","quiz_options":{"score":0},"id":"4385174648"},{"position":7,"visible":true,"text":"prd59 gqs7t8tmls 633ujsd7d9ni u1fkx5a6mx318w k71rc82lydu43 orkxf utbtip9c1ky72","quiz_options":{"score":0},"id":"4385174649"},{"position":8,"visible":true,"text":"dc5yl63yj6lv jqeok71lte 4leao9ms1xu3oh 0fdb4m50ip t31tl6q57jjpmh v2osljafdca1x6","quiz_options":{"score":0},"id":"4385174650"}]},"page_id":"168831388"},"emitted_at":1674149695054} +{"stream":"survey_questions","data":{"id":"667461686","position":5,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"987ob 7kiuo4teh1 8s7deqmvpopsp txo4fxjj5e 8eqdafh1k7yjhwf 889ll 0s23juj5vyyq99g 7390ddsh565 lpni4hn1bi0"}],"href":"https://api.surveymonkey.com/v3/surveys/307785408/pages/168831388/questions/667461686","answers":{"choices":[{"position":1,"visible":true,"text":"1vdqk14 sjvrskliu ejn42p38f ougj5qtxi6k5q 6d2ccy9073i9","quiz_options":{"score":0},"id":"4385174676"},{"position":2,"visible":true,"text":"b0yc27 c3v3i nhneas7k4y dqth374wqfs9hqf eg6g53l03g 8fg7266kcffpx7 6i9d7rffvncy s0f2on","quiz_options":{"score":0},"id":"4385174677"},{"position":3,"visible":true,"text":"k2kv88vnieg5pk fxdpcorngy bmidk g2lb58 qkbeew82lmprw","quiz_options":{"score":0},"id":"4385174678"}]},"page_id":"168831388"},"emitted_at":1674149695055} +{"stream":"survey_questions","data":{"id":"667455128","position":1,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"21b2d1nm vcduxp396s3f vrgn9riooeu 2w1y9r0lhe5j0po cfv6aya xsek4vnv4"}],"href":"https://api.surveymonkey.com/v3/surveys/307784834/pages/168830050/questions/667455128","answers":{"choices":[{"position":1,"visible":true,"text":"1cqki1ijt cnkrfpewyh hloep tun23aq fm2hlturu wp1hn1005","quiz_options":{"score":0},"id":"4385137324"},{"position":2,"visible":true,"text":"8q54jh807g67 0chem4m32w 6g6cg4kfbpyp48 wgbo0l1 3ivc27 h1g0jagebgvj36d loo7agxubx imfmbchanx4w47p o4rfv9","quiz_options":{"score":0},"id":"4385137325"},{"position":3,"visible":true,"text":"axjh0ev2g5g0s01 d1f1ekg41aq 1r7fcho4 adaclkcgj0ra1h5 obp9ot rak96hmu bx3804jjlr5vg wruubenes3g4p h41e18dufrs40kb 9t34k1uad6g2a0y","quiz_options":{"score":0},"id":"4385137326"},{"position":4,"visible":true,"text":"0rvnqa934hd356 yx0p7kab01kubvj yuy2tik0o6t 3854yf6up2mgfc kqn54h6qvfoj jecuuxm0d9s u5d8y0hmv5bcww eumwsigjumvc543","quiz_options":{"score":0},"id":"4385137327"},{"position":5,"visible":true,"text":"sutsvkyg7 x3pr1f8 gnn8yg 32ls0it6m8c5c3 5xhh23hb0bck c5kbcphdgm 8n1839 8oe5f4wdsxv oyijcnki143a","quiz_options":{"score":0},"id":"4385137328"},{"position":6,"visible":true,"text":"a14e7gtqqbrm ei6h8ynhoi92vs dq0oj6m rulpoxmdtew b1cnc7v 8pxkgtbq6vu0o","quiz_options":{"score":0},"id":"4385137329"}]},"page_id":"168830050"},"emitted_at":1674149695180} +{"stream":"survey_questions","data":{"id":"667455130","position":2,"visible":true,"family":"single_choice","subtype":"horiz","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"9no46q bgj8bu9 qbwy78onx0sp5df 1s2n38k6ly8xo5 xanlhf0dqvej htj1rl0wp ip01j7fb6qm"}],"href":"https://api.surveymonkey.com/v3/surveys/307784834/pages/168830050/questions/667455130","answers":{"choices":[{"position":1,"visible":true,"text":"7dpysnial1 w484xmm33rpralf fsb2j19 r599iaw30wgp gk8tit5i681m 14lsb5gmddkr qrncp46 vp0lw srtca1i587dq","quiz_options":{"score":0},"id":"4385137340"},{"position":2,"visible":true,"text":"0yflf5ua3 5l5tu93l 45fu03hrvt kii5twmbs6n uqppc ca18nfpevvny 8od85fpdw gc9isqks5ou7","quiz_options":{"score":0},"id":"4385137341"},{"position":3,"visible":true,"text":"uuv580b3 ejgygxa3nxuod qx2s8cx85l1vu c96g3513rcjdmuv 161c5f mrclx05fg2o 9r8lk172","quiz_options":{"score":0},"id":"4385137342"},{"position":4,"visible":true,"text":"8jhq2vl1hj6 dvnvp6su wshwoa9 unbnfs wjkm9w4w5w glupwsmbjeb3 26q9svrti 21b4potlf4d","quiz_options":{"score":0},"id":"4385137343"},{"position":5,"visible":true,"text":"y1xu41qdgnk hw9yooajs6n xhaqwoc8 hxi6ioaqcnf3 le1ein6yt","quiz_options":{"score":0},"id":"4385137344"},{"position":6,"visible":true,"text":"y7vgshrq086w 18x5gdxg0 ibct5mdxqm78py aq9lw3kx kq3rfwnnod q4a8qk7q 2mytdfvtgxe q7w14xsgcfsw4","quiz_options":{"score":0},"id":"4385137345"}]},"page_id":"168830050"},"emitted_at":1674149695181} +{"stream":"survey_questions","data":{"id":"667455161","position":3,"visible":true,"family":"single_choice","subtype":"horiz","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"8piluvv5gm y4fyg bdn90lnhlw hlp49ut5by 1wcskj bo4qich35bkbh84 9s7n4art qxh35"}],"href":"https://api.surveymonkey.com/v3/surveys/307784834/pages/168830050/questions/667455161","answers":{"choices":[{"position":1,"visible":true,"text":"7v9pb77j2u5h8lq fjdckl44c6tdi oxtly8metbj35c7 2coi267okn 772jt3x4 8pdrkhod14i eeyu3ox bkl79rtci65 0jt9nxkpamu5","quiz_options":{"score":0},"id":"4385137468"},{"position":2,"visible":true,"text":"w13utk5t7u98 ltxgdnhqgh3 tv729vqrf2g8 a3kf9ym ddp3yd ryqfnhyyshm","quiz_options":{"score":0},"id":"4385137469"},{"position":3,"visible":true,"text":"4o86igx uap6ssaxn rej7oi49j4nj g1afe aj0rahjii gdy2ygm yrq0r33ljaqav","quiz_options":{"score":0},"id":"4385137470"},{"position":4,"visible":true,"text":"ywmratfmy ko10n3cmegap9f vor9gwdvwevpi2 7oid9t72lp yc37r5pssxrm d9fdyo6kj9g5","quiz_options":{"score":0},"id":"4385137471"},{"position":5,"visible":true,"text":"l1ei3wav57twf yn5mmi2almiidx7 gdkyhn 3npig9sip","quiz_options":{"score":0},"id":"4385137472"},{"position":6,"visible":true,"text":"rr84y ht7saym46 rqxpn8 qix3c","quiz_options":{"score":0},"id":"4385137473"},{"position":7,"visible":true,"text":"dtaeau8 wv5ay39bjtph6 uxvtv8 bfa13j2 t1cxi9sgxs9u wh5it","quiz_options":{"score":0},"id":"4385137474"}]},"page_id":"168830050"},"emitted_at":1674149695182} +{"stream":"survey_questions","data":{"id":"667455172","position":4,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"f4i385t8gi2y iukko6gtimv6 2ljnv 3s7mawxra ueavu x4pl1nkyt1s0b abfab7bvxtkmrw d4843lq j5n0c7"}],"href":"https://api.surveymonkey.com/v3/surveys/307784834/pages/168830050/questions/667455172","answers":{"choices":[{"position":1,"visible":true,"text":"5dkq8pnhf1gag8 u73xqg mej8lwdqo qs1tuihyc heabchr403srhq0 51c5ipel70a csfc3dwuxn9mt9m m9j6t37f xe547smil yy8ji7kgqx","quiz_options":{"score":0},"id":"4385137485"},{"position":2,"visible":true,"text":"q02a6wo56w 6fc33b k7d7a9n7grsgt n7j84b6552eyy58 xapgm1 xxxxklio 1m6q53gxh23a sl0kn09v kdw23flh1k9ss 1kfm8tao","quiz_options":{"score":0},"id":"4385137486"},{"position":3,"visible":true,"text":"d3482iajo1udye ian1i2sop8y5 6j6u9vi h2flbi3mhh 8bo3d4b7wnwto x7dlap9vcos","quiz_options":{"score":0},"id":"4385137487"},{"position":4,"visible":true,"text":"ytjtpqs9tcdnb 5pxact7wjjdtx filtao5oyv w02h42un1hxtd5h dbagrj511v8 d2k7wxlw","quiz_options":{"score":0},"id":"4385137488"}]},"page_id":"168830050"},"emitted_at":1674149695184} +{"stream":"survey_questions","data":{"id":"667455179","position":5,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"orgitaiw xmkvjmfm ev9wjtt7jn r1c6c1a2w01 axiagkpsr7 n6shk7sv7miuqa cjsunx5lysasx7"}],"href":"https://api.surveymonkey.com/v3/surveys/307784834/pages/168830050/questions/667455179","answers":{"choices":[{"position":1,"visible":true,"text":"v2fci0n3 q922d8hp kc1mka6c9 9hkt1vtlsv nx48ppjd kaisn r586rs 5awcm 1y8b5ew","quiz_options":{"score":0},"id":"4385137492"},{"position":2,"visible":true,"text":"fv4rhyxgmweyo1r g2yoh7nm88 ubgo22v 8e2ukol","quiz_options":{"score":0},"id":"4385137493"},{"position":3,"visible":true,"text":"6b1kwthm24uw054 42yns43d9d2 9aelxhek6m9cer 1scie9 ob3erxdvkvv 5bccusj 9pwd586","quiz_options":{"score":0},"id":"4385137494"},{"position":4,"visible":true,"text":"0x7t0 engoyj qcv0e ta9rgyjcob sqj1y247 2f6nqh0s4e9qtbb o3q661emk54yvlq am4wkqctn26fblr 4yd280s9dpbyq","quiz_options":{"score":0},"id":"4385137495"},{"position":5,"visible":true,"text":"1mm0gylkc8tpmj vpmvo0eme0 9kriqmlb dm300brkw7certk 096rh8ts1ll 4j1pr","quiz_options":{"score":0},"id":"4385137496"}]},"page_id":"168830050"},"emitted_at":1674149695185} +{"stream":"survey_questions","data":{"id":"667455202","position":1,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"tius10di41k9wls fmdlvphlmbl4fd 8t41mn pkss9 f7qg4uouq15l 9al8qjnu8lg4c d62wfnkbe4mx5"}],"href":"https://api.surveymonkey.com/v3/surveys/307784834/pages/168830060/questions/667455202","answers":{"choices":[{"position":1,"visible":true,"text":"pxw0w9ui9m4oc inicqftdpfe dyp4ai vn1pmsp6 6cm2gr9b 0ruklaf8 xhb0a8q","quiz_options":{"score":0},"id":"4385137700"},{"position":2,"visible":true,"text":"p28lapcj xmelobuak9wnfe k0ilacxb575 54eam 96ng7","quiz_options":{"score":0},"id":"4385137701"},{"position":3,"visible":true,"text":"gw913n4emtltob sqr3rxe9q alm4u96n5dbp 79stl7bky bseq17ndb ibhcv2mf06av","quiz_options":{"score":0},"id":"4385137702"}]},"page_id":"168830060"},"emitted_at":1674149695186} +{"stream":"survey_questions","data":{"id":"667455205","position":2,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"o5429bwk bdk9efwp y207rta 5ir7a m3btvu7doifx o2as6uky bmp4untymjr 2qx7e254wxygi pwf681dh3l"}],"href":"https://api.surveymonkey.com/v3/surveys/307784834/pages/168830060/questions/667455205","answers":{"choices":[{"position":1,"visible":true,"text":"ihqtbuwrc7tkk t8rxgekiec q546dffi6yo7ato ip17xm5fe","quiz_options":{"score":0},"id":"4385137740"},{"position":2,"visible":true,"text":"ithl3 gl2tfo1dl uuiy7ls5 7wkeslse","quiz_options":{"score":0},"id":"4385137741"},{"position":3,"visible":true,"text":"ul101be 6w0o3urllk5o4rc m6ttbhcts3nrpq cd93g3j6","quiz_options":{"score":0},"id":"4385137742"},{"position":4,"visible":true,"text":"keye6y0 vxjehf4oga975i hh0hwvp20y0 hmvp1i de9i0gf 309gv73vahw5tv6 b7th25myd dl56yk9tjsnwbkg nlwrih","quiz_options":{"score":0},"id":"4385137743"}]},"page_id":"168830060"},"emitted_at":1674149695187} +{"stream":"survey_questions","data":{"id":"667455210","position":3,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"ccus8ci s30ote6pf5enhkv 3xw226wx0r4r soqp6i56rx7p"}],"href":"https://api.surveymonkey.com/v3/surveys/307784834/pages/168830060/questions/667455210","answers":{"choices":[{"position":1,"visible":true,"text":"ror4u04bm535i fajv10 ji7v3kn9 nu7pljg4qd vtkx1s","quiz_options":{"score":0},"id":"4385137775"},{"position":2,"visible":true,"text":"5xjy8qckk 6w20pov 9ductfhj r469e wem8w rc0jks9hwv","quiz_options":{"score":0},"id":"4385137776"},{"position":3,"visible":true,"text":"difesvxw9al ygl163e5w9dv6 x2glb8m5g6fxm eiibhejl","quiz_options":{"score":0},"id":"4385137777"},{"position":4,"visible":true,"text":"tnfsnewa16k155 klbxdolp it7hi 3bwcsq4kxfs6ag y4rjmghck8fb1 kbr64tikluwhtsh m6uwesc5861 tdfj8p qrf7oe2ydofs vy2xx8qsmcvubj","quiz_options":{"score":0},"id":"4385137778"},{"position":5,"visible":true,"text":"w4u167 jcxljoenbixyu2 xmxki pnigr00vdimxddq","quiz_options":{"score":0},"id":"4385137779"},{"position":6,"visible":true,"text":"s4ksxp4wgiv24 jd0h5q9cdqbaf2 at9rhpltsnm9e 9vvcvfubdxoda 3dr2s4l bcvpvk5qq","quiz_options":{"score":0},"id":"4385137780"},{"position":7,"visible":true,"text":"p0nngm2a15gos i48053r8tp2si 5c356fdw 7lwo3016oo2u ysdomx7ts utp4qqa6","quiz_options":{"score":0},"id":"4385137781"},{"position":8,"visible":true,"text":"hjopydw3jidvpdk opbjs2sr 86c6g94l 1045p9imdm h0ewun d0ki3w4t li53wdcc9 v0m8nd0q8rim c9kuoh 986j08boiew4s","quiz_options":{"score":0},"id":"4385137782"}]},"page_id":"168830060"},"emitted_at":1674149695188} +{"stream":"survey_questions","data":{"id":"667455212","position":4,"visible":true,"family":"single_choice","subtype":"horiz","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"ycd70f 3tlkc9fg5 uhsj13x 3fy1deg e3x8xxtprtx 35w2t0fb0kt 3c7sp4a9l vekf5fhta3agc tqtiua55"}],"href":"https://api.surveymonkey.com/v3/surveys/307784834/pages/168830060/questions/667455212","answers":{"choices":[{"position":1,"visible":true,"text":"3nd2k 12iqy qcy1q78egxti b88f20djp60v 6orn1h44 xb2fsut8p63fd spd9rybvtlrx6 p79lf27l","quiz_options":{"score":0},"id":"4385137792"},{"position":2,"visible":true,"text":"w6va3wm5af u5earys3j7d2w0 aigku 8mhkw6l24gftb lj78ittnu2lhxct","quiz_options":{"score":0},"id":"4385137793"},{"position":3,"visible":true,"text":"1vjpoerlc8kf lnqycklqdoe yt06t24brl aoqrq","quiz_options":{"score":0},"id":"4385137794"},{"position":4,"visible":true,"text":"syf9d5k3axfjhqx f1un5ergu68m7h hf5by9f1 0qf94 docxia9h qcda6u ja83rjw7gdm","quiz_options":{"score":0},"id":"4385137795"},{"position":5,"visible":true,"text":"al4dbwow9is7xut pif50a9 434fsto nh16xfiu34c0eld beshoy","quiz_options":{"score":0},"id":"4385137796"},{"position":6,"visible":true,"text":"q9ufu06kh4d 4oogck630yox 7wsoh 0l2dsb3 8noi1cwam8ukth","quiz_options":{"score":0},"id":"4385137797"},{"position":7,"visible":true,"text":"3e5ijt o0m3chiw3pitxr8 4hciaiuh9c gpc5q4olp3cib 0bhsd3payjog 562gi7o4647qe 39j8aa4ptw jbydrqc7ujb iqlxnqn4uea","quiz_options":{"score":0},"id":"4385137798"}]},"page_id":"168830060"},"emitted_at":1674149695189} +{"stream":"survey_questions","data":{"id":"667455215","position":5,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"0qm15jfh tv1ui2w edoha95n wbhjp4 rui3rtv6xf4n5 v920f2a1hrd 5d7gj7guq r7ljcjdk2f8t jv5iocm9mv7pg cmow0h6"}],"href":"https://api.surveymonkey.com/v3/surveys/307784834/pages/168830060/questions/667455215","answers":{"choices":[{"position":1,"visible":true,"text":"sewil7695q3 nu4xd9w cr1qqpg4h9qlr ktchj5oeb4 1ns6cdqbjex5f w2y8iflb52 kpkid 1f8unrp e17xh5 qn47cr","quiz_options":{"score":0},"id":"4385137810"},{"position":2,"visible":true,"text":"q21t3nuf 71sfp kag1g9kes bx74gjdj1 uvk0chaofja60","quiz_options":{"score":0},"id":"4385137811"},{"position":3,"visible":true,"text":"nkbskl7xaxqbh76 pgggq5trhj3t isut5qlmwmxnbw apxr23h4v0l","quiz_options":{"score":0},"id":"4385137812"},{"position":4,"visible":true,"text":"jotjdok64gv ya4g5j b0w379 riavnfi10mu3bm 739xph torva74 9dcgi9ns8qlnho","quiz_options":{"score":0},"id":"4385137813"}]},"page_id":"168830060"},"emitted_at":1674149695190} +{"stream":"survey_questions","data":{"id":"667462113","position":1,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"xvodyrmsj8o5 vqjqrurdq h74609w5o8cj kpy303cf 5qyfp1flg hpfvhtg412qu bwhmup tfxwjcltbmp"}],"href":"https://api.surveymonkey.com/v3/surveys/307785448/pages/168831471/questions/667462113","answers":{"choices":[{"position":1,"visible":true,"text":"x5gvnnvh 39thim64p k3naeh9 ebx5et8ci8vnjwq mwfb0867jts36 lq8ghnv8c23c86i","quiz_options":{"score":0},"id":"4385177065"},{"position":2,"visible":true,"text":"5atgqxr5w uk3ussdg7 29qlw s20qfx0w1u1d cdx47v m76g66t1j x9wuj hyv5095ipd9ly","quiz_options":{"score":0},"id":"4385177066"},{"position":3,"visible":true,"text":"yqvo5j rojr27j6ww 5k0ra1y96j6 vbd70ncr0 wdoxqqhkv a283r7g tshidt7i0jw 70gxqa3 d1wh0y 8q2x4yu5u3tcga","quiz_options":{"score":0},"id":"4385177067"},{"position":4,"visible":true,"text":"53838lqaxys gt190mgek1r2r llxh86fi38xyyb puwhs54wnxa8m5r cb8w1f312hts1 80gh5hrp0o 9a6siov 5i3l99eiefhoq","quiz_options":{"score":0},"id":"4385177068"}]},"page_id":"168831471"},"emitted_at":1674149695299} +{"stream":"survey_questions","data":{"id":"667462114","position":2,"visible":true,"family":"single_choice","subtype":"horiz","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"r5gme6gxar 540ixc g0a32bjvkgg4lh 9n8hpb qor7i9od6r max0ae1vu08"}],"href":"https://api.surveymonkey.com/v3/surveys/307785448/pages/168831471/questions/667462114","answers":{"choices":[{"position":1,"visible":true,"text":"tk3pmts41 aw7w4y8e5 65iplksmu5wa0o 9ve8f0vgh eiy8hki8e3 5vbwg fa3nnnvu3uq c43makf6i","quiz_options":{"score":0},"id":"4385177095"},{"position":2,"visible":true,"text":"3kvwm3v j0x7vrrpnxmtcub 7h9g43wg71ppkn 71nswd5eq ocqpss07r05dej4 7ln0vdgw0a","quiz_options":{"score":0},"id":"4385177096"},{"position":3,"visible":true,"text":"07td1maptf9wde nrlxmvshy dgpasbrawvpndo id9yjt2tsi mkm0ri7epkw5d poj8pv8m4lu0hc 2xh0i62g5j wxokec50ps52h8 d6uqtrf td70pitsu","quiz_options":{"score":0},"id":"4385177097"},{"position":4,"visible":true,"text":"ccw6cg wd5s85rpk dqlppdkh wpqg1t9vhdq8c","quiz_options":{"score":0},"id":"4385177098"},{"position":5,"visible":true,"text":"8b85ql72lufp 3r2k118 vy5uh6mnntsq5 x49hvqp19g 3oc9laa75hjxwn7 a77dw8 aiskfi350fyh5w 2h7ra ry4mj i2el2","quiz_options":{"score":0},"id":"4385177099"}]},"page_id":"168831471"},"emitted_at":1674149695300} +{"stream":"survey_questions","data":{"id":"667462122","position":3,"visible":true,"family":"single_choice","subtype":"horiz","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"0wpcptufvllj 4yjhb78a bxn0uwh wxberovodxawinb 414fl1hatnpl 6tdxbt dpieidpjnqba9r"}],"href":"https://api.surveymonkey.com/v3/surveys/307785448/pages/168831471/questions/667462122","answers":{"choices":[{"position":1,"visible":true,"text":"c7nxl 3qrbcjg tddcypx5j63ne1 ebrs5911s ilsx5w8mvfs s24oodbw hbah99rw65wt7i","quiz_options":{"score":0},"id":"4385177138"},{"position":2,"visible":true,"text":"1lx4btr3s0pqq63 y93x5lqe xmyta126vo 07q0rnh 4f2bxvoc441 wcnvx ytjeo8g5a wjqrg 134n2q fgobl","quiz_options":{"score":0},"id":"4385177139"},{"position":3,"visible":true,"text":"t9hwm2nyw se2sl72a t70iepatjw0rsh kq6ta 6mhce jgfjh52 w3ivi m0sxg2i4 pup4tsn7a18","quiz_options":{"score":0},"id":"4385177140"},{"position":4,"visible":true,"text":"j6w78imo yhv9sgxs64ii ep2ckum1ge3 3d8gcbsuw j0b95oqfwn","quiz_options":{"score":0},"id":"4385177141"},{"position":5,"visible":true,"text":"5gn4d25al 29tdmvxhe1 svxcxt7qsq pbnlphkoa xvotqve1o79","quiz_options":{"score":0},"id":"4385177142"},{"position":6,"visible":true,"text":"sexvxfmqb jp6xina8q 3gsyu2jfgvpag d2wcp0k5ukuk igg5ecqj rtkd5j 485nmxjd tjodfsyhu5","quiz_options":{"score":0},"id":"4385177143"}]},"page_id":"168831471"},"emitted_at":1674149695301} +{"stream":"survey_questions","data":{"id":"667462126","position":4,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"5r90gmyyy 1eaacbfag0g4dtj 4rlwnt3r jxg5ruhn tkkml hhlu8r79jma"}],"href":"https://api.surveymonkey.com/v3/surveys/307785448/pages/168831471/questions/667462126","answers":{"choices":[{"position":1,"visible":true,"text":"vln5gpqjq tglcfbuxu7b dob43c qnisv2 td55l7hc91pd00q 8gig93a5h 7hrhg6drxsxy bj0oldpxa33by1 4q9mx98wbi p0wb03eabrt87q","quiz_options":{"score":0},"id":"4385177153"},{"position":2,"visible":true,"text":"fj0a0nfwmfjrong q38px84nyk rvqmj 2sv0x6n9a hm88jqn87kvws","quiz_options":{"score":0},"id":"4385177154"},{"position":3,"visible":true,"text":"ms6ilfpbca 8ota11f 1qvg0ellfxis pfyvkkuujjjg qih57geu 366h9cnbrnny9 4sx4q0hbgu","quiz_options":{"score":0},"id":"4385177155"},{"position":4,"visible":true,"text":"si9tpsg54u 13dds2djq4kh kra03y5p43 j8rej5mv d0tkvig6","quiz_options":{"score":0},"id":"4385177156"},{"position":5,"visible":true,"text":"k5ijfpctrn flm2q7kn5t4jf xkjec55tbfsgsn7 r61gy346sxt","quiz_options":{"score":0},"id":"4385177157"},{"position":6,"visible":true,"text":"v9u400dqc fii651ftc 29rn2dffioa0 1m22amm42b qhs0wpth5 mva3eqo09hvo7x 5od22d7a 7m4606e271a6yk","quiz_options":{"score":0},"id":"4385177158"}]},"page_id":"168831471"},"emitted_at":1674149695302} +{"stream":"survey_questions","data":{"id":"667462130","position":5,"visible":true,"family":"single_choice","subtype":"horiz","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"a8ibp46e09n3ae uwv4r3pbpla uxqx8 8nlfqe2ekyj6b1u ju2o3ts 29q5blc7t5m225x rgcjb uek905hycm3 8nkpkppcdm4s vfcx6c63bfppfk"}],"href":"https://api.surveymonkey.com/v3/surveys/307785448/pages/168831471/questions/667462130","answers":{"choices":[{"position":1,"visible":true,"text":"xkuphh 9sloeexwdfla qyx58xq9u ne6p3x","quiz_options":{"score":0},"id":"4385177171"},{"position":2,"visible":true,"text":"83uko6624m otef3go 1ba21xa3 6k24mmw t82m7my9ipep","quiz_options":{"score":0},"id":"4385177172"},{"position":3,"visible":true,"text":"ke2gqx614f p7y9pi89 asll5jaju89e1g vgrj3wbe x815bgx 67md1tfhviy9v","quiz_options":{"score":0},"id":"4385177173"},{"position":4,"visible":true,"text":"w5raj381jcgffq 9o1b73 0jnat47bs8bq9e 41ffc wcmivj410jtu19 njxb3v7 gurti qsjowjls niwyt2clulpdpa fe0skx96v529ui","quiz_options":{"score":0},"id":"4385177174"}]},"page_id":"168831471"},"emitted_at":1674149695302} +{"stream":"survey_questions","data":{"id":"667462135","position":1,"visible":true,"family":"single_choice","subtype":"horiz","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"ictucjn9av1 hqjkdsl56q dw9ouny 3wbjmkmik8m pxirnbm7f jq31e0w572q61j le5ke3if 8wkwmox1ow fsu8b5 ci0ot"}],"href":"https://api.surveymonkey.com/v3/surveys/307785448/pages/168831478/questions/667462135","answers":{"choices":[{"position":1,"visible":true,"text":"k4q8hnwb0uticgy kx7rcy sp8nvx036 u552gi 1icsxiqmdmects 0c1d69aee soiye","quiz_options":{"score":0},"id":"4385177200"},{"position":2,"visible":true,"text":"bolb3i7f7 5d7y5 n7il93or tb2599 wlr1hh88d5bjpr vu3v5uudajbgoa s7kmwnhqpph","quiz_options":{"score":0},"id":"4385177201"},{"position":3,"visible":true,"text":"ve8olc60hjdia ake87 4iv5po m484jgkaut 5e285a0hgsrirjm qtnofl05rdtx","quiz_options":{"score":0},"id":"4385177202"},{"position":4,"visible":true,"text":"1pix5bfrx 9pncw4rp5g xf1sm2qr c474c1s67jgcrw trxj2k huiccx1kxt1 l13mo1hij12","quiz_options":{"score":0},"id":"4385177203"},{"position":5,"visible":true,"text":"kf0u04jlsopl 1b4xnt0g 3ehjhwg d9465xfy24uisef 0xv77xfgm7x","quiz_options":{"score":0},"id":"4385177204"}]},"page_id":"168831478"},"emitted_at":1674149695303} +{"stream":"survey_questions","data":{"id":"667462136","position":2,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"c4f5ohh3sr2w xoto95lot 7lykuivbhs078b h524lu75 mvss35agi"}],"href":"https://api.surveymonkey.com/v3/surveys/307785448/pages/168831478/questions/667462136","answers":{"choices":[{"position":1,"visible":true,"text":"1blqraty 6uddh9u imhcfci dho72p k7feqgqqqr3jm7a 8y7drc4m8m8f1l0","quiz_options":{"score":0},"id":"4385177210"},{"position":2,"visible":true,"text":"cnxmsuqasj3g gm6e1da2102igu c3w07jugiuro afj54 kpoom7 n11yf","quiz_options":{"score":0},"id":"4385177211"},{"position":3,"visible":true,"text":"82nkl1jumcnc6y3 raogw1xp84nswty h77x7 f26dju09o2 ajgbdjdjne6i","quiz_options":{"score":0},"id":"4385177212"},{"position":4,"visible":true,"text":"dukxs7vo kj6j0x kjsmang 6g8vgh t9ymo1h2hfln6 iyuklw ou0uq6","quiz_options":{"score":0},"id":"4385177213"}]},"page_id":"168831478"},"emitted_at":1674149695304} +{"stream":"survey_questions","data":{"id":"667462138","position":3,"visible":true,"family":"single_choice","subtype":"horiz","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"jvr1s akb7hxxk2ptt1q jhgxvvgirs2d9 rae88p7 b54u3m1g1 vflgmpv75w5q fauxphpa8bxdutx"}],"href":"https://api.surveymonkey.com/v3/surveys/307785448/pages/168831478/questions/667462138","answers":{"choices":[{"position":1,"visible":true,"text":"jnkfpiwx3ye b6osvfmkkn eek8p036ayn rt6k5em681q78c 8j9brp8e2qsa 3wu71v85le4x65g","quiz_options":{"score":0},"id":"4385177214"},{"position":2,"visible":true,"text":"oriu3pl31qd r6u7isqu2p1 s6lrtm ybawl9g3oafvxx9 sw16llmo3dpc2xx v0r4lrj serixtbxt sy64a2vcyjf f8mhp","quiz_options":{"score":0},"id":"4385177215"},{"position":3,"visible":true,"text":"v0j4ixrd gxjah4rsf03mhtt selnh 311w2 80liajkb9v2h8 m7aggx9 kmjjabnan kk3g4y8jiuv n15toj tt60bhmd","quiz_options":{"score":0},"id":"4385177216"},{"position":4,"visible":true,"text":"vmvi1nlvkd1vy 13gv0qjxtri sty84 df77l wwh82kck3x0 7jer7beg 8x6vcrnh9qiaf3 nhl5ref5v5bud dol9qivxsg8owna xsw7e0s1","quiz_options":{"score":0},"id":"4385177217"},{"position":5,"visible":true,"text":"a2fdw9jbcytl8ok 0ir460hfwm8 rqecrtla vyi4l3tpv eyhkdh47w2uixp","quiz_options":{"score":0},"id":"4385177218"},{"position":6,"visible":true,"text":"yvusg0ns7jw9tt nadlph4 0ur0o5dhan 9jlq9878999lbf","quiz_options":{"score":0},"id":"4385177219"},{"position":7,"visible":true,"text":"48eqbvdq1ubpvyk 5f4pwr438ik81xj x7ioyubgl90808k 12tr703dg0s 9xpyni000c9sbr","quiz_options":{"score":0},"id":"4385177220"}]},"page_id":"168831478"},"emitted_at":1674149695305} +{"stream":"survey_questions","data":{"id":"667462170","position":4,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"csowuuey o93r9336 qf9fym8wbog1q l48c9"}],"href":"https://api.surveymonkey.com/v3/surveys/307785448/pages/168831478/questions/667462170","answers":{"choices":[{"position":1,"visible":true,"text":"0k0agd84ev s54c44f90gaj pol5dlpg9t fa5trrngfu cvrd4cmtmq","quiz_options":{"score":0},"id":"4385177381"},{"position":2,"visible":true,"text":"9egly8imf1 9k1iapox y80fk4 58nrajt2 swkm1na","quiz_options":{"score":0},"id":"4385177382"},{"position":3,"visible":true,"text":"se2mcirb6lt5ty qqt53dn jpg4b3wk0c7 91onwco8d7ll0 e7y4mwxa ojs5nky 6u7am","quiz_options":{"score":0},"id":"4385177383"}]},"page_id":"168831478"},"emitted_at":1674149695305} +{"stream":"survey_questions","data":{"id":"667462172","position":5,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"ypxnp3k6 708jao1b5ok671 cv8x263j0f nk1a0a5cm 7y4r2bclg2rgkd7 alax412w9y76"}],"href":"https://api.surveymonkey.com/v3/surveys/307785448/pages/168831478/questions/667462172","answers":{"choices":[{"position":1,"visible":true,"text":"dil7s3hpsuf ms76n abih45plj 9bw5noujg c759tcfvo7t3e","quiz_options":{"score":0},"id":"4385177392"},{"position":2,"visible":true,"text":"okltv66m4qav 88ijt vcq7k5m xcpwi9e4v7 ujqbg24ap g715rctpafkm0g","quiz_options":{"score":0},"id":"4385177393"},{"position":3,"visible":true,"text":"vev8vhb11 dc5mn3colgaea8g jflk5j niy1qt8onj788","quiz_options":{"score":0},"id":"4385177394"},{"position":4,"visible":true,"text":"hq1wbebc2gleq tj2vf867 n1aqc afpekt91re 89guq9pn9rrww 0bgvg74","quiz_options":{"score":0},"id":"4385177395"},{"position":5,"visible":true,"text":"bxkr18qipct gp9wcqfk n69e6ai66xmy01w xlh7s17hlsbcyt o16ecq6vf42q crmh6p ykbam9mxc37ah2 ii40872r6mws 2xobrm","quiz_options":{"score":0},"id":"4385177396"},{"position":6,"visible":true,"text":"x18wk 3k4tt8ae kkrj0xjbf krc0uyrj2u 0qq68","quiz_options":{"score":0},"id":"4385177397"},{"position":7,"visible":true,"text":"fkx0pjep58wx jpxs8a7vfnf bq2hlx3vhqsn qv4d1evms x64h8k3e tqaeb3mc a1yiqm7qjgi8 cnaw9173k6js msisp4d7bf12 qan9ffq3sv","quiz_options":{"score":0},"id":"4385177398"},{"position":8,"visible":true,"text":"tdjr97it3qvsl 8pfqjvhuo91 mp8kdeymnwv9f 8apy9eshudwhq veo63l6q9np w18s0102tvjru 6lckytkggn6 ncdlx68","quiz_options":{"score":0},"id":"4385177399"}]},"page_id":"168831478"},"emitted_at":1674149695306} +{"stream":"survey_questions","data":{"id":"667455348","position":1,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"se3rt7c 9l8d9rig3sk jk791y4nv9qp2 nof9xr8 6irr0mr2uv73g4 rmv1ko9gx2 qievxp819lc o9jbr n1vrq"}],"href":"https://api.surveymonkey.com/v3/surveys/307784863/pages/168830094/questions/667455348","answers":{"choices":[{"position":1,"visible":true,"text":"6sudul87 6605b94 w6ubg6a7p0v ufh3d5da nyic6pot11a64v9 awpjgnn22pdgup aidahk8krd 0vhentor51fp ujasxxx1srf","quiz_options":{"score":0},"id":"4385138588"},{"position":2,"visible":true,"text":"08yvwmw 441si6svo1bkxm o85tbsa3k wlkn3","quiz_options":{"score":0},"id":"4385138589"},{"position":3,"visible":true,"text":"uvmasd gagqr6qlswnr af0hp3nfg2vucd vbtkx8vssxlvg6k 5g3rhca48m2 y8gwlm2","quiz_options":{"score":0},"id":"4385138590"},{"position":4,"visible":true,"text":"mrjr3x0 57yyh77a3cmlcmj mmwked8tvqnt5 bwe0hh5dqp1sn3 pia1tu u7ujusnwtvt be24cc8s5olebg 5n65mmu5nki2b","quiz_options":{"score":0},"id":"4385138591"},{"position":5,"visible":true,"text":"k3wcw3bjn hq24e21 f5vvmq0kipi 1smhqty4 p8x2xxy0obkxv qsa4cuvmy81r7s 651b5hlw 2ej3xrm289eqd2 ugnf354v90h 92mk44ghps6cm","quiz_options":{"score":0},"id":"4385138592"},{"position":6,"visible":true,"text":"k8yajsxquuu 94uubd5wo9 piwa122aeek 3fhrq5gvwh14jho 6n8k5a54q7nf rnoqwd82y1 tkhxop blr0p2l7utyydd 7eto449ipd","quiz_options":{"score":0},"id":"4385138593"}]},"page_id":"168830094"},"emitted_at":1674149695413} +{"stream":"survey_questions","data":{"id":"667455351","position":2,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"dni8kmob8f47ly 92hb1pg6lvuklf f3hvi6 yjiq3bvv yys743quapbmwm 9xclo63 ydxt59b89 iwks1mdba9iuje vmaq243f75y4m 8cqcf54w"}],"href":"https://api.surveymonkey.com/v3/surveys/307784863/pages/168830094/questions/667455351","answers":{"choices":[{"position":1,"visible":true,"text":"9e7yu 2366vw4sa3 rhhgm0 yg8p9f9","quiz_options":{"score":0},"id":"4385138595"},{"position":2,"visible":true,"text":"1ldfxfr k0hnmi dcjdiaquo0xyac remaba5g8 9pslek2fmlvxf7 vn4gl8yjs10up4d b4i21994 78q3d","quiz_options":{"score":0},"id":"4385138596"},{"position":3,"visible":true,"text":"aq8d89iqk6 ytv9mg39tq5 lb5gtx1kdm5a 7scilf5j73g580i tr22c460a1vu dvpernw oy2j9qqnhhbpia9 ufy7twqsl2ovj","quiz_options":{"score":0},"id":"4385138597"},{"position":4,"visible":true,"text":"dlt857wic34l 5y0sijl8 1jmsvy9r e7psvexn8rj0nw ioo4ka04w vtk0ihmg27ac bm60oah9 chljr8vrnt8adx1","quiz_options":{"score":0},"id":"4385138598"},{"position":5,"visible":true,"text":"mk4nh6bnddk1ph 63551586l v0d3vhn w9s7xmbbm3 cbddi6vgmddb se5grc1xr2ycuu bmk1yr7kq3e","quiz_options":{"score":0},"id":"4385138599"},{"position":6,"visible":true,"text":"ob4dd4 r36mdre p96uaag57ld7vo yeqwbn7w2tgi4sj wcgvpd0 4jq0nh42ev8 23i0ye5x 4vuki","quiz_options":{"score":0},"id":"4385138600"}]},"page_id":"168830094"},"emitted_at":1674149695414} +{"stream":"survey_questions","data":{"id":"667455358","position":3,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"79kmj4p2d 3sbolhwfrs ioe6b93hwr70jt7 679dpby y4mxy 1pr869ii"}],"href":"https://api.surveymonkey.com/v3/surveys/307784863/pages/168830094/questions/667455358","answers":{"choices":[{"position":1,"visible":true,"text":"mqjitf64d0 k83dvyn 227nrf 7a5bulp 0jvp9hmiew umwdpysrqbgp he3hkvoxi8d t0ekmaqml bniybp7","quiz_options":{"score":0},"id":"4385138620"},{"position":2,"visible":true,"text":"ocaqjvupc or8s5on 2txbvlu6e20 8uxgb ll6ktjtk gnwy7knkeeev y2t9cah46lu7 rkmxywsr 8qgmy6gm3fd84 eko2r","quiz_options":{"score":0},"id":"4385138621"},{"position":3,"visible":true,"text":"3kjxifk f8vld xx9lg2ejtf3ccwx 1rfll3376hrm xwaevy7i2krc 93h2fggv1nak vvo0hqr0n 27qcal0ao","quiz_options":{"score":0},"id":"4385138622"},{"position":4,"visible":true,"text":"qqsv99lam uidx4csd1npsc nccxm6ueer 2ihx3c5ysd","quiz_options":{"score":0},"id":"4385138623"},{"position":5,"visible":true,"text":"3ooy243l5h usutwf3do32na0o t5vo8vggvjl pp44k52k3dw swg9bvhtl v4mn5goadw4 9g9jefyf6qhsijc 2j1bmvuu83brk","quiz_options":{"score":0},"id":"4385138624"},{"position":6,"visible":true,"text":"fnme6flca1yfyo kj1q1j tsfq15e2iam8 tyny80 fjb3nf p0mtkwgteciioq p5b79nk1a44d0re lwpwx8wu0e2 at5p0nbaqbp 67tqasnk0lb9dr","quiz_options":{"score":0},"id":"4385138625"},{"position":7,"visible":true,"text":"8n8el8 it06oap6nv fapkjmk yxemrfihr61i heif6anfb o9nel86ws 2t1vpytr","quiz_options":{"score":0},"id":"4385138626"}]},"page_id":"168830094"},"emitted_at":1674149695414} +{"stream":"survey_questions","data":{"id":"667455370","position":4,"visible":true,"family":"single_choice","subtype":"horiz","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"lqroep8etllsp 3o8w6vilbyqlwkm b5velmro8 b4ylvv9kkt"}],"href":"https://api.surveymonkey.com/v3/surveys/307784863/pages/168830094/questions/667455370","answers":{"choices":[{"position":1,"visible":true,"text":"4bdsyi00551 hsh1woqfmclyma sslfhk y11rdswosp4l 2my277i74fedi lool7","quiz_options":{"score":0},"id":"4385138700"},{"position":2,"visible":true,"text":"qdn040 3tljs j7juh9xjucx 31royj9xs6q lg56gf8c81s","quiz_options":{"score":0},"id":"4385138701"},{"position":3,"visible":true,"text":"ytndri0sy3noxx p2d3euo 4d2jqiygj8jwasr 38lf63x39sxb irlep2 cgi9pr 4pcvga t64nykcc4gn tv9xfejs41 er8a8pw","quiz_options":{"score":0},"id":"4385138702"},{"position":4,"visible":true,"text":"n2hd3mf5 7gg2j7cn55e77 1j1ijenv62 ntd44byw6 g86vqe62ogytk qcodrayuwmht5tn ix3qc42ybhqd 76ry3 goorkieate s2dofir","quiz_options":{"score":0},"id":"4385138703"},{"position":5,"visible":true,"text":"ct0y2yaibh 5hhaeb2u5jmncca ibf7eql6h w3k37s","quiz_options":{"score":0},"id":"4385138704"},{"position":6,"visible":true,"text":"w9647 j2wq2eisb85rlu js474wesi1j 1d7eiqq 3o7ubmmvsbl4","quiz_options":{"score":0},"id":"4385138705"},{"position":7,"visible":true,"text":"deheetxt3hlox 8e4hd76i 517ltrj0v dgi0r19ud5srqj 1qdru4f sl8p3 7gxolfxkhlc5x cm0seo7wroouww","quiz_options":{"score":0},"id":"4385138706"},{"position":8,"visible":true,"text":"4xv8h753xoo8n1 9atxgj8 5eaohgaugpu3in ybq32s67 atg5l7u4aotebk1 0asuiahw4 dyakwm kpqe9vu81dkfvcf","quiz_options":{"score":0},"id":"4385138707"}]},"page_id":"168830094"},"emitted_at":1674149695415} +{"stream":"survey_questions","data":{"id":"667455395","position":5,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"0qnmuchico4fa8q dfvkni 15mwj2a8 1c8qh1 y3dml65 yfodif0 uik9a vja72b"}],"href":"https://api.surveymonkey.com/v3/surveys/307784863/pages/168830094/questions/667455395","answers":{"choices":[{"position":1,"visible":true,"text":"k9cwqyrhvt6t2y lijf97ywdxctyr nahqrqwo o73wy4r13r","quiz_options":{"score":0},"id":"4385138779"},{"position":2,"visible":true,"text":"0dtp7umdw2tn 3qerkatyyrcndup s70sgadrf0pjwna 13cc30nv 3fku5vgj5","quiz_options":{"score":0},"id":"4385138780"},{"position":3,"visible":true,"text":"8vwwlvlx3 rl3x4l r3itwqo 2uiml2j417 p0x4d9pxyhs bdyo06b oyuo333qq","quiz_options":{"score":0},"id":"4385138781"},{"position":4,"visible":true,"text":"ua5rn0o lgn9qrvh a3xi82nkmd9s2d sdhqh3q8m yu21i9gn3 u4wyck8efnu 47ubnif60vxre wfs92q1c84 qyyup","quiz_options":{"score":0},"id":"4385138782"}]},"page_id":"168830094"},"emitted_at":1674149695415} +{"stream":"survey_questions","data":{"id":"667455427","position":1,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"bja345d 7gmh5 u335j3ifd bmn2iwulckt qbbgde6 4l86ghgt3bnplod fsq6qpqp ogqqnp01j gycd6318in4xl s7sxc7ric"}],"href":"https://api.surveymonkey.com/v3/surveys/307784863/pages/168830108/questions/667455427","answers":{"choices":[{"position":1,"visible":true,"text":"h1f77hud lvvbp8566vit8 eij3l1f6m86rt9 658f6 auhky2x 1qb9805ptcl4yvs","quiz_options":{"score":0},"id":"4385139013"},{"position":2,"visible":true,"text":"82ow11qv0ewplb iipebne7de pccthtsby8y 87tn87egsum9nd 41xopta 65fhf560c 326vjb4pp4mtdvx 4eqmo8viakl pmuv626kfxaqr 9laiyqibgse9","quiz_options":{"score":0},"id":"4385139014"},{"position":3,"visible":true,"text":"8prnel y3ygc5kxmjbxfc hdd0bos b9w3a1gfm1sm6 8wwao s6j2lw5ennapne 6psoe bxyxi pp141xm uatdplo5f60et","quiz_options":{"score":0},"id":"4385139015"},{"position":4,"visible":true,"text":"yejw4cxbnjeup 9war0kp9wl ngag1wd y6quyhtcv lhai6 6fo022bo2 0y9e1wuj sm9c4jui n9udx","quiz_options":{"score":0},"id":"4385139016"},{"position":5,"visible":true,"text":"o9i4r2ej 825mg 5rifxtuu83ox y3nhp","quiz_options":{"score":0},"id":"4385139017"},{"position":6,"visible":true,"text":"3vukbvawqxox yxo374n8xcpw s6ai05vb64 gld3jyi97 auhaq08 sl5tt43hgv n549d7mf0n7cr2q 44x9v5o31yor0 oel767u6o1evo5 knipqna","quiz_options":{"score":0},"id":"4385139018"}]},"page_id":"168830108"},"emitted_at":1674149695416} +{"stream":"survey_questions","data":{"id":"667455439","position":2,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"yvl318t7lj 7wdmc8mttupa 2g7ogtjr976g lm77fy59yrhs4 tb928lr2 kiug5rc d4hq6y1"}],"href":"https://api.surveymonkey.com/v3/surveys/307784863/pages/168830108/questions/667455439","answers":{"choices":[{"position":1,"visible":true,"text":"du6tsy5k rhhm4v540es3mo oqkt8crv5wvgvj s00kbxja5h 6kmpu","quiz_options":{"score":0},"id":"4385139062"},{"position":2,"visible":true,"text":"b52dpf uy6exuyx l6ugq4ki qkl8h9l 8ptnm 2jwismc2by8 ls428u","quiz_options":{"score":0},"id":"4385139063"},{"position":3,"visible":true,"text":"86bpwgdk1q0 4iigbk1xjrm hncx3xkk5lj e75h213rkrpjg cku6p9no3qv rn1dvjp5hmtbfar 694ly6v9m ue5ad4q xomxi5c69o6pqm f75mwyy5nd","quiz_options":{"score":0},"id":"4385139064"}]},"page_id":"168830108"},"emitted_at":1674149695416} +{"stream":"survey_questions","data":{"id":"667455443","position":3,"visible":true,"family":"single_choice","subtype":"horiz","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"6myggi xgx2lptp oxfg8bgavhkxd h8586wxt2vv7 tba2bd 07altrm 2vmmtgfir gchrhk6kdw"}],"href":"https://api.surveymonkey.com/v3/surveys/307784863/pages/168830108/questions/667455443","answers":{"choices":[{"position":1,"visible":true,"text":"5acyluby8j u7jbf p5x8foahy k5uk8ubi0 ov4ouretpl lxrf3 ufct467j99f2hfl 7dlgr8eo","quiz_options":{"score":0},"id":"4385139109"},{"position":2,"visible":true,"text":"vpcmt6klp47b0 q3o6j96 3mm9gebofu1n2 jq7dq","quiz_options":{"score":0},"id":"4385139110"},{"position":3,"visible":true,"text":"r1wmg0i0ae892 acmd77ws2k 0pk531 pb5k6xev ury0cf","quiz_options":{"score":0},"id":"4385139111"},{"position":4,"visible":true,"text":"0hemigqnwym5f0j vn57ess p5vjtn nylhr7","quiz_options":{"score":0},"id":"4385139112"},{"position":5,"visible":true,"text":"gl7otpnp 0b43hto2wr0o tnavjwnce9lc5d 7j6hs ca3qbj70t b1nc7q4 7j0696hum k6ytijiprdmdvd","quiz_options":{"score":0},"id":"4385139113"}]},"page_id":"168830108"},"emitted_at":1674149695417} +{"stream":"survey_questions","data":{"id":"667455463","position":4,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"pjksyv7o2s qtssl1k83 r6ypxm 30krmk4j0e bp8y6m0or"}],"href":"https://api.surveymonkey.com/v3/surveys/307784863/pages/168830108/questions/667455463","answers":{"choices":[{"position":1,"visible":true,"text":"olpxel7n8ktrjx l0x3kfm fg4f96cpv60w2 kpp8waqc9j1y6 2bjrk4f v33tofsgnbg s6gcg386 kcubx22oev1ju i3n5l7veb","quiz_options":{"score":0},"id":"4385139230"},{"position":2,"visible":true,"text":"jkdmotc7gfb43b2 4cfkvtut 6w3ys rn3v7u17ccsx 0gyynlvql xgsrdfrtffvr","quiz_options":{"score":0},"id":"4385139231"},{"position":3,"visible":true,"text":"7ngjrf1wlkv1 wox4shhjp4 yivmg3epgwl5d 11tfmviaf7pv59s 14c6b1vudh brl9d3b799gibr fknowr6c fi6k91n34pm270","quiz_options":{"score":0},"id":"4385139232"},{"position":4,"visible":true,"text":"o8r5r32univvk5 dhx2tc7hbbgl63n bxhmmoi6vk 1ynu42 8goapcp gh1gr8dab p1iik6y eud8jxcg jilsond0434xp77 g1s9ydwgrd6y5tb","quiz_options":{"score":0},"id":"4385139233"},{"position":5,"visible":true,"text":"p9xp9x7yepqx wg9w4q8 9f8n1maik5weupa 9s5nnuan5i co88w9s89g2pfq lxrdlybm6 fl702pf2x7 xsp9xl8yrrg m8xre7g s61if4ojul0qlm0","quiz_options":{"score":0},"id":"4385139234"},{"position":6,"visible":true,"text":"5k001wyjow 9rfq00sg6vcytu yxddli0wkif3wk1 vxk0kcy6l80jfc a06swtlqbdg 2lk8kytqeeqs 81w3s8","quiz_options":{"score":0},"id":"4385139235"},{"position":7,"visible":true,"text":"ia4knoy0u1vku io2wydrh90d6 52j9qii2gcgc9fk tx7409a0o59ffk0","quiz_options":{"score":0},"id":"4385139236"}]},"page_id":"168830108"},"emitted_at":1674149695417} +{"stream":"survey_questions","data":{"id":"667455466","position":5,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"17ks2i1p 1roi7n8j p21kn jkrvnckxot 3nkruc3e ugsatu9qx7wsw qsttqci3i03e4"}],"href":"https://api.surveymonkey.com/v3/surveys/307784863/pages/168830108/questions/667455466","answers":{"choices":[{"position":1,"visible":true,"text":"n1ic8gxnyrf1 5qacyxsh ixbp7b33rq4kigy 2rdbf2a4 rfms8di taxqa3oc","quiz_options":{"score":0},"id":"4385139244"},{"position":2,"visible":true,"text":"i4kx3k5s1t 3qw1r6n two72xjft yvu2k2 lywg4w3xhffbwrv pu20atqyr5g 34tsp4wk nwadhm3qirol8y o5x91 755w2suug91yywd","quiz_options":{"score":0},"id":"4385139245"},{"position":3,"visible":true,"text":"2xl9i1c4 11w3fsb78 bfoj2 4rmfw06mn2lxpjo wfijsno52y90 wxuik4 70c6ioht","quiz_options":{"score":0},"id":"4385139246"}]},"page_id":"168830108"},"emitted_at":1674149695418} +{"stream":"survey_questions","data":{"id":"667455236","position":1,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"ibdmqewlt gbp5yhhp c8i5s75wwg 0xosr1devp 2ijbswdblw0bjko k6httw7 kfr0tk"}],"href":"https://api.surveymonkey.com/v3/surveys/307784846/pages/168830068/questions/667455236","answers":{"choices":[{"position":1,"visible":true,"text":"3nj2ikx od392yg7 akufy84 6gw9q axmbaw59fn nfc8xe410jg 6allsd7jg7u 3wyrciq0uje8rn0","quiz_options":{"score":0},"id":"4385137904"},{"position":2,"visible":true,"text":"cb0o3tqf5 ijxi31vsg1 i0ga1cu10vmcgry gfmk6","quiz_options":{"score":0},"id":"4385137905"},{"position":3,"visible":true,"text":"i4frvbso f2k3tyww70ehqkp 5qy73 21lpebsil0fwspd kbx0uypchk wqdb8j0a0 8dr1nvs 592s2coha4r0v","quiz_options":{"score":0},"id":"4385137906"},{"position":4,"visible":true,"text":"lmg2vsbrw180cm otp0wq1e2 530jnetga2dp88 e2uploqajl","quiz_options":{"score":0},"id":"4385137907"},{"position":5,"visible":true,"text":"p0gqg3u03 11u6b6 xdb1lqr bxjqwc48sis 5dd68pfpw lxtumpinwgj vwdyg0uw4u wlvjnya7n7fr","quiz_options":{"score":0},"id":"4385137908"},{"position":6,"visible":true,"text":"74mma6 8c3o4 sjp4tg uagi32nfox489p 33m8i9q2t g1ecllv3xjnumg w3i1p26o789 3g8l35xh9m33","quiz_options":{"score":0},"id":"4385137909"},{"position":7,"visible":true,"text":"217g3m8t fdh1g7f6sng3r nt3u7d6n8j1d5 k8hwfegvg4i3xhs 6wung qmv6ilblwpg4t4c r04g9x2 ra26624 hl1gnkjlcu3pn","quiz_options":{"score":0},"id":"4385137910"},{"position":8,"visible":true,"text":"hc8vkvc9 yd3dll3x 2mo5ol4vkqru4k ubqgf odk7ghioir7gc lm0je2 4q3r0 ks32ix ra4rjxv2d9","quiz_options":{"score":0},"id":"4385137911"}]},"page_id":"168830068"},"emitted_at":1674149695519} +{"stream":"survey_questions","data":{"id":"667455240","position":2,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"6vdliabstjs pjq6v4ea sux2ll21xwm7h qt6k4qflxuslj ig5xnx aqyngvnivqhi63 k7trhm7s9n yc1uiij"}],"href":"https://api.surveymonkey.com/v3/surveys/307784846/pages/168830068/questions/667455240","answers":{"choices":[{"position":1,"visible":true,"text":"n59jsjeq v4yp5kweu77pjd 6dsaj62 f51922ixg bfy1tdx0ajmwq sq2g2ca6t1ag t91oetm","quiz_options":{"score":0},"id":"4385137924"},{"position":2,"visible":true,"text":"miou6 s74ictupiv15j a1ojxwpxsc 24wjut22cino3li 3nef4p8a1onycu s2iku aluhi 78a20fa","quiz_options":{"score":0},"id":"4385137925"},{"position":3,"visible":true,"text":"96wygu4eqjryyr vft0o 1omksgrj4e4u hov2cmxl xryqlb9qe5s 69bf1gxp prv2hpeebouh","quiz_options":{"score":0},"id":"4385137926"},{"position":4,"visible":true,"text":"80jv70rswm80ng s3yupsiahmmfxf 0qerhyspf y1shqteym hu7hk9dkpo 58idxrntiwiqc h36nn","quiz_options":{"score":0},"id":"4385137927"}]},"page_id":"168830068"},"emitted_at":1674149695520} +{"stream":"survey_questions","data":{"id":"667455243","position":3,"visible":true,"family":"single_choice","subtype":"horiz","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"1lmh6obuf8d67h 9f7639oxptfr pgb8r ud5359op7klll"}],"href":"https://api.surveymonkey.com/v3/surveys/307784846/pages/168830068/questions/667455243","answers":{"choices":[{"position":1,"visible":true,"text":"ht5dtccv20hfamc 6m2dk7 edktxyp 9bpptvmpf 76dv4sin8ps33ac","quiz_options":{"score":0},"id":"4385137931"},{"position":2,"visible":true,"text":"m1e1sw2b xk8ujpclrw rnv8g5qtu04 g1hy75 887fxgre","quiz_options":{"score":0},"id":"4385137932"},{"position":3,"visible":true,"text":"8iqn4b9 ico6j1l7h b44vd6d3383m0 rkm2tqhsi00qy 5hso1f919pq 5yyhjb5h7 dhhsrml5g6kiefx apd2weqls w4hg7 p1rwc2o7pko","quiz_options":{"score":0},"id":"4385137933"},{"position":4,"visible":true,"text":"erh5b0d 47uxrflw 23r21lf24iwf bb8yqiqs79 3y8eb7le7y2ocb8 juni8","quiz_options":{"score":0},"id":"4385137934"},{"position":5,"visible":true,"text":"x32489wko4ns f0ob7be3j pmc9ui3s6qp0 08kfm8yaqcanw 8aot5prgvkqyseo q4vp4n656gj57g xygwva 96gw2r2npb2","quiz_options":{"score":0},"id":"4385137935"},{"position":6,"visible":true,"text":"sjsfbmxa97 xq0084k5hm3 hivfs05sfir 40dj15utx bo9mx1yu0","quiz_options":{"score":0},"id":"4385137936"},{"position":7,"visible":true,"text":"jrb1fu2j x90bw8mlv85gpl0 xfo84sk0jy6 l3392k bucd4nmlc7yj jdj3x2clsir95 uw9dhluee e9ai5v8pm5 4eufmbvvi","quiz_options":{"score":0},"id":"4385137937"}]},"page_id":"168830068"},"emitted_at":1674149695520} +{"stream":"survey_questions","data":{"id":"667455245","position":4,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"h3en3q3evla 6eye52o9ijuo 078omcsgacycjn9 a76ryw2wl 5ejj2a399 r62c2jrxj2x7y"}],"href":"https://api.surveymonkey.com/v3/surveys/307784846/pages/168830068/questions/667455245","answers":{"choices":[{"position":1,"visible":true,"text":"90t457 4q172 f4kmgq3 vc09o 7hqxmsg9jx6 7fenorkuyq ov1kus876aiv0p rrmrq5qlittb6y","quiz_options":{"score":0},"id":"4385137944"},{"position":2,"visible":true,"text":"9aii09 2r9oaqs23 j2x9qy94cnxfgn jrlxnqn9n","quiz_options":{"score":0},"id":"4385137945"},{"position":3,"visible":true,"text":"r8jgwe j87njrw3yo1fla bbngq3 g26et","quiz_options":{"score":0},"id":"4385137946"},{"position":4,"visible":true,"text":"91n95cu 5fp11un vngsubusfe4 vgbho","quiz_options":{"score":0},"id":"4385137947"},{"position":5,"visible":true,"text":"9qw7f8sdfws1 6wfueox bghljj3 4yal6iqt73m6han l921hy 6yr04p7c","quiz_options":{"score":0},"id":"4385137948"},{"position":6,"visible":true,"text":"trrepiynd5phbcr 35t494bg wm02s1clg9wkxl1 eemhx faxm4gd3aqepewc rp34jr2ho5gb5q ol65t043p1 66bg3yos kh4xbmdvqyvm ibrokgs","quiz_options":{"score":0},"id":"4385137949"},{"position":7,"visible":true,"text":"ni9kx4ob31 mbn9d2n3t4j6lal xel50s53bw6eydo b0s9p p512cv6lrh 2jq1h yqmu3hg70qxw99e k1xjbd vv9lbb4kvlt1jg p86c1lob16h","quiz_options":{"score":0},"id":"4385137950"},{"position":8,"visible":true,"text":"3tx1f04qbxgku4k modppm wc68tgts7o me6s4w7ikqolcg4","quiz_options":{"score":0},"id":"4385137951"}]},"page_id":"168830068"},"emitted_at":1674149695521} +{"stream":"survey_questions","data":{"id":"667455263","position":5,"visible":true,"family":"single_choice","subtype":"horiz","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"gx0d844wwsnss b89h0hrw ihlud3p23xbv3 mtv2g99i bda7267b5 pxxsxit4ey lcji2t"}],"href":"https://api.surveymonkey.com/v3/surveys/307784846/pages/168830068/questions/667455263","answers":{"choices":[{"position":1,"visible":true,"text":"e0dhk875qtxip 22ci0nbrenwe tnj1517py jfe77 wnmap goid8 s5r92q9nx9gbxf oy5bkxrwsyqx 7oemt6oc3wcw2 5iwm8","quiz_options":{"score":0},"id":"4385138060"},{"position":2,"visible":true,"text":"nnkw2nj3g1wb 6os5x3rph9 oejmdr7e u9vf9uaxis17w7p vee9xcim164h jkcq9v7e01i njv8rrgfo3hfumd ha6djf y3jckk4un mwvekphui4","quiz_options":{"score":0},"id":"4385138061"},{"position":3,"visible":true,"text":"0b1s6goa 31eeolk05pyxfvy 5fd1rlv8g8g 9iachco 3gqpac6rjo hmq9tr5huh4mxm","quiz_options":{"score":0},"id":"4385138062"},{"position":4,"visible":true,"text":"kkpmmshmp2owso tm5dsf0bt4rm474 w1wwr4 p6ltlf pxm8o1um1cv 8lh8goe9rqqo58x 9j7ej5b 4chhf50nlimyy","quiz_options":{"score":0},"id":"4385138063"},{"position":5,"visible":true,"text":"hygcvxvhqh1um 80ak8e wd9b3vkvg hkyetchu2pdm1 tn8hu6fropre lqx4jilgig1929w","quiz_options":{"score":0},"id":"4385138064"}]},"page_id":"168830068"},"emitted_at":1674149695521} +{"stream":"survey_questions","data":{"id":"667455268","position":1,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"of74qo8c 333x5lwc2aral be0joqsxrs hvgeb7ltbcu dtyfa2y98wnn2 jbv7c vjee2juk267 o2fd4pyua"}],"href":"https://api.surveymonkey.com/v3/surveys/307784846/pages/168830074/questions/667455268","answers":{"choices":[{"position":1,"visible":true,"text":"jyb7orcvpwo c9lcx 9aq0cld2fwngg5 ple2j5y3xn2px itcvwnp0rpn2 ykoj6qw las5p s01fya1co65 q6qrkss","quiz_options":{"score":0},"id":"4385138108"},{"position":2,"visible":true,"text":"vd9eniq 7lpv8hbl bq0pjeiplw0 f0hjp7xyv2pk8 82d5r7ciqjbl ngrw1mugyp 0qb5g4vnxxjjpf","quiz_options":{"score":0},"id":"4385138109"},{"position":3,"visible":true,"text":"s84erg ueidus67wjw w849glheqbx5p0m w2am53 erjlbf9pu7","quiz_options":{"score":0},"id":"4385138110"},{"position":4,"visible":true,"text":"n9yd3gp4otjuvma 16axdetwq epitspj3f8hq bgqks3 1s7wh28 qn8cff mfk5el7vr2w26pg 7bkx6xqe 1d9eryxaimnk u6sr9v3id0t","quiz_options":{"score":0},"id":"4385138111"},{"position":5,"visible":true,"text":"l3bswpvl 9obip6i6bvg ytwh8i mmn1n0p9xe9kiu rjgto5mi9ce5dm6","quiz_options":{"score":0},"id":"4385138112"},{"position":6,"visible":true,"text":"a7j5u 2td37rxj7 1lwcfapxi2cw6g 32egv55cc52fcv ay1jvha 1169qapnsa0avix w406ev2kwt1k8n y7xqqn i8uoafghx8 gelu50jf149xtg8","quiz_options":{"score":0},"id":"4385138113"}]},"page_id":"168830074"},"emitted_at":1674149695522} +{"stream":"survey_questions","data":{"id":"667455272","position":2,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"svumjkj5ei6 t1jkf ttf93l bilmloj40l q6er242eh bojtdo6 sf5jtk 66a4anc 3j5cbh3k xdfpwwtdf3hpb3"}],"href":"https://api.surveymonkey.com/v3/surveys/307784846/pages/168830074/questions/667455272","answers":{"choices":[{"position":1,"visible":true,"text":"i6ece2o dl6k3s11vd0 shf3m get86","quiz_options":{"score":0},"id":"4385138126"},{"position":2,"visible":true,"text":"fufxxy5ueb 5u74cl6a lol396aaape2 dwgaeqcphflg ogf55axqis54 1a338abonkbvc5 f0hj7rjhu 15gsns71xund4xp","quiz_options":{"score":0},"id":"4385138127"},{"position":3,"visible":true,"text":"di9p4lr30wahw 2rg14l uqqnx1roqy5k65r 2we720uhdva oyb5f74cil odhas8h1n4u3rj dqrhl943a","quiz_options":{"score":0},"id":"4385138128"},{"position":4,"visible":true,"text":"b2j0ivu58yysns 4roq2 mqukye4mmik92 wpr49dqhc6y g6ivs5m7n9 iotdbwjay566 06vv0nn17yfqb59 peuvkh9jjd jly7qt4151 roq63i3ld","quiz_options":{"score":0},"id":"4385138129"},{"position":5,"visible":true,"text":"1rceqano97 sd5m1s3hsskyv7 bwmei412e ikfkbu xhdo2mx6 aqg5dpo10 sfjb38 vj05jf71y","quiz_options":{"score":0},"id":"4385138130"},{"position":6,"visible":true,"text":"7nlryn01exq u14xxgcx8mngy 4pc2y3 48lxatpljatuox vbt7cvv2cipj7 ise8v3j9wnomr ms330kk mgjaw7kgowjfq6","quiz_options":{"score":0},"id":"4385138131"},{"position":7,"visible":true,"text":"y0sx70a14 527jr the5p62a hga0cg5nio53 hv2s0l 6e2lq473mrdqgo","quiz_options":{"score":0},"id":"4385138132"},{"position":8,"visible":true,"text":"rxtxctm7 veua1a ds34biwojid 5cjj1qvd3 v8ksghp4g 6ist9e a5xrfr8r2 ae9rb2xw lguj1iafi","quiz_options":{"score":0},"id":"4385138133"}]},"page_id":"168830074"},"emitted_at":1674149695522} +{"stream":"survey_questions","data":{"id":"667455276","position":3,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"6ms3lgjw25pq b20i2lk pkqw6iy j77i7ux32y8 e323sjcc kh8fxxm724seg"}],"href":"https://api.surveymonkey.com/v3/surveys/307784846/pages/168830074/questions/667455276","answers":{"choices":[{"position":1,"visible":true,"text":"nqewt2eyb57 a96u7u 4sr85tfu1 acbvejxvxdui ur1p5sb 4a2r81h0hnw3m 51q3v7s4kllox","quiz_options":{"score":0},"id":"4385138155"},{"position":2,"visible":true,"text":"maso4 ovhyv0ixo hu4gwpq8ky21j9 qo2qc3kuc8n lvou1 a0wbyyp bqr9bre7 csdtfe ya1ltf6kynj93y","quiz_options":{"score":0},"id":"4385138156"},{"position":3,"visible":true,"text":"bjaogae0yct1yk slo3wuygf6 wh0fyn7lym fof1mvu a23qhlj 0rkb9sms 14urdydlb5vht dbw8uh0n3rwdj2i haqry8lhmmpcnmy gw3bvde3lsyue3","quiz_options":{"score":0},"id":"4385138157"}]},"page_id":"168830074"},"emitted_at":1674149695523} +{"stream":"survey_questions","data":{"id":"667455290","position":4,"visible":true,"family":"single_choice","subtype":"horiz","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"8rej58igix 5ev85 tiximo qcv1v11x0ixckwa uhte1umn0p v1h2mr0lm6 duw2034nurju"}],"href":"https://api.surveymonkey.com/v3/surveys/307784846/pages/168830074/questions/667455290","answers":{"choices":[{"position":1,"visible":true,"text":"xx157diwdtvnm 27fuvnqueywcf2d 7fgvt3b 7qte6 xb8oaf6bdynl","quiz_options":{"score":0},"id":"4385138209"},{"position":2,"visible":true,"text":"7uixmrb45 5217t8r2se vv8oeea62 4mjg3vqh og2vgrc5v251 xe8bb89i iefjxgj 5flbdfdb77 amgpmbo6gav6i","quiz_options":{"score":0},"id":"4385138210"},{"position":3,"visible":true,"text":"1sn25lv32td8 516w18 pdmovblb0hbd50 42vmf7","quiz_options":{"score":0},"id":"4385138211"},{"position":4,"visible":true,"text":"rnlfk p5x50v6jxbdfnkc lfjnc39nl8o ok6oyhwope sr35gd1kr5r8fg5 em4qqf7wj tt8linqt 8e8c6d9 s2geie6vw15ny nbkq71k87eu","quiz_options":{"score":0},"id":"4385138212"},{"position":5,"visible":true,"text":"g0otgfss8 l5ag3n97qp b3hbjigxocewjyi dflt05hus4w ddpumu2h7dx6ff pby1r9n a8d6xu9db rwapp","quiz_options":{"score":0},"id":"4385138213"},{"position":6,"visible":true,"text":"1w7np c3t0x knc262g yrfo4f1r4f4reh i8dhd9l1v77 72eamvjcaggrn9 fb7v3v2g2","quiz_options":{"score":0},"id":"4385138214"},{"position":7,"visible":true,"text":"n5h0km6i 58fjgrqq s17q2dwxiha 9wl01dstrdvo upbsfwpyyryn 5ducq pm1vbp w4no5od9pwqf b3e18e3i","quiz_options":{"score":0},"id":"4385138215"},{"position":8,"visible":true,"text":"o9ln4neod6l3v 5p7w4sosqt95e qk9mir6c48fbqj xlglulme cbafrf2g69p6nj htqcbq8v7u24lyc","quiz_options":{"score":0},"id":"4385138216"}]},"page_id":"168830074"},"emitted_at":1674149695523} +{"stream":"survey_questions","data":{"id":"667455293","position":5,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"virtcpk896m68m bbdg4mss12ps3 qo4gk153jqp9 iotdms cxo7l2t9 gtofci5cg0er"}],"href":"https://api.surveymonkey.com/v3/surveys/307784846/pages/168830074/questions/667455293","answers":{"choices":[{"position":1,"visible":true,"text":"1vflj0ggk1o9l nbqw3aj69wprwix i955uorj 69jyg2ci6m2lj sb3sor4o2 jmnjbw3i f6weyfas9eq1 yanlggtlu8823f s7fpa7","quiz_options":{"score":0},"id":"4385138239"},{"position":2,"visible":true,"text":"mgeif2h8oilulvj 4q5x7owpgk sxoc48wbr7u3 rmt30uk4m7w7q hpqj8faxcl3qrc5 qfuhdde a1itv i3292al93b","quiz_options":{"score":0},"id":"4385138240"},{"position":3,"visible":true,"text":"3an10n o05hsocsiq0quj5 9ay5x f6p79mjl jjcw6ym9dpfwrj sygnf5 bh3mo 1x146ti6 x4u0e3pxa1ko","quiz_options":{"score":0},"id":"4385138241"},{"position":4,"visible":true,"text":"va9yadd6 xsc7t62edxbwl d7d7n7ecqsealn u9ognb1ox nmaht pwy1d 5mdngtxn4ol1tel dxlmr67c00e hw11e9xn7h","quiz_options":{"score":0},"id":"4385138242"},{"position":5,"visible":true,"text":"b1qfaxqnj91j8mj edwip5b22pdd tuh6g5uodx2 sn4e9lv7xsuul jxmu0iubodnpw 7rqts1liyv27j","quiz_options":{"score":0},"id":"4385138243"}]},"page_id":"168830074"},"emitted_at":1674149695524} +{"stream":"survey_questions","data":{"id":"667455297","position":1,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"lq8cc4kb4wb hagmv535tvyfw4 q505o lc9pke7la"}],"href":"https://api.surveymonkey.com/v3/surveys/307784856/pages/168830083/questions/667455297","answers":{"choices":[{"position":1,"visible":true,"text":"gnig56iqkr f2p71ed2w9fr gnpyvvl1 9mc6qpbow5tam mxta8 t9blqkndj9c 1gisvkrl2 0p43lebad 6v56y0e392el ahfwj9tq6lbhm7","quiz_options":{"score":0},"id":"4385138277"},{"position":2,"visible":true,"text":"77wwt btv0ntp gym5s54 lr3ji8wtg4dd qoy58mimj d2yjili","quiz_options":{"score":0},"id":"4385138278"},{"position":3,"visible":true,"text":"9hphq 5qj6yrbg2na mnmodl22e8cg siook2te8gpl","quiz_options":{"score":0},"id":"4385138279"}]},"page_id":"168830083"},"emitted_at":1674149695661} +{"stream":"survey_questions","data":{"id":"667455299","position":2,"visible":true,"family":"single_choice","subtype":"horiz","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"0cphg3eq5u jtapt0bso07ghd 0bgtvsb 5pd5xfhq5t1fgf w0jm2nstiu 93om3crky6skr q49leuh249 3q2tkvncda03g 40orw7354cy p8eku"}],"href":"https://api.surveymonkey.com/v3/surveys/307784856/pages/168830083/questions/667455299","answers":{"choices":[{"position":1,"visible":true,"text":"mrhrmoj8c c8fd51r 0lbuywjnvnmijj 0tmyxfrg fggvqmm3bvivav 8b3elaxwyb d2wp2i hr0jllmfkd7 prv23lvvws27gx 0e6okfhy5sn","quiz_options":{"score":0},"id":"4385138282"},{"position":2,"visible":true,"text":"mv5uq8u7dup2r lfo2ih2jkc5cp r6jydm0x6w 1p1c3s67p57 7eulrlih 1v7p2vig8 99esod2scbs pg87n9lp9mg476 6hmjxdey","quiz_options":{"score":0},"id":"4385138283"},{"position":3,"visible":true,"text":"ahxj3 imh6reai78juny6 bop9te8ej8q6l gwxwkjup43o6tr1 nbvorbchco4ptow pwomv9iyd9t jkrjgggo3s 6ipaxevsfrxrmtw uq3n0cmg k1odeemd29l","quiz_options":{"score":0},"id":"4385138284"},{"position":4,"visible":true,"text":"t4pu3i ixvxd q10uqer3 gkqtljjmflbts","quiz_options":{"score":0},"id":"4385138285"},{"position":5,"visible":true,"text":"xwwgqr 7hlt9dq 1tloksa kehvt","quiz_options":{"score":0},"id":"4385138286"},{"position":6,"visible":true,"text":"2vinv5qis ipjdbl cuwxgei6t8g is2ihbn xs3q9m3rl","quiz_options":{"score":0},"id":"4385138287"}]},"page_id":"168830083"},"emitted_at":1674149695661} +{"stream":"survey_questions","data":{"id":"667455301","position":3,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"5h0aahwgk8 eoh0xct ytmtsdr15y fawlco duk30p0qejro"}],"href":"https://api.surveymonkey.com/v3/surveys/307784856/pages/168830083/questions/667455301","answers":{"choices":[{"position":1,"visible":true,"text":"1ib8lq0i q896a iwg01totbr1c8 nic9ye883le 9pjfihiuxbp5 6wu9jitrk1 k3kvcggtbgboo9 nenddst 1qgr2y ilmy2v1ddb9","quiz_options":{"score":0},"id":"4385138288"},{"position":2,"visible":true,"text":"05nxifhb7u4 v0tu1 i8u8dd63ekyj h3xah1h0s7k9vn m95qi vmfn7l5i7iu3es hrywpnsl6rp","quiz_options":{"score":0},"id":"4385138289"},{"position":3,"visible":true,"text":"1fgt8f3w 2i0cyt47w3sl6o k8x6l8i3stl2cc 2h13e9tt1cwaa9 e5l78fvc x2y42gkhqhkc7r","quiz_options":{"score":0},"id":"4385138290"},{"position":4,"visible":true,"text":"ye6nyey79pu2 596slmq qgawtw10v06mtad m113i7i8sd1l x9o2f","quiz_options":{"score":0},"id":"4385138291"},{"position":5,"visible":true,"text":"2mr26jkd368pv wfxs2sxlxag3o3 o15fq 5u1n5tdvs7j0","quiz_options":{"score":0},"id":"4385138292"},{"position":6,"visible":true,"text":"ffdpeyyy nvtjrvxqnqmr f2jwutj 5uw3e0w4n2h dmah35mk v979ctn 2s683h24","quiz_options":{"score":0},"id":"4385138293"},{"position":7,"visible":true,"text":"245tmey w2ltcq50f sktfit h9ymojx j3xrggyo 51d1y","quiz_options":{"score":0},"id":"4385138294"},{"position":8,"visible":true,"text":"lv4qkg6meoylx rmlf7cdb1aht r316f1u kfcwrh5 cm1m3 s5x3eqj3t v1h721uqo3k5km7 9n1oqah9","quiz_options":{"score":0},"id":"4385138295"}]},"page_id":"168830083"},"emitted_at":1674149695662} +{"stream":"survey_questions","data":{"id":"667455314","position":4,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"ux15jxtnsx3 vofmkp85 a5kvupg5km6vq0 t5g3uf3q7hn i661htxcb s7x7r26 orjn3oisiik"}],"href":"https://api.surveymonkey.com/v3/surveys/307784856/pages/168830083/questions/667455314","answers":{"choices":[{"position":1,"visible":true,"text":"9fr03iy 9xmpt6xgqwpc k6t7k9gp1ht1 6h620md9wd70hh bs3kw i9htv yil47l xn823m6ih","quiz_options":{"score":0},"id":"4385138315"},{"position":2,"visible":true,"text":"it0ef6tr6h9nt t2jwq18hq3w59p4 oyx7e1bj86bcm 02aaa4kvmf8ru77 ssmts45dadkf gl1spgihc4 acylm 0vmvvgxv6yvey0 8xi073ec2m5","quiz_options":{"score":0},"id":"4385138316"},{"position":3,"visible":true,"text":"8m4mr5q 7wkbq4t8vplwih 0cvqrnnt qt9mjry1n xyqbuaepupf3 ed52xu5ak bd1vxipoo5ad s7pxs874 a9imnp7nm","quiz_options":{"score":0},"id":"4385138317"},{"position":4,"visible":true,"text":"2clmq75t 252dtb2ce3i fld27xux vrip5ox3ds8qnb lvp972rcrcjc ruvk2sclvimuvx 1ud7hrsbm567","quiz_options":{"score":0},"id":"4385138318"},{"position":5,"visible":true,"text":"0l86fyh8uo 090ymhll1pq 9lkwl89vq f1pcky3lidacy9 3ecmm11niu fu8tfp","quiz_options":{"score":0},"id":"4385138319"},{"position":6,"visible":true,"text":"h37f95j7qxup0fe tbx1l3bgii ol4bri0itarcwk doh3p2p0pi jq9guw3h382 08fje7vyonhmfe5 s2ioi7c4v6ci","quiz_options":{"score":0},"id":"4385138320"}]},"page_id":"168830083"},"emitted_at":1674149695662} +{"stream":"survey_questions","data":{"id":"667455318","position":5,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"1gm3ed2s89 p2xfqhaj4r p7fwo6 12imab59cds2p aqmmilr2dvmwvky nljfs ts3g4cw6au9jii snbv40hbjcu3"}],"href":"https://api.surveymonkey.com/v3/surveys/307784856/pages/168830083/questions/667455318","answers":{"choices":[{"position":1,"visible":true,"text":"dfyvo2qlanm8s ikbv3wa7030 rmjt80 o7cym2 1r6qae7c70v30 fko724jo7me82s1 bsuhjbov2ttwr q3w1wpn5twsv5e slrnk3sx m3u87rixhv6nmc","quiz_options":{"score":0},"id":"4385138386"},{"position":2,"visible":true,"text":"f47smf7vov8sp1 24r5d2b6q4s duka34dqpn6si 4r2wn 92ekkv2p794l8h l8n6cdc","quiz_options":{"score":0},"id":"4385138387"},{"position":3,"visible":true,"text":"okl5ki7v1r5 4oqdy4 x7ny0qmas 0ddqlr1 ja5wspe 2ieqa m3ucowjq1krai","quiz_options":{"score":0},"id":"4385138388"},{"position":4,"visible":true,"text":"gt5y6 vpjp0e5p6 vqhwb2dytiuihsv ru25v6bm mcihbuved71h2 quy2rej9e8eb97","quiz_options":{"score":0},"id":"4385138389"}]},"page_id":"168830083"},"emitted_at":1674149695662} +{"stream":"survey_questions","data":{"id":"667455323","position":1,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"wv0en qigyrej bappxu8q j3ihl9p6ki"}],"href":"https://api.surveymonkey.com/v3/surveys/307784856/pages/168830087/questions/667455323","answers":{"choices":[{"position":1,"visible":true,"text":"xv1me9s6hd aihplmw6 plhv5b k52pvh68j so1ggnlishy5m 6qe1fhw75gt k1jxdmddlhj35en","quiz_options":{"score":0},"id":"4385138412"},{"position":2,"visible":true,"text":"7ecrthfm97aysv 8u9a9sn1f9kj8 90owtm 0h8qgota7j3qpn vnfs9vleja36","quiz_options":{"score":0},"id":"4385138413"},{"position":3,"visible":true,"text":"v519ikhgw0fl s8x0shqsi ssr005 8xm1b7fal622l","quiz_options":{"score":0},"id":"4385138414"},{"position":4,"visible":true,"text":"gbpim9ar0dfgi94 nj0mq3ejst csj5e 763j6d5eo gf4fvw0 s2ea20n33yo iqd5r5l9 3t0okvw2oyh","quiz_options":{"score":0},"id":"4385138415"},{"position":5,"visible":true,"text":"jyxp0s7xfc7td5y vom52gda3dxr ko6256dtc5nv5f 7s8nej n32hyka ywsoxywn","quiz_options":{"score":0},"id":"4385138416"}]},"page_id":"168830087"},"emitted_at":1674149695662} +{"stream":"survey_questions","data":{"id":"667455325","position":2,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"jdkmr4b5t3o9qd6 0u4huyxr8whu cxqri4e2i1a 88yyx cq3xbymudltf y6hmsrn4socbj"}],"href":"https://api.surveymonkey.com/v3/surveys/307784856/pages/168830087/questions/667455325","answers":{"choices":[{"position":1,"visible":true,"text":"5aacsmqn 9p8l1tvy9i 0f92rvnxn9 to5xiaghqmiw 6xik80 jxvy64ut9 bjk3w6ywb","quiz_options":{"score":0},"id":"4385138421"},{"position":2,"visible":true,"text":"bc85jh39p 7nskr87a3x ny6d4 jlbavo9t8h6j6hu dh5ne","quiz_options":{"score":0},"id":"4385138422"},{"position":3,"visible":true,"text":"3vykabcspbl7qt ajqad2gu3v0jbg yeo3sobedrdfe0 1wcrn35 5l7jwq3 f5bc8bx","quiz_options":{"score":0},"id":"4385138423"},{"position":4,"visible":true,"text":"sm6lx7btphddbw 0882qf4o omh4u2i446c9p4q 5hqyq27jlse1e7 ns3xkqg8gcx8pc sjd0skhv 9ydxkadh8e814j7 0mk8m5tm9d38e 23cvhf22g lxb5c7c3p0oe1","quiz_options":{"score":0},"id":"4385138424"},{"position":5,"visible":true,"text":"2x7f7xmgur5a 6mn40jjs2dde 3th2mj8cn dv2pbu6s 7n8hw1f ptapt6nxgddk7a 4cj77u6m3mm idvm31 mx9ygnq3i 4lw1gmm4cwaig","quiz_options":{"score":0},"id":"4385138425"},{"position":6,"visible":true,"text":"3q51n sofjjqlu2y 6088c4c ncdkdt8exikoiir ew86v6gkob94v 7jsgkctqkhm1","quiz_options":{"score":0},"id":"4385138426"},{"position":7,"visible":true,"text":"7lffwkal h4d2j5 dqjf3y5 jwopu 0xf2vqmb6an igo5ri3px747b 0l5s9df7w7s","quiz_options":{"score":0},"id":"4385138427"}]},"page_id":"168830087"},"emitted_at":1674149695662} +{"stream":"survey_questions","data":{"id":"667455328","position":3,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"ieffti0yi qcxktrskkug9ij ebvs68ni79 1vrpnp mobkmem70 7uc86c7sx"}],"href":"https://api.surveymonkey.com/v3/surveys/307784856/pages/168830087/questions/667455328","answers":{"choices":[{"position":1,"visible":true,"text":"7vvg5h tc4vy 5c5194t1n6eu wutfyil","quiz_options":{"score":0},"id":"4385138432"},{"position":2,"visible":true,"text":"17dh5pnpe3bc 6gmy6r15tq7 fuwlrcnnt61wotb mj08g80e2pri","quiz_options":{"score":0},"id":"4385138433"},{"position":3,"visible":true,"text":"414pty e5a4vs1 4p6122ihy qnjg9a xuowh226f18 hc449ct tdwm0wu29u","quiz_options":{"score":0},"id":"4385138434"},{"position":4,"visible":true,"text":"24k06ig dhy3huyx0plis 0n5vomlwuo38j 0nft5aw obgn4qcoq0l44b l5dtviydcom58cn 699vqm6 06i0mr52i0 u1mvn mm1bqovxpvtwkok","quiz_options":{"score":0},"id":"4385138435"},{"position":5,"visible":true,"text":"3fr4ttmtr3mhvr d7xcfp6tx48mne3 ttcyvypnom ik9eqkf o7q5x4veph 31y5w8u036c56rh 9yar58y9t5d","quiz_options":{"score":0},"id":"4385138436"},{"position":6,"visible":true,"text":"jrghjb5g3h6t dlpx7hve7lijy 77ergx421ad dgekp5dauuod5t 3mn6a 7m9wvlhvgeua 5orruhepinotb hd948u958 23p4f fmprms","quiz_options":{"score":0},"id":"4385138437"},{"position":7,"visible":true,"text":"dvjf23fp1f8slys 6120e2kbl8p1 f2ildddc i9ocnxo dk1c5jm5bx3 1mmcj3qmntljpbt 889694rivh72g07 25yrmna iwjlytheaogoxq fanj2","quiz_options":{"score":0},"id":"4385138438"},{"position":8,"visible":true,"text":"f2tlh hih5om u7aqefshc47ph sxxt22yg7hi","quiz_options":{"score":0},"id":"4385138439"}]},"page_id":"168830087"},"emitted_at":1674149695663} +{"stream":"survey_questions","data":{"id":"667455329","position":4,"visible":true,"family":"single_choice","subtype":"horiz","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"96mfgjfkj4g 1roun x4g5tcrq d52byhs855 cjc897qm8l udgjrsby"}],"href":"https://api.surveymonkey.com/v3/surveys/307784856/pages/168830087/questions/667455329","answers":{"choices":[{"position":1,"visible":true,"text":"2ny2fhgpm6 aturc40fuggi de2bnbhjnc a8jmpcw54h3nu pij7dkc3 sbrbi0rbi40ox2 wskx4gyt7aoc65 coi4cfe4y p44mj88ikx 93sodjvxi7ny30","quiz_options":{"score":0},"id":"4385138440"},{"position":2,"visible":true,"text":"t1f53t6jo 5s7kaoe ma28g93gfjjsm nwfjlfr2 h4k3jav 4xvidc3fv 8enehee7txlhvp ca6vkoxrb465pi xmi35um8q54r6 4rvruqr46m","quiz_options":{"score":0},"id":"4385138441"},{"position":3,"visible":true,"text":"i7iw5 ap5gjyafbm2l adp3lcc1 52hc8 j6ldt5","quiz_options":{"score":0},"id":"4385138442"},{"position":4,"visible":true,"text":"468nunilylfthe gwy8lhtgga9re4f 5xacgti673jfgs 3eei9s6qwg4avy ksqn6cwpvl585 wtyw59jhy7kck m462cr65qglmq ev7c0b5","quiz_options":{"score":0},"id":"4385138443"},{"position":5,"visible":true,"text":"yxrha98q xgjtmqc6x6tbsq l5co87ln2j3044 49lpv4 l8rfhvt2 rp4v9ofww2bekc7 ops08osul9","quiz_options":{"score":0},"id":"4385138444"},{"position":6,"visible":true,"text":"dbah1h80x 07f9vbs n89jmtwm0t2 47sd0ilc umky7iesp5j1ye f825fm7sn5fteb","quiz_options":{"score":0},"id":"4385138445"},{"position":7,"visible":true,"text":"9ybbt8x1xk o12xtb esgrab5p169kpou jyx54 456l76rs9f 3pcmlfoju rfyofv71 lb7gr6gi2ab0 gmexy","quiz_options":{"score":0},"id":"4385138446"},{"position":8,"visible":true,"text":"k3s5bwg5b2q 0ikv741vhxu3x4w efpp0p21i1s 44ca0fl4bklmn","quiz_options":{"score":0},"id":"4385138447"}]},"page_id":"168830087"},"emitted_at":1674149695663} +{"stream":"survey_questions","data":{"id":"667455332","position":5,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"v80ku mx1co9qwm34tat e9i3mdjcvixs grggkttt lhn014lmqj86 achjddrt9o5fx 9v07aged4niq0g ye1woaclolxuaq w5e7jclooee"}],"href":"https://api.surveymonkey.com/v3/surveys/307784856/pages/168830087/questions/667455332","answers":{"choices":[{"position":1,"visible":true,"text":"u1e4v4rx27412v v9mjw7oaf 0t873cte 57y89l xdqtturimm5 b4stpodx65s8u 2mk2es7jwrpn 7enb3sp29","quiz_options":{"score":0},"id":"4385138468"},{"position":2,"visible":true,"text":"w0mid5oagg qx0e1bvil6w5v6 0cadbm51x7hbg rpxgn9yni","quiz_options":{"score":0},"id":"4385138498"},{"position":3,"visible":true,"text":"7rex013 m75tu1nu9orrc2 k4du9rcsy2n5l0 cfbiki1u6cp2f qe81rjnguphrum j4019 tbl21q37","quiz_options":{"score":0},"id":"4385138499"},{"position":4,"visible":true,"text":"sat97b1hk6dx9k uq924nht7pr8cb 7nr3h2hclmiqg txrkxr29wtrc217 bxmed4ll1b23561 vvsu7 x293il lrl3e","quiz_options":{"score":0},"id":"4385138500"},{"position":5,"visible":true,"text":"h3yh19ckoclpq 0hb213i nj1mfmvbj9 p4ibgetarc6h6u 8kahs","quiz_options":{"score":0},"id":"4385138501"},{"position":6,"visible":true,"text":"xyvg34bae2 7u2n4l87h aec3h1sy5aw62r 60yajbqvxifw65 c7q9ty4pdby2d vyjp2 n7tavs0550g46 07p64c9pp8oo","quiz_options":{"score":0},"id":"4385138502"},{"position":7,"visible":true,"text":"kn8f11mlx sucpq9a 79n0u6vi1tgt b0dom486a929h ocblyvsm6 ti4tnjv533","quiz_options":{"score":0},"id":"4385138503"}]},"page_id":"168830087"},"emitted_at":1674149695663} +{"stream":"survey_questions","data":{"id":"667461429","position":1,"visible":true,"family":"single_choice","subtype":"horiz","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"vq7ho4rb qt0fpw3 fvn1b2y21n fpkcw9v73dqvfq0"}],"href":"https://api.surveymonkey.com/v3/surveys/307785388/pages/168831336/questions/667461429","answers":{"choices":[{"position":1,"visible":true,"text":"p7fu5tjqvd qgxdych hv1xcryuq7jlia 1qjuijk40 2v6u2e kwqcepbnx 2hjta3wqc je2wbyr6337d5 o0fq46u48nsa as5jyqahxo","quiz_options":{"score":0},"id":"4385172931"},{"position":2,"visible":true,"text":"tubba qc6l28jc4m1xi 5lf38au3ry9d o9eh4us9ki ul832 jippjf4 bcsoug6 9w7mnssanfsknl f422osb58c","quiz_options":{"score":0},"id":"4385172932"},{"position":3,"visible":true,"text":"juswx5 78b5n495 duu5kiikm feknbdqqtxg memsnyrcmao1lh","quiz_options":{"score":0},"id":"4385172933"},{"position":4,"visible":true,"text":"xpu48c 3cdbygss10 ujxmb ore7vx7o0x 9qmlb9fig6p3u w6c8oqr5dhp1l g3ihi9p1x kf2lvtbxo 4guw65","quiz_options":{"score":0},"id":"4385172934"},{"position":5,"visible":true,"text":"i9508b8n ld7powh72 nfvmljfhgn3n 643ydxghpbak7v ehe18sjo56yx m1bpaoj4epr 5sv5aw6 7m0bt","quiz_options":{"score":0},"id":"4385172935"},{"position":6,"visible":true,"text":"vwtr9m5fu3ot ltiqhsx3fi uuylf62qec mmn5fxqj","quiz_options":{"score":0},"id":"4385172936"},{"position":7,"visible":true,"text":"ww4qdi5pqg 3qvmj8g0yvx rrr5fx06d7 t6giac3k8 t3d6exqx175ft 10k251y 47v1vnu938 kkqqcsl50d7i","quiz_options":{"score":0},"id":"4385172937"}]},"page_id":"168831336"},"emitted_at":1674149695747} +{"stream":"survey_questions","data":{"id":"667461433","position":2,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"3bdmcu bth1w4ifhtcbm slcl3p6ynqhjtyp n5nea bdq5iuvq77m0t"}],"href":"https://api.surveymonkey.com/v3/surveys/307785388/pages/168831336/questions/667461433","answers":{"choices":[{"position":1,"visible":true,"text":"26j27d 5s3pbf08free77b ttq5exq7 n2gm99qkada 3rosqp hn74g juh2ww6","quiz_options":{"score":0},"id":"4385172948"},{"position":2,"visible":true,"text":"phmu9ghnjc vkh0ury2y6et tqj1lwjv 37m5bx1itv a5x88phj3g5 832qd1l rpbrunm7v49 kpmqo a8eqht49077t","quiz_options":{"score":0},"id":"4385172949"},{"position":3,"visible":true,"text":"jbsjkqa2f2xb ks824l5wnkd b0p0elet784r6rw ay5sqsv2vdron lr8mx7r6pc im42wmwt ltyhtay7p8u","quiz_options":{"score":0},"id":"4385172950"},{"position":4,"visible":true,"text":"ikkvwye7tah 7shp28 p7k7je0as5u sdc3f1rvin staohk6a44k nqjsxn3 97bog4jfxn qvorj30xpuh1gip","quiz_options":{"score":0},"id":"4385172951"},{"position":5,"visible":true,"text":"p83chdtsw6s88u 0hqgb8h871mw p0ej9 djy316qsa7iv6pe","quiz_options":{"score":0},"id":"4385172952"},{"position":6,"visible":true,"text":"kgfa1 tyxdxoe3gc xclen0vw9oa2 6bu9o8b6awx hcg9pgsi1av9v 7dicbt6wsee70f glwmxxtcdr 4qi7m9p8tfkxur3 ir5jr31364","quiz_options":{"score":0},"id":"4385172953"},{"position":7,"visible":true,"text":"u6xyfnav qw5qefsi 6ttsauh 3jwvmju8sdjk87 bql4ra2ww 8nxxobw4o58 omi87y6ur8l1f2g 62gaxuq","quiz_options":{"score":0},"id":"4385172954"},{"position":8,"visible":true,"text":"xdjcisgicnaix2 fj8bpbqaqgntr fb2n0o73 mgsb8xg5x3nfg9 9t18omvng4p6e 06wepywm4wku 82pemp2 l3nsu2ib2erbva tj475a","quiz_options":{"score":0},"id":"4385172955"}]},"page_id":"168831336"},"emitted_at":1674149695747} +{"stream":"survey_questions","data":{"id":"667461439","position":3,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"vrhftdyyte qir7jajr68td obg64x tu1rcy2h pqnxtdrwxk00a c173brbv 6qfxck7huyx"}],"href":"https://api.surveymonkey.com/v3/surveys/307785388/pages/168831336/questions/667461439","answers":{"choices":[{"position":1,"visible":true,"text":"q6705n7lidhb 0gsqn8 ocnyaudmo ulp9r0rsoheh4f cjwcqblbh o28tilm13w384","quiz_options":{"score":0},"id":"4385172990"},{"position":2,"visible":true,"text":"vyrx1jpjcl07 etxm7itb161 51rf5csw6e5tsh 3ux7rxq2 vct6fys4r7","quiz_options":{"score":0},"id":"4385172991"},{"position":3,"visible":true,"text":"pp1lc12uhii 2qmm3xnfsp i9912c8ac5k74i hxew5625hxtm3 4o658 jenbgi9o89 t4ppqc2qvhlui iu92ym nqjkka1i7","quiz_options":{"score":0},"id":"4385172992"},{"position":4,"visible":true,"text":"6mx9j44l0oa yv2wb1letc4p d3u87l59 vp7a65ykcfjyt tpe3k92l y2flusuc3tc t220oi sekyd","quiz_options":{"score":0},"id":"4385172993"},{"position":5,"visible":true,"text":"4fbdo eli65un2emx e6oyl3a41ugoxb2 saxpsxn6fv l8s2mk0e57d60","quiz_options":{"score":0},"id":"4385172994"},{"position":6,"visible":true,"text":"r5ly6h 7eu4pmnx7tv04g rdtjvlsup3gdn h4qoreg 3ct3fudxbuuw2 b975v8 ilsfmaa22","quiz_options":{"score":0},"id":"4385172995"}]},"page_id":"168831336"},"emitted_at":1674149695747} +{"stream":"survey_questions","data":{"id":"667461441","position":4,"visible":true,"family":"single_choice","subtype":"horiz","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"5p8n613hcmidh w4gyoyf stviro3om xey832w t9w23kj3j4rp5j h2w1swynkq1n9e vqrk2q5eb76p9yn pbj778q19u1hqy r9uvl76qqhfg"}],"href":"https://api.surveymonkey.com/v3/surveys/307785388/pages/168831336/questions/667461441","answers":{"choices":[{"position":1,"visible":true,"text":"tmdpekdn75l9b 3nuus dqbdxtj od2mltbx tmw5kcvpiw 6n41343132bdmc kb3i9er4qg","quiz_options":{"score":0},"id":"4385173020"},{"position":2,"visible":true,"text":"6a8efsocxmc eeohurhhyduo31w c8na1dub0ycx q8314ir twgrq 2ukcrksjt30s","quiz_options":{"score":0},"id":"4385173021"},{"position":3,"visible":true,"text":"ou9m3xl2n9wvn m0wews5 il8o8so pygnm380cd66 7nhjkpk9lu65n 4e3ifrwcb8wr 46bo0ani86m du57mphcnvf1in 6gf58fwm2c50tp","quiz_options":{"score":0},"id":"4385173022"},{"position":4,"visible":true,"text":"nahvw2sd3 hn5trfgqbuso cq82jp7 k8ev0 s8a0a23m0p g2jewuy0wdadgsa hca0mm5q 8agnm fxnf8vrgdybkg04","quiz_options":{"score":0},"id":"4385173023"}]},"page_id":"168831336"},"emitted_at":1674149695748} +{"stream":"survey_questions","data":{"id":"667461444","position":5,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"khys853d7u tgmr69e7mu7 0h6sn7 cja88 nj2os3 wnand9tdmohxca rowe88asxsja1dn rvs12kt5m0wqd2 41pwt1vnhst008o"}],"href":"https://api.surveymonkey.com/v3/surveys/307785388/pages/168831336/questions/667461444","answers":{"choices":[{"position":1,"visible":true,"text":"3k875epq o7u7f5 kihtesav7 qwxlu7j5dj59i 8ghsap3n","quiz_options":{"score":0},"id":"4385173040"},{"position":2,"visible":true,"text":"cemvy 140ek4 d1fumxxlqqnyt 99pb868kg2b hqur2f44k uwr5dyif8g6","quiz_options":{"score":0},"id":"4385173041"},{"position":3,"visible":true,"text":"iykvyahtufq91l bvs9t6mmoyw ld2hep1somcl7 2rs7wk3q 5ncge9mfj1ac r30355p0g4wt c1bx5 n5wgmcud6h","quiz_options":{"score":0},"id":"4385173042"},{"position":4,"visible":true,"text":"a4xcahm1euf l3h1jx abcc0r500rlqyhv 9w01sfmci3j ur9vp3sxfioh r0dksavcmduhk2 kw7nbl 5hys2r8vebx4e 94rajuno uwm3ajywh3vlqbf","quiz_options":{"score":0},"id":"4385173043"},{"position":5,"visible":true,"text":"0whm5dw5kuk44 efrr6i iu9592 a968tp4ff0uaf q0f6mtpcp2x82ae 97m1gvsnfthibp agt6dm3 ip1e3y9","quiz_options":{"score":0},"id":"4385173044"},{"position":6,"visible":true,"text":"hwbtcf7 60gji9qoeovhlf 9b3ijm8 xiw5w09k 460v2o27hacdts 30eq74bg9m qpfv2jd9f3ur rlacn2rf273ck7 2welkh7188h","quiz_options":{"score":0},"id":"4385173045"},{"position":7,"visible":true,"text":"cbqj2nlsnyy tmjyvoija wirje1e bxsqxqe g12fuxmtgfq 7fc74o yrdsjey 1xmv6u077j7l 8hkf7","quiz_options":{"score":0},"id":"4385173046"},{"position":8,"visible":true,"text":"uqlus j3nd9u8g faqa6ghioy60h9 a95spokyj58 ndgctguy75jr ei16b1p7jabc2 hfkfpruds","quiz_options":{"score":0},"id":"4385173047"}]},"page_id":"168831336"},"emitted_at":1674149695748} +{"stream":"survey_questions","data":{"id":"667461449","position":1,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"cwipmppqgy2vy 3mn05n4 gedv0twor lyawl9v528587w wfmifrr9hk pykvx52nu1ds5p hh28niyix"}],"href":"https://api.surveymonkey.com/v3/surveys/307785388/pages/168831340/questions/667461449","answers":{"choices":[{"position":1,"visible":true,"text":"3gjvb8l80nc8j 90ebdlnd3hg spis2ipbim9l fjt4xli4a 0bqmti2wp0juwcl cdwl64u2yfghjdf 190uek5lw","quiz_options":{"score":0},"id":"4385173076"},{"position":2,"visible":true,"text":"xjdswmkwm24 rrmxo7otpear8 ogepd7v8br0y5m vi2vyip49ux uvtnq2sem 5gwcppvvvc bw56us8o 1huql09g6pa1ylb","quiz_options":{"score":0},"id":"4385173077"},{"position":3,"visible":true,"text":"gyq16tgah s669s7 j5isg9 l63lf q61pyy oywk58jfmnvy 6lhnukrce1px bwt066s8k5248o sylwt em0x3","quiz_options":{"score":0},"id":"4385173078"}]},"page_id":"168831340"},"emitted_at":1674149695748} +{"stream":"survey_questions","data":{"id":"667461452","position":2,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"aku2037bp sxtf1busk2uj 7scwpc00giyau urduwqdsyr3 xk3y39yjywei1y uw7y5s3ky fetwdqr6n qp00a8rofpy 4rwl41yk78jd"}],"href":"https://api.surveymonkey.com/v3/surveys/307785388/pages/168831340/questions/667461452","answers":{"choices":[{"position":1,"visible":true,"text":"86hx9ifui6c4o 02xkn5ghldfw35k faipmm g7634wrx1jfvy jewjfdq kkyyxx00brj wtu0xrhfhvu5lv8 573fv0vtm0n","quiz_options":{"score":0},"id":"4385173088"},{"position":2,"visible":true,"text":"nfeyvnb0kat1yb0 3lk3rse66t8jp w90vixgpu32cyir q03jxd8vch9xn7t 3a0swht9ykadh8 fvoa9t8dri fm0twcdhxm 4ot9xpxe9s08b ho7d1","quiz_options":{"score":0},"id":"4385173089"},{"position":3,"visible":true,"text":"k5pyc4y 9uul1o 7lvigo 7xsdo49jx2yc d07jr1w4","quiz_options":{"score":0},"id":"4385173090"},{"position":4,"visible":true,"text":"3e49s5 gxqwbv w6c2e tjaf7rpgtksjpe ivr0he574 ft8qso pqq4l5hbchy 6mhw0ksgrh xbj4l7a2g","quiz_options":{"score":0},"id":"4385173091"}]},"page_id":"168831340"},"emitted_at":1674149695748} +{"stream":"survey_questions","data":{"id":"667461454","position":3,"visible":true,"family":"single_choice","subtype":"horiz","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"4i1qajt 6sy8nl3hjougqbu okftpe4sw0bpr6 gv1pbyk8km 9ihd103uu2n3lx c6spvurq080unx uswpaexarx"}],"href":"https://api.surveymonkey.com/v3/surveys/307785388/pages/168831340/questions/667461454","answers":{"choices":[{"position":1,"visible":true,"text":"vg0vpi1 100y8 03nnh0 947rcth5ofg x4xfc38q81i6e7 bgf20442q i2jh2 lolt43y3ri2 vl0t6 2rkshapnf","quiz_options":{"score":0},"id":"4385173102"},{"position":2,"visible":true,"text":"o7qfwgqys eyumel 7spc5 42qxefd","quiz_options":{"score":0},"id":"4385173103"},{"position":3,"visible":true,"text":"usb43wqju6w csearclgaedae 2oo3m2a79oo5si granw6hf 9g9ms37peouy gqaxry74 x45yqa0xtkcu g0in9 lyp7xe6 few8vkh7yf","quiz_options":{"score":0},"id":"4385173104"},{"position":4,"visible":true,"text":"spfrf5sfebrhj8 gwodgm3o1 m5cydcxbtk2 pgrj6h mome4a us97ellx2peg3s ilidjy8juu0","quiz_options":{"score":0},"id":"4385173105"},{"position":5,"visible":true,"text":"w579aalpr5gaj1 1h2ud 53d80pebt4ep 0l2gw8fk7fa","quiz_options":{"score":0},"id":"4385173106"}]},"page_id":"168831340"},"emitted_at":1674149695748} +{"stream":"survey_questions","data":{"id":"667461456","position":4,"visible":true,"family":"single_choice","subtype":"horiz","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"is9uyf6ka iel16fh 1f0xg 7mx16glcei fygrn g7l10em5fbeybb 1vgps0k3 q4fls qryybq07jy f3luik1nx09b7so"}],"href":"https://api.surveymonkey.com/v3/surveys/307785388/pages/168831340/questions/667461456","answers":{"choices":[{"position":1,"visible":true,"text":"0fg2b3v4 jmdxep5of1y q2ag243 cfytydw942toqsl 2ixd8iynbs eg22ia","quiz_options":{"score":0},"id":"4385173113"},{"position":2,"visible":true,"text":"0am3pervuj biqdk6g5yw i5xvk20h1n6jv l0v9m5cxn 2vyqvcp8rlthxfv k0v6o48p3v8 551pws1020t98f","quiz_options":{"score":0},"id":"4385173114"},{"position":3,"visible":true,"text":"cjtogxiie0arj ltkgiwrpoa4x1v foqfr1gk406a rale1dx 2p4gjy2g","quiz_options":{"score":0},"id":"4385173115"},{"position":4,"visible":true,"text":"h31va0f12qx3vg 51m9g4bo9 r4ofiqr j1yym2ma8m13kch 1e4jxhdyol2ny nf3fh0h2e qw8euwei1lyhemq 3j4un2sjdoj7 q92100o573tbom 5phvt3n22","quiz_options":{"score":0},"id":"4385173116"},{"position":5,"visible":true,"text":"h8hktik e03ehrspn7 rnjqq4431q2 3bs1nevr8j0 audw020tl kalstea2","quiz_options":{"score":0},"id":"4385173117"},{"position":6,"visible":true,"text":"9w090 e6835j0fvfg89 kk6swkb5g oo0f4ho99x437 qf7b8y1aaa4 i0r03","quiz_options":{"score":0},"id":"4385173118"}]},"page_id":"168831340"},"emitted_at":1674149695749} +{"stream":"survey_questions","data":{"id":"667461462","position":5,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"r1kf2oglhju ou2ldq63qu2g1 ufs1pkw pgr9p75sh9k7 vnu477cixnk1kx nxnfn0ti3x3u9wh ew6ho e18cmaeovxhx h1fac8j8 8ni6ay"}],"href":"https://api.surveymonkey.com/v3/surveys/307785388/pages/168831340/questions/667461462","answers":{"choices":[{"position":1,"visible":true,"text":"xytk5fnqv6odvms sw94ohnav5npnm lg9uf4 iwuqgfd0 5ee0wd5 lfha63ve x55yip4 gxgdkff3sckdn mq1khupscjgqj 8mtp54i5c3rjonv","quiz_options":{"score":0},"id":"4385173167"},{"position":2,"visible":true,"text":"2ammt8omj0l c0i1q 1uvaf203rh1 8wj2w7pp qlqayl9e8ldc y7iivv cv189py2di xuihxup7b2 rh8owrr595st","quiz_options":{"score":0},"id":"4385173168"},{"position":3,"visible":true,"text":"o9cvkj8x k0txiswxc5 ogf66jujgcrwdb l7n0c0rodcx 2gduko0wwimb21 afw8mi","quiz_options":{"score":0},"id":"4385173169"},{"position":4,"visible":true,"text":"mcb62sefmuo plnbygilddeqg u64kkkjvoms4b5q jw4tashu6c7ve12 8di4g100598 ad1bet nnqd7jmg","quiz_options":{"score":0},"id":"4385173170"}]},"page_id":"168831340"},"emitted_at":1674149695749} +{"stream":"survey_questions","data":{"id":"667461690","position":1,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"53o3ibly at73qjs4e4 y9dug7jxfmpmr 8esacb5"}],"href":"https://api.surveymonkey.com/v3/surveys/307785415/pages/168831393/questions/667461690","answers":{"choices":[{"position":1,"visible":true,"text":"lg2mcft4e64 ywiatkmeo ci3rr4l2v0 ot6un49a 4b28sq4g8qv7tj 4ihpko73bp0k6lf swaeo3o4mg2jf5g rnh225wj520w1ps p9emk1wg64vwl","quiz_options":{"score":0},"id":"4385174700"},{"position":2,"visible":true,"text":"ywg8bovna adsahna5kd1jg vdism1 w045ovutkx9 oubne2u vd0x7lh3 y3npa4kfb5","quiz_options":{"score":0},"id":"4385174701"},{"position":3,"visible":true,"text":"xsy4kv tqp8vty29815 de8nt5ab2fyr m6jilru2ek l7fktx3j5mbj l33ip83t4p29 exfygne a1btj95m1r","quiz_options":{"score":0},"id":"4385174702"}]},"page_id":"168831393"},"emitted_at":1674149695838} +{"stream":"survey_questions","data":{"id":"667461777","position":2,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"kjqdk eo7hfnu or7bmd1iwqxxp sguqta4f8141iy"}],"href":"https://api.surveymonkey.com/v3/surveys/307785415/pages/168831393/questions/667461777","answers":{"choices":[{"position":1,"visible":true,"text":"11bp1ll11nu0 ool67 tkbke01j3mtq 22f4r54u073p h6kt4puolum4","quiz_options":{"score":0},"id":"4385174970"},{"position":2,"visible":true,"text":"8q53omsxw8 08yyjvj3ns9j yu7yap87 d2tgjv55j5d5o3y dbd69m94qav1wma 8upqf7cliu hb26pytfkwyt rfo2ac4","quiz_options":{"score":0},"id":"4385174971"},{"position":3,"visible":true,"text":"6d7qmnw obxwg4elaab6 2sby04sor66 1wuoh26aftxu7","quiz_options":{"score":0},"id":"4385174972"},{"position":4,"visible":true,"text":"n0xwexbwtviyj1a midgl2jpfdy a72ut27ta 8i9fmkwg0q mbtxhkn b2ut8mtsslkt609 tgmnd7ovnqlbr","quiz_options":{"score":0},"id":"4385174973"},{"position":5,"visible":true,"text":"qjfs0pmb iecatmqyxtk w1s0fs9vcbayf5 rwsneyp0wx6lsyq pq99n hrx1mk4saug gv06qshlabe 0s2t4 h11ee2xna0m8r","quiz_options":{"score":0},"id":"4385174974"},{"position":6,"visible":true,"text":"11uf3he wbstw etbysmu4 c84vqddvx","quiz_options":{"score":0},"id":"4385174975"},{"position":7,"visible":true,"text":"rnfx7m ndifoe7ihy q98pov78016t 8smlnm lb3xicjp9 0r30sie97y12ve7","quiz_options":{"score":0},"id":"4385174976"},{"position":8,"visible":true,"text":"jc8s2ra5qxytxbu u6tj7jgep95 vbva1b4uslioa omku9","quiz_options":{"score":0},"id":"4385174977"}]},"page_id":"168831393"},"emitted_at":1674149695839} +{"stream":"survey_questions","data":{"id":"667461791","position":3,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"0qw6a5lnf426 2sh3g9f8wu xmgflj 41pjy"}],"href":"https://api.surveymonkey.com/v3/surveys/307785415/pages/168831393/questions/667461791","answers":{"choices":[{"position":1,"visible":true,"text":"7kxk7bkhfdx86sh 3rnrsj70ud 048jbf4qx4 p96o8 sn7xi oh02tfput4 6js84u99m5t","quiz_options":{"score":0},"id":"4385175055"},{"position":2,"visible":true,"text":"x259osu33y 8qadkcxpsnk4o20 m4wo3183nwxhgye q4mpg srpfibk96sf t3h2cx58eji x7l0sdipnjece8 7tgwfdfmh9hgdwi w99mkib2","quiz_options":{"score":0},"id":"4385175056"},{"position":3,"visible":true,"text":"lil1tboe p80wa8yed7w8 cll24c2lls6cc0 gpbv7rnap psk1et","quiz_options":{"score":0},"id":"4385175057"},{"position":4,"visible":true,"text":"wodtghhkt 2ae1c8q5s1ha 8lppd7ko84al j95eq1imtu7 6x8qknrhn0 l7h53","quiz_options":{"score":0},"id":"4385175058"}]},"page_id":"168831393"},"emitted_at":1674149695840} +{"stream":"survey_questions","data":{"id":"667461794","position":4,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"q3ay58w3 2rfjgu4 0cf9uh1 pu4fo16w 6c2wkn 1oo7d8"}],"href":"https://api.surveymonkey.com/v3/surveys/307785415/pages/168831393/questions/667461794","answers":{"choices":[{"position":1,"visible":true,"text":"1orbs vtqu62x9bp t75k10e89krhn bdnsfy6ng34g 8yv9p1c92jlbt0s","quiz_options":{"score":0},"id":"4385175070"},{"position":2,"visible":true,"text":"5j8dww2lxevx4a wv3ppbb vnccslwrjjdc n5pjsmw m7b4533y8tcbbus","quiz_options":{"score":0},"id":"4385175071"},{"position":3,"visible":true,"text":"fnjqkqy2 44brrpru jllsj9cdggwt4 behkog76y5ua 7ftpd8c8qhblii","quiz_options":{"score":0},"id":"4385175072"},{"position":4,"visible":true,"text":"srjre1h3w9 qojsh5w2 sq7wva6tkl9 raxp5mldrp","quiz_options":{"score":0},"id":"4385175073"}]},"page_id":"168831393"},"emitted_at":1674149695841} +{"stream":"survey_questions","data":{"id":"667461797","position":5,"visible":true,"family":"single_choice","subtype":"horiz","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"bvrdxa swsrjt sjox8u6767lv5 wgcomvtnoi0yg namiomuh6cou61u nl2v5bfu15i7 sqpu07jp489uc"}],"href":"https://api.surveymonkey.com/v3/surveys/307785415/pages/168831393/questions/667461797","answers":{"choices":[{"position":1,"visible":true,"text":"y97bshsv ite5mgk76p89o yrtt28bmm4jo9 ftc2tnjg","quiz_options":{"score":0},"id":"4385175096"},{"position":2,"visible":true,"text":"r970efm0 5p96h9iy1 o7ft83xrqgsrh8 owk30 buqg6ksd297lw9 lh6ygen9s2rac2b k5d3lbr7m37p","quiz_options":{"score":0},"id":"4385175097"},{"position":3,"visible":true,"text":"ktg10 vp7khp0ucx vuo5qrcor po9nbn6cdpdu56a rt8eiu0umg0dkx j2k8vgtr6","quiz_options":{"score":0},"id":"4385175098"},{"position":4,"visible":true,"text":"iubh35s1gvpm4gj svwbyf7npunm3 0thmsjmt2qb5im0 undxh7b frxykv55emi padtjsk69 qa0jrnwrfoj qqjg6ifvlx0abdb","quiz_options":{"score":0},"id":"4385175099"},{"position":5,"visible":true,"text":"w64hwv9edeaf55 l0gkthucpqj 80wgqsffl 0m45xm56a25psm 8opb8b0gw2w6 n8xex","quiz_options":{"score":0},"id":"4385175100"},{"position":6,"visible":true,"text":"ju3rt297a t028c0b35635 l0kj9vj seuar76 89587qhw46295","quiz_options":{"score":0},"id":"4385175101"},{"position":7,"visible":true,"text":"c4de01u4eil p1p2vy 0gqjglc mc2r97p07 d8d90 j15xktb2idx91 tecpeak3 4anh9o5w7h0runq yr0nd0q9392229","quiz_options":{"score":0},"id":"4385175102"},{"position":8,"visible":true,"text":"yc5erasa3ovk4d ed9adudq8e1s 7wrf8k w9ohrhltg3kv1 wgrnemp 7dqxmy5e bxnsro2sl","quiz_options":{"score":0},"id":"4385175103"}]},"page_id":"168831393"},"emitted_at":1674149695841} +{"stream":"survey_questions","data":{"id":"667461801","position":1,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"iu425c2v4yqs04 43g37 wg8awi s2pjwsm vjhybbs wry73cuukw85l2"}],"href":"https://api.surveymonkey.com/v3/surveys/307785415/pages/168831402/questions/667461801","answers":{"choices":[{"position":1,"visible":true,"text":"xjortc6k0sxjydf rdusho82tsr3l 3b3gch ogabx6895eb3 e7bj5pq poft6c4g1","quiz_options":{"score":0},"id":"4385175115"},{"position":2,"visible":true,"text":"bscm9v7d9nv0 e5x94dt0402ge i7mwtey74y4 er7bwam13 6xcjpw pre922tv ihmvbih 9piadim1lterm","quiz_options":{"score":0},"id":"4385175116"},{"position":3,"visible":true,"text":"ywtecquds5ctgu sjcgsa3hm d087wy 6yjqp0jgm 1ywj8v3wuuq wmlmq essefj rbgrjtv6smxcmag","quiz_options":{"score":0},"id":"4385175117"},{"position":4,"visible":true,"text":"gc8d58x66m ftpowgvwodht9h fj47r927vh826 qrkgkb bcvxni fo6g9wdlxgvnq","quiz_options":{"score":0},"id":"4385175118"},{"position":5,"visible":true,"text":"fxsrgxts qih9ukhxafmmiv4 h2ujh1va9jf b6ho30","quiz_options":{"score":0},"id":"4385175119"},{"position":6,"visible":true,"text":"81binesi6f 7urb7 ylotwabgvbt 03ke1u5h 3ehye3g olw0f83a1h667t 71ujnoyf p49ce","quiz_options":{"score":0},"id":"4385175120"},{"position":7,"visible":true,"text":"ht1rd9ymh 2tftisj80s74mop b1eavw d6vgqwrj","quiz_options":{"score":0},"id":"4385175121"}]},"page_id":"168831402"},"emitted_at":1674149695842} +{"stream":"survey_questions","data":{"id":"667461805","position":2,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"mxlksuvmoras9o 94fj2 dieyg92v384lfv8 f9rwin4 cdmg95wcnt2xa ybcmni7yd1x 1yl4j4q7j"}],"href":"https://api.surveymonkey.com/v3/surveys/307785415/pages/168831402/questions/667461805","answers":{"choices":[{"position":1,"visible":true,"text":"mevjvlslfppe ex251ss vkrs7swus g72vplm9svejkdw 7onhrwlh bouaam3k7cnn yadoqmnhn4swehq u8lhv3fdh58o3 wrbc0y197d","quiz_options":{"score":0},"id":"4385175146"},{"position":2,"visible":true,"text":"uglir jabjq1 poswkedidqpmj ta5ma4ep9xxr ghu3n2a4u7f3orh 9oud3lwe0f vwip14snnv6gtb 5fw29neis71ogsm dpq7m 9an28j1styhc","quiz_options":{"score":0},"id":"4385175147"},{"position":3,"visible":true,"text":"p3ndk7 nxpv9grg77 ek2kndt51g 2v10497 bdr0a3466ao","quiz_options":{"score":0},"id":"4385175148"},{"position":4,"visible":true,"text":"7w76l 9k393odbjg7cht7 mio9w4tcv 6wvef4vm orgg1n 20d8lh8x9osqcv dv50mjj w3g96tt0m3rf9 24uun3grfy2u 4vns2lt","quiz_options":{"score":0},"id":"4385175149"},{"position":5,"visible":true,"text":"4tcuvnn1wxy cqpr795s sfyecjwup fn76iwks5hko rk6wvgyblb3gqe4 rl5ulee1w rq66d","quiz_options":{"score":0},"id":"4385175150"},{"position":6,"visible":true,"text":"cmrjgc4 dwotyvr4o n9jid3i79xoql klkrt23lklso4p hh6d57t5 9xk3o9me 8bkpgry1yu009y","quiz_options":{"score":0},"id":"4385175151"},{"position":7,"visible":true,"text":"43ghcfhsl 74xoo rn7rmgjhd3cq u2x2ir6n449kqxp 8isq7wb tccg39oy1b 9mw0eu1ho0 a4x77foba5y ywgyosh9ue ynh9u8odsos5q2","quiz_options":{"score":0},"id":"4385175152"}]},"page_id":"168831402"},"emitted_at":1674149695842} +{"stream":"survey_questions","data":{"id":"667461811","position":3,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"i4mol250lne3 bhrh2dvt9b qss461 lkb1u chpwmgcnuoeec un2l5"}],"href":"https://api.surveymonkey.com/v3/surveys/307785415/pages/168831402/questions/667461811","answers":{"choices":[{"position":1,"visible":true,"text":"s4xpl2l93 57k4asd04 gyddhg dn53f8bd 8wtgobxts3 ms7nan ns5wv6q2vy6 nnaudmbyu80llen 8be4urorunk","quiz_options":{"score":0},"id":"4385175197"},{"position":2,"visible":true,"text":"ec2l4hr 5lwp46ij8 3tqigw elleyat98j2jjd if8hiia3 vad578","quiz_options":{"score":0},"id":"4385175198"},{"position":3,"visible":true,"text":"9t9nsl0tjlcjxr k1chdb iislvtl gpcnyi82o5ebu 46ayfj 5r3b3w92l6 vaqskragdor","quiz_options":{"score":0},"id":"4385175199"},{"position":4,"visible":true,"text":"8ad404t4 86hyrfxr7 xef8em2 g7u8fc2 rsslpdptcgrsh9n n5pb1u9b","quiz_options":{"score":0},"id":"4385175200"},{"position":5,"visible":true,"text":"bijp3kiqfs quasi89mov1y hj9ku 9w6iuh 81sng4yu32tyh d4q9kbxuoqd2xaq","quiz_options":{"score":0},"id":"4385175201"},{"position":6,"visible":true,"text":"73xiyg2gc q1l6a28s 991jaxujf56sqi rhxrnjum ges25br tb2x1wamrh3jac1 t3s8ocme8q9d8 c505btw99r hwljwx","quiz_options":{"score":0},"id":"4385175202"},{"position":7,"visible":true,"text":"ri75nf 5yy3nq 8m5e68j4mh8m sf1v3 60nijf1oeq9 bwp7bfx9u11a474 w66gfkiayng55q 6h0gp80h","quiz_options":{"score":0},"id":"4385175203"},{"position":8,"visible":true,"text":"nbqtnbbuiue5fr a9s8yrpjm7x0p qid4y913k 8ueagmuy2 5kvul122lseh5h5","quiz_options":{"score":0},"id":"4385175204"}]},"page_id":"168831402"},"emitted_at":1674149695843} +{"stream":"survey_questions","data":{"id":"667461833","position":4,"visible":true,"family":"single_choice","subtype":"menu","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"s3pjyrvc bj99egp0o99 f4ddk7sed bdc2yh24yf tyii1jye nmvwhj18oqxna6b lku2vt8hrnx4 j327a"}],"href":"https://api.surveymonkey.com/v3/surveys/307785415/pages/168831402/questions/667461833","answers":{"choices":[{"position":1,"visible":true,"text":"hqpox2w6wuwyd2 fm6kvjiq6ns5k jv1eutgqn1jj if8dj81e 57l25ev1tal9j","quiz_options":{"score":0},"id":"4385175279"},{"position":2,"visible":true,"text":"vr2p6mvbedcpkak 2c91smhshw9ee mwdy43um3334e7i u4o5frorc3py srt09vtrol825 i9s8n2koaoc6fu","quiz_options":{"score":0},"id":"4385175280"},{"position":3,"visible":true,"text":"1icyn0f tifktyc2uwd k8ehexjojth9a2f 0n7sh5p4i6kswe","quiz_options":{"score":0},"id":"4385175281"},{"position":4,"visible":true,"text":"6ju066 4chnhs0be43dy2 xdkxk37j1i0qy1 43b22jang8 na1yapnjj 7tvgbeu v1dw7as","quiz_options":{"score":0},"id":"4385175282"},{"position":5,"visible":true,"text":"vnslaachd7t07f0 db6whw u6ahc71ajst 2cn114ialhcvex kpwm1qo1y g82xup","quiz_options":{"score":0},"id":"4385175283"},{"position":6,"visible":true,"text":"aniu1f d47vbpsl mm26jpf7 g2io86ycj6yk","quiz_options":{"score":0},"id":"4385175284"}]},"page_id":"168831402"},"emitted_at":1674149695844} +{"stream":"survey_questions","data":{"id":"667461834","position":5,"visible":true,"family":"single_choice","subtype":"vertical","layout":null,"sorting":null,"required":null,"validation":null,"forced_ranking":false,"headings":[{"heading":"ce8esfvsy7xcwqu gemf05b3s5ap5 76oc1 srngx7qca"}],"href":"https://api.surveymonkey.com/v3/surveys/307785415/pages/168831402/questions/667461834","answers":{"choices":[{"position":1,"visible":true,"text":"jggh1bnginkodsv 4jhtwffnlgybux 1na25qx xr5jtwfp vvip26cqr st09ps653caiyj 1icxwhc1hut6","quiz_options":{"score":0},"id":"4385175294"},{"position":2,"visible":true,"text":"gdxye rstmylwe4l w2lkwbdf87e735u rdxn1vxbg3aw kwkn1gfsu s3oa2wx7 6vegglr1ihckyxa","quiz_options":{"score":0},"id":"4385175295"},{"position":3,"visible":true,"text":"qsghk1r8e3p ciuick1mgdwbyc k8wbxctpmtu2v xau05rusflq k3as06r35dl9 38xpts","quiz_options":{"score":0},"id":"4385175296"}]},"page_id":"168831402"},"emitted_at":1674149695844} diff --git a/airbyte-integrations/connectors/source-surveymonkey/source_surveymonkey/schemas/survey_responses.json b/airbyte-integrations/connectors/source-surveymonkey/source_surveymonkey/schemas/survey_responses.json index fb29371ff955..b8d651d1d1b3 100644 --- a/airbyte-integrations/connectors/source-surveymonkey/source_surveymonkey/schemas/survey_responses.json +++ b/airbyte-integrations/connectors/source-surveymonkey/source_surveymonkey/schemas/survey_responses.json @@ -61,6 +61,9 @@ "analyze_url": { "type": ["string", "null"] }, + "language": { + "type": ["string", "null"] + }, "total_time": { "type": ["integer", "null"] }, diff --git a/airbyte-integrations/connectors/source-surveymonkey/source_surveymonkey/schemas/surveys.json b/airbyte-integrations/connectors/source-surveymonkey/source_surveymonkey/schemas/surveys.json index 541a6156d49a..cbdf3a37c462 100644 --- a/airbyte-integrations/connectors/source-surveymonkey/source_surveymonkey/schemas/surveys.json +++ b/airbyte-integrations/connectors/source-surveymonkey/source_surveymonkey/schemas/surveys.json @@ -11,6 +11,9 @@ "language": { "type": ["string", "null"] }, + "theme_id": { + "type": ["string", "null"] + }, "folder_id": { "type": ["string", "null"] }, diff --git a/airbyte-integrations/connectors/source-surveymonkey/source_surveymonkey/source.py b/airbyte-integrations/connectors/source-surveymonkey/source_surveymonkey/source.py index 677a4166f730..c9931b608fed 100644 --- a/airbyte-integrations/connectors/source-surveymonkey/source_surveymonkey/source.py +++ b/airbyte-integrations/connectors/source-surveymonkey/source_surveymonkey/source.py @@ -17,7 +17,6 @@ class SourceSurveymonkey(AbstractSource): - SCOPES = {"responses_read_detail", "surveys_read", "users_read"} @classmethod @@ -34,11 +33,6 @@ def _check_credentials(cls, config: Mapping[str, Any]) -> Tuple[bool, Any]: if not credentials.get("access_token"): return False, "access_token in credentials is not provided" - if not credentials.get("client_id"): - return False, "client_id in credentials is not provided" - - if not credentials.get("client_secret"): - return False, "client_secret in credentials is not provided" return True, None def check_connection(self, logger: AirbyteLogger, config: Mapping[str, Any]) -> Tuple[bool, Any]: diff --git a/airbyte-integrations/connectors/source-surveymonkey/unit_tests/test_source.py b/airbyte-integrations/connectors/source-surveymonkey/unit_tests/test_source.py index dc36331cc101..cae113f884aa 100644 --- a/airbyte-integrations/connectors/source-surveymonkey/unit_tests/test_source.py +++ b/airbyte-integrations/connectors/source-surveymonkey/unit_tests/test_source.py @@ -69,22 +69,6 @@ def test_source_check_connection_failed_missing_scopes(requests_mock): }, "access_token in credentials is not provided", ), - ( - { - "start_date": "2021-01-01T00:00:00", - "origin": "USA", - "credentials": {"auth_method": "something", "access_token": "something", "client_id": "client_id"}, - }, - "client_secret in credentials is not provided", - ), - ( - { - "start_date": "2021-01-01T00:00:00", - "origin": "USA", - "credentials": {"auth_method": "something", "access_token": "something", "client_secret": "client_secret"}, - }, - "client_id in credentials is not provided", - ), ], ) def test_source_check_connection_failed_missing_credentials(config, err_msg): diff --git a/connectors.md b/connectors.md index 7aead45830f3..38bd821c5fea 100644 --- a/connectors.md +++ b/connectors.md @@ -231,7 +231,7 @@ | **Strava** | Strava icon | Source | airbyte/source-strava:0.1.4 | beta | [link](https://docs.airbyte.com/integrations/sources/strava) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-strava) | `7a4327c4-315a-11ec-8d3d-0242ac130003` | | **Stripe** | Stripe icon | Source | airbyte/source-stripe:3.1.0 | generally_available | [link](https://docs.airbyte.com/integrations/sources/stripe) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-stripe) | `e094cb9a-26de-4645-8761-65c0c425d1de` | | **SurveyCTO** | SurveyCTO icon | Source | airbyte/source-surveycto:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/surveycto) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-surveycto) | `dd4632f4-15e0-4649-9b71-41719fb1fdee` | -| **SurveyMonkey** | SurveyMonkey icon | Source | airbyte/source-surveymonkey:0.1.15 | generally_available | [link](https://docs.airbyte.com/integrations/sources/surveymonkey) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-surveymonkey) | `badc5925-0485-42be-8caa-b34096cb71b5` | +| **SurveyMonkey** | SurveyMonkey icon | Source | airbyte/source-surveymonkey:0.1.16 | generally_available | [link](https://docs.airbyte.com/integrations/sources/surveymonkey) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-surveymonkey) | `badc5925-0485-42be-8caa-b34096cb71b5` | | **SurveySparrow** | SurveySparrow icon | Source | airbyte/source-survey-sparrow:0.2.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/survey-sparrow) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-survey-sparrow) | `4a4d887b-0f2d-4b33-ab7f-9b01b9072804` | | **TMDb** | TMDb icon | Source | airbyte/source-tmdb:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/tmdb) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-tmdb) | `6240848f-f795-45eb-8f5e-c7542822fc03` | | **TPLcentral** | x | Source | airbyte/source-tplcentral:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/tplcentral) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-tplcentral) | `f9b6c538-ee12-42fe-8d4b-0c10f5955417` | diff --git a/docs/integrations/sources/surveymonkey.md b/docs/integrations/sources/surveymonkey.md index 6dcc46f9c667..99cab665ae5e 100644 --- a/docs/integrations/sources/surveymonkey.md +++ b/docs/integrations/sources/surveymonkey.md @@ -65,6 +65,7 @@ To cover more data from this source we use caching. | Version | Date | Pull Request | Subject | |:--------| :--------- | :------------------------------------------------------- | :--------------------------------------------------------------------- | +| 0.1.16 | 2023-04-13 | [25080](https://github.com/airbytehq/airbyte/pull/25080) | Fix spec.json required fields and update schema for surveys and survey_responses | | 0.1.15 | 2023-02-11 | [22865](https://github.com/airbytehq/airbyte/pull/22865) | Specified date formatting in specification | | 0.1.14 | 2023-01-27 | [22024](https://github.com/airbytehq/airbyte/pull/22024) | Set `AvailabilityStrategy` for streams explicitly to `None` | | 0.1.13 | 2022-11-29 | [19868](https://github.com/airbytehq/airbyte/pull/19868) | Fix OAuth flow urls | From d261ab72f5b35cbb70e248cd16d202de74751190 Mon Sep 17 00:00:00 2001 From: Evan Tahler Date: Thu, 13 Apr 2023 08:10:44 -0700 Subject: [PATCH 046/187] Add additional destination-bigquery datacenters (#25122) * Add additional bigquery datacenters * bump dockerfile * revert source BQ bump * docs * builds depend on normalization now... * no -base * auto-bump connector version * auto-bump connector version --------- Co-authored-by: Octavia Squidington III --- .../seed/destination_definitions.yaml | 4 +- .../resources/seed/destination_specs.yaml | 22 ++- .../src/main/resources/seed/oss_catalog.json | 8 +- .../Dockerfile | 2 +- .../src/main/resources/spec.json | 9 ++ .../destination-bigquery/Dockerfile | 2 +- .../src/main/resources/spec.json | 9 ++ connectors.md | 4 +- .../destinations/bigquery-denormalized.md | 134 +++++++++--------- docs/integrations/destinations/bigquery.md | 26 ++-- tools/integrations/manage.sh | 8 ++ 11 files changed, 137 insertions(+), 91 deletions(-) diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/destination_definitions.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/destination_definitions.yaml index 515d8f4b79ea..99d0422af639 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/destination_definitions.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/destination_definitions.yaml @@ -41,7 +41,7 @@ - name: BigQuery destinationDefinitionId: 22f6c74f-5699-40ff-833c-4a879ea40133 dockerRepository: airbyte/destination-bigquery - dockerImageTag: 1.2.19 + dockerImageTag: 1.2.20 documentationUrl: https://docs.airbyte.com/integrations/destinations/bigquery icon: bigquery.svg normalizationConfig: @@ -59,7 +59,7 @@ - name: BigQuery (denormalized typed struct) destinationDefinitionId: 079d5540-f236-4294-ba7c-ade8fd918496 dockerRepository: airbyte/destination-bigquery-denormalized - dockerImageTag: 1.2.19 + dockerImageTag: 1.2.20 documentationUrl: https://docs.airbyte.com/integrations/destinations/bigquery icon: bigquery.svg resourceRequirements: diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/destination_specs.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/destination_specs.yaml index 8c4fd863f0c8..09c1d851917e 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/destination_specs.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/destination_specs.yaml @@ -750,7 +750,7 @@ supported_destination_sync_modes: - "overwrite" - "append" -- dockerImage: "airbyte/destination-bigquery:1.2.19" +- dockerImage: "airbyte/destination-bigquery:1.2.20" spec: documentationUrl: "https://docs.airbyte.com/integrations/destinations/bigquery" connectionSpecification: @@ -791,20 +791,29 @@ - "asia-southeast2" - "australia-southeast1" - "australia-southeast2" + - "europe-central1" - "europe-central2" - "europe-north1" + - "europe-southwest1" - "europe-west1" - "europe-west2" - "europe-west3" - "europe-west4" - "europe-west6" + - "europe-west7" + - "europe-west8" + - "europe-west9" + - "me-west1" - "northamerica-northeast1" - "northamerica-northeast2" - "southamerica-east1" - "southamerica-west1" - "us-central1" - "us-east1" + - "us-east2" + - "us-east3" - "us-east4" + - "us-east5" - "us-west1" - "us-west2" - "us-west3" @@ -961,7 +970,7 @@ - "overwrite" - "append" - "append_dedup" -- dockerImage: "airbyte/destination-bigquery-denormalized:1.2.19" +- dockerImage: "airbyte/destination-bigquery-denormalized:1.2.20" spec: documentationUrl: "https://docs.airbyte.com/integrations/destinations/bigquery" connectionSpecification: @@ -1121,20 +1130,29 @@ - "asia-southeast2" - "australia-southeast1" - "australia-southeast2" + - "europe-central1" - "europe-central2" - "europe-north1" + - "europe-southwest1" - "europe-west1" - "europe-west2" - "europe-west3" - "europe-west4" - "europe-west6" + - "europe-west7" + - "europe-west8" + - "europe-west9" + - "me-west1" - "northamerica-northeast1" - "northamerica-northeast2" - "southamerica-east1" - "southamerica-west1" - "us-central1" - "us-east1" + - "us-east2" + - "us-east3" - "us-east4" + - "us-east5" - "us-west1" - "us-west2" - "us-west3" diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json index 158d76142951..a3d6bec616c8 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json @@ -694,7 +694,7 @@ "destinationDefinitionId": "22f6c74f-5699-40ff-833c-4a879ea40133", "name": "BigQuery", "dockerRepository": "airbyte/destination-bigquery", - "dockerImageTag": "1.2.19", + "dockerImageTag": "1.2.20", "documentationUrl": "https://docs.airbyte.com/integrations/destinations/bigquery", "icon": "bigquery.svg", "spec": { @@ -717,7 +717,7 @@ "description": "The location of the dataset. Warning: Changes made after creation will not be applied. Read more here.", "title": "Dataset Location", "order": 1, - "enum": [ "US", "EU", "asia-east1", "asia-east2", "asia-northeast1", "asia-northeast2", "asia-northeast3", "asia-south1", "asia-south2", "asia-southeast1", "asia-southeast2", "australia-southeast1", "australia-southeast2", "europe-central2", "europe-north1", "europe-west1", "europe-west2", "europe-west3", "europe-west4", "europe-west6", "northamerica-northeast1", "northamerica-northeast2", "southamerica-east1", "southamerica-west1", "us-central1", "us-east1", "us-east4", "us-west1", "us-west2", "us-west3", "us-west4" ] + "enum": [ "US", "EU", "asia-east1", "asia-east2", "asia-northeast1", "asia-northeast2", "asia-northeast3", "asia-south1", "asia-south2", "asia-southeast1", "asia-southeast2", "australia-southeast1", "australia-southeast2", "europe-central1", "europe-central2", "europe-north1", "europe-southwest1", "europe-west1", "europe-west2", "europe-west3", "europe-west4", "europe-west6", "europe-west7", "europe-west8", "europe-west9", "me-west1", "northamerica-northeast1", "northamerica-northeast2", "southamerica-east1", "southamerica-west1", "us-central1", "us-east1", "us-east2", "us-east3", "us-east4", "us-east5", "us-west1", "us-west2", "us-west3", "us-west4" ] }, "dataset_id": { "type": "string", @@ -862,7 +862,7 @@ "destinationDefinitionId": "079d5540-f236-4294-ba7c-ade8fd918496", "name": "BigQuery (denormalized typed struct)", "dockerRepository": "airbyte/destination-bigquery-denormalized", - "dockerImageTag": "1.2.19", + "dockerImageTag": "1.2.20", "documentationUrl": "https://docs.airbyte.com/integrations/destinations/bigquery", "icon": "bigquery.svg", "spec": { @@ -983,7 +983,7 @@ "title": "Dataset Location", "default": "US", "order": 4, - "enum": [ "US", "EU", "asia-east1", "asia-east2", "asia-northeast1", "asia-northeast2", "asia-northeast3", "asia-south1", "asia-south2", "asia-southeast1", "asia-southeast2", "australia-southeast1", "australia-southeast2", "europe-central2", "europe-north1", "europe-west1", "europe-west2", "europe-west3", "europe-west4", "europe-west6", "northamerica-northeast1", "northamerica-northeast2", "southamerica-east1", "southamerica-west1", "us-central1", "us-east1", "us-east4", "us-west1", "us-west2", "us-west3", "us-west4" ] + "enum": [ "US", "EU", "asia-east1", "asia-east2", "asia-northeast1", "asia-northeast2", "asia-northeast3", "asia-south1", "asia-south2", "asia-southeast1", "asia-southeast2", "australia-southeast1", "australia-southeast2", "europe-central1", "europe-central2", "europe-north1", "europe-southwest1", "europe-west1", "europe-west2", "europe-west3", "europe-west4", "europe-west6", "europe-west7", "europe-west8", "europe-west9", "me-west1", "northamerica-northeast1", "northamerica-northeast2", "southamerica-east1", "southamerica-west1", "us-central1", "us-east1", "us-east2", "us-east3", "us-east4", "us-east5", "us-west1", "us-west2", "us-west3", "us-west4" ] }, "big_query_client_buffer_size_mb": { "title": "Google BigQuery Client Chunk Size", diff --git a/airbyte-integrations/connectors/destination-bigquery-denormalized/Dockerfile b/airbyte-integrations/connectors/destination-bigquery-denormalized/Dockerfile index 07a455fe7993..34d54c560bf1 100644 --- a/airbyte-integrations/connectors/destination-bigquery-denormalized/Dockerfile +++ b/airbyte-integrations/connectors/destination-bigquery-denormalized/Dockerfile @@ -17,5 +17,5 @@ ENV ENABLE_SENTRY true COPY --from=build /airbyte /airbyte -LABEL io.airbyte.version=1.2.19 +LABEL io.airbyte.version=1.2.20 LABEL io.airbyte.name=airbyte/destination-bigquery-denormalized diff --git a/airbyte-integrations/connectors/destination-bigquery-denormalized/src/main/resources/spec.json b/airbyte-integrations/connectors/destination-bigquery-denormalized/src/main/resources/spec.json index 70873ab28cc0..a6374a2f910f 100644 --- a/airbyte-integrations/connectors/destination-bigquery-denormalized/src/main/resources/spec.json +++ b/airbyte-integrations/connectors/destination-bigquery-denormalized/src/main/resources/spec.json @@ -153,20 +153,29 @@ "asia-southeast2", "australia-southeast1", "australia-southeast2", + "europe-central1", "europe-central2", "europe-north1", + "europe-southwest1", "europe-west1", "europe-west2", "europe-west3", "europe-west4", "europe-west6", + "europe-west7", + "europe-west8", + "europe-west9", + "me-west1", "northamerica-northeast1", "northamerica-northeast2", "southamerica-east1", "southamerica-west1", "us-central1", "us-east1", + "us-east2", + "us-east3", "us-east4", + "us-east5", "us-west1", "us-west2", "us-west3", diff --git a/airbyte-integrations/connectors/destination-bigquery/Dockerfile b/airbyte-integrations/connectors/destination-bigquery/Dockerfile index c0e87b02de25..fd282afd570a 100644 --- a/airbyte-integrations/connectors/destination-bigquery/Dockerfile +++ b/airbyte-integrations/connectors/destination-bigquery/Dockerfile @@ -34,5 +34,5 @@ ENV ENABLE_SENTRY true COPY --from=build /airbyte /airbyte -LABEL io.airbyte.version=1.2.19 +LABEL io.airbyte.version=1.2.20 LABEL io.airbyte.name=airbyte/destination-bigquery diff --git a/airbyte-integrations/connectors/destination-bigquery/src/main/resources/spec.json b/airbyte-integrations/connectors/destination-bigquery/src/main/resources/spec.json index 7b8bd1e0af02..86e71db7742e 100644 --- a/airbyte-integrations/connectors/destination-bigquery/src/main/resources/spec.json +++ b/airbyte-integrations/connectors/destination-bigquery/src/main/resources/spec.json @@ -36,20 +36,29 @@ "asia-southeast2", "australia-southeast1", "australia-southeast2", + "europe-central1", "europe-central2", "europe-north1", + "europe-southwest1", "europe-west1", "europe-west2", "europe-west3", "europe-west4", "europe-west6", + "europe-west7", + "europe-west8", + "europe-west9", + "me-west1", "northamerica-northeast1", "northamerica-northeast2", "southamerica-east1", "southamerica-west1", "us-central1", "us-east1", + "us-east2", + "us-east3", "us-east4", + "us-east5", "us-west1", "us-west2", "us-west3", diff --git a/connectors.md b/connectors.md index 38bd821c5fea..ff4fd2c65f2f 100644 --- a/connectors.md +++ b/connectors.md @@ -293,8 +293,8 @@ | **Apache Doris** | Apache Doris icon | Destination | airbyte/destination-doris:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/destinations/doris) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-doris) | `05c161bf-ca73-4d48-b524-d392be417002` | | **Apache Iceberg** | x | Destination | airbyte/destination-iceberg:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/destinations/iceberg) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-iceberg) | `df65a8f3-9908-451b-aa9b-445462803560` | | **Azure Blob Storage** | Azure Blob Storage icon | Destination | airbyte/destination-azure-blob-storage:0.2.0 | alpha | [link](https://docs.airbyte.com/integrations/destinations/azureblobstorage) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-azure-blob-storage) | `b4c5d105-31fd-4817-96b6-cb923bfc04cb` | -| **BigQuery** | BigQuery icon | Destination | airbyte/destination-bigquery:1.2.19 | generally_available | [link](https://docs.airbyte.com/integrations/destinations/bigquery) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-bigquery) | `22f6c74f-5699-40ff-833c-4a879ea40133` | -| **BigQuery (denormalized typed struct)** | BigQuery (denormalized typed struct) icon | Destination | airbyte/destination-bigquery-denormalized:1.2.19 | beta | [link](https://docs.airbyte.com/integrations/destinations/bigquery) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-bigquery-denormalized) | `079d5540-f236-4294-ba7c-ade8fd918496` | +| **BigQuery** | BigQuery icon | Destination | airbyte/destination-bigquery:1.2.20 | generally_available | [link](https://docs.airbyte.com/integrations/destinations/bigquery) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-bigquery) | `22f6c74f-5699-40ff-833c-4a879ea40133` | +| **BigQuery (denormalized typed struct)** | BigQuery (denormalized typed struct) icon | Destination | airbyte/destination-bigquery-denormalized:1.2.20 | beta | [link](https://docs.airbyte.com/integrations/destinations/bigquery) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-bigquery-denormalized) | `079d5540-f236-4294-ba7c-ade8fd918496` | | **Cassandra** | Cassandra icon | Destination | airbyte/destination-cassandra:0.1.4 | alpha | [link](https://docs.airbyte.com/integrations/destinations/cassandra) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-cassandra) | `707456df-6f4f-4ced-b5c6-03f73bcad1c5` | | **Chargify (Keen)** | Chargify (Keen) icon | Destination | airbyte/destination-keen:0.2.4 | alpha | [link](https://docs.airbyte.com/integrations/destinations/keen) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-keen) | `81740ce8-d764-4ea7-94df-16bb41de36ae` | | **Clickhouse** | Clickhouse icon | Destination | airbyte/destination-clickhouse:0.2.3 | alpha | [link](https://docs.airbyte.com/integrations/destinations/clickhouse) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-clickhouse) | `ce0d828e-1dc4-496c-b122-2da42e637e48` | diff --git a/docs/integrations/destinations/bigquery-denormalized.md b/docs/integrations/destinations/bigquery-denormalized.md index 647f8645d578..5a9a95caa3c8 100644 --- a/docs/integrations/destinations/bigquery-denormalized.md +++ b/docs/integrations/destinations/bigquery-denormalized.md @@ -6,69 +6,71 @@ See [destinations/bigquery](https://docs.airbyte.com/integrations/destinations/b ### bigquery-denormalized -| Version | Date | Pull Request | Subject | -|:--------|:-----------|:----------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------| -| 1.2.18 | 2023-03-23 | [#24447](https://github.com/airbytehq/airbyte/pull/24447) | Set the Service Account Key JSON field to always_show: true so that it isn't collapsed into an optional fields section | -| 1.2.17 | 2023-03-17 | [#23788](https://github.com/airbytehq/airbyte/pull/23788) | S3-Parquet: added handler to process null values in arrays | -| 1.2.16 | 2023-03-10 | [\#23931](https://github.com/airbytehq/airbyte/pull/23931)| Added support for periodic buffer flush | -| 1.2.15 | 2023-03-10 | [#23466](https://github.com/airbytehq/airbyte/pull/23466) | Changed S3 Avro type from Int to Long | -| 1.2.14 | 2023-02-08 | [#22497](https://github.com/airbytehq/airbyte/pull/22497) | Fixed table already exists error | -| 1.2.13 | 2023-01-26 | [#20631](https://github.com/airbytehq/airbyte/pull/20631) | Added support for destination checkpointing with staging | -| 1.2.12 | 2023-01-18 | [#21087](https://github.com/airbytehq/airbyte/pull/21087) | Wrap Authentication Errors as Config Exceptions | -| 1.2.11 | 2023-01-18 | [#21144](https://github.com/airbytehq/airbyte/pull/21144) | Added explicit error message if sync fails due to a config issue | -| 1.2.10 | 2023-01-04 | [#20730](https://github.com/airbytehq/airbyte/pull/20730) | An incoming source Number type will create a big query integer rather than a float. | -| 1.2.9 | 2022-12-14 | [#20501](https://github.com/airbytehq/airbyte/pull/20501) | Report GCS staging failures that occur during connection check | -| 1.2.8 | 2022-11-22 | [#19489](https://github.com/airbytehq/airbyte/pull/19489) | Added non-billable projects handle to check connection stage | -| 1.2.7 | 2022-11-11 | [#19358](https://github.com/airbytehq/airbyte/pull/19358) | Fixed check method to capture mismatch dataset location | -| 1.2.6 | 2022-11-10 | [#18554](https://github.com/airbytehq/airbyte/pull/18554) | Improve check connection method to handle more errors | -| 1.2.5 | 2022-10-19 | [#18162](https://github.com/airbytehq/airbyte/pull/18162) | Improve error logs | -| 1.2.4 | 2022-09-26 | [#16890](https://github.com/airbytehq/airbyte/pull/16890) | Add user-agent header | -| 1.2.3 | 2022-09-22 | [#17054](https://github.com/airbytehq/airbyte/pull/17054) | Respect stream namespace | -| 1.2.2 | 2022-09-14 | [15668](https://github.com/airbytehq/airbyte/pull/15668) | (bugged, do not use) Wrap logs in AirbyteLogMessage | -| 1.2.1 | 2022-09-10 | [16401](https://github.com/airbytehq/airbyte/pull/16401) | (bugged, do not use) Wrapping string objects with TextNode | -| 1.2.0 | 2022-09-09 | [#14023](https://github.com/airbytehq/airbyte/pull/14023) | (bugged, do not use) Cover arrays only if they are nested | -| 1.1.16 | 2022-09-01 | [#16243](https://github.com/airbytehq/airbyte/pull/16243) | Fix Json to Avro conversion when there is field name clash from combined restrictions (`anyOf`, `oneOf`, `allOf` fields) | -| 1.1.15 | 2022-08-03 | [14784](https://github.com/airbytehq/airbyte/pull/14784) | Enabling Application Default Credentials | -| 1.1.14 | 2022-08-02 | [14801](https://github.com/airbytehq/airbyte/pull/14801) | Fix multiple log bindings | -| 1.1.13 | 2022-08-02 | [15180](https://github.com/airbytehq/airbyte/pull/15180) | Fix standard loading mode | -| 1.1.12 | 2022-06-29 | [14079](https://github.com/airbytehq/airbyte/pull/14079) | Map "airbyte_type": "big_integer" to INT64 | -| 1.1.11 | 2022-06-24 | [14114](https://github.com/airbytehq/airbyte/pull/14114) | Remove "additionalProperties": false from specs for connectors with staging | -| 1.1.10 | 2022-06-16 | [13852](https://github.com/airbytehq/airbyte/pull/13852) | Updated stacktrace format for any trace message errors | -| 1.1.9 | 2022-06-17 | [13753](https://github.com/airbytehq/airbyte/pull/13753) | Deprecate and remove PART_SIZE_MB fields from connectors based on StreamTransferManager | -| 1.1.8 | 2022-06-07 | [13579](https://github.com/airbytehq/airbyte/pull/13579) | Always check GCS bucket for GCS loading method to catch invalid HMAC keys. | -| 1.1.7 | 2022-06-07 | [13424](https://github.com/airbytehq/airbyte/pull/13424) | Reordered fields for specification. | -| 1.1.6 | 2022-05-15 | [12768](https://github.com/airbytehq/airbyte/pull/12768) | Clarify that the service account key json field is required on cloud. | -| 0.3.5 | 2022-05-12 | [12805](https://github.com/airbytehq/airbyte/pull/12805) | Updated to latest base-java to emit AirbyteTraceMessage on error. | -| 0.3.4 | 2022-05-04 | [12578](https://github.com/airbytehq/airbyte/pull/12578) | In JSON to Avro conversion, log JSON field values that do not follow Avro schema for debugging. | -| 0.3.3 | 2022-05-02 | [12528](https://github.com/airbytehq/airbyte/pull/12528) | Update Dataset location field description | -| 0.3.2 | 2022-04-29 | [12477](https://github.com/airbytehq/airbyte/pull/12477) | Dataset location is a required field | -| 0.3.1 | 2022-04-15 | [11978](https://github.com/airbytehq/airbyte/pull/11978) | Fixed emittedAt timestamp. | -| 0.3.0 | 2022-04-06 | [11776](https://github.com/airbytehq/airbyte/pull/11776) | Use serialized buffering strategy to reduce memory consumption. | -| 0.2.15 | 2022-04-05 | [11166](https://github.com/airbytehq/airbyte/pull/11166) | Fixed handling of anyOf and allOf fields | -| 0.2.14 | 2022-04-02 | [11620](https://github.com/airbytehq/airbyte/pull/11620) | Updated spec | -| 0.2.13 | 2022-04-01 | [11636](https://github.com/airbytehq/airbyte/pull/11636) | Added new unit tests | -| 0.2.12 | 2022-03-28 | [11454](https://github.com/airbytehq/airbyte/pull/11454) | Integration test enhancement for picking test-data and schemas | -| 0.2.11 | 2022-03-18 | [10793](https://github.com/airbytehq/airbyte/pull/10793) | Fix namespace with invalid characters | -| 0.2.10 | 2022-03-03 | [10755](https://github.com/airbytehq/airbyte/pull/10755) | Make sure to kill children threads and stop JVM | -| 0.2.8 | 2022-02-14 | [10256](https://github.com/airbytehq/airbyte/pull/10256) | Add `-XX:+ExitOnOutOfMemoryError` JVM option | -| 0.2.7 | 2022-02-01 | [9959](https://github.com/airbytehq/airbyte/pull/9959) | Fix null pointer exception from buffered stream consumer. | -| 0.2.6 | 2022-01-29 | [9745](https://github.com/airbytehq/airbyte/pull/9745) | Integrate with Sentry. | -| 0.2.5 | 2022-01-18 | [9573](https://github.com/airbytehq/airbyte/pull/9573) | BigQuery Destination : update description for some input fields | -| 0.2.4 | 2022-01-17 | [8383](https://github.com/airbytehq/airbyte/issues/8383) | BigQuery/BiqQuery denorm Destinations : Support dataset-id prefixed by project-id | -| 0.2.3 | 2022-01-12 | [9415](https://github.com/airbytehq/airbyte/pull/9415) | BigQuery Destination : Fix GCS processing of Facebook data | -| 0.2.2 | 2021-12-22 | [9039](https://github.com/airbytehq/airbyte/pull/9039) | Added part_size configuration to UI for GCS staging | -| 0.2.1 | 2021-12-21 | [8574](https://github.com/airbytehq/airbyte/pull/8574) | Added namespace to Avro and Parquet record types | -| 0.2.0 | 2021-12-17 | [8788](https://github.com/airbytehq/airbyte/pull/8788) | BigQuery/BiqQuery denorm Destinations : Add possibility to use different types of GCS files | -| 0.1.11 | 2021-12-16 | [8816](https://github.com/airbytehq/airbyte/issues/8816) | Update dataset locations | -| 0.1.10 | 2021-11-09 | [7804](https://github.com/airbytehq/airbyte/pull/7804) | handle null values in fields described by a $ref definition | -| 0.1.9 | 2021-11-08 | [7736](https://github.com/airbytehq/airbyte/issues/7736) | Fixed the handling of ObjectNodes with $ref definition key | -| 0.1.8 | 2021-10-27 | [7413](https://github.com/airbytehq/airbyte/issues/7413) | Fixed DATETIME conversion for BigQuery | -| 0.1.7 | 2021-10-26 | [7240](https://github.com/airbytehq/airbyte/issues/7240) | Output partitioned/clustered tables | -| 0.1.6 | 2021-09-16 | [6145](https://github.com/airbytehq/airbyte/pull/6145) | BigQuery Denormalized support for date, datetime & timestamp types through the json "format" key | -| 0.1.5 | 2021-09-07 | [5881](https://github.com/airbytehq/airbyte/pull/5881) | BigQuery Denormalized NPE fix | -| 0.1.4 | 2021-09-04 | [5813](https://github.com/airbytehq/airbyte/pull/5813) | fix Stackoverflow error when receive a schema from source where "Array" type doesn't contain a required "items" element | -| 0.1.3 | 2021-08-07 | [5261](https://github.com/airbytehq/airbyte/pull/5261) | 🐛 Destination BigQuery\(Denormalized\): Fix processing arrays of records | -| 0.1.2 | 2021-07-30 | [5125](https://github.com/airbytehq/airbyte/pull/5125) | Enable `additionalPropertities` in spec.json | -| 0.1.1 | 2021-06-21 | [3555](https://github.com/airbytehq/airbyte/pull/3555) | Partial Success in BufferedStreamConsumer | -| 0.1.0 | 2021-06-21 | [4176](https://github.com/airbytehq/airbyte/pull/4176) | Destination using Typed Struct and Repeated fields | - +| Version | Date | Pull Request | Subject | +| :------ | :--------- | :--------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------- | +| 1.2.20 | 2023-04-12 | [25122](https://github.com/airbytehq/airbyte/pull/25122) | Add additional data | +| centers | +| 1.2.19 | 2023-03-29 | [#24671](https://github.com/airbytehq/airbyte/pull/24671) | Fail faster in certain error cases | +| 1.2.18 | 2023-03-23 | [#24447](https://github.com/airbytehq/airbyte/pull/24447) | Set the Service Account Key JSON field to always_show: true so that it isn't collapsed into an optional fields section | +| 1.2.17 | 2023-03-17 | [#23788](https://github.com/airbytehq/airbyte/pull/23788) | S3-Parquet: added handler to process null values in arrays | +| 1.2.16 | 2023-03-10 | [\#23931](https://github.com/airbytehq/airbyte/pull/23931) | Added support for periodic buffer flush | +| 1.2.15 | 2023-03-10 | [#23466](https://github.com/airbytehq/airbyte/pull/23466) | Changed S3 Avro type from Int to Long | +| 1.2.14 | 2023-02-08 | [#22497](https://github.com/airbytehq/airbyte/pull/22497) | Fixed table already exists error | +| 1.2.13 | 2023-01-26 | [#20631](https://github.com/airbytehq/airbyte/pull/20631) | Added support for destination checkpointing with staging | +| 1.2.12 | 2023-01-18 | [#21087](https://github.com/airbytehq/airbyte/pull/21087) | Wrap Authentication Errors as Config Exceptions | +| 1.2.11 | 2023-01-18 | [#21144](https://github.com/airbytehq/airbyte/pull/21144) | Added explicit error message if sync fails due to a config issue | +| 1.2.10 | 2023-01-04 | [#20730](https://github.com/airbytehq/airbyte/pull/20730) | An incoming source Number type will create a big query integer rather than a float. | +| 1.2.9 | 2022-12-14 | [#20501](https://github.com/airbytehq/airbyte/pull/20501) | Report GCS staging failures that occur during connection check | +| 1.2.8 | 2022-11-22 | [#19489](https://github.com/airbytehq/airbyte/pull/19489) | Added non-billable projects handle to check connection stage | +| 1.2.7 | 2022-11-11 | [#19358](https://github.com/airbytehq/airbyte/pull/19358) | Fixed check method to capture mismatch dataset location | +| 1.2.6 | 2022-11-10 | [#18554](https://github.com/airbytehq/airbyte/pull/18554) | Improve check connection method to handle more errors | +| 1.2.5 | 2022-10-19 | [#18162](https://github.com/airbytehq/airbyte/pull/18162) | Improve error logs | +| 1.2.4 | 2022-09-26 | [#16890](https://github.com/airbytehq/airbyte/pull/16890) | Add user-agent header | +| 1.2.3 | 2022-09-22 | [#17054](https://github.com/airbytehq/airbyte/pull/17054) | Respect stream namespace | +| 1.2.2 | 2022-09-14 | [15668](https://github.com/airbytehq/airbyte/pull/15668) | (bugged, do not use) Wrap logs in AirbyteLogMessage | +| 1.2.1 | 2022-09-10 | [16401](https://github.com/airbytehq/airbyte/pull/16401) | (bugged, do not use) Wrapping string objects with TextNode | +| 1.2.0 | 2022-09-09 | [#14023](https://github.com/airbytehq/airbyte/pull/14023) | (bugged, do not use) Cover arrays only if they are nested | +| 1.1.16 | 2022-09-01 | [#16243](https://github.com/airbytehq/airbyte/pull/16243) | Fix Json to Avro conversion when there is field name clash from combined restrictions (`anyOf`, `oneOf`, `allOf` fields) | +| 1.1.15 | 2022-08-03 | [14784](https://github.com/airbytehq/airbyte/pull/14784) | Enabling Application Default Credentials | +| 1.1.14 | 2022-08-02 | [14801](https://github.com/airbytehq/airbyte/pull/14801) | Fix multiple log bindings | +| 1.1.13 | 2022-08-02 | [15180](https://github.com/airbytehq/airbyte/pull/15180) | Fix standard loading mode | +| 1.1.12 | 2022-06-29 | [14079](https://github.com/airbytehq/airbyte/pull/14079) | Map "airbyte_type": "big_integer" to INT64 | +| 1.1.11 | 2022-06-24 | [14114](https://github.com/airbytehq/airbyte/pull/14114) | Remove "additionalProperties": false from specs for connectors with staging | +| 1.1.10 | 2022-06-16 | [13852](https://github.com/airbytehq/airbyte/pull/13852) | Updated stacktrace format for any trace message errors | +| 1.1.9 | 2022-06-17 | [13753](https://github.com/airbytehq/airbyte/pull/13753) | Deprecate and remove PART_SIZE_MB fields from connectors based on StreamTransferManager | +| 1.1.8 | 2022-06-07 | [13579](https://github.com/airbytehq/airbyte/pull/13579) | Always check GCS bucket for GCS loading method to catch invalid HMAC keys. | +| 1.1.7 | 2022-06-07 | [13424](https://github.com/airbytehq/airbyte/pull/13424) | Reordered fields for specification. | +| 1.1.6 | 2022-05-15 | [12768](https://github.com/airbytehq/airbyte/pull/12768) | Clarify that the service account key json field is required on cloud. | +| 0.3.5 | 2022-05-12 | [12805](https://github.com/airbytehq/airbyte/pull/12805) | Updated to latest base-java to emit AirbyteTraceMessage on error. | +| 0.3.4 | 2022-05-04 | [12578](https://github.com/airbytehq/airbyte/pull/12578) | In JSON to Avro conversion, log JSON field values that do not follow Avro schema for debugging. | +| 0.3.3 | 2022-05-02 | [12528](https://github.com/airbytehq/airbyte/pull/12528) | Update Dataset location field description | +| 0.3.2 | 2022-04-29 | [12477](https://github.com/airbytehq/airbyte/pull/12477) | Dataset location is a required field | +| 0.3.1 | 2022-04-15 | [11978](https://github.com/airbytehq/airbyte/pull/11978) | Fixed emittedAt timestamp. | +| 0.3.0 | 2022-04-06 | [11776](https://github.com/airbytehq/airbyte/pull/11776) | Use serialized buffering strategy to reduce memory consumption. | +| 0.2.15 | 2022-04-05 | [11166](https://github.com/airbytehq/airbyte/pull/11166) | Fixed handling of anyOf and allOf fields | +| 0.2.14 | 2022-04-02 | [11620](https://github.com/airbytehq/airbyte/pull/11620) | Updated spec | +| 0.2.13 | 2022-04-01 | [11636](https://github.com/airbytehq/airbyte/pull/11636) | Added new unit tests | +| 0.2.12 | 2022-03-28 | [11454](https://github.com/airbytehq/airbyte/pull/11454) | Integration test enhancement for picking test-data and schemas | +| 0.2.11 | 2022-03-18 | [10793](https://github.com/airbytehq/airbyte/pull/10793) | Fix namespace with invalid characters | +| 0.2.10 | 2022-03-03 | [10755](https://github.com/airbytehq/airbyte/pull/10755) | Make sure to kill children threads and stop JVM | +| 0.2.8 | 2022-02-14 | [10256](https://github.com/airbytehq/airbyte/pull/10256) | Add `-XX:+ExitOnOutOfMemoryError` JVM option | +| 0.2.7 | 2022-02-01 | [9959](https://github.com/airbytehq/airbyte/pull/9959) | Fix null pointer exception from buffered stream consumer. | +| 0.2.6 | 2022-01-29 | [9745](https://github.com/airbytehq/airbyte/pull/9745) | Integrate with Sentry. | +| 0.2.5 | 2022-01-18 | [9573](https://github.com/airbytehq/airbyte/pull/9573) | BigQuery Destination : update description for some input fields | +| 0.2.4 | 2022-01-17 | [8383](https://github.com/airbytehq/airbyte/issues/8383) | BigQuery/BiqQuery denorm Destinations : Support dataset-id prefixed by project-id | +| 0.2.3 | 2022-01-12 | [9415](https://github.com/airbytehq/airbyte/pull/9415) | BigQuery Destination : Fix GCS processing of Facebook data | +| 0.2.2 | 2021-12-22 | [9039](https://github.com/airbytehq/airbyte/pull/9039) | Added part_size configuration to UI for GCS staging | +| 0.2.1 | 2021-12-21 | [8574](https://github.com/airbytehq/airbyte/pull/8574) | Added namespace to Avro and Parquet record types | +| 0.2.0 | 2021-12-17 | [8788](https://github.com/airbytehq/airbyte/pull/8788) | BigQuery/BiqQuery denorm Destinations : Add possibility to use different types of GCS files | +| 0.1.11 | 2021-12-16 | [8816](https://github.com/airbytehq/airbyte/issues/8816) | Update dataset locations | +| 0.1.10 | 2021-11-09 | [7804](https://github.com/airbytehq/airbyte/pull/7804) | handle null values in fields described by a $ref definition | +| 0.1.9 | 2021-11-08 | [7736](https://github.com/airbytehq/airbyte/issues/7736) | Fixed the handling of ObjectNodes with $ref definition key | +| 0.1.8 | 2021-10-27 | [7413](https://github.com/airbytehq/airbyte/issues/7413) | Fixed DATETIME conversion for BigQuery | +| 0.1.7 | 2021-10-26 | [7240](https://github.com/airbytehq/airbyte/issues/7240) | Output partitioned/clustered tables | +| 0.1.6 | 2021-09-16 | [6145](https://github.com/airbytehq/airbyte/pull/6145) | BigQuery Denormalized support for date, datetime & timestamp types through the json "format" key | +| 0.1.5 | 2021-09-07 | [5881](https://github.com/airbytehq/airbyte/pull/5881) | BigQuery Denormalized NPE fix | +| 0.1.4 | 2021-09-04 | [5813](https://github.com/airbytehq/airbyte/pull/5813) | fix Stackoverflow error when receive a schema from source where "Array" type doesn't contain a required "items" element | +| 0.1.3 | 2021-08-07 | [5261](https://github.com/airbytehq/airbyte/pull/5261) | 🐛 Destination BigQuery\(Denormalized\): Fix processing arrays of records | +| 0.1.2 | 2021-07-30 | [5125](https://github.com/airbytehq/airbyte/pull/5125) | Enable `additionalPropertities` in spec.json | +| 0.1.1 | 2021-06-21 | [3555](https://github.com/airbytehq/airbyte/pull/3555) | Partial Success in BufferedStreamConsumer | +| 0.1.0 | 2021-06-21 | [4176](https://github.com/airbytehq/airbyte/pull/4176) | Destination using Typed Struct and Repeated fields | diff --git a/docs/integrations/destinations/bigquery.md b/docs/integrations/destinations/bigquery.md index 1a896d65df2f..5c3a8a585b97 100644 --- a/docs/integrations/destinations/bigquery.md +++ b/docs/integrations/destinations/bigquery.md @@ -10,7 +10,7 @@ This page guides you through setting up the BigQuery destination connector. - [A Google Cloud project with BigQuery enabled](https://cloud.google.com/bigquery/docs/quickstarts/query-public-dataset-console) - [A BigQuery dataset](https://cloud.google.com/bigquery/docs/quickstarts/quickstart-web-ui#create_a_dataset) to sync data to. - **Note:** Queries written in BigQuery can only reference datasets in the same physical location. If you plan on combining the data that Airbyte syncs with data from other datasets in your queries, create the datasets in the same location on Google Cloud. For more information, read [Introduction to Datasets](https://cloud.google.com/bigquery/docs/datasets-intro) + **Note:** Queries written in BigQuery can only reference datasets in the same physical location. If you plan on combining the data that Airbyte syncs with data from other datasets in your queries, create the datasets in the same location on Google Cloud. For more information, read [Introduction to Datasets](https://cloud.google.com/bigquery/docs/datasets-intro) - (Required for Airbyte Cloud; Optional for Airbyte Open Source) A Google Cloud [Service Account](https://cloud.google.com/iam/docs/service-accounts) with the [`BigQuery User`](https://cloud.google.com/bigquery/docs/access-control#bigquery) and [`BigQuery Data Editor`](https://cloud.google.com/bigquery/docs/access-control#bigquery) roles and the [Service Account Key in JSON format](https://cloud.google.com/iam/docs/creating-managing-service-account-keys). @@ -50,14 +50,14 @@ You can use BigQuery's [`INSERT`](https://cloud.google.com/bigquery/docs/referen 4. Enter the name for the BigQuery connector. 5. For **Project ID**, enter your [Google Cloud project ID](https://cloud.google.com/resource-manager/docs/creating-managing-projects#identifying_projects). 6. For **Dataset Location**, select the location of your BigQuery dataset. - :::warning - You cannot change the location later. - ::: + :::warning + You cannot change the location later. + ::: 7. For **Default Dataset ID**, enter the BigQuery [Dataset ID](https://cloud.google.com/bigquery/docs/datasets#create-dataset). 8. For **Loading Method**, select [Standard Inserts](#using-insert) or [GCS Staging](#recommended-using-a-google-cloud-storage-bucket). - :::tip - We recommend using the GCS Staging option. - ::: + :::tip + We recommend using the GCS Staging option. + ::: 9. For **Service Account Key JSON (Required for cloud, optional for open-source)**, enter the Google Cloud [Service Account Key in JSON format](https://cloud.google.com/iam/docs/creating-managing-service-account-keys). 10. For **Transformation Query Run Type (Optional)**, select **interactive** to have [BigQuery run interactive query jobs](https://cloud.google.com/bigquery/docs/running-queries#queries) or **batch** to have [BigQuery run batch queries](https://cloud.google.com/bigquery/docs/running-queries#batch). @@ -79,9 +79,9 @@ The BigQuery destination connector supports the following [sync modes](https://d Airbyte outputs each stream into its own table in BigQuery. Each table contains three columns: -* `_airbyte_ab_id`: A UUID assigned by Airbyte to each event that is processed. The column type in BigQuery is `String`. -* `_airbyte_emitted_at`: A timestamp representing when the event was pulled from the data source. The column type in BigQuery is `Timestamp`. -* `_airbyte_data`: A JSON blob representing the event data. The column type in BigQuery is `String`. +- `_airbyte_ab_id`: A UUID assigned by Airbyte to each event that is processed. The column type in BigQuery is `String`. +- `_airbyte_emitted_at`: A timestamp representing when the event was pulled from the data source. The column type in BigQuery is `Timestamp`. +- `_airbyte_data`: A JSON blob representing the event data. The column type in BigQuery is `String`. The output tables in BigQuery are partitioned and clustered by the Time-unit column `_airbyte_emitted_at` at a daily granularity. Partitions boundaries are based on UTC time. This is useful to limit the number of partitions scanned when querying these partitioned tables, by using a predicate filter (a `WHERE` clause). Filters on the partitioning column are used to prune the partitions and reduce the query cost. (The parameter **Require partition filter** is not enabled by Airbyte, but you may toggle it by updating the produced tables.) @@ -95,7 +95,7 @@ Airbyte converts any invalid characters into `_` characters when writing data. H ## Data type map | Airbyte type | BigQuery type | BigQuery denormalized type | -|:------------------------------------|:--------------|:---------------------------| +| :---------------------------------- | :------------ | :------------------------- | | DATE | DATE | DATE | | STRING (BASE64) | STRING | STRING | | NUMBER | FLOAT | NUMBER | @@ -129,13 +129,13 @@ Now that you have set up the BigQuery destination connector, check out the follo - [Replicate Salesforce data to BigQuery](https://airbyte.com/tutorials/replicate-salesforce-data-to-bigquery) - [Partition and cluster BigQuery tables with Airbyte and dbt](https://airbyte.com/tutorials/bigquery-partition-cluster) - ## Changelog ### bigquery | Version | Date | Pull Request | Subject | -|:--------|:-----------|:-----------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------| +| :------ | :--------- | :--------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------- | +| 1.2.20 | 2023-04-12 | [25122](https://github.com/airbytehq/airbyte/pull/25122) | Add additional data centers | | 1.2.19 | 2023-03-29 | [#24671](https://github.com/airbytehq/airbyte/pull/24671) | Fail faster in certain error cases | | 1.2.18 | 2023-03-23 | [#24447](https://github.com/airbytehq/airbyte/pull/24447) | Set the Service Account Key JSON field to always_show: true so that it isn't collapsed into an optional fields section | | 1.2.17 | 2023-03-17 | [#23788](https://github.com/airbytehq/airbyte/pull/23788) | S3-Parquet: added handler to process null values in arrays | diff --git a/tools/integrations/manage.sh b/tools/integrations/manage.sh index 9ca7bdbceb1e..f3ff439b2127 100755 --- a/tools/integrations/manage.sh +++ b/tools/integrations/manage.sh @@ -314,6 +314,14 @@ cmd_publish() { docker buildx build -t airbyte/integration-base:dev --platform $arch --load airbyte-integrations/bases/base docker buildx build -t airbyte/integration-base-java:dev --platform $arch --load airbyte-integrations/bases/base-java + # For a short while (https://github.com/airbytehq/airbyte/pull/25034), destinations rely on the normalization image to build + # Thanks to gradle, destinstaions which need normalization will already have built base-normalization's "build" artifacts + if [[ "$image_name" == *"destination-"* ]]; then + if [ -f "airbyte-integrations/bases/base-normalization/build/sshtunneling.sh" ]; then + docker buildx build -t airbyte/normalization:dev --platform $arch --load airbyte-integrations/bases/base-normalization + fi + fi + local arch_versioned_image=$image_name:`echo $arch | sed "s/\//-/g"`-$image_version echo "Publishing new version ($arch_versioned_image) from $path" docker buildx build -t $arch_versioned_image --platform $arch --push $path From c4e3c2f3688962bffdc992e665399e5f0638b7d0 Mon Sep 17 00:00:00 2001 From: Alexandre Girard Date: Thu, 13 Apr 2023 08:18:42 -0700 Subject: [PATCH 047/187] Bump versions in atelier dockerfile (#25125) * Bump versions in atelier dockerfile * fix new version * temporarily skip build and publish * reset * skip some steps * Revert "skip some steps" This reverts commit e034d10e15b403e4e4fcc91c4116f944a600775f. --- .github/workflows/publish-cdk-command-manually.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/publish-cdk-command-manually.yml b/.github/workflows/publish-cdk-command-manually.yml index 27c5ac540dcf..18343a2d6388 100644 --- a/.github/workflows/publish-cdk-command-manually.yml +++ b/.github/workflows/publish-cdk-command-manually.yml @@ -292,6 +292,8 @@ jobs: token: ${{ secrets.GH_PAT_MAINTENANCE_OCTAVIA }} - name: Update CDK version run: | + PREVIOUS_VERSION=$(cat oss/airbyte-connector-builder-resources/CDK_VERSION) + sed -i "s/${PREVIOUS_VERSION}/${{needs.bump-version.outputs.new_cdk_version}}/g" oss/airbyte-connector-atelier-server/Dockerfile echo ${{needs.bump-version.outputs.new_cdk_version}} > oss/airbyte-connector-builder-resources/CDK_VERSION cd oss/airbyte-connector-builder-server pip install pip-tools From d21d13163be054481633f11a20c6ef2b89341f44 Mon Sep 17 00:00:00 2001 From: Serhii Lazebnyi <53845333+lazebnyi@users.noreply.github.com> Date: Thu, 13 Apr 2023 19:06:29 +0200 Subject: [PATCH 048/187] Source: Amazon Ads - Add pk validator for reports when expected pk is not returned (#25146) * Add pk validator for reports when expected pk is not returned * Update PR number * Fix formating * auto-bump connector version --------- Co-authored-by: Octavia Squidington III --- .../src/main/resources/seed/oss_catalog.json | 2 +- .../resources/seed/source_definitions.yaml | 2 +- .../src/main/resources/seed/source_specs.yaml | 2 +- .../connectors/source-amazon-ads/Dockerfile | 2 +- .../streams/report_streams/report_streams.py | 3 ++- .../unit_tests/test_report_streams.py | 26 +++++++++++++++++++ connectors.md | 2 +- docs/integrations/sources/amazon-ads.md | 1 + 8 files changed, 34 insertions(+), 6 deletions(-) diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json index a3d6bec616c8..d6efadb33fa9 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json @@ -8481,7 +8481,7 @@ "sourceDefinitionId": "c6b0a29e-1da9-4512-9002-7bfd0cba2246", "name": "Amazon Ads", "dockerRepository": "airbyte/source-amazon-ads", - "dockerImageTag": "1.0.2", + "dockerImageTag": "1.0.3", "documentationUrl": "https://docs.airbyte.com/integrations/sources/amazon-ads", "icon": "amazonads.svg", "sourceType": "api", diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml index 31cce062ebc7..bba86fcaf3f5 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml @@ -65,7 +65,7 @@ - name: Amazon Ads sourceDefinitionId: c6b0a29e-1da9-4512-9002-7bfd0cba2246 dockerRepository: airbyte/source-amazon-ads - dockerImageTag: 1.0.2 + dockerImageTag: 1.0.3 documentationUrl: https://docs.airbyte.com/integrations/sources/amazon-ads icon: amazonads.svg sourceType: api diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml index ba13cf61a725..54d688092716 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml @@ -822,7 +822,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-amazon-ads:1.0.2" +- dockerImage: "airbyte/source-amazon-ads:1.0.3" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/amazon-ads" connectionSpecification: diff --git a/airbyte-integrations/connectors/source-amazon-ads/Dockerfile b/airbyte-integrations/connectors/source-amazon-ads/Dockerfile index d989493b2056..c46a26c59a1a 100644 --- a/airbyte-integrations/connectors/source-amazon-ads/Dockerfile +++ b/airbyte-integrations/connectors/source-amazon-ads/Dockerfile @@ -14,5 +14,5 @@ ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=1.0.2 +LABEL io.airbyte.version=1.0.3 LABEL io.airbyte.name=airbyte/source-amazon-ads diff --git a/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/streams/report_streams/report_streams.py b/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/streams/report_streams/report_streams.py index 324595719677..d1653ba7df0c 100644 --- a/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/streams/report_streams/report_streams.py +++ b/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/streams/report_streams/report_streams.py @@ -4,6 +4,7 @@ import json import re +import uuid from abc import ABC, abstractmethod from copy import deepcopy from dataclasses import dataclass @@ -165,7 +166,7 @@ def read_records( profileId=report_info.profile_id, recordType=report_info.record_type, reportDate=report_date, - recordId=metric_object[self.metrics_type_to_id_map[report_info.record_type]], + recordId=metric_object.get(self.metrics_type_to_id_map[report_info.record_type], str(uuid.uuid4())), metric=metric_object, ).dict() diff --git a/airbyte-integrations/connectors/source-amazon-ads/unit_tests/test_report_streams.py b/airbyte-integrations/connectors/source-amazon-ads/unit_tests/test_report_streams.py index be13de943fbd..6c49fcacddd3 100644 --- a/airbyte-integrations/connectors/source-amazon-ads/unit_tests/test_report_streams.py +++ b/airbyte-integrations/connectors/source-amazon-ads/unit_tests/test_report_streams.py @@ -103,6 +103,15 @@ ) METRICS_COUNT = 5 +METRIC_RESPONSE_WITHOUT_ASIN_PK = b64decode( + """ + H4sIAAAAAAAAClXMvQrCMBQF4L1PETIbyM1v4+giLr6AOAQTStH+ECsi4r + t7aZOKwx3u+TjnVBHyxiOEXnw3+rbpD4FuSe205IYrvvnHo+8iMr3jf4us + xKzHnK0lmls+7NPwGOdFapTjINXPcmy0FByELjD51MRpQesAUSooeI2v55 + DCrp1ZAwipnF1HMy9lZ7StJRdAET/V+Qv1VRgd7AAAAA== +""" +) + def setup_responses(init_response=None, init_response_products=None, init_response_brands=None, status_response=None, metric_response=None): if init_response: @@ -206,6 +215,23 @@ def test_products_report_stream(config): assert len(metrics) == METRICS_COUNT * len(stream.metrics_map) +@responses.activate +def test_products_report_stream_without_pk(config): + setup_responses( + init_response_products=REPORT_INIT_RESPONSE, + status_response=REPORT_STATUS_RESPONSE, + metric_response=METRIC_RESPONSE_WITHOUT_ASIN_PK, + ) + + profiles = make_profiles(profile_type="vendor") + + stream = SponsoredProductsReportStream(config, profiles, authenticator=mock.MagicMock()) + stream_slice = {"profile": profiles[0], "reportDate": "2021-07-25", "retry_count": 3} + metrics = [m for m in stream.read_records(SyncMode.incremental, stream_slice=stream_slice)] + + assert len(metrics) == len(stream.metrics_map) + + @responses.activate def test_brands_report_stream(config): setup_responses( diff --git a/connectors.md b/connectors.md index ff4fd2c65f2f..c7a0be32c650 100644 --- a/connectors.md +++ b/connectors.md @@ -11,7 +11,7 @@ | **Airtable** | Airtable icon | Source | airbyte/source-airtable:3.0.0 | generally_available | [link](https://docs.airbyte.com/integrations/sources/airtable) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-airtable) | `14c6e7ea-97ed-4f5e-a7b5-25e9a80b8212` | | **AlloyDB for PostgreSQL** | AlloyDB for PostgreSQL icon | Source | airbyte/source-alloydb:2.0.19 | generally_available | [link](https://docs.airbyte.com/integrations/sources/alloydb) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-alloydb) | `1fa90628-2b9e-11ed-a261-0242ac120002` | | **Alpha Vantage** | Alpha Vantage icon | Source | airbyte/source-alpha-vantage:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/alpha-vantage) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-alpha-vantage) | `db385323-9333-4fec-bec3-9e0ca9326c90` | -| **Amazon Ads** | Amazon Ads icon | Source | airbyte/source-amazon-ads:1.0.2 | generally_available | [link](https://docs.airbyte.com/integrations/sources/amazon-ads) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-amazon-ads) | `c6b0a29e-1da9-4512-9002-7bfd0cba2246` | +| **Amazon Ads** | Amazon Ads icon | Source | airbyte/source-amazon-ads:1.0.3 | generally_available | [link](https://docs.airbyte.com/integrations/sources/amazon-ads) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-amazon-ads) | `c6b0a29e-1da9-4512-9002-7bfd0cba2246` | | **Amazon SQS** | Amazon SQS icon | Source | airbyte/source-amazon-sqs:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/amazon-sqs) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-amazon-sqs) | `983fd355-6bf3-4709-91b5-37afa391eeb6` | | **Amazon Seller Partner** | Amazon Seller Partner icon | Source | airbyte/source-amazon-seller-partner:1.0.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/amazon-seller-partner) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-amazon-seller-partner) | `e55879a8-0ef8-4557-abcf-ab34c53ec460` | | **Amplitude** | Amplitude icon | Source | airbyte/source-amplitude:0.2.0 | generally_available | [link](https://docs.airbyte.com/integrations/sources/amplitude) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-amplitude) | `fa9f58c6-2d03-4237-aaa4-07d75e0c1396` | diff --git a/docs/integrations/sources/amazon-ads.md b/docs/integrations/sources/amazon-ads.md index 048db1f8985f..53271ade13b6 100644 --- a/docs/integrations/sources/amazon-ads.md +++ b/docs/integrations/sources/amazon-ads.md @@ -94,6 +94,7 @@ Information about expected report generation waiting time you may find [here](ht | Version | Date | Pull Request | Subject | |:--------|:-----------|:---------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------| +| 1.0.3 | 2023-04-13 | [25146](https://github.com/airbytehq/airbyte/pull/25146) | Validate pk for reports when expected pk is not returned | | 1.0.2 | 2023-02-03 | [22355](https://github.com/airbytehq/airbyte/pull/22355) | Migrate `products_report` stream to API v3 | | 1.0.1 | 2022-11-01 | [18677](https://github.com/airbytehq/airbyte/pull/18677) | Add optional config report_record_types | | 1.0.0 | 2023-01-30 | [21677](https://github.com/airbytehq/airbyte/pull/21677) | Fix bug with non-unique primary keys in report streams. Add asins_keywords and asins_targets | From c222af616f68798ddb02378a51221476ee51dcfa Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Thu, 13 Apr 2023 23:09:51 +0530 Subject: [PATCH 049/187] =?UTF-8?q?=F0=9F=8E=89Source=20Twilio:=20New=20St?= =?UTF-8?q?ream=20Conversation=20Participants=20(#23995)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Source Twilio: New Stream Conversation Participants * fix: format schema and fix to incremental stream * refactor: Add newline * fix: remove unwanted file * fix: schema fixes * fix: Avoid acceptance test bypass for full testing * fix: Fixed incremental behaviour, Updated docs, Updated VersionTag * fix: Fixed incremental behaviour, Updated docs, Updated VersionTag * fix: Fixed syntax, Updated docs * fix: schema, update docs * fix: Changed parent stream, expected record fixes, connector version bump * chore: EOL fix * fix expected records for conversations participant * Update Twilio version to 0.5.0 * update twilio version to 0.5.0 * remove conversation_participants from state file * add lines and add eof * update twilio version to 0.5.0 in source spec * removed conversation_participants from abnormal state * remove extra lines * update doc connector version * update json schema draft version * fix doc conflict * add expected records * auto-bump connector version --------- Co-authored-by: Marcos Marx Co-authored-by: marcosmarxm Co-authored-by: Octavia Squidington III --- .../src/main/resources/seed/oss_catalog.json | 2 +- .../resources/seed/source_definitions.yaml | 2 +- .../src/main/resources/seed/source_specs.yaml | 2 +- .../connectors/source-twilio/Dockerfile | 2 +- .../constant_records_catalog.json | 9 +++ .../integration_tests/expected_records.jsonl | 2 + .../schemas/conversation_participants.json | 56 +++++++++++++++++++ .../source-twilio/source_twilio/source.py | 2 + .../source-twilio/source_twilio/streams.py | 16 ++++++ .../source-twilio/unit_tests/test_source.py | 2 + connectors.md | 2 +- docs/integrations/sources/twilio.md | 3 + 12 files changed, 95 insertions(+), 5 deletions(-) create mode 100644 airbyte-integrations/connectors/source-twilio/source_twilio/schemas/conversation_participants.json diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json index d6efadb33fa9..3375461d5810 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json @@ -25803,7 +25803,7 @@ "sourceDefinitionId": "b9dc6155-672e-42ea-b10d-9f1f1fb95ab1", "name": "Twilio", "dockerRepository": "airbyte/source-twilio", - "dockerImageTag": "0.4.0", + "dockerImageTag": "0.5.0", "documentationUrl": "https://docs.airbyte.com/integrations/sources/twilio", "icon": "twilio.svg", "sourceType": "api", diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml index bba86fcaf3f5..20080f18f6e9 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml @@ -2162,7 +2162,7 @@ - name: Twilio sourceDefinitionId: b9dc6155-672e-42ea-b10d-9f1f1fb95ab1 dockerRepository: airbyte/source-twilio - dockerImageTag: 0.4.0 + dockerImageTag: 0.5.0 documentationUrl: https://docs.airbyte.com/integrations/sources/twilio icon: twilio.svg sourceType: api diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml index 54d688092716..4c517edbc849 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml @@ -16223,7 +16223,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-twilio:0.4.0" +- dockerImage: "airbyte/source-twilio:0.5.0" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/twilio" connectionSpecification: diff --git a/airbyte-integrations/connectors/source-twilio/Dockerfile b/airbyte-integrations/connectors/source-twilio/Dockerfile index 811f8cf05796..951479e35121 100644 --- a/airbyte-integrations/connectors/source-twilio/Dockerfile +++ b/airbyte-integrations/connectors/source-twilio/Dockerfile @@ -12,5 +12,5 @@ COPY main.py ./ ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=0.4.0 +LABEL io.airbyte.version=0.5.0 LABEL io.airbyte.name=airbyte/source-twilio diff --git a/airbyte-integrations/connectors/source-twilio/integration_tests/constant_records_catalog.json b/airbyte-integrations/connectors/source-twilio/integration_tests/constant_records_catalog.json index 6f211ac1a3b5..6eaadbd314b5 100644 --- a/airbyte-integrations/connectors/source-twilio/integration_tests/constant_records_catalog.json +++ b/airbyte-integrations/connectors/source-twilio/integration_tests/constant_records_catalog.json @@ -174,6 +174,15 @@ "sync_mode": "full_refresh", "destination_sync_mode": "overwrite" }, + { + "stream": { + "name": "conversation_participants", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, { "stream": { "name": "flows", diff --git a/airbyte-integrations/connectors/source-twilio/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-twilio/integration_tests/expected_records.jsonl index 28379ab05cb0..85f747be5cc2 100644 --- a/airbyte-integrations/connectors/source-twilio/integration_tests/expected_records.jsonl +++ b/airbyte-integrations/connectors/source-twilio/integration_tests/expected_records.jsonl @@ -542,3 +542,5 @@ {"stream": "executions", "data": {"status": "ended", "date_updated": "2023-03-16T20:38:55Z", "contact_channel_address": "+15558675310", "account_sid": "ACdade166c12e160e9ed0a6088226718fb", "url": "https://studio.twilio.com/v1/Flows/FW7ad717a690629a6da33bd3c8b9cf7d97/Executions/FN56f40a4629dfdd07f9d5071b5c90b23c", "context": {}, "sid": "FN56f40a4629dfdd07f9d5071b5c90b23c", "date_created": "2023-03-16T20:38:54Z", "contact_sid": "FC2aa67aaf0fe6169979cfa2a6f85fc654", "flow_sid": "FW7ad717a690629a6da33bd3c8b9cf7d97", "links": {"steps": "https://studio.twilio.com/v1/Flows/FW7ad717a690629a6da33bd3c8b9cf7d97/Executions/FN56f40a4629dfdd07f9d5071b5c90b23c/Steps", "execution_context": "https://studio.twilio.com/v1/Flows/FW7ad717a690629a6da33bd3c8b9cf7d97/Executions/FN56f40a4629dfdd07f9d5071b5c90b23c/Context"}}, "emitted_at": 1679000535024} {"stream": "conversations", "data": {"unique_name": null, "date_updated": "2023-03-21T13:39:44Z", "friendly_name": "Friendly Conversation", "timers": {}, "account_sid": "ACdade166c12e160e9ed0a6088226718fb", "url": "https://conversations.twilio.com/v1/Conversations/CH0ed7b4c3498e455a96fa09fcccee720e", "state": "active", "date_created": "2023-03-21T13:39:44Z", "messaging_service_sid": "MGfdf707ca9a7e03496ad79dc64e5e543e", "sid": "CH0ed7b4c3498e455a96fa09fcccee720e", "attributes": "{}", "bindings": null, "chat_service_sid": "IS5fcc074f7ead44c99a0a24a374a7e19f", "links": {"participants": "https://conversations.twilio.com/v1/Conversations/CH0ed7b4c3498e455a96fa09fcccee720e/Participants", "messages": "https://conversations.twilio.com/v1/Conversations/CH0ed7b4c3498e455a96fa09fcccee720e/Messages", "webhooks": "https://conversations.twilio.com/v1/Conversations/CH0ed7b4c3498e455a96fa09fcccee720e/Webhooks"}}, "emitted_at": 1679415128580} {"stream": "conversation_messages", "data": {"body": "Ahoy there", "index": 0, "author": "smee", "date_updated": "2023-04-01T12:37:19Z", "media": null, "participant_sid": null, "conversation_sid": "CH0ed7b4c3498e455a96fa09fcccee720e", "account_sid": "ACdade166c12e160e9ed0a6088226718fb", "delivery": null, "url": "https://conversations.twilio.com/v1/Conversations/CH0ed7b4c3498e455a96fa09fcccee720e/Messages/IMd28bbec7d60f4c9b84595170871c6f28", "date_created": "2023-04-01T12:37:19Z", "content_sid": null, "sid": "IMd28bbec7d60f4c9b84595170871c6f28", "attributes": "{}", "links": {"delivery_receipts": "https://conversations.twilio.com/v1/Conversations/CH0ed7b4c3498e455a96fa09fcccee720e/Messages/IMd28bbec7d60f4c9b84595170871c6f28/Receipts"}}, "emitted_at": 1680353085404} +{"stream": "conversation_participants", "data": {"last_read_message_index": null, "date_updated": "2023-04-13T11:52:17Z", "last_read_timestamp": null, "conversation_sid": "CH0ed7b4c3498e455a96fa09fcccee720e", "account_sid": "ACdade166c12e160e9ed0a6088226718fb", "url": "https://conversations.twilio.com/v1/Conversations/CH0ed7b4c3498e455a96fa09fcccee720e/Participants/MB0a984a4238f14b828cf277becf880bd4", "date_created": "2023-04-13T11:52:17Z", "role_sid": "RLca3ff6cb9bc9404caf14e43b63fed446", "sid": "MB0a984a4238f14b828cf277becf880bd4", "attributes": "{}", "identity": "Integration Test 2", "messaging_binding": null}, "emitted_at": 1681386889231} +{"stream": "conversation_participants", "data": {"last_read_message_index": null, "date_updated": "2023-04-13T11:52:02Z", "last_read_timestamp": null, "conversation_sid": "CH0ed7b4c3498e455a96fa09fcccee720e", "account_sid": "ACdade166c12e160e9ed0a6088226718fb", "url": "https://conversations.twilio.com/v1/Conversations/CH0ed7b4c3498e455a96fa09fcccee720e/Participants/MB41bb002a3a5e412fa7f2459dcfb4925f", "date_created": "2023-04-13T11:52:02Z", "role_sid": "RLca3ff6cb9bc9404caf14e43b63fed446", "sid": "MB41bb002a3a5e412fa7f2459dcfb4925f", "attributes": "{}", "identity": "Integration Test", "messaging_binding": null}, "emitted_at": 1681386889233} diff --git a/airbyte-integrations/connectors/source-twilio/source_twilio/schemas/conversation_participants.json b/airbyte-integrations/connectors/source-twilio/source_twilio/schemas/conversation_participants.json new file mode 100644 index 000000000000..35c580c3c274 --- /dev/null +++ b/airbyte-integrations/connectors/source-twilio/source_twilio/schemas/conversation_participants.json @@ -0,0 +1,56 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "additionalProperties": true, + "properties": { + "account_sid": { + "type": ["null", "string"] + }, + "conversation_sid": { + "type": ["null", "string"] + }, + "sid": { + "type": ["null", "string"] + }, + "identity": { + "type": ["null", "string"] + }, + "attributes": { + "type": ["null", "string"] + }, + "messaging_binding": { + "type": ["null", "object"], + "properties": { + "type": { + "type": ["null", "string"] + }, + "address": { + "type": ["null", "string"] + }, + "proxy_address": { + "type": ["null", "string"] + } + } + }, + "role_sid": { + "type": ["null", "string"] + }, + "date_created": { + "format": "date-time", + "type": ["null", "string"] + }, + "date_updated": { + "format": "date-time", + "type": ["null", "string"] + }, + "url": { + "type": ["null", "string"] + }, + "last_read_message_index": { + "type": ["null", "string"] + }, + "last_read_timestamp": { + "type": ["null", "string"] + } + } +} diff --git a/airbyte-integrations/connectors/source-twilio/source_twilio/source.py b/airbyte-integrations/connectors/source-twilio/source_twilio/source.py index 25b85e575420..eb000f8158c2 100644 --- a/airbyte-integrations/connectors/source-twilio/source_twilio/source.py +++ b/airbyte-integrations/connectors/source-twilio/source_twilio/source.py @@ -24,6 +24,7 @@ ConferenceParticipants, Conferences, ConversationMessages, + ConversationParticipants, Conversations, DependentPhoneNumbers, Executions, @@ -98,6 +99,7 @@ def streams(self, config: Mapping[str, Any]) -> List[Stream]: Conferences(**incremental_stream_kwargs), Conversations(**full_refresh_stream_kwargs), ConversationMessages(**full_refresh_stream_kwargs), + ConversationParticipants(**full_refresh_stream_kwargs), DependentPhoneNumbers(**full_refresh_stream_kwargs), Flows(**full_refresh_stream_kwargs), Executions(**full_refresh_stream_kwargs), diff --git a/airbyte-integrations/connectors/source-twilio/source_twilio/streams.py b/airbyte-integrations/connectors/source-twilio/source_twilio/streams.py index 64d19b45f72c..b32b07be24b6 100644 --- a/airbyte-integrations/connectors/source-twilio/source_twilio/streams.py +++ b/airbyte-integrations/connectors/source-twilio/source_twilio/streams.py @@ -19,6 +19,7 @@ from pendulum.datetime import DateTime from requests.auth import AuthBase +TWILIO_CONVERSATION_BASE = "https://conversations.twilio.com/v1/" TWILIO_API_URL_BASE = "https://api.twilio.com" TWILIO_API_URL_BASE_VERSIONED = f"{TWILIO_API_URL_BASE}/2010-04-01/" TWILIO_MONITOR_URL_BASE = "https://monitor.twilio.com/v1/" @@ -542,6 +543,21 @@ def path(self, **kwargs): return self.name.title() +class ConversationParticipants(TwilioNestedStream): + """https://www.twilio.com/docs/conversations/api/conversation-participant-resource""" + + parent_stream = Conversations + url_base = TWILIO_CONVERSATIONS_URL_BASE + data_field = "participants" + uri_from_subresource = False + + def path(self, stream_slice: Mapping[str, Any], **kwargs): + return f"Conversations/{stream_slice['conversation_sid']}/Participants" + + def parent_record_to_stream_slice(self, record: Mapping[str, Any]) -> Mapping[str, Any]: + return {"conversation_sid": record["sid"]} + + class ConversationMessages(TwilioNestedStream): """https://www.twilio.com/docs/conversations/api/conversation-message-resource#list-all-conversation-messages""" diff --git a/airbyte-integrations/connectors/source-twilio/unit_tests/test_source.py b/airbyte-integrations/connectors/source-twilio/unit_tests/test_source.py index 56d2bf879e84..346bb5dbf45c 100644 --- a/airbyte-integrations/connectors/source-twilio/unit_tests/test_source.py +++ b/airbyte-integrations/connectors/source-twilio/unit_tests/test_source.py @@ -19,6 +19,7 @@ Calls, ConferenceParticipants, Conferences, + ConversationParticipants, Conversations, DependentPhoneNumbers, IncomingPhoneNumbers, @@ -98,6 +99,7 @@ def test_check_connection_handles_exceptions(mocker, config, exception, expected (UsageRecords), (UsageTriggers), (Conversations), + (ConversationParticipants) ], ) def test_streams(stream_cls, config): diff --git a/connectors.md b/connectors.md index c7a0be32c650..20a8b3d761f9 100644 --- a/connectors.md +++ b/connectors.md @@ -246,7 +246,7 @@ | **Toggl** | Toggl icon | Source | airbyte/source-toggl:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/toggl) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-toggl) | `7e7c844f-2300-4342-b7d3-6dd7992593cd` | | **Trello** | Trello icon | Source | airbyte/source-trello:0.3.1 | beta | [link](https://docs.airbyte.com/integrations/sources/trello) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-trello) | `8da67652-004c-11ec-9a03-0242ac130003` | | **TrustPilot** | TrustPilot icon | Source | airbyte/source-trustpilot:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/trustpilot) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-trustpilot) | `d7e23ea6-d741-4314-9209-a33c91a2e945` | -| **Twilio** | Twilio icon | Source | airbyte/source-twilio:0.4.0 | generally_available | [link](https://docs.airbyte.com/integrations/sources/twilio) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-twilio) | `b9dc6155-672e-42ea-b10d-9f1f1fb95ab1` | +| **Twilio** | Twilio icon | Source | airbyte/source-twilio:0.5.0 | generally_available | [link](https://docs.airbyte.com/integrations/sources/twilio) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-twilio) | `b9dc6155-672e-42ea-b10d-9f1f1fb95ab1` | | **Twilio Taskrouter** | Twilio Taskrouter icon | Source | airbyte/source-twilio-taskrouter:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/twilio-taskrouter) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-twilio-taskrouter) | `2446953b-b794-429b-a9b3-c821ba992a48` | | **Twitter** | Twitter icon | Source | airbyte/source-twitter:0.1.2 | beta | [link](https://docs.airbyte.com/integrations/sources/twitter) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-twitter) | `d7fd4f40-5e5a-4b8b-918f-a73077f8c131` | | **Tyntec SMS** | Tyntec SMS icon | Source | airbyte/source-tyntec-sms:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/tyntec-sms) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-tyntec-sms) | `3c0c3cd1-b3e0-464a-9090-d3ceb5f92346` | diff --git a/docs/integrations/sources/twilio.md b/docs/integrations/sources/twilio.md index a4f6850a4d14..0da64aba78e0 100644 --- a/docs/integrations/sources/twilio.md +++ b/docs/integrations/sources/twilio.md @@ -64,6 +64,7 @@ The Twilio source connector supports the following [sync modes](https://docs.air * [Conferences](https://www.twilio.com/docs/voice/api/conference-resource#read-multiple-conference-resources) \(Incremental\) * [Conversations](https://www.twilio.com/docs/conversations/api/conversation-resource#read-multiple-conversation-resources) * [Conversation Messages](https://www.twilio.com/docs/conversations/api/conversation-message-resource#list-all-conversation-messages) +* [Conversation Participants](https://www.twilio.com/docs/conversations/api/conversation-participant-resource) * [Dependent Phone Numbers](https://www.twilio.com/docs/usage/api/address?code-sample=code-list-dependent-pns-subresources&code-language=curl&code-sdk-version=json#instance-subresources) \(Incremental\) * [Executions](https://www.twilio.com/docs/phone-numbers/api/incomingphonenumber-resource#read-multiple-incomingphonenumber-resources) \(Incremental\) * [Incoming Phone Numbers](https://www.twilio.com/docs/phone-numbers/api/incomingphonenumber-resource#read-multiple-incomingphonenumber-resources) \(Incremental\) @@ -87,6 +88,8 @@ For more information, see [the Twilio docs for rate limitations](https://support | Version | Date | Pull Request | Subject | |:--------|:-----------|:---------------------------------------------------------|:--------------------------------------------------------------------------------------------------------| + +| 0.5.0 | 2023-03-21 | [23995](https://github.com/airbytehq/airbyte/pull/23995) | Add new stream `Conversation Participants` | | 0.4.0 | 2023-03-18 | [23995](https://github.com/airbytehq/airbyte/pull/23995) | Add new stream `Conversation Messages` | | 0.3.0 | 2023-03-18 | [22874](https://github.com/airbytehq/airbyte/pull/22874) | Add new stream `Executions` with parent `Flows` | | 0.2.0 | 2023-03-16 | [24114](https://github.com/airbytehq/airbyte/pull/24114) | Add `Conversations` stream From 940d2108b6169fb6f721020be8e308bb23c8556a Mon Sep 17 00:00:00 2001 From: Arsen Losenko <20901439+arsenlosenko@users.noreply.github.com> Date: Thu, 13 Apr 2023 20:50:51 +0300 Subject: [PATCH 050/187] Source Iterable: update expected records (#25144) --- .../integration_tests/expected_records.jsonl | 204 +++++++++--------- 1 file changed, 100 insertions(+), 104 deletions(-) diff --git a/airbyte-integrations/connectors/source-iterable/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-iterable/integration_tests/expected_records.jsonl index fd34ba3474dd..0e0c3b43caab 100644 --- a/airbyte-integrations/connectors/source-iterable/integration_tests/expected_records.jsonl +++ b/airbyte-integrations/connectors/source-iterable/integration_tests/expected_records.jsonl @@ -121,67 +121,65 @@ {"stream":"email_open","data":{"ip":"66.249.81.11","email":"y.kurochkin@zazmic.com","userAgent":"Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)","templateId":3043605,"messageId":"acd3c6a275a445a8944457a25e218daa","createdAt":"2021-04-14T17:00:11+00:00","campaignId":2220229,"userAgentDevice":"Gmail"},"emitted_at":1675804471149} {"stream":"email_send","data":{"email":"y.kurochkin-fake@zazmic.com","messageTypeId":47258,"catalogLookupCount":0,"templateId":3043605,"messageBusId":"01000178d1341684-a4d837cd-d5ac-4b47-9074-5673b56adcf3-000000","messageId":"5ab46e765ee449588bb9709fb4a68290","createdAt":"2021-04-14T16:25:55+00:00","catalogCollectionCount":0,"campaignId":2220229,"channelId":39582,"productRecommendationCount":0,"contentId":12029221},"emitted_at":1675804472505} {"stream":"email_send","data":{"email":"y.kurochkin@zazmic.com","messageTypeId":47258,"catalogLookupCount":0,"templateId":3043605,"messageBusId":"01000178d1341a2f-0b4e8650-bce6-4464-adcc-74408648c444-000000","messageId":"acd3c6a275a445a8944457a25e218daa","createdAt":"2021-04-14T16:25:56+00:00","catalogCollectionCount":0,"campaignId":2220229,"channelId":39582,"productRecommendationCount":0,"contentId":12029221},"emitted_at":1675804472506} -{"stream":"email_subscribe","data":{"email":"fake-email-1@imail.com","emailListIds":[949814],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:48:01 +00:00","userId":"1234","createdAt":"2021-04-14T16:49:04+00:00","signupSource":"ListAPI"},"emitted_at":1675804474662} -{"stream":"email_subscribe","data":{"email":"fake-email-10@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:18 +00:00","userId":"new-fake-user-number-10","createdAt":"2021-04-14T16:52:18+00:00","signupSource":"ListAPI"},"emitted_at":1675804474663} -{"stream":"email_subscribe","data":{"email":"fake-email-50@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:42 +00:00","userId":"new-fake-user-number-50","createdAt":"2021-04-14T16:52:43+00:00","signupSource":"ListAPI"},"emitted_at":1675804474664} -{"stream":"email_subscribe","data":{"email":"fake-email-4@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:14 +00:00","userId":"new-fake-user-number-4","createdAt":"2021-04-14T16:52:15+00:00","signupSource":"ListAPI"},"emitted_at":1675804474664} -{"stream":"email_subscribe","data":{"email":"fake-email-6@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:16 +00:00","userId":"new-fake-user-number-6","createdAt":"2021-04-14T16:52:16+00:00","signupSource":"ListAPI"},"emitted_at":1675804474665} -{"stream":"email_subscribe","data":{"email":"y.kurochkin-fake@zazmic.com","emailListIds":[949814],"channelIds":[],"profileUpdatedAt":"2021-04-09 11:26:50 +00:00","userId":"string","createdAt":"2021-04-09T11:26:50+00:00","signupSource":"ListAPI"},"emitted_at":1675804474666} -{"stream":"email_subscribe","data":{"email":"fake-email-8@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:17 +00:00","userId":"new-fake-user-number-8","createdAt":"2021-04-14T16:52:18+00:00","signupSource":"ListAPI"},"emitted_at":1675804474666} -{"stream":"email_subscribe","data":{"email":"fake-email-1@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:13 +00:00","userId":"new-fake-user-number-1","createdAt":"2021-04-14T16:52:13+00:00","signupSource":"ListAPI"},"emitted_at":1675804474667} -{"stream":"email_subscribe","data":{"email":"fake-email-0@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:08 +00:00","userId":"new-fake-user-number-0","createdAt":"2021-04-14T16:52:09+00:00","signupSource":"ListAPI"},"emitted_at":1675804474668} -{"stream":"email_subscribe","data":{"email":"fake-email-42@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:37 +00:00","userId":"new-fake-user-number-42","createdAt":"2021-04-14T16:52:37+00:00","signupSource":"ListAPI"},"emitted_at":1675804474669} -{"stream":"email_subscribe","data":{"email":"fake-email-52@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:43 +00:00","userId":"new-fake-user-number-52","createdAt":"2021-04-14T16:52:43+00:00","signupSource":"ListAPI"},"emitted_at":1675804474669} -{"stream":"email_subscribe","data":{"email":"fake-email-23@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:26 +00:00","userId":"new-fake-user-number-23","createdAt":"2021-04-14T16:52:26+00:00","signupSource":"ListAPI"},"emitted_at":1675804474669} -{"stream":"email_subscribe","data":{"email":"fake-email-15@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:21 +00:00","userId":"new-fake-user-number-15","createdAt":"2021-04-14T16:52:21+00:00","signupSource":"ListAPI"},"emitted_at":1675804474670} -{"stream":"email_subscribe","data":{"email":"fake-email-34@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:32 +00:00","userId":"new-fake-user-number-34","createdAt":"2021-04-14T16:52:33+00:00","signupSource":"ListAPI"},"emitted_at":1675804474670} -{"stream":"email_subscribe","data":{"email":"fake-emil-1@imail.com","emailListIds":[949814],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:51:23 +00:00","userId":"134","createdAt":"2021-04-14T16:51:27+00:00","signupSource":"ListAPI"},"emitted_at":1675804474671} -{"stream":"email_subscribe","data":{"email":"fake-email-12@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:20 +00:00","userId":"new-fake-user-number-12","createdAt":"2021-04-14T16:52:21+00:00","signupSource":"ListAPI"},"emitted_at":1675804474671} -{"stream":"email_subscribe","data":{"email":"fake-email-2@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:13 +00:00","userId":"new-fake-user-number-2","createdAt":"2021-04-14T16:52:14+00:00","signupSource":"ListAPI"},"emitted_at":1675804474676} -{"stream":"email_subscribe","data":{"email":"fake-email-44@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:38 +00:00","userId":"new-fake-user-number-44","createdAt":"2021-04-14T16:52:39+00:00","signupSource":"ListAPI"},"emitted_at":1675804474676} -{"stream":"email_subscribe","data":{"email":"fake-email-30@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:30 +00:00","userId":"new-fake-user-number-30","createdAt":"2021-04-14T16:52:33+00:00","signupSource":"ListAPI"},"emitted_at":1675804474677} -{"stream":"email_subscribe","data":{"email":"fake-email-13@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:20 +00:00","userId":"new-fake-user-number-13","createdAt":"2021-04-14T16:52:21+00:00","signupSource":"ListAPI"},"emitted_at":1675804474677} -{"stream":"email_subscribe","data":{"email":"fake-email-24@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:26 +00:00","userId":"new-fake-user-number-24","createdAt":"2021-04-14T16:52:27+00:00","signupSource":"ListAPI"},"emitted_at":1675804474678} -{"stream":"email_subscribe","data":{"email":"fake-email-38@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:35 +00:00","userId":"new-fake-user-number-38","createdAt":"2021-04-14T16:52:35+00:00","signupSource":"ListAPI"},"emitted_at":1675804474780} -{"stream":"email_subscribe","data":{"email":"fake-email-5@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:15 +00:00","userId":"new-fake-user-number-5","createdAt":"2021-04-14T16:52:18+00:00","signupSource":"ListAPI"},"emitted_at":1675804474785} -{"stream":"email_subscribe","data":{"email":"fake-email-22@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:25 +00:00","userId":"new-fake-user-number-22","createdAt":"2021-04-14T16:52:26+00:00","signupSource":"ListAPI"},"emitted_at":1675804474785} -{"stream":"email_subscribe","data":{"email":"fake-email-41@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:36 +00:00","userId":"new-fake-user-number-41","createdAt":"2021-04-14T16:52:37+00:00","signupSource":"ListAPI"},"emitted_at":1675804474786} -{"stream":"email_subscribe","data":{"email":"fake-email-19@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:24 +00:00","userId":"new-fake-user-number-19","createdAt":"2021-04-14T16:52:24+00:00","signupSource":"ListAPI"},"emitted_at":1675804474786} -{"stream":"email_subscribe","data":{"email":"jane@iterable.com","emailListIds":[949814],"lastName":"Smith","userId":"user5678","firstName":"Jane","channelIds":[],"someDate":"2015-11-13","isFoobar":false,"profileUpdatedAt":"2021-04-14 16:45:13 +00:00","createdAt":"2021-04-14T16:46:02+00:00","signupSource":"Import"},"emitted_at":1675804474787} -{"stream":"email_subscribe","data":{"email":"fake-email-28@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:29 +00:00","userId":"new-fake-user-number-28","createdAt":"2021-04-14T16:52:29+00:00","signupSource":"ListAPI"},"emitted_at":1675804474789} -{"stream":"email_subscribe","data":{"email":"fake-email-40@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:36 +00:00","userId":"new-fake-user-number-40","createdAt":"2021-04-14T16:52:36+00:00","signupSource":"ListAPI"},"emitted_at":1675804474790} -{"stream":"email_subscribe","data":{"email":"fake-email-7@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:16 +00:00","userId":"new-fake-user-number-7","createdAt":"2021-04-14T16:52:18+00:00","signupSource":"ListAPI"},"emitted_at":1675804474791} -{"stream":"email_subscribe","data":{"email":"fake-email-26@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:28 +00:00","userId":"new-fake-user-number-26","createdAt":"2021-04-14T16:52:28+00:00","signupSource":"ListAPI"},"emitted_at":1675804474792} -{"stream":"email_subscribe","data":{"email":"fake-email-47@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:40 +00:00","userId":"new-fake-user-number-47","createdAt":"2021-04-14T16:52:40+00:00","signupSource":"ListAPI"},"emitted_at":1675804474792} -{"stream":"email_subscribe","data":{"email":"fake-email-21@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:25 +00:00","userId":"new-fake-user-number-21","createdAt":"2021-04-14T16:52:25+00:00","signupSource":"ListAPI"},"emitted_at":1675804474793} -{"stream":"email_subscribe","data":{"email":"fake-email-3@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:14 +00:00","userId":"new-fake-user-number-3","createdAt":"2021-04-14T16:52:14+00:00","signupSource":"ListAPI"},"emitted_at":1675804474794} -{"stream":"email_subscribe","data":{"email":"fake-email-32@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:31 +00:00","userId":"new-fake-user-number-32","createdAt":"2021-04-14T16:52:32+00:00","signupSource":"ListAPI"},"emitted_at":1675804474794} -{"stream":"email_subscribe","data":{"email":"fake-email-43@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:37 +00:00","userId":"new-fake-user-number-43","createdAt":"2021-04-14T16:52:38+00:00","signupSource":"ListAPI"},"emitted_at":1675804474795} -{"stream":"email_subscribe","data":{"email":"fake-email-20@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:24 +00:00","userId":"new-fake-user-number-20","createdAt":"2021-04-14T16:52:24+00:00","signupSource":"ListAPI"},"emitted_at":1675804474796} -{"stream":"email_subscribe","data":{"email":"fake-email-54@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:44 +00:00","userId":"new-fake-user-number-54","createdAt":"2021-04-14T16:52:45+00:00","signupSource":"ListAPI"},"emitted_at":1675804474796} -{"stream":"email_subscribe","data":{"email":"fake-email-45@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:39 +00:00","userId":"new-fake-user-number-45","createdAt":"2021-04-14T16:52:39+00:00","signupSource":"ListAPI"},"emitted_at":1675804474797} -{"stream":"email_subscribe","data":{"email":"fake-email-36@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:33 +00:00","userId":"new-fake-user-number-36","createdAt":"2021-04-14T16:52:34+00:00","signupSource":"ListAPI"},"emitted_at":1675804474798} -{"stream":"email_subscribe","data":{"email":"fake-email-33@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:32 +00:00","userId":"new-fake-user-number-33","createdAt":"2021-04-14T16:52:32+00:00","signupSource":"ListAPI"},"emitted_at":1675804474799} -{"stream":"email_subscribe","data":{"email":"fake-email-14@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:21 +00:00","userId":"new-fake-user-number-14","createdAt":"2021-04-14T16:52:21+00:00","signupSource":"ListAPI"},"emitted_at":1675804474799} -{"stream":"email_subscribe","data":{"email":"fake-email-35@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:33 +00:00","userId":"new-fake-user-number-35","createdAt":"2021-04-14T16:52:34+00:00","signupSource":"ListAPI"},"emitted_at":1675804474800} -{"stream":"email_subscribe","data":{"email":"fake-email-37@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:34 +00:00","userId":"new-fake-user-number-37","createdAt":"2021-04-14T16:52:34+00:00","signupSource":"ListAPI"},"emitted_at":1675804474800} -{"stream":"email_subscribe","data":{"email":"fake-email-27@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:28 +00:00","userId":"new-fake-user-number-27","createdAt":"2021-04-14T16:52:29+00:00","signupSource":"ListAPI"},"emitted_at":1675804474801} -{"stream":"email_subscribe","data":{"email":"fake-email-11@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:19 +00:00","userId":"new-fake-user-number-11","createdAt":"2021-04-14T16:52:21+00:00","signupSource":"ListAPI"},"emitted_at":1675804474802} -{"stream":"email_subscribe","data":{"email":"fake-email-29@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:29 +00:00","userId":"new-fake-user-number-29","createdAt":"2021-04-14T16:52:33+00:00","signupSource":"ListAPI"},"emitted_at":1675804474803} -{"stream":"email_subscribe","data":{"email":"fake-email-39@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:35 +00:00","userId":"new-fake-user-number-39","createdAt":"2021-04-14T16:52:36+00:00","signupSource":"ListAPI"},"emitted_at":1675804474803} -{"stream":"email_subscribe","data":{"email":"fake-email-46@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:39 +00:00","userId":"new-fake-user-number-46","createdAt":"2021-04-14T16:52:39+00:00","signupSource":"ListAPI"},"emitted_at":1675804474803} -{"stream":"email_subscribe","data":{"email":"fake-email-16@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:22 +00:00","userId":"new-fake-user-number-16","createdAt":"2021-04-14T16:52:22+00:00","signupSource":"ListAPI"},"emitted_at":1675804474804} -{"stream":"email_subscribe","data":{"email":"fake-email-49@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:41 +00:00","userId":"new-fake-user-number-49","createdAt":"2021-04-14T16:52:41+00:00","signupSource":"ListAPI"},"emitted_at":1675804474804} -{"stream":"email_subscribe","data":{"email":"fake-email-48@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:40 +00:00","userId":"new-fake-user-number-48","createdAt":"2021-04-14T16:52:41+00:00","signupSource":"ListAPI"},"emitted_at":1675804474805} -{"stream":"email_subscribe","data":{"email":"fake-email-25@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:27 +00:00","userId":"new-fake-user-number-25","createdAt":"2021-04-14T16:52:27+00:00","signupSource":"ListAPI"},"emitted_at":1675804474805} -{"stream":"email_subscribe","data":{"email":"fake-email-9@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:17 +00:00","userId":"new-fake-user-number-9","createdAt":"2021-04-14T16:52:18+00:00","signupSource":"ListAPI"},"emitted_at":1675804474806} -{"stream":"email_subscribe","data":{"email":"fake-email-53@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:43 +00:00","userId":"new-fake-user-number-53","createdAt":"2021-04-14T16:52:44+00:00","signupSource":"ListAPI"},"emitted_at":1675804474806} -{"stream":"email_subscribe","data":{"email":"fake-email-51@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:42 +00:00","userId":"new-fake-user-number-51","createdAt":"2021-04-14T16:52:42+00:00","signupSource":"ListAPI"},"emitted_at":1675804474807} -{"stream":"email_subscribe","data":{"email":"fake-email-17@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:22 +00:00","userId":"new-fake-user-number-17","createdAt":"2021-04-14T16:52:23+00:00","signupSource":"ListAPI"},"emitted_at":1675804474807} -{"stream":"email_subscribe","data":{"email":"fake-email-18@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:23 +00:00","userId":"new-fake-user-number-18","createdAt":"2021-04-14T16:52:23+00:00","signupSource":"ListAPI"},"emitted_at":1675804474808} -{"stream":"email_subscribe","data":{"email":"fake-email-31@bmail.com","emailListIds":[949810],"channelIds":[],"profileUpdatedAt":"2021-04-14 16:52:30 +00:00","userId":"new-fake-user-number-31","createdAt":"2021-04-14T16:52:31+00:00","signupSource":"ListAPI"},"emitted_at":1675804474808} -{"stream":"email_subscribe","data":{"email":"y.kurochkin@zazmic.com","emailListIds":[949814],"channelIds":[],"profileUpdatedAt":"2021-04-09 11:25:54 +00:00","userId":"string","createdAt":"2021-04-09T11:25:55+00:00","signupSource":"ListAPI"},"emitted_at":1675804474808} -{"stream":"email_subscribe","data":{"email":"y.kurochkin@zazmic.com","emailListIds":[],"channelIds":[39582,39581],"profileUpdatedAt":"2021-04-08 14:23:30 +00:00","createdAt":"2021-04-08T14:23:30+00:00","signupSource":"Import"},"emitted_at":1675804475809} +{"stream": "email_subscribe", "data": {"email": "fake-email-1@imail.com", "emailListIds": [949814], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:48:01 +00:00", "userId": "1234", "createdAt": "2021-04-14T16:49:04+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081420} +{"stream": "email_subscribe", "data": {"email": "fake-email-10@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:18 +00:00", "userId": "new-fake-user-number-10", "createdAt": "2021-04-14T16:52:18+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081420} +{"stream": "email_subscribe", "data": {"email": "fake-email-50@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:42 +00:00", "userId": "new-fake-user-number-50", "createdAt": "2021-04-14T16:52:43+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081420} +{"stream": "email_subscribe", "data": {"email": "fake-email-4@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:14 +00:00", "userId": "new-fake-user-number-4", "createdAt": "2021-04-14T16:52:15+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081421} +{"stream": "email_subscribe", "data": {"email": "fake-email-6@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:16 +00:00", "userId": "new-fake-user-number-6", "createdAt": "2021-04-14T16:52:16+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081421} +{"stream": "email_subscribe", "data": {"email": "fake-email-8@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:17 +00:00", "userId": "new-fake-user-number-8", "createdAt": "2021-04-14T16:52:18+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081422} +{"stream": "email_subscribe", "data": {"email": "fake-email-1@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:13 +00:00", "userId": "new-fake-user-number-1", "createdAt": "2021-04-14T16:52:13+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081422} +{"stream": "email_subscribe", "data": {"email": "john@iterable.com", "emailListIds": [949814], "lastName": "Smith", "userId": "1234", "firstName": "John", "channelIds": [], "someDate": "2016-11-29 13:22:56", "isFoobar": true, "profileUpdatedAt": "2021-04-14 16:45:13 +00:00", "createdAt": "2021-04-14T16:46:02+00:00", "signupSource": "Import"}, "emitted_at": 1681370081422} +{"stream": "email_subscribe", "data": {"email": "fake-email-0@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:08 +00:00", "userId": "new-fake-user-number-0", "createdAt": "2021-04-14T16:52:09+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081423} +{"stream": "email_subscribe", "data": {"email": "fake-email-42@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:37 +00:00", "userId": "new-fake-user-number-42", "createdAt": "2021-04-14T16:52:37+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081423} +{"stream": "email_subscribe", "data": {"email": "fake-email-52@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:43 +00:00", "userId": "new-fake-user-number-52", "createdAt": "2021-04-14T16:52:43+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081423} +{"stream": "email_subscribe", "data": {"email": "fake-email-23@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:26 +00:00", "userId": "new-fake-user-number-23", "createdAt": "2021-04-14T16:52:26+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081424} +{"stream": "email_subscribe", "data": {"email": "fake-email-15@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:21 +00:00", "userId": "new-fake-user-number-15", "createdAt": "2021-04-14T16:52:21+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081424} +{"stream": "email_subscribe", "data": {"email": "fake-email-34@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:32 +00:00", "userId": "new-fake-user-number-34", "createdAt": "2021-04-14T16:52:33+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081424} +{"stream": "email_subscribe", "data": {"email": "fake-emil-1@imail.com", "emailListIds": [949814], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:51:23 +00:00", "userId": "134", "createdAt": "2021-04-14T16:51:27+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081424} +{"stream": "email_subscribe", "data": {"email": "fake-email-12@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:20 +00:00", "userId": "new-fake-user-number-12", "createdAt": "2021-04-14T16:52:21+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081425} +{"stream": "email_subscribe", "data": {"email": "fake-email-2@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:13 +00:00", "userId": "new-fake-user-number-2", "createdAt": "2021-04-14T16:52:14+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081425} +{"stream": "email_subscribe", "data": {"email": "fake-email-44@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:38 +00:00", "userId": "new-fake-user-number-44", "createdAt": "2021-04-14T16:52:39+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081425} +{"stream": "email_subscribe", "data": {"email": "fake-email-30@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:30 +00:00", "userId": "new-fake-user-number-30", "createdAt": "2021-04-14T16:52:33+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081426} +{"stream": "email_subscribe", "data": {"email": "fake-email-13@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:20 +00:00", "userId": "new-fake-user-number-13", "createdAt": "2021-04-14T16:52:21+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081426} +{"stream": "email_subscribe", "data": {"email": "jane@iterable.com", "emailListIds": [949814], "lastName": "Smith", "userId": "user5678", "firstName": "Jane", "channelIds": [], "someDate": "2015-11-13", "isFoobar": false, "profileUpdatedAt": "2021-04-14 16:45:13 +00:00", "createdAt": "2021-04-14T16:46:02+00:00", "signupSource": "Import"}, "emitted_at": 1681370081426} +{"stream": "email_subscribe", "data": {"email": "fake-email-24@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:26 +00:00", "userId": "new-fake-user-number-24", "createdAt": "2021-04-14T16:52:27+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081427} +{"stream": "email_subscribe", "data": {"email": "fake-email-38@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:35 +00:00", "userId": "new-fake-user-number-38", "createdAt": "2021-04-14T16:52:35+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081427} +{"stream": "email_subscribe", "data": {"email": "fake-email-5@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:15 +00:00", "userId": "new-fake-user-number-5", "createdAt": "2021-04-14T16:52:18+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081427} +{"stream": "email_subscribe", "data": {"email": "fake-email-22@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:25 +00:00", "userId": "new-fake-user-number-22", "createdAt": "2021-04-14T16:52:26+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081427} +{"stream": "email_subscribe", "data": {"email": "fake-email-41@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:36 +00:00", "userId": "new-fake-user-number-41", "createdAt": "2021-04-14T16:52:37+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081428} +{"stream": "email_subscribe", "data": {"email": "fake-email-19@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:24 +00:00", "userId": "new-fake-user-number-19", "createdAt": "2021-04-14T16:52:24+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081428} +{"stream": "email_subscribe", "data": {"email": "fake-email-3@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:14 +00:00", "userId": "new-fake-user-number-3", "createdAt": "2021-04-14T16:52:14+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081428} +{"stream": "email_subscribe", "data": {"email": "fake-email-28@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:29 +00:00", "userId": "new-fake-user-number-28", "createdAt": "2021-04-14T16:52:29+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081428} +{"stream": "email_subscribe", "data": {"email": "fake-email-40@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:36 +00:00", "userId": "new-fake-user-number-40", "createdAt": "2021-04-14T16:52:36+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081428} +{"stream": "email_subscribe", "data": {"email": "fake-email-7@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:16 +00:00", "userId": "new-fake-user-number-7", "createdAt": "2021-04-14T16:52:18+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081429} +{"stream": "email_subscribe", "data": {"email": "fake-email-26@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:28 +00:00", "userId": "new-fake-user-number-26", "createdAt": "2021-04-14T16:52:28+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081429} +{"stream": "email_subscribe", "data": {"email": "fake-email-47@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:40 +00:00", "userId": "new-fake-user-number-47", "createdAt": "2021-04-14T16:52:40+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081429} +{"stream": "email_subscribe", "data": {"email": "fake-email-21@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:25 +00:00", "userId": "new-fake-user-number-21", "createdAt": "2021-04-14T16:52:25+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081430} +{"stream": "email_subscribe", "data": {"email": "fake-email-32@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:31 +00:00", "userId": "new-fake-user-number-32", "createdAt": "2021-04-14T16:52:32+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081430} +{"stream": "email_subscribe", "data": {"email": "fake-email-43@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:37 +00:00", "userId": "new-fake-user-number-43", "createdAt": "2021-04-14T16:52:38+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081430} +{"stream": "email_subscribe", "data": {"email": "fake-email-20@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:24 +00:00", "userId": "new-fake-user-number-20", "createdAt": "2021-04-14T16:52:24+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081430} +{"stream": "email_subscribe", "data": {"email": "fake-email-14@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:21 +00:00", "userId": "new-fake-user-number-14", "createdAt": "2021-04-14T16:52:21+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081431} +{"stream": "email_subscribe", "data": {"email": "fake-email-11@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:19 +00:00", "userId": "new-fake-user-number-11", "createdAt": "2021-04-14T16:52:21+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081431} +{"stream": "email_subscribe", "data": {"email": "fake-email-54@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:44 +00:00", "userId": "new-fake-user-number-54", "createdAt": "2021-04-14T16:52:45+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081431} +{"stream": "email_subscribe", "data": {"email": "fake-email-45@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:39 +00:00", "userId": "new-fake-user-number-45", "createdAt": "2021-04-14T16:52:39+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081431} +{"stream": "email_subscribe", "data": {"email": "fake-email-36@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:33 +00:00", "userId": "new-fake-user-number-36", "createdAt": "2021-04-14T16:52:34+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081431} +{"stream": "email_subscribe", "data": {"email": "fake-email-33@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:32 +00:00", "userId": "new-fake-user-number-33", "createdAt": "2021-04-14T16:52:32+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081432} +{"stream": "email_subscribe", "data": {"email": "fake-email-35@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:33 +00:00", "userId": "new-fake-user-number-35", "createdAt": "2021-04-14T16:52:34+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081432} +{"stream": "email_subscribe", "data": {"email": "fake-email-37@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:34 +00:00", "userId": "new-fake-user-number-37", "createdAt": "2021-04-14T16:52:34+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081432} +{"stream": "email_subscribe", "data": {"email": "fake-email-27@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:28 +00:00", "userId": "new-fake-user-number-27", "createdAt": "2021-04-14T16:52:29+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081432} +{"stream": "email_subscribe", "data": {"email": "fake-email-16@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:22 +00:00", "userId": "new-fake-user-number-16", "createdAt": "2021-04-14T16:52:22+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081432} +{"stream": "email_subscribe", "data": {"email": "fake-email-29@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:29 +00:00", "userId": "new-fake-user-number-29", "createdAt": "2021-04-14T16:52:33+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081432} +{"stream": "email_subscribe", "data": {"email": "fake-email-39@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:35 +00:00", "userId": "new-fake-user-number-39", "createdAt": "2021-04-14T16:52:36+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081433} +{"stream": "email_subscribe", "data": {"email": "fake-email-46@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:39 +00:00", "userId": "new-fake-user-number-46", "createdAt": "2021-04-14T16:52:39+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081433} +{"stream": "email_subscribe", "data": {"email": "fake-email-25@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:27 +00:00", "userId": "new-fake-user-number-25", "createdAt": "2021-04-14T16:52:27+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081433} +{"stream": "email_subscribe", "data": {"email": "fake-email-49@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:41 +00:00", "userId": "new-fake-user-number-49", "createdAt": "2021-04-14T16:52:41+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081545} +{"stream": "email_subscribe", "data": {"email": "fake-email-48@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:40 +00:00", "userId": "new-fake-user-number-48", "createdAt": "2021-04-14T16:52:41+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081546} +{"stream": "email_subscribe", "data": {"email": "fake-email-51@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:42 +00:00", "userId": "new-fake-user-number-51", "createdAt": "2021-04-14T16:52:42+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081547} +{"stream": "email_subscribe", "data": {"email": "fake-email-9@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:17 +00:00", "userId": "new-fake-user-number-9", "createdAt": "2021-04-14T16:52:18+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081548} +{"stream": "email_subscribe", "data": {"email": "fake-email-53@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:43 +00:00", "userId": "new-fake-user-number-53", "createdAt": "2021-04-14T16:52:44+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081548} +{"stream": "email_subscribe", "data": {"email": "fake-email-17@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:22 +00:00", "userId": "new-fake-user-number-17", "createdAt": "2021-04-14T16:52:23+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081549} +{"stream": "email_subscribe", "data": {"email": "fake-email-18@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:23 +00:00", "userId": "new-fake-user-number-18", "createdAt": "2021-04-14T16:52:23+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370081549} +{"stream": "email_subscribe", "data": {"email": "fake-email-31@bmail.com", "emailListIds": [949810], "channelIds": [], "profileUpdatedAt": "2021-04-14 16:52:30 +00:00", "userId": "new-fake-user-number-31", "createdAt": "2021-04-14T16:52:31+00:00", "signupSource": "ListAPI"}, "emitted_at": 1681370082734} {"stream":"email_unsubscribe","data":{"email":"y.kurochkin-fake@zazmic.com","unsubSource":"HardBounce","emailListIds":[],"channelIds":[39582,39581],"templateId":3043605,"recipientState":"HardBounce","status":"5.1.1","messageId":"5ab46e765ee449588bb9709fb4a68290","createdAt":"2021-04-14T16:29:41+00:00"},"emitted_at":1675804476418} {"stream":"email_unsubscribe","data":{"email":"fake-email-42@bmail.com","unsubSource":"Import","emailListIds":[949810],"channelIds":[],"createdAt":"2021-04-14T17:00:43+00:00"},"emitted_at":1675804476420} {"stream":"email_unsubscribe","data":{"email":"fake-email-10@bmail.com","unsubSource":"Import","emailListIds":[949810],"channelIds":[],"createdAt":"2021-04-14T17:00:42+00:00"},"emitted_at":1675804476421} @@ -221,46 +219,44 @@ {"stream":"email_unsubscribe","data":{"email":"fake-email-9@bmail.com","unsubSource":"Import","emailListIds":[949810],"channelIds":[],"createdAt":"2021-04-14T17:00:42+00:00"},"emitted_at":1675804476547} {"stream":"email_unsubscribe","data":{"email":"fake-email-18@bmail.com","unsubSource":"Import","emailListIds":[949810],"channelIds":[],"createdAt":"2021-04-14T17:00:43+00:00"},"emitted_at":1675804476548} {"stream":"email_unsubscribe","data":{"email":"fake-email-17@bmail.com","unsubSource":"Import","emailListIds":[949810],"channelIds":[],"createdAt":"2021-04-14T17:00:44+00:00"},"emitted_at":1675804477379} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:49:24 +00:00","documentUpdatedAt":"2021-04-14 16:49:24 +00:00"},"_type":"emailSubscribe","createdAt":"2021-04-14 16:49:04 +00:00","email":"fake-email-1@imail.com","data":{"profileUpdatedAt":"2021-04-14 16:48:01 +00:00","signupSource":"ListAPI","userId":"1234","emailListIds":[949814],"channelIds":[],"messageTypeIds":[]}},"emitted_at":1675804651816} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:51:27 +00:00","documentUpdatedAt":"2021-04-14 16:51:27 +00:00"},"_type":"emailSubscribe","createdAt":"2021-04-14 16:51:27 +00:00","email":"fake-emil-1@imail.com","data":{"profileUpdatedAt":"2021-04-14 16:51:23 +00:00","signupSource":"ListAPI","userId":"134","emailListIds":[949814],"channelIds":[],"messageTypeIds":[]}},"emitted_at":1675804652150} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-09 11:26:50 +00:00","documentUpdatedAt":"2021-04-09 11:26:50 +00:00"},"_type":"emailSubscribe","createdAt":"2021-04-09 11:26:50 +00:00","email":"y.kurochkin-fake@zazmic.com","data":{"profileUpdatedAt":"2021-04-09 11:26:50 +00:00","signupSource":"ListAPI","userId":"string","emailListIds":[949814],"channelIds":[],"messageTypeIds":[]}},"emitted_at":1675804652303} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:25:55 +00:00","documentUpdatedAt":"2021-04-14 16:25:55 +00:00"},"_type":"emailSend","createdAt":"2021-04-14 16:25:55 +00:00","email":"y.kurochkin-fake@zazmic.com","data":{"messageTypeId":47258,"catalogLookupCount":0,"templateId":3043605,"messageBusId":"01000178d1341684-a4d837cd-d5ac-4b47-9074-5673b56adcf3-000000","messageId":"5ab46e765ee449588bb9709fb4a68290","catalogCollectionCount":0,"campaignId":2220229,"channelId":39582,"productRecommendationCount":0,"contentId":12029221}},"emitted_at":1675804652304} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:29:39 +00:00","documentUpdatedAt":"2021-04-14 16:29:39 +00:00"},"_type":"emailBounce","createdAt":"2021-04-14 16:29:39 +00:00","email":"y.kurochkin-fake@zazmic.com","data":{"templateId":3043605,"recipientState":"HardBounce","status":"5.1.1","messageId":"5ab46e765ee449588bb9709fb4a68290","campaignId":2220229}},"emitted_at":1675804652304} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:29:42 +00:00","documentUpdatedAt":"2021-04-14 16:29:42 +00:00"},"_type":"emailUnSubscribe","createdAt":"2021-04-14 16:29:41 +00:00","email":"y.kurochkin-fake@zazmic.com","data":{"unsubSource":"HardBounce","templateId":3043605,"recipientState":"HardBounce","status":"5.1.1","messageId":"5ab46e765ee449588bb9709fb4a68290","emailListIds":[],"channelIds":[39582,39581],"messageTypeIds":[]}},"emitted_at":1675804652304} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:46:07 +00:00","documentUpdatedAt":"2021-04-14 16:46:07 +00:00"},"_type":"emailSubscribe","createdAt":"2021-04-14 16:46:02 +00:00","email":"jane@iterable.com","data":{"lastName":"Smith","firstName":"Jane","someDate":"2015-11-13","isFoobar":false,"profileUpdatedAt":"2021-04-14 16:45:13 +00:00","signupSource":"Import","userId":"user5678","emailListIds":[949814],"channelIds":[],"messageTypeIds":[]}},"emitted_at":1675804652455} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:53:08 +00:00","documentUpdatedAt":"2021-04-14 16:53:08 +00:00"},"_type":"emailClick","createdAt":"2021-04-14 16:53:07 +00:00","email":"y.kurochkin@zazmic.com","data":{"city":"Hyderabad","ip":"157.47.119.114","country":"India","userAgent":"Mozilla/5.0 (X11; CrOS x86_64 13729.72.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.116 Safari/537.36","templateId":3043605,"messageId":"acd3c6a275a445a8944457a25e218daa","campaignId":2220229,"userAgentDevice":"Other","hrefIndex":1,"url":"https://iterable.com","region":"TG","contentId":12029221}},"emitted_at":1675804652734} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:27:39 +00:00","documentUpdatedAt":"2021-04-14 16:27:39 +00:00"},"_type":"emailOpen","createdAt":"2021-04-14 16:27:39 +00:00","email":"y.kurochkin@zazmic.com","data":{"ip":"66.249.81.18","userAgent":"Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)","templateId":3043605,"messageId":"acd3c6a275a445a8944457a25e218daa","campaignId":2220229,"userAgentDevice":"Gmail"}},"emitted_at":1675804652734} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:27:40 +00:00","documentUpdatedAt":"2021-04-14 16:27:40 +00:00"},"_type":"emailOpen","createdAt":"2021-04-14 16:27:40 +00:00","email":"y.kurochkin@zazmic.com","data":{"ip":"66.249.81.7","userAgent":"Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)","templateId":3043605,"messageId":"acd3c6a275a445a8944457a25e218daa","campaignId":2220229,"userAgentDevice":"Gmail"}},"emitted_at":1675804652734} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:27:42 +00:00","documentUpdatedAt":"2021-04-14 16:27:42 +00:00"},"_type":"emailClick","createdAt":"2021-04-14 16:27:42 +00:00","email":"y.kurochkin@zazmic.com","data":{"city":"Kyiv","ip":"188.163.104.11","country":"Ukraine","userAgent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36","templateId":3043605,"messageId":"acd3c6a275a445a8944457a25e218daa","campaignId":2220229,"userAgentDevice":"Linux","hrefIndex":1,"url":"https://iterable.com","region":"30","contentId":12029221}},"emitted_at":1675804652734} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:27:45 +00:00","documentUpdatedAt":"2021-04-14 16:27:45 +00:00"},"_type":"emailClick","createdAt":"2021-04-14 16:27:45 +00:00","email":"y.kurochkin@zazmic.com","data":{"city":"Nosivka","ip":"77.120.15.68","country":"Ukraine","userAgent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36 OPR/70.0.3728.133","templateId":3043605,"messageId":"acd3c6a275a445a8944457a25e218daa","campaignId":2220229,"userAgentDevice":"Windows","hrefIndex":1,"url":"https://iterable.com","region":"74","contentId":12029221}},"emitted_at":1675804652734} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:25:56 +00:00","documentUpdatedAt":"2021-04-14 16:25:56 +00:00"},"_type":"emailSend","createdAt":"2021-04-14 16:25:56 +00:00","email":"y.kurochkin@zazmic.com","data":{"messageTypeId":47258,"catalogLookupCount":0,"templateId":3043605,"messageBusId":"01000178d1341a2f-0b4e8650-bce6-4464-adcc-74408648c444-000000","messageId":"acd3c6a275a445a8944457a25e218daa","catalogCollectionCount":0,"campaignId":2220229,"channelId":39582,"productRecommendationCount":0,"contentId":12029221}},"emitted_at":1675804652734} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:25:57 +00:00","documentUpdatedAt":"2021-04-14 16:25:57 +00:00"},"_type":"emailOpen","createdAt":"2021-04-14 16:25:57 +00:00","email":"y.kurochkin@zazmic.com","data":{"city":null,"ip":"66.249.92.93","country":"United States","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246 Mozilla/5.0","templateId":3043605,"messageId":"acd3c6a275a445a8944457a25e218daa","region":null,"campaignId":2220229,"userAgentDevice":"Other"}},"emitted_at":1675804652734} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:47:13 +00:00","documentUpdatedAt":"2021-04-14 16:47:13 +00:00"},"_type":"emailOpen","createdAt":"2021-04-14 16:41:09 +00:00","email":"y.kurochkin@zazmic.com","data":{"ip":"66.249.81.9","userAgent":"Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)","templateId":3043605,"messageId":"acd3c6a275a445a8944457a25e218daa","campaignId":2220229,"userAgentDevice":"Gmail"}},"emitted_at":1675804652735} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:47:21 +00:00","documentUpdatedAt":"2021-04-14 16:47:21 +00:00"},"_type":"emailOpen","createdAt":"2021-04-14 16:41:22 +00:00","email":"y.kurochkin@zazmic.com","data":{"city":"Honnali","ip":"106.193.40.76","country":"India","userAgent":"Mozilla/5.0 (X11; CrOS x86_64 13729.72.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.116 Safari/537.36","templateId":3043605,"messageId":"acd3c6a275a445a8944457a25e218daa","region":"KA","campaignId":2220229,"userAgentDevice":"Other"}},"emitted_at":1675804652735} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:47:29 +00:00","documentUpdatedAt":"2021-04-14 16:47:29 +00:00"},"_type":"emailOpen","createdAt":"2021-04-14 16:42:23 +00:00","email":"y.kurochkin@zazmic.com","data":{"city":"Hyderabad","ip":"157.48.243.44","country":"India","userAgent":"Mozilla/5.0 (X11; CrOS x86_64 13729.72.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.116 Safari/537.36","templateId":3043605,"messageId":"acd3c6a275a445a8944457a25e218daa","region":"TG","campaignId":2220229,"userAgentDevice":"Other"}},"emitted_at":1675804652735} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:47:32 +00:00","documentUpdatedAt":"2021-04-14 16:47:32 +00:00"},"_type":"emailOpen","createdAt":"2021-04-14 16:42:40 +00:00","email":"y.kurochkin@zazmic.com","data":{"city":"Hyderabad","ip":"157.47.119.114","country":"India","userAgent":"Mozilla/5.0 (X11; CrOS x86_64 13729.72.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.116 Safari/537.36","templateId":3043605,"messageId":"acd3c6a275a445a8944457a25e218daa","region":"TG","campaignId":2220229,"userAgentDevice":"Other"}},"emitted_at":1675804652735} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:29:59 +00:00","documentUpdatedAt":"2021-04-14 16:29:59 +00:00"},"_type":"emailClick","createdAt":"2021-04-14 16:29:58 +00:00","email":"y.kurochkin@zazmic.com","data":{"city":"Ivano-Frankivsk","ip":"62.122.200.134","country":"Ukraine","userAgent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36","templateId":3043605,"messageId":"acd3c6a275a445a8944457a25e218daa","campaignId":2220229,"userAgentDevice":"Windows","hrefIndex":1,"url":"https://iterable.com","region":"26","contentId":12029221}},"emitted_at":1675804652735} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:52:00 +00:00","documentUpdatedAt":"2021-04-14 16:52:00 +00:00"},"_type":"emailClick","createdAt":"2021-04-14 16:51:59 +00:00","email":"y.kurochkin@zazmic.com","data":{"city":"Hyderabad","ip":"157.47.119.114","country":"India","userAgent":"Mozilla/5.0 (X11; CrOS x86_64 13729.72.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.116 Safari/537.36","templateId":3043605,"messageId":"acd3c6a275a445a8944457a25e218daa","campaignId":2220229,"userAgentDevice":"Other","hrefIndex":1,"url":"https://iterable.com","region":"TG","contentId":12029221}},"emitted_at":1675804652735} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:26:17 +00:00","documentUpdatedAt":"2021-04-14 16:26:17 +00:00"},"_type":"emailOpen","createdAt":"2021-04-14 16:26:17 +00:00","email":"y.kurochkin@zazmic.com","data":{"ip":"66.249.81.18","userAgent":"Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)","templateId":3043605,"messageId":"acd3c6a275a445a8944457a25e218daa","campaignId":2220229,"userAgentDevice":"Gmail"}},"emitted_at":1675804652735} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:26:19 +00:00","documentUpdatedAt":"2021-04-14 16:26:19 +00:00"},"_type":"emailOpen","createdAt":"2021-04-14 16:26:19 +00:00","email":"y.kurochkin@zazmic.com","data":{"ip":"66.249.81.27","userAgent":"Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)","templateId":3043605,"messageId":"acd3c6a275a445a8944457a25e218daa","campaignId":2220229,"userAgentDevice":"Gmail"}},"emitted_at":1675804652735} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-09 11:25:55 +00:00","documentUpdatedAt":"2021-04-09 11:25:55 +00:00"},"_type":"emailSubscribe","createdAt":"2021-04-09 11:25:55 +00:00","email":"y.kurochkin@zazmic.com","data":{"profileUpdatedAt":"2021-04-09 11:25:54 +00:00","signupSource":"ListAPI","userId":"string","emailListIds":[949814],"channelIds":[],"messageTypeIds":[]}},"emitted_at":1675804652735} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-08 14:23:30 +00:00","documentUpdatedAt":"2021-04-08 14:23:30 +00:00"},"_type":"emailSubscribe","createdAt":"2021-04-08 14:23:30 +00:00","email":"y.kurochkin@zazmic.com","data":{"profileUpdatedAt":"2021-04-08 14:23:30 +00:00","signupSource":"Import","emailListIds":[],"channelIds":[39582,39581],"messageTypeIds":[]}},"emitted_at":1675804652735} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:55:15 +00:00","documentUpdatedAt":"2021-04-14 16:55:15 +00:00"},"_type":"emailClick","createdAt":"2021-04-14 16:55:14 +00:00","email":"y.kurochkin@zazmic.com","data":{"city":"Hyderabad","ip":"157.47.119.114","country":"India","userAgent":"Mozilla/5.0 (X11; CrOS x86_64 13729.72.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.116 Safari/537.36","templateId":3043605,"messageId":"acd3c6a275a445a8944457a25e218daa","campaignId":2220229,"userAgentDevice":"Other","hrefIndex":0,"url":"https://iterable.com","region":"TG","contentId":12029221}},"emitted_at":1675804652735} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 17:00:11 +00:00","documentUpdatedAt":"2021-04-14 17:00:11 +00:00"},"_type":"emailOpen","createdAt":"2021-04-14 17:00:11 +00:00","email":"y.kurochkin@zazmic.com","data":{"ip":"66.249.81.11","userAgent":"Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)","templateId":3043605,"messageId":"acd3c6a275a445a8944457a25e218daa","campaignId":2220229,"userAgentDevice":"Gmail"}},"emitted_at":1675804652735} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:52:43 +00:00","documentUpdatedAt":"2021-04-14 16:52:43 +00:00"},"_type":"emailSubscribe","createdAt":"2021-04-14 16:52:43 +00:00","email":"fake-email-50@bmail.com","data":{"profileUpdatedAt":"2021-04-14 16:52:42 +00:00","signupSource":"ListAPI","userId":"new-fake-user-number-50","emailListIds":[949810],"channelIds":[],"messageTypeIds":[]}},"emitted_at":1675804654570} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:52:44 +00:00","documentUpdatedAt":"2021-04-14 16:52:44 +00:00"},"_type":"emailSubscribe","createdAt":"2021-04-14 16:52:43 +00:00","email":"fake-email-52@bmail.com","data":{"profileUpdatedAt":"2021-04-14 16:52:43 +00:00","signupSource":"ListAPI","userId":"new-fake-user-number-52","emailListIds":[949810],"channelIds":[],"messageTypeIds":[]}},"emitted_at":1675804654713} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:52:39 +00:00","documentUpdatedAt":"2021-04-14 16:52:39 +00:00"},"_type":"emailSubscribe","createdAt":"2021-04-14 16:52:39 +00:00","email":"fake-email-45@bmail.com","data":{"profileUpdatedAt":"2021-04-14 16:52:39 +00:00","signupSource":"ListAPI","userId":"new-fake-user-number-45","emailListIds":[949810],"channelIds":[],"messageTypeIds":[]}},"emitted_at":1675804654864} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:52:33 +00:00","documentUpdatedAt":"2021-04-14 16:52:33 +00:00"},"_type":"emailSubscribe","createdAt":"2021-04-14 16:52:33 +00:00","email":"fake-email-29@bmail.com","data":{"profileUpdatedAt":"2021-04-14 16:52:29 +00:00","signupSource":"ListAPI","userId":"new-fake-user-number-29","emailListIds":[949810],"channelIds":[],"messageTypeIds":[]}},"emitted_at":1675804655024} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:52:34 +00:00","documentUpdatedAt":"2021-04-14 16:52:34 +00:00"},"_type":"emailSubscribe","createdAt":"2021-04-14 16:52:34 +00:00","email":"fake-email-37@bmail.com","data":{"profileUpdatedAt":"2021-04-14 16:52:34 +00:00","signupSource":"ListAPI","userId":"new-fake-user-number-37","emailListIds":[949810],"channelIds":[],"messageTypeIds":[]}},"emitted_at":1675804655172} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:52:32 +00:00","documentUpdatedAt":"2021-04-14 16:52:32 +00:00"},"_type":"emailSubscribe","createdAt":"2021-04-14 16:52:32 +00:00","email":"fake-email-33@bmail.com","data":{"profileUpdatedAt":"2021-04-14 16:52:32 +00:00","signupSource":"ListAPI","userId":"new-fake-user-number-33","emailListIds":[949810],"channelIds":[],"messageTypeIds":[]}},"emitted_at":1675804655323} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:52:21 +00:00","documentUpdatedAt":"2021-04-14 16:52:21 +00:00"},"_type":"emailSubscribe","createdAt":"2021-04-14 16:52:21 +00:00","email":"fake-email-14@bmail.com","data":{"profileUpdatedAt":"2021-04-14 16:52:21 +00:00","signupSource":"ListAPI","userId":"new-fake-user-number-14","emailListIds":[949810],"channelIds":[],"messageTypeIds":[]}},"emitted_at":1675804656583} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:52:34 +00:00","documentUpdatedAt":"2021-04-14 16:52:34 +00:00"},"_type":"emailSubscribe","createdAt":"2021-04-14 16:52:34 +00:00","email":"fake-email-35@bmail.com","data":{"profileUpdatedAt":"2021-04-14 16:52:33 +00:00","signupSource":"ListAPI","userId":"new-fake-user-number-35","emailListIds":[949810],"channelIds":[],"messageTypeIds":[]}},"emitted_at":1675804656730} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:52:36 +00:00","documentUpdatedAt":"2021-04-14 16:52:36 +00:00"},"_type":"emailSubscribe","createdAt":"2021-04-14 16:52:36 +00:00","email":"fake-email-39@bmail.com","data":{"profileUpdatedAt":"2021-04-14 16:52:35 +00:00","signupSource":"ListAPI","userId":"new-fake-user-number-39","emailListIds":[949810],"channelIds":[],"messageTypeIds":[]}},"emitted_at":1675804656878} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:52:39 +00:00","documentUpdatedAt":"2021-04-14 16:52:39 +00:00"},"_type":"emailSubscribe","createdAt":"2021-04-14 16:52:39 +00:00","email":"fake-email-46@bmail.com","data":{"profileUpdatedAt":"2021-04-14 16:52:39 +00:00","signupSource":"ListAPI","userId":"new-fake-user-number-46","emailListIds":[949810],"channelIds":[],"messageTypeIds":[]}},"emitted_at":1675804657116} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:52:23 +00:00","documentUpdatedAt":"2021-04-14 16:52:23 +00:00"},"_type":"emailSubscribe","createdAt":"2021-04-14 16:52:22 +00:00","email":"fake-email-16@bmail.com","data":{"profileUpdatedAt":"2021-04-14 16:52:22 +00:00","signupSource":"ListAPI","userId":"new-fake-user-number-16","emailListIds":[949810],"channelIds":[],"messageTypeIds":[]}},"emitted_at":1675804657267} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:52:41 +00:00","documentUpdatedAt":"2021-04-14 16:52:41 +00:00"},"_type":"emailSubscribe","createdAt":"2021-04-14 16:52:41 +00:00","email":"fake-email-49@bmail.com","data":{"profileUpdatedAt":"2021-04-14 16:52:41 +00:00","signupSource":"ListAPI","userId":"new-fake-user-number-49","emailListIds":[949810],"channelIds":[],"messageTypeIds":[]}},"emitted_at":1675804657423} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:52:41 +00:00","documentUpdatedAt":"2021-04-14 16:52:41 +00:00"},"_type":"emailSubscribe","createdAt":"2021-04-14 16:52:41 +00:00","email":"fake-email-48@bmail.com","data":{"profileUpdatedAt":"2021-04-14 16:52:40 +00:00","signupSource":"ListAPI","userId":"new-fake-user-number-48","emailListIds":[949810],"channelIds":[],"messageTypeIds":[]}},"emitted_at":1675804657565} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:52:27 +00:00","documentUpdatedAt":"2021-04-14 16:52:27 +00:00"},"_type":"emailSubscribe","createdAt":"2021-04-14 16:52:27 +00:00","email":"fake-email-25@bmail.com","data":{"profileUpdatedAt":"2021-04-14 16:52:27 +00:00","signupSource":"ListAPI","userId":"new-fake-user-number-25","emailListIds":[949810],"channelIds":[],"messageTypeIds":[]}},"emitted_at":1675804657729} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:52:44 +00:00","documentUpdatedAt":"2021-04-14 16:52:44 +00:00"},"_type":"emailSubscribe","createdAt":"2021-04-14 16:52:44 +00:00","email":"fake-email-53@bmail.com","data":{"profileUpdatedAt":"2021-04-14 16:52:43 +00:00","signupSource":"ListAPI","userId":"new-fake-user-number-53","emailListIds":[949810],"channelIds":[],"messageTypeIds":[]}},"emitted_at":1675804657872} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:52:42 +00:00","documentUpdatedAt":"2021-04-14 16:52:42 +00:00"},"_type":"emailSubscribe","createdAt":"2021-04-14 16:52:42 +00:00","email":"fake-email-51@bmail.com","data":{"profileUpdatedAt":"2021-04-14 16:52:42 +00:00","signupSource":"ListAPI","userId":"new-fake-user-number-51","emailListIds":[949810],"channelIds":[],"messageTypeIds":[]}},"emitted_at":1675804658027} -{"stream":"events","data":{"itblInternal":{"documentCreatedAt":"2021-04-14 16:52:31 +00:00","documentUpdatedAt":"2021-04-14 16:52:31 +00:00"},"_type":"emailSubscribe","createdAt":"2021-04-14 16:52:31 +00:00","email":"fake-email-31@bmail.com","data":{"profileUpdatedAt":"2021-04-14 16:52:30 +00:00","signupSource":"ListAPI","userId":"new-fake-user-number-31","emailListIds":[949810],"channelIds":[],"messageTypeIds":[]}},"emitted_at":1675804658177} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:49:24 +00:00", "documentUpdatedAt": "2021-04-14 16:49:24 +00:00"}, "_type": "emailSubscribe", "createdAt": "2021-04-14 16:49:04 +00:00", "email": "fake-email-1@imail.com", "data": {"profileUpdatedAt": "2021-04-14 16:48:01 +00:00", "signupSource": "ListAPI", "userId": "1234", "emailListIds": [949814], "channelIds": [], "messageTypeIds": []}}, "emitted_at": 1681375001959} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:46:07 +00:00", "documentUpdatedAt": "2021-04-14 16:46:07 +00:00"}, "_type": "emailSubscribe", "createdAt": "2021-04-14 16:46:02 +00:00", "email": "john@iterable.com", "data": {"lastName": "Smith", "firstName": "John", "someDate": "2016-11-29 13:22:56", "isFoobar": true, "profileUpdatedAt": "2021-04-14 16:45:13 +00:00", "signupSource": "Import", "userId": "1234", "emailListIds": [949814], "channelIds": [], "messageTypeIds": []}}, "emitted_at": 1681375002108} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:25:55 +00:00", "documentUpdatedAt": "2021-04-14 16:25:55 +00:00"}, "_type": "emailSend", "createdAt": "2021-04-14 16:25:55 +00:00", "email": "y.kurochkin-fake@zazmic.com", "data": {"messageTypeId": 47258, "catalogLookupCount": 0, "templateId": 3043605, "messageBusId": "01000178d1341684-a4d837cd-d5ac-4b47-9074-5673b56adcf3-000000", "messageId": "5ab46e765ee449588bb9709fb4a68290", "catalogCollectionCount": 0, "campaignId": 2220229, "channelId": 39582, "productRecommendationCount": 0, "contentId": 12029221}}, "emitted_at": 1681375002276} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:29:39 +00:00", "documentUpdatedAt": "2021-04-14 16:29:39 +00:00"}, "_type": "emailBounce", "createdAt": "2021-04-14 16:29:39 +00:00", "email": "y.kurochkin-fake@zazmic.com", "data": {"templateId": 3043605, "recipientState": "HardBounce", "status": "5.1.1", "messageId": "5ab46e765ee449588bb9709fb4a68290", "campaignId": 2220229}}, "emitted_at": 1681375002278} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:29:42 +00:00", "documentUpdatedAt": "2021-04-14 16:29:42 +00:00"}, "_type": "emailUnSubscribe", "createdAt": "2021-04-14 16:29:41 +00:00", "email": "y.kurochkin-fake@zazmic.com", "data": {"unsubSource": "HardBounce", "templateId": 3043605, "recipientState": "HardBounce", "status": "5.1.1", "messageId": "5ab46e765ee449588bb9709fb4a68290", "emailListIds": [], "channelIds": [39582, 39581], "messageTypeIds": []}}, "emitted_at": 1681375002279} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:51:27 +00:00", "documentUpdatedAt": "2021-04-14 16:51:27 +00:00"}, "_type": "emailSubscribe", "createdAt": "2021-04-14 16:51:27 +00:00", "email": "fake-emil-1@imail.com", "data": {"profileUpdatedAt": "2021-04-14 16:51:23 +00:00", "signupSource": "ListAPI", "userId": "134", "emailListIds": [949814], "channelIds": [], "messageTypeIds": []}}, "emitted_at": 1681375002443} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:46:07 +00:00", "documentUpdatedAt": "2021-04-14 16:46:07 +00:00"}, "_type": "emailSubscribe", "createdAt": "2021-04-14 16:46:02 +00:00", "email": "jane@iterable.com", "data": {"lastName": "Smith", "firstName": "Jane", "someDate": "2015-11-13", "isFoobar": false, "profileUpdatedAt": "2021-04-14 16:45:13 +00:00", "signupSource": "Import", "userId": "user5678", "emailListIds": [949814], "channelIds": [], "messageTypeIds": []}}, "emitted_at": 1681375002604} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:53:08 +00:00", "documentUpdatedAt": "2021-04-14 16:53:08 +00:00"}, "_type": "emailClick", "createdAt": "2021-04-14 16:53:07 +00:00", "email": "y.kurochkin@zazmic.com", "data": {"city": "Hyderabad", "ip": "157.47.119.114", "country": "India", "userAgent": "Mozilla/5.0 (X11; CrOS x86_64 13729.72.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.116 Safari/537.36", "templateId": 3043605, "messageId": "acd3c6a275a445a8944457a25e218daa", "campaignId": 2220229, "userAgentDevice": "Other", "hrefIndex": 1, "url": "https://iterable.com", "region": "TG", "contentId": 12029221}}, "emitted_at": 1681375002813} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:27:39 +00:00", "documentUpdatedAt": "2021-04-14 16:27:39 +00:00"}, "_type": "emailOpen", "createdAt": "2021-04-14 16:27:39 +00:00", "email": "y.kurochkin@zazmic.com", "data": {"ip": "66.249.81.18", "userAgent": "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)", "templateId": 3043605, "messageId": "acd3c6a275a445a8944457a25e218daa", "campaignId": 2220229, "userAgentDevice": "Gmail"}}, "emitted_at": 1681375002813} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:27:40 +00:00", "documentUpdatedAt": "2021-04-14 16:27:40 +00:00"}, "_type": "emailOpen", "createdAt": "2021-04-14 16:27:40 +00:00", "email": "y.kurochkin@zazmic.com", "data": {"ip": "66.249.81.7", "userAgent": "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)", "templateId": 3043605, "messageId": "acd3c6a275a445a8944457a25e218daa", "campaignId": 2220229, "userAgentDevice": "Gmail"}}, "emitted_at": 1681375002813} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:27:42 +00:00", "documentUpdatedAt": "2021-04-14 16:27:42 +00:00"}, "_type": "emailClick", "createdAt": "2021-04-14 16:27:42 +00:00", "email": "y.kurochkin@zazmic.com", "data": {"city": "Kyiv", "ip": "188.163.104.11", "country": "Ukraine", "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36", "templateId": 3043605, "messageId": "acd3c6a275a445a8944457a25e218daa", "campaignId": 2220229, "userAgentDevice": "Linux", "hrefIndex": 1, "url": "https://iterable.com", "region": "30", "contentId": 12029221}}, "emitted_at": 1681375002813} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:27:45 +00:00", "documentUpdatedAt": "2021-04-14 16:27:45 +00:00"}, "_type": "emailClick", "createdAt": "2021-04-14 16:27:45 +00:00", "email": "y.kurochkin@zazmic.com", "data": {"city": "Nosivka", "ip": "77.120.15.68", "country": "Ukraine", "userAgent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36 OPR/70.0.3728.133", "templateId": 3043605, "messageId": "acd3c6a275a445a8944457a25e218daa", "campaignId": 2220229, "userAgentDevice": "Windows", "hrefIndex": 1, "url": "https://iterable.com", "region": "74", "contentId": 12029221}}, "emitted_at": 1681375002813} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:25:56 +00:00", "documentUpdatedAt": "2021-04-14 16:25:56 +00:00"}, "_type": "emailSend", "createdAt": "2021-04-14 16:25:56 +00:00", "email": "y.kurochkin@zazmic.com", "data": {"messageTypeId": 47258, "catalogLookupCount": 0, "templateId": 3043605, "messageBusId": "01000178d1341a2f-0b4e8650-bce6-4464-adcc-74408648c444-000000", "messageId": "acd3c6a275a445a8944457a25e218daa", "catalogCollectionCount": 0, "campaignId": 2220229, "channelId": 39582, "productRecommendationCount": 0, "contentId": 12029221}}, "emitted_at": 1681375002813} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:25:57 +00:00", "documentUpdatedAt": "2021-04-14 16:25:57 +00:00"}, "_type": "emailOpen", "createdAt": "2021-04-14 16:25:57 +00:00", "email": "y.kurochkin@zazmic.com", "data": {"city": null, "ip": "66.249.92.93", "country": "United States", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246 Mozilla/5.0", "templateId": 3043605, "messageId": "acd3c6a275a445a8944457a25e218daa", "region": null, "campaignId": 2220229, "userAgentDevice": "Other"}}, "emitted_at": 1681375002813} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:47:13 +00:00", "documentUpdatedAt": "2021-04-14 16:47:13 +00:00"}, "_type": "emailOpen", "createdAt": "2021-04-14 16:41:09 +00:00", "email": "y.kurochkin@zazmic.com", "data": {"ip": "66.249.81.9", "userAgent": "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)", "templateId": 3043605, "messageId": "acd3c6a275a445a8944457a25e218daa", "campaignId": 2220229, "userAgentDevice": "Gmail"}}, "emitted_at": 1681375002814} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:47:21 +00:00", "documentUpdatedAt": "2021-04-14 16:47:21 +00:00"}, "_type": "emailOpen", "createdAt": "2021-04-14 16:41:22 +00:00", "email": "y.kurochkin@zazmic.com", "data": {"city": "Honnali", "ip": "106.193.40.76", "country": "India", "userAgent": "Mozilla/5.0 (X11; CrOS x86_64 13729.72.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.116 Safari/537.36", "templateId": 3043605, "messageId": "acd3c6a275a445a8944457a25e218daa", "region": "KA", "campaignId": 2220229, "userAgentDevice": "Other"}}, "emitted_at": 1681375002814} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:47:29 +00:00", "documentUpdatedAt": "2021-04-14 16:47:29 +00:00"}, "_type": "emailOpen", "createdAt": "2021-04-14 16:42:23 +00:00", "email": "y.kurochkin@zazmic.com", "data": {"city": "Hyderabad", "ip": "157.48.243.44", "country": "India", "userAgent": "Mozilla/5.0 (X11; CrOS x86_64 13729.72.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.116 Safari/537.36", "templateId": 3043605, "messageId": "acd3c6a275a445a8944457a25e218daa", "region": "TG", "campaignId": 2220229, "userAgentDevice": "Other"}}, "emitted_at": 1681375002814} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:47:32 +00:00", "documentUpdatedAt": "2021-04-14 16:47:32 +00:00"}, "_type": "emailOpen", "createdAt": "2021-04-14 16:42:40 +00:00", "email": "y.kurochkin@zazmic.com", "data": {"city": "Hyderabad", "ip": "157.47.119.114", "country": "India", "userAgent": "Mozilla/5.0 (X11; CrOS x86_64 13729.72.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.116 Safari/537.36", "templateId": 3043605, "messageId": "acd3c6a275a445a8944457a25e218daa", "region": "TG", "campaignId": 2220229, "userAgentDevice": "Other"}}, "emitted_at": 1681375002814} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:29:59 +00:00", "documentUpdatedAt": "2021-04-14 16:29:59 +00:00"}, "_type": "emailClick", "createdAt": "2021-04-14 16:29:58 +00:00", "email": "y.kurochkin@zazmic.com", "data": {"city": "Ivano-Frankivsk", "ip": "62.122.200.134", "country": "Ukraine", "userAgent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Safari/537.36", "templateId": 3043605, "messageId": "acd3c6a275a445a8944457a25e218daa", "campaignId": 2220229, "userAgentDevice": "Windows", "hrefIndex": 1, "url": "https://iterable.com", "region": "26", "contentId": 12029221}}, "emitted_at": 1681375002814} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:52:00 +00:00", "documentUpdatedAt": "2021-04-14 16:52:00 +00:00"}, "_type": "emailClick", "createdAt": "2021-04-14 16:51:59 +00:00", "email": "y.kurochkin@zazmic.com", "data": {"city": "Hyderabad", "ip": "157.47.119.114", "country": "India", "userAgent": "Mozilla/5.0 (X11; CrOS x86_64 13729.72.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.116 Safari/537.36", "templateId": 3043605, "messageId": "acd3c6a275a445a8944457a25e218daa", "campaignId": 2220229, "userAgentDevice": "Other", "hrefIndex": 1, "url": "https://iterable.com", "region": "TG", "contentId": 12029221}}, "emitted_at": 1681375002815} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:26:17 +00:00", "documentUpdatedAt": "2021-04-14 16:26:17 +00:00"}, "_type": "emailOpen", "createdAt": "2021-04-14 16:26:17 +00:00", "email": "y.kurochkin@zazmic.com", "data": {"ip": "66.249.81.18", "userAgent": "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)", "templateId": 3043605, "messageId": "acd3c6a275a445a8944457a25e218daa", "campaignId": 2220229, "userAgentDevice": "Gmail"}}, "emitted_at": 1681375002815} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:26:19 +00:00", "documentUpdatedAt": "2021-04-14 16:26:19 +00:00"}, "_type": "emailOpen", "createdAt": "2021-04-14 16:26:19 +00:00", "email": "y.kurochkin@zazmic.com", "data": {"ip": "66.249.81.27", "userAgent": "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)", "templateId": 3043605, "messageId": "acd3c6a275a445a8944457a25e218daa", "campaignId": 2220229, "userAgentDevice": "Gmail"}}, "emitted_at": 1681375002815} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:55:15 +00:00", "documentUpdatedAt": "2021-04-14 16:55:15 +00:00"}, "_type": "emailClick", "createdAt": "2021-04-14 16:55:14 +00:00", "email": "y.kurochkin@zazmic.com", "data": {"city": "Hyderabad", "ip": "157.47.119.114", "country": "India", "userAgent": "Mozilla/5.0 (X11; CrOS x86_64 13729.72.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.116 Safari/537.36", "templateId": 3043605, "messageId": "acd3c6a275a445a8944457a25e218daa", "campaignId": 2220229, "userAgentDevice": "Other", "hrefIndex": 0, "url": "https://iterable.com", "region": "TG", "contentId": 12029221}}, "emitted_at": 1681375002815} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 17:00:11 +00:00", "documentUpdatedAt": "2021-04-14 17:00:11 +00:00"}, "_type": "emailOpen", "createdAt": "2021-04-14 17:00:11 +00:00", "email": "y.kurochkin@zazmic.com", "data": {"ip": "66.249.81.11", "userAgent": "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)", "templateId": 3043605, "messageId": "acd3c6a275a445a8944457a25e218daa", "campaignId": 2220229, "userAgentDevice": "Gmail"}}, "emitted_at": 1681375002816} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:52:43 +00:00", "documentUpdatedAt": "2021-04-14 16:52:43 +00:00"}, "_type": "emailSubscribe", "createdAt": "2021-04-14 16:52:43 +00:00", "email": "fake-email-50@bmail.com", "data": {"profileUpdatedAt": "2021-04-14 16:52:42 +00:00", "signupSource": "ListAPI", "userId": "new-fake-user-number-50", "emailListIds": [949810], "channelIds": [], "messageTypeIds": []}}, "emitted_at": 1681375005010} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:52:44 +00:00", "documentUpdatedAt": "2021-04-14 16:52:44 +00:00"}, "_type": "emailSubscribe", "createdAt": "2021-04-14 16:52:43 +00:00", "email": "fake-email-52@bmail.com", "data": {"profileUpdatedAt": "2021-04-14 16:52:43 +00:00", "signupSource": "ListAPI", "userId": "new-fake-user-number-52", "emailListIds": [949810], "channelIds": [], "messageTypeIds": []}}, "emitted_at": 1681375006174} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:52:21 +00:00", "documentUpdatedAt": "2021-04-14 16:52:21 +00:00"}, "_type": "emailSubscribe", "createdAt": "2021-04-14 16:52:21 +00:00", "email": "fake-email-14@bmail.com", "data": {"profileUpdatedAt": "2021-04-14 16:52:21 +00:00", "signupSource": "ListAPI", "userId": "new-fake-user-number-14", "emailListIds": [949810], "channelIds": [], "messageTypeIds": []}}, "emitted_at": 1681375006324} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:52:39 +00:00", "documentUpdatedAt": "2021-04-14 16:52:39 +00:00"}, "_type": "emailSubscribe", "createdAt": "2021-04-14 16:52:39 +00:00", "email": "fake-email-45@bmail.com", "data": {"profileUpdatedAt": "2021-04-14 16:52:39 +00:00", "signupSource": "ListAPI", "userId": "new-fake-user-number-45", "emailListIds": [949810], "channelIds": [], "messageTypeIds": []}}, "emitted_at": 1681375006484} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:52:33 +00:00", "documentUpdatedAt": "2021-04-14 16:52:33 +00:00"}, "_type": "emailSubscribe", "createdAt": "2021-04-14 16:52:33 +00:00", "email": "fake-email-29@bmail.com", "data": {"profileUpdatedAt": "2021-04-14 16:52:29 +00:00", "signupSource": "ListAPI", "userId": "new-fake-user-number-29", "emailListIds": [949810], "channelIds": [], "messageTypeIds": []}}, "emitted_at": 1681375006790} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:52:34 +00:00", "documentUpdatedAt": "2021-04-14 16:52:34 +00:00"}, "_type": "emailSubscribe", "createdAt": "2021-04-14 16:52:34 +00:00", "email": "fake-email-37@bmail.com", "data": {"profileUpdatedAt": "2021-04-14 16:52:34 +00:00", "signupSource": "ListAPI", "userId": "new-fake-user-number-37", "emailListIds": [949810], "channelIds": [], "messageTypeIds": []}}, "emitted_at": 1681375006973} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:52:32 +00:00", "documentUpdatedAt": "2021-04-14 16:52:32 +00:00"}, "_type": "emailSubscribe", "createdAt": "2021-04-14 16:52:32 +00:00", "email": "fake-email-33@bmail.com", "data": {"profileUpdatedAt": "2021-04-14 16:52:32 +00:00", "signupSource": "ListAPI", "userId": "new-fake-user-number-33", "emailListIds": [949810], "channelIds": [], "messageTypeIds": []}}, "emitted_at": 1681375007306} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:52:34 +00:00", "documentUpdatedAt": "2021-04-14 16:52:34 +00:00"}, "_type": "emailSubscribe", "createdAt": "2021-04-14 16:52:34 +00:00", "email": "fake-email-35@bmail.com", "data": {"profileUpdatedAt": "2021-04-14 16:52:33 +00:00", "signupSource": "ListAPI", "userId": "new-fake-user-number-35", "emailListIds": [949810], "channelIds": [], "messageTypeIds": []}}, "emitted_at": 1681375007455} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:52:23 +00:00", "documentUpdatedAt": "2021-04-14 16:52:23 +00:00"}, "_type": "emailSubscribe", "createdAt": "2021-04-14 16:52:22 +00:00", "email": "fake-email-16@bmail.com", "data": {"profileUpdatedAt": "2021-04-14 16:52:22 +00:00", "signupSource": "ListAPI", "userId": "new-fake-user-number-16", "emailListIds": [949810], "channelIds": [], "messageTypeIds": []}}, "emitted_at": 1681375007645} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:52:36 +00:00", "documentUpdatedAt": "2021-04-14 16:52:36 +00:00"}, "_type": "emailSubscribe", "createdAt": "2021-04-14 16:52:36 +00:00", "email": "fake-email-39@bmail.com", "data": {"profileUpdatedAt": "2021-04-14 16:52:35 +00:00", "signupSource": "ListAPI", "userId": "new-fake-user-number-39", "emailListIds": [949810], "channelIds": [], "messageTypeIds": []}}, "emitted_at": 1681375008118} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:52:39 +00:00", "documentUpdatedAt": "2021-04-14 16:52:39 +00:00"}, "_type": "emailSubscribe", "createdAt": "2021-04-14 16:52:39 +00:00", "email": "fake-email-46@bmail.com", "data": {"profileUpdatedAt": "2021-04-14 16:52:39 +00:00", "signupSource": "ListAPI", "userId": "new-fake-user-number-46", "emailListIds": [949810], "channelIds": [], "messageTypeIds": []}}, "emitted_at": 1681375008269} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:52:27 +00:00", "documentUpdatedAt": "2021-04-14 16:52:27 +00:00"}, "_type": "emailSubscribe", "createdAt": "2021-04-14 16:52:27 +00:00", "email": "fake-email-25@bmail.com", "data": {"profileUpdatedAt": "2021-04-14 16:52:27 +00:00", "signupSource": "ListAPI", "userId": "new-fake-user-number-25", "emailListIds": [949810], "channelIds": [], "messageTypeIds": []}}, "emitted_at": 1681375008442} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:52:41 +00:00", "documentUpdatedAt": "2021-04-14 16:52:41 +00:00"}, "_type": "emailSubscribe", "createdAt": "2021-04-14 16:52:41 +00:00", "email": "fake-email-49@bmail.com", "data": {"profileUpdatedAt": "2021-04-14 16:52:41 +00:00", "signupSource": "ListAPI", "userId": "new-fake-user-number-49", "emailListIds": [949810], "channelIds": [], "messageTypeIds": []}}, "emitted_at": 1681375008600} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:52:41 +00:00", "documentUpdatedAt": "2021-04-14 16:52:41 +00:00"}, "_type": "emailSubscribe", "createdAt": "2021-04-14 16:52:41 +00:00", "email": "fake-email-48@bmail.com", "data": {"profileUpdatedAt": "2021-04-14 16:52:40 +00:00", "signupSource": "ListAPI", "userId": "new-fake-user-number-48", "emailListIds": [949810], "channelIds": [], "messageTypeIds": []}}, "emitted_at": 1681375009476} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:52:42 +00:00", "documentUpdatedAt": "2021-04-14 16:52:42 +00:00"}, "_type": "emailSubscribe", "createdAt": "2021-04-14 16:52:42 +00:00", "email": "fake-email-51@bmail.com", "data": {"profileUpdatedAt": "2021-04-14 16:52:42 +00:00", "signupSource": "ListAPI", "userId": "new-fake-user-number-51", "emailListIds": [949810], "channelIds": [], "messageTypeIds": []}}, "emitted_at": 1681375009631} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:52:44 +00:00", "documentUpdatedAt": "2021-04-14 16:52:44 +00:00"}, "_type": "emailSubscribe", "createdAt": "2021-04-14 16:52:44 +00:00", "email": "fake-email-53@bmail.com", "data": {"profileUpdatedAt": "2021-04-14 16:52:43 +00:00", "signupSource": "ListAPI", "userId": "new-fake-user-number-53", "emailListIds": [949810], "channelIds": [], "messageTypeIds": []}}, "emitted_at": 1681375009779} +{"stream": "events", "data": {"itblInternal": {"documentCreatedAt": "2021-04-14 16:52:31 +00:00", "documentUpdatedAt": "2021-04-14 16:52:31 +00:00"}, "_type": "emailSubscribe", "createdAt": "2021-04-14 16:52:31 +00:00", "email": "fake-email-31@bmail.com", "data": {"profileUpdatedAt": "2021-04-14 16:52:30 +00:00", "signupSource": "ListAPI", "userId": "new-fake-user-number-31", "emailListIds": [949810], "channelIds": [], "messageTypeIds": []}}, "emitted_at": 1681375009925} From b10e5859363fbe96cc8f5f09ca68a8752ac2dba0 Mon Sep 17 00:00:00 2001 From: Arsen Losenko <20901439+arsenlosenko@users.noreply.github.com> Date: Thu, 13 Apr 2023 21:29:16 +0300 Subject: [PATCH 051/187] Source Facebook Pages: update insight metrics request params (#25143) * Source Facebook Pages: update insight metrics request params * Update Dockerfile and changelog * auto-bump connector version --------- Co-authored-by: Octavia Squidington III --- .../init-oss/src/main/resources/seed/oss_catalog.json | 2 +- .../init-oss/src/main/resources/seed/source_definitions.yaml | 2 +- .../init-oss/src/main/resources/seed/source_specs.yaml | 2 +- .../connectors/source-facebook-pages/Dockerfile | 2 +- .../source-facebook-pages/source_facebook_pages/manifest.yaml | 4 ++-- connectors.md | 2 +- docs/integrations/sources/facebook-pages.md | 1 + 7 files changed, 8 insertions(+), 7 deletions(-) diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json index 3375461d5810..17c70e0a4100 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json @@ -12286,7 +12286,7 @@ "sourceDefinitionId": "010eb12f-837b-4685-892d-0a39f76a98f5", "name": "Facebook Pages", "dockerRepository": "airbyte/source-facebook-pages", - "dockerImageTag": "0.2.3", + "dockerImageTag": "0.2.4", "documentationUrl": "https://docs.airbyte.com/integrations/sources/facebook-pages", "icon": "facebook.svg", "sourceType": "api", diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml index 20080f18f6e9..7e2245624c80 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml @@ -573,7 +573,7 @@ - name: Facebook Pages sourceDefinitionId: 010eb12f-837b-4685-892d-0a39f76a98f5 dockerRepository: airbyte/source-facebook-pages - dockerImageTag: 0.2.3 + dockerImageTag: 0.2.4 documentationUrl: https://docs.airbyte.com/integrations/sources/facebook-pages icon: facebook.svg sourceType: api diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml index 4c517edbc849..8812fc090970 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml @@ -4275,7 +4275,7 @@ oauthFlowInitParameters: [] oauthFlowOutputParameters: - - "access_token" -- dockerImage: "airbyte/source-facebook-pages:0.2.3" +- dockerImage: "airbyte/source-facebook-pages:0.2.4" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/facebook-pages" connectionSpecification: diff --git a/airbyte-integrations/connectors/source-facebook-pages/Dockerfile b/airbyte-integrations/connectors/source-facebook-pages/Dockerfile index 66b3c96215cc..9f0d1639d068 100644 --- a/airbyte-integrations/connectors/source-facebook-pages/Dockerfile +++ b/airbyte-integrations/connectors/source-facebook-pages/Dockerfile @@ -34,5 +34,5 @@ COPY source_facebook_pages ./source_facebook_pages ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=0.2.3 +LABEL io.airbyte.version=0.2.4 LABEL io.airbyte.name=airbyte/source-facebook-pages diff --git a/airbyte-integrations/connectors/source-facebook-pages/source_facebook_pages/manifest.yaml b/airbyte-integrations/connectors/source-facebook-pages/source_facebook_pages/manifest.yaml index fa10ddcd65f2..51f1081cae50 100644 --- a/airbyte-integrations/connectors/source-facebook-pages/source_facebook_pages/manifest.yaml +++ b/airbyte-integrations/connectors/source-facebook-pages/source_facebook_pages/manifest.yaml @@ -408,8 +408,8 @@ definitions: 'page_impressions_unique', 'page_impressions_paid', 'page_impressions_paid_unique', - 'page_impressions_organic', - 'page_impressions_organic_unique', + 'page_impressions_organic_v2', + 'page_impressions_organic_unique_v2', 'page_impressions_viral', 'page_impressions_viral_unique', 'page_impressions_nonviral', diff --git a/connectors.md b/connectors.md index 20a8b3d761f9..faea2f66fa20 100644 --- a/connectors.md +++ b/connectors.md @@ -70,7 +70,7 @@ | **Everhour** | Everhour icon | Source | airbyte/source-everhour:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/everhour) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-everhour) | `6babfc42-c734-4ef6-a817-6eca15f0f9b7` | | **Exchange Rates Api** | Exchange Rates Api icon | Source | airbyte/source-exchange-rates:1.2.8 | alpha | [link](https://docs.airbyte.com/integrations/sources/exchangeratesapi) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-exchange-rates) | `e2b40e36-aa0e-4bed-b41b-bcea6fa348b1` | | **Facebook Marketing** | Facebook Marketing icon | Source | airbyte/source-facebook-marketing:0.3.2 | generally_available | [link](https://docs.airbyte.com/integrations/sources/facebook-marketing) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-facebook-marketing) | `e7778cfc-e97c-4458-9ecb-b4f2bba8946c` | -| **Facebook Pages** | Facebook Pages icon | Source | airbyte/source-facebook-pages:0.2.3 | beta | [link](https://docs.airbyte.com/integrations/sources/facebook-pages) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-facebook-pages) | `010eb12f-837b-4685-892d-0a39f76a98f5` | +| **Facebook Pages** | Facebook Pages icon | Source | airbyte/source-facebook-pages:0.2.4 | beta | [link](https://docs.airbyte.com/integrations/sources/facebook-pages) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-facebook-pages) | `010eb12f-837b-4685-892d-0a39f76a98f5` | | **Fastbill** | Fastbill icon | Source | airbyte/source-fastbill:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/fastbill) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-fastbill) | `eb3e9c1c-0467-4eb7-a172-5265e04ccd0a` | | **Fauna** | Fauna icon | Source | airbyte/source-fauna:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/fauna) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-fauna) | `3825db3e-c94b-42ac-bd53-b5a9507ace2b` | | **File (CSV, JSON, Excel, Feather, Parquet)** | File (CSV, JSON, Excel, Feather, Parquet) icon | Source | airbyte/source-file:0.2.37 | generally_available | [link](https://docs.airbyte.com/integrations/sources/file) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-file) | `778daa7c-feaf-4db6-96f3-70fd645acc77` | diff --git a/docs/integrations/sources/facebook-pages.md b/docs/integrations/sources/facebook-pages.md index fefb3a059f43..bf869cb669e4 100644 --- a/docs/integrations/sources/facebook-pages.md +++ b/docs/integrations/sources/facebook-pages.md @@ -79,6 +79,7 @@ See Facebook's [documentation on rate limiting](https://developers.facebook.com/ | Version | Date | Pull Request | Subject | |:--------|:-----------|:---------------------------------------------------------|:--------------------------------------------------------------------------| +| 0.2.4 | 2023-04-13 | [25143](https://github.com/airbytehq/airbyte/pull/25143) | Update insight metrics request params | | 0.2.3 | 2023-02-23 | [23395](https://github.com/airbytehq/airbyte/pull/23395) | Parse datetime to rfc3339 | | 0.2.2 | 2023-02-10 | [22804](https://github.com/airbytehq/airbyte/pull/22804) | Retry 500 errors | | 0.2.1 | 2022-12-29 | [20925](https://github.com/airbytehq/airbyte/pull/20925) | Fix tests; modify expected records | From 8d39855c62b8f7c7686e15a7ba827062f6274d45 Mon Sep 17 00:00:00 2001 From: Augustin Date: Thu, 13 Apr 2023 20:48:23 +0200 Subject: [PATCH 052/187] fix strict-encrypt metadata dockerRepository (#25159) --- .../destination-clickhouse-strict-encrypt/metadata.yaml | 2 +- .../destination-elasticsearch-strict-encrypt/metadata.yaml | 2 +- .../connectors/destination-mongodb-strict-encrypt/metadata.yaml | 2 +- .../connectors/destination-mssql-strict-encrypt/metadata.yaml | 2 +- .../connectors/destination-mysql-strict-encrypt/metadata.yaml | 2 +- .../connectors/destination-oracle-strict-encrypt/metadata.yaml | 2 +- .../destination-postgres-strict-encrypt/metadata.yaml | 2 +- .../connectors/source-alloydb-strict-encrypt/metadata.yaml | 2 +- .../connectors/source-clickhouse-strict-encrypt/metadata.yaml | 2 +- .../connectors/source-cockroachdb-strict-encrypt/metadata.yaml | 2 +- .../connectors/source-mongodb-strict-encrypt/metadata.yaml | 2 +- .../connectors/source-mssql-strict-encrypt/metadata.yaml | 2 +- .../connectors/source-mysql-strict-encrypt/metadata.yaml | 2 +- .../connectors/source-oracle-strict-encrypt/metadata.yaml | 2 +- .../connectors/source-postgres-strict-encrypt/metadata.yaml | 2 +- 15 files changed, 15 insertions(+), 15 deletions(-) diff --git a/airbyte-integrations/connectors/destination-clickhouse-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/destination-clickhouse-strict-encrypt/metadata.yaml index 14d527150d6c..6fd13f76e187 100644 --- a/airbyte-integrations/connectors/destination-clickhouse-strict-encrypt/metadata.yaml +++ b/airbyte-integrations/connectors/destination-clickhouse-strict-encrypt/metadata.yaml @@ -8,7 +8,7 @@ data: connectorType: destination definitionId: ce0d828e-1dc4-496c-b122-2da42e637e48 dockerImageTag: 0.2.3 - dockerRepository: airbyte/destination-clickhouse + dockerRepository: airbyte/destination-clickhouse-strict-encrypt githubIssueLabel: destination-clickhouse icon: clickhouse.svg license: MIT diff --git a/airbyte-integrations/connectors/destination-elasticsearch-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/destination-elasticsearch-strict-encrypt/metadata.yaml index 90152b955b30..5d2b1254d80a 100644 --- a/airbyte-integrations/connectors/destination-elasticsearch-strict-encrypt/metadata.yaml +++ b/airbyte-integrations/connectors/destination-elasticsearch-strict-encrypt/metadata.yaml @@ -8,7 +8,7 @@ data: connectorType: destination definitionId: 68f351a7-2745-4bef-ad7f-996b8e51bb8c dockerImageTag: 0.1.6 - dockerRepository: airbyte/destination-elasticsearch + dockerRepository: airbyte/destination-elasticsearch-strict-encrypt githubIssueLabel: destination-elasticsearch icon: elasticsearch.svg license: MIT diff --git a/airbyte-integrations/connectors/destination-mongodb-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/destination-mongodb-strict-encrypt/metadata.yaml index f0823a431ae2..3c96f1caa5f9 100644 --- a/airbyte-integrations/connectors/destination-mongodb-strict-encrypt/metadata.yaml +++ b/airbyte-integrations/connectors/destination-mongodb-strict-encrypt/metadata.yaml @@ -8,7 +8,7 @@ data: connectorType: destination definitionId: 8b746512-8c2e-6ac1-4adc-b59faafd473c dockerImageTag: 0.1.9 - dockerRepository: airbyte/destination-mongodb + dockerRepository: airbyte/destination-mongodb-strict-encrypt githubIssueLabel: destination-mongodb icon: mongodb.svg license: MIT diff --git a/airbyte-integrations/connectors/destination-mssql-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/destination-mssql-strict-encrypt/metadata.yaml index b56cff2d23e9..a30d34776b20 100644 --- a/airbyte-integrations/connectors/destination-mssql-strict-encrypt/metadata.yaml +++ b/airbyte-integrations/connectors/destination-mssql-strict-encrypt/metadata.yaml @@ -8,7 +8,7 @@ data: connectorType: destination definitionId: d4353156-9217-4cad-8dd7-c108fd4f74cf dockerImageTag: 0.1.23 - dockerRepository: airbyte/destination-mssql + dockerRepository: airbyte/destination-mssql-strict-encrypt githubIssueLabel: destination-mssql icon: mssql.svg license: MIT diff --git a/airbyte-integrations/connectors/destination-mysql-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/destination-mysql-strict-encrypt/metadata.yaml index 2a45708864c6..4f91cf525fec 100644 --- a/airbyte-integrations/connectors/destination-mysql-strict-encrypt/metadata.yaml +++ b/airbyte-integrations/connectors/destination-mysql-strict-encrypt/metadata.yaml @@ -8,7 +8,7 @@ data: connectorType: destination definitionId: ca81ee7c-3163-4246-af40-094cc31e5e42 dockerImageTag: 0.1.20 - dockerRepository: airbyte/destination-mysql + dockerRepository: airbyte/destination-mysql-strict-encrypt githubIssueLabel: destination-mysql icon: mysql.svg license: MIT diff --git a/airbyte-integrations/connectors/destination-oracle-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/destination-oracle-strict-encrypt/metadata.yaml index b38a2ac6bfcf..1eee2c07a676 100644 --- a/airbyte-integrations/connectors/destination-oracle-strict-encrypt/metadata.yaml +++ b/airbyte-integrations/connectors/destination-oracle-strict-encrypt/metadata.yaml @@ -8,7 +8,7 @@ data: connectorType: destination definitionId: 3986776d-2319-4de9-8af8-db14c0996e72 dockerImageTag: 0.1.19 - dockerRepository: airbyte/destination-oracle + dockerRepository: airbyte/destination-oracle-strict-encrypt githubIssueLabel: destination-oracle icon: oracle.svg license: MIT diff --git a/airbyte-integrations/connectors/destination-postgres-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/destination-postgres-strict-encrypt/metadata.yaml index 943df18038aa..58d8606b9628 100644 --- a/airbyte-integrations/connectors/destination-postgres-strict-encrypt/metadata.yaml +++ b/airbyte-integrations/connectors/destination-postgres-strict-encrypt/metadata.yaml @@ -8,7 +8,7 @@ data: connectorType: destination definitionId: 25c5221d-dce2-4163-ade9-739ef790f503 dockerImageTag: 0.3.27 - dockerRepository: airbyte/destination-postgres + dockerRepository: airbyte/destination-postgres-strict-encrypt githubIssueLabel: destination-postgres icon: postgresql.svg license: MIT diff --git a/airbyte-integrations/connectors/source-alloydb-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/source-alloydb-strict-encrypt/metadata.yaml index c7a7c01bb820..e1fe7637de17 100644 --- a/airbyte-integrations/connectors/source-alloydb-strict-encrypt/metadata.yaml +++ b/airbyte-integrations/connectors/source-alloydb-strict-encrypt/metadata.yaml @@ -12,7 +12,7 @@ data: connectorType: source definitionId: 1fa90628-2b9e-11ed-a261-0242ac120002 dockerImageTag: 2.0.17 - dockerRepository: airbyte/source-alloydb + dockerRepository: airbyte/source-alloydb-strict-encrypt githubIssueLabel: source-alloydb icon: alloydb.svg license: MIT diff --git a/airbyte-integrations/connectors/source-clickhouse-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/source-clickhouse-strict-encrypt/metadata.yaml index 881c0c062897..184ce40fabc4 100644 --- a/airbyte-integrations/connectors/source-clickhouse-strict-encrypt/metadata.yaml +++ b/airbyte-integrations/connectors/source-clickhouse-strict-encrypt/metadata.yaml @@ -12,7 +12,7 @@ data: connectorType: source definitionId: bad83517-5e54-4a3d-9b53-63e85fbd4d7c dockerImageTag: 0.1.17 - dockerRepository: airbyte/source-clickhouse + dockerRepository: airbyte/source-clickhouse-strict-encrypt githubIssueLabel: source-clickhouse icon: clickhouse.svg license: MIT diff --git a/airbyte-integrations/connectors/source-cockroachdb-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/source-cockroachdb-strict-encrypt/metadata.yaml index 88485fbc7bc6..8ee1e94cb1cb 100644 --- a/airbyte-integrations/connectors/source-cockroachdb-strict-encrypt/metadata.yaml +++ b/airbyte-integrations/connectors/source-cockroachdb-strict-encrypt/metadata.yaml @@ -11,7 +11,7 @@ data: connectorType: source definitionId: 9fa5862c-da7c-11eb-8d19-0242ac130003 dockerImageTag: 0.1.22 - dockerRepository: airbyte/source-cockroachdb + dockerRepository: airbyte/source-cockroachdb-strict-encrypt githubIssueLabel: source-cockroachdb icon: cockroachdb.svg license: MIT diff --git a/airbyte-integrations/connectors/source-mongodb-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/source-mongodb-strict-encrypt/metadata.yaml index 97e4a25668e0..3673db11ae8f 100644 --- a/airbyte-integrations/connectors/source-mongodb-strict-encrypt/metadata.yaml +++ b/airbyte-integrations/connectors/source-mongodb-strict-encrypt/metadata.yaml @@ -8,7 +8,7 @@ data: connectorType: source definitionId: b2e713cd-cc36-4c0a-b5bd-b47cb8a0561e dockerImageTag: 0.1.19 - dockerRepository: airbyte/source-mongodb-v2 + dockerRepository: airbyte/source-mongodb-strict-encrypt githubIssueLabel: source-mongodb-v2 icon: mongodb.svg license: MIT diff --git a/airbyte-integrations/connectors/source-mssql-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/source-mssql-strict-encrypt/metadata.yaml index 74124fa7612a..f18aeb9daf9f 100644 --- a/airbyte-integrations/connectors/source-mssql-strict-encrypt/metadata.yaml +++ b/airbyte-integrations/connectors/source-mssql-strict-encrypt/metadata.yaml @@ -12,7 +12,7 @@ data: connectorType: source definitionId: b5ea17b1-f170-46dc-bc31-cc744ca984c1 dockerImageTag: 1.0.9 - dockerRepository: airbyte/source-mssql + dockerRepository: airbyte/source-mssql-strict-encrypt githubIssueLabel: source-mssql icon: mssql.svg license: MIT diff --git a/airbyte-integrations/connectors/source-mysql-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/source-mysql-strict-encrypt/metadata.yaml index ff9449af3c1e..6aa831a0c4f8 100644 --- a/airbyte-integrations/connectors/source-mysql-strict-encrypt/metadata.yaml +++ b/airbyte-integrations/connectors/source-mysql-strict-encrypt/metadata.yaml @@ -12,7 +12,7 @@ data: connectorType: source definitionId: 435bb9a5-7887-4809-aa58-28c27df0d7ad dockerImageTag: 2.0.12 - dockerRepository: airbyte/source-mysql + dockerRepository: airbyte/source-mysql-strict-encrypt githubIssueLabel: source-mysql icon: mysql.svg license: MIT diff --git a/airbyte-integrations/connectors/source-oracle-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/source-oracle-strict-encrypt/metadata.yaml index 044d32c9061f..de3652aeb250 100644 --- a/airbyte-integrations/connectors/source-oracle-strict-encrypt/metadata.yaml +++ b/airbyte-integrations/connectors/source-oracle-strict-encrypt/metadata.yaml @@ -12,7 +12,7 @@ data: connectorType: source definitionId: b39a7370-74c3-45a6-ac3a-380d48520a83 dockerImageTag: 0.3.24 - dockerRepository: airbyte/source-oracle + dockerRepository: airbyte/source-oracle-strict-encrypt githubIssueLabel: source-oracle icon: oracle.svg license: MIT diff --git a/airbyte-integrations/connectors/source-postgres-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/source-postgres-strict-encrypt/metadata.yaml index 6e8f3e134759..6e288f2cb1ae 100644 --- a/airbyte-integrations/connectors/source-postgres-strict-encrypt/metadata.yaml +++ b/airbyte-integrations/connectors/source-postgres-strict-encrypt/metadata.yaml @@ -12,7 +12,7 @@ data: connectorType: source definitionId: decd338e-5647-4c0b-adf4-da0e75f5a750 dockerImageTag: 2.0.17 - dockerRepository: airbyte/source-postgres + dockerRepository: airbyte/source-postgres-strict-encrypt githubIssueLabel: source-postgres icon: postgresql.svg license: MIT From a4bfb2c73013fb085340e9cb55d7db7bbe40a7fc Mon Sep 17 00:00:00 2001 From: Arsen Losenko <20901439+arsenlosenko@users.noreply.github.com> Date: Thu, 13 Apr 2023 21:59:17 +0300 Subject: [PATCH 053/187] Source Slack: update expected records (#25150) --- .../source-slack/integration_tests/expected_records.jsonl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/airbyte-integrations/connectors/source-slack/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-slack/integration_tests/expected_records.jsonl index b07e32139c3a..55f3265d7d7f 100644 --- a/airbyte-integrations/connectors/source-slack/integration_tests/expected_records.jsonl +++ b/airbyte-integrations/connectors/source-slack/integration_tests/expected_records.jsonl @@ -1,6 +1,6 @@ -{"stream": "channels", "data": {"id": "C04KX3KEZ54", "name": "general", "is_channel": true, "is_group": false, "is_im": false, "is_mpim": false, "is_private": false, "created": 1674485468, "is_archived": false, "is_general": true, "unlinked": 0, "name_normalized": "general", "is_shared": false, "is_org_shared": false, "is_pending_ext_shared": false, "pending_shared": [], "context_team_id": "T04KX3KDDU6", "updated": 1674485468693, "parent_conversation": null, "creator": "U04L65GPMKN", "is_ext_shared": false, "shared_team_ids": ["T04KX3KDDU6"], "pending_connected_team_ids": [], "is_member": true, "topic": {"value": "", "creator": "", "last_set": 0}, "purpose": {"value": "This is the one channel that will always include everyone. It\u2019s a great spot for announcements and team-wide conversations.", "creator": "U04L65GPMKN", "last_set": 1674485468}, "previous_names": [], "num_members": 3}, "emitted_at": 1675094013783} -{"stream": "channels", "data": {"id": "C04L3M4PTJ6", "name": "random", "is_channel": true, "is_group": false, "is_im": false, "is_mpim": false, "is_private": false, "created": 1674485468, "is_archived": false, "is_general": false, "unlinked": 0, "name_normalized": "random", "is_shared": false, "is_org_shared": false, "is_pending_ext_shared": false, "pending_shared": [], "context_team_id": "T04KX3KDDU6", "updated": 1674485468902, "parent_conversation": null, "creator": "U04L65GPMKN", "is_ext_shared": false, "shared_team_ids": ["T04KX3KDDU6"], "pending_connected_team_ids": [], "is_member": true, "topic": {"value": "", "creator": "", "last_set": 0}, "purpose": {"value": "This channel is for... well, everything else. It\u2019s a place for team jokes, spur-of-the-moment ideas, and funny GIFs. Go wild!", "creator": "U04L65GPMKN", "last_set": 1674485468}, "previous_names": [], "num_members": 3}, "emitted_at": 1675094013784} -{"stream": "channels", "data": {"id": "C04LTCM2Y56", "name": "integrationtest", "is_channel": true, "is_group": false, "is_im": false, "is_mpim": false, "is_private": false, "created": 1674485589, "is_archived": false, "is_general": false, "unlinked": 0, "name_normalized": "integrationtest", "is_shared": false, "is_org_shared": false, "is_pending_ext_shared": false, "pending_shared": [], "context_team_id": "T04KX3KDDU6", "updated": 1674485589890, "parent_conversation": null, "creator": "U04L65GPMKN", "is_ext_shared": false, "shared_team_ids": ["T04KX3KDDU6"], "pending_connected_team_ids": [], "is_member": true, "topic": {"value": "", "creator": "", "last_set": 0}, "purpose": {"value": "This channel is for everything #integrationtest. Hold meetings, share docs, and make decisions together with your team.", "creator": "U04L65GPMKN", "last_set": 1674485589}, "previous_names": [], "num_members": 3}, "emitted_at": 1675094013785} +{"stream": "channels", "data": {"id": "C04KX3KEZ54", "name": "general", "is_channel": true, "is_group": false, "is_im": false, "is_mpim": false, "is_private": false, "created": 1674485468, "is_archived": false, "is_general": true, "unlinked": 0, "name_normalized": "general", "is_shared": false, "is_org_shared": false, "is_pending_ext_shared": false, "pending_shared": [], "context_team_id": "T04KX3KDDU6", "updated": 1681216123063, "parent_conversation": null, "creator": "U04L65GPMKN", "is_ext_shared": false, "shared_team_ids": ["T04KX3KDDU6"], "pending_connected_team_ids": [], "is_member": true, "topic": {"value": "", "creator": "", "last_set": 0}, "purpose": {"value": "This is the one channel that will always include everyone. It\u2019s a great spot for announcements and team-wide conversations.", "creator": "U04L65GPMKN", "last_set": 1674485468}, "previous_names": [], "num_members": 3}, "emitted_at": 1675094013783} +{"stream": "channels", "data": {"id": "C04L3M4PTJ6", "name": "random", "is_channel": true, "is_group": false, "is_im": false, "is_mpim": false, "is_private": false, "created": 1674485468, "is_archived": false, "is_general": false, "unlinked": 0, "name_normalized": "random", "is_shared": false, "is_org_shared": false, "is_pending_ext_shared": false, "pending_shared": [], "context_team_id": "T04KX3KDDU6", "updated": 1681216123075, "parent_conversation": null, "creator": "U04L65GPMKN", "is_ext_shared": false, "shared_team_ids": ["T04KX3KDDU6"], "pending_connected_team_ids": [], "is_member": true, "topic": {"value": "", "creator": "", "last_set": 0}, "purpose": {"value": "This channel is for... well, everything else. It\u2019s a place for team jokes, spur-of-the-moment ideas, and funny GIFs. Go wild!", "creator": "U04L65GPMKN", "last_set": 1674485468}, "previous_names": [], "num_members": 3}, "emitted_at": 1675094013784} +{"stream": "channels", "data": {"id": "C04LTCM2Y56", "name": "integrationtest", "is_channel": true, "is_group": false, "is_im": false, "is_mpim": false, "is_private": false, "created": 1674485589, "is_archived": false, "is_general": false, "unlinked": 0, "name_normalized": "integrationtest", "is_shared": false, "is_org_shared": false, "is_pending_ext_shared": false, "pending_shared": [], "context_team_id": "T04KX3KDDU6", "updated": 1681216123086, "parent_conversation": null, "creator": "U04L65GPMKN", "is_ext_shared": false, "shared_team_ids": ["T04KX3KDDU6"], "pending_connected_team_ids": [], "is_member": true, "topic": {"value": "", "creator": "", "last_set": 0}, "purpose": {"value": "This channel is for everything #integrationtest. Hold meetings, share docs, and make decisions together with your team.", "creator": "U04L65GPMKN", "last_set": 1674485589}, "previous_names": [], "num_members": 3}, "emitted_at": 1675094013785} {"stream": "users", "data": {"id": "USLACKBOT", "team_id": "T04KX3KDDU6", "name": "slackbot", "deleted": false, "color": "757575", "real_name": "Slackbot", "tz": "America/Los_Angeles", "tz_label": "Pacific Daylight Time", "tz_offset": -25200, "profile": {"title": "", "phone": "", "skype": "", "real_name": "Slackbot", "real_name_normalized": "Slackbot", "display_name": "Slackbot", "display_name_normalized": "Slackbot", "fields": {}, "status_text": "", "status_emoji": "", "status_emoji_display_info": [], "status_expiration": 0, "avatar_hash": "sv41d8cd98f0", "always_active": true, "first_name": "slackbot", "last_name": "", "image_24": "https://a.slack-edge.com/80588/img/slackbot_24.png", "image_32": "https://a.slack-edge.com/80588/img/slackbot_32.png", "image_48": "https://a.slack-edge.com/80588/img/slackbot_48.png", "image_72": "https://a.slack-edge.com/80588/img/slackbot_72.png", "image_192": "https://a.slack-edge.com/80588/marketing/img/avatars/slackbot/avatar-slackbot.png", "image_512": "https://a.slack-edge.com/80588/img/slackbot_512.png", "status_text_canonical": "", "team": "T04KX3KDDU6"}, "is_admin": false, "is_owner": false, "is_primary_owner": false, "is_restricted": false, "is_ultra_restricted": false, "is_bot": false, "is_app_user": false, "updated": 0, "is_email_confirmed": false, "who_can_share_contact_card": "EVERYONE"}, "emitted_at": 1680008591232} {"stream": "users", "data": {"id": "U04KUMXNYMV", "team_id": "T04KX3KDDU6", "name": "deactivateduser693438", "deleted": true, "profile": {"title": "", "phone": "", "skype": "", "real_name": "Deactivated User", "real_name_normalized": "Deactivated User", "display_name": "deactivateduser", "display_name_normalized": "deactivateduser", "fields": null, "status_text": "", "status_emoji": "", "status_emoji_display_info": [], "status_expiration": 0, "avatar_hash": "g849cc56ed76", "huddle_state": "default_unset", "first_name": "Deactivated", "last_name": "User", "image_24": "https://secure.gravatar.com/avatar/d5320ceddda202563fd9e6222c07c00a.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0011-24.png", "image_32": "https://secure.gravatar.com/avatar/d5320ceddda202563fd9e6222c07c00a.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0011-32.png", "image_48": "https://secure.gravatar.com/avatar/d5320ceddda202563fd9e6222c07c00a.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0011-48.png", "image_72": "https://secure.gravatar.com/avatar/d5320ceddda202563fd9e6222c07c00a.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0011-72.png", "image_192": "https://secure.gravatar.com/avatar/d5320ceddda202563fd9e6222c07c00a.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0011-192.png", "image_512": "https://secure.gravatar.com/avatar/d5320ceddda202563fd9e6222c07c00a.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0011-512.png", "status_text_canonical": "", "team": "T04KX3KDDU6"}, "is_bot": false, "is_app_user": false, "updated": 1675090804, "is_forgotten": true, "is_invited_user": true}, "emitted_at": 1680008591233} {"stream": "users", "data": {"id": "U04L2KY5CES", "team_id": "T04KX3KDDU6", "name": "deactivateduser686066", "deleted": true, "profile": {"title": "", "phone": "", "skype": "", "real_name": "Deactivated User", "real_name_normalized": "Deactivated User", "display_name": "deactivateduser", "display_name_normalized": "deactivateduser", "fields": null, "status_text": "", "status_emoji": "", "status_emoji_display_info": [], "status_expiration": 0, "avatar_hash": "g849cc56ed76", "huddle_state": "default_unset", "first_name": "Deactivated", "last_name": "User", "image_24": "https://secure.gravatar.com/avatar/cacb225265b3b19c4e72029a62cf1ef1.jpg?s=24&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-24.png", "image_32": "https://secure.gravatar.com/avatar/cacb225265b3b19c4e72029a62cf1ef1.jpg?s=32&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-32.png", "image_48": "https://secure.gravatar.com/avatar/cacb225265b3b19c4e72029a62cf1ef1.jpg?s=48&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-48.png", "image_72": "https://secure.gravatar.com/avatar/cacb225265b3b19c4e72029a62cf1ef1.jpg?s=72&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-72.png", "image_192": "https://secure.gravatar.com/avatar/cacb225265b3b19c4e72029a62cf1ef1.jpg?s=192&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-192.png", "image_512": "https://secure.gravatar.com/avatar/cacb225265b3b19c4e72029a62cf1ef1.jpg?s=512&d=https%3A%2F%2Fa.slack-edge.com%2Fdf10d%2Fimg%2Favatars%2Fava_0009-512.png", "status_text_canonical": "", "team": "T04KX3KDDU6"}, "is_bot": false, "is_app_user": false, "updated": 1675090785, "is_forgotten": true, "is_invited_user": true}, "emitted_at": 1680008591233} From 7ebf1e6af704a2b90e97e0fd8edfc2ba95e9f6e9 Mon Sep 17 00:00:00 2001 From: Augustin Date: Thu, 13 Apr 2023 21:51:58 +0200 Subject: [PATCH 054/187] dagger: upgrade to 0.5.0 (#25171) * dagger: upgrade to 0.5.0 * clean class ConnectorPackageInstall(Step): --- .github/actions/run-dagger-pipeline/action.yml | 8 -------- .../connector_integration_test_single_dagger.yml | 14 -------------- .../workflows/connector_nightly_builds_dagger.yml | 7 ------- .../pipelines/tests/python_connectors.py | 2 +- tools/ci_connector_ops/setup.py | 2 +- 5 files changed, 2 insertions(+), 31 deletions(-) diff --git a/.github/actions/run-dagger-pipeline/action.yml b/.github/actions/run-dagger-pipeline/action.yml index 8ceac5340995..dca73bbb168e 100644 --- a/.github/actions/run-dagger-pipeline/action.yml +++ b/.github/actions/run-dagger-pipeline/action.yml @@ -38,14 +38,6 @@ runs: shell: bash run: | export _EXPERIMENTAL_DAGGER_RUNNER_HOST="unix:///var/run/buildkit/buildkitd.sock" - DAGGER_CLI_COMMIT="67c7e7635cf4ea0e446e2fed522a3e314c960f6a" - DAGGER_TMP_BINDIR="/tmp/dagger_${DAGGER_CLI_COMMIT}" - export _EXPERIMENTAL_DAGGER_CLI_BIN="$DAGGER_TMP_BINDIR/dagger" - if [ ! -f "$_EXPERIMENTAL_DAGGER_CLI_BIN" ]; then - mkdir -p "$DAGGER_TMP_BINDIR" - curl "https://dl.dagger.io/dagger/main/${DAGGER_CLI_COMMIT}/dagger_${DAGGER_CLI_COMMIT}_$(uname -s | tr A-Z a-z)_$(uname -m | sed s/x86_64/amd64/).tar.gz" | tar xvz -C "$DAGGER_TMP_BINDIR" - fi - airbyte-ci --is-ci --gha-workflow-run-id=${{ github.run_id }} ${{ inputs.subcommand }} ${{ inputs.options }} env: diff --git a/.github/workflows/connector_integration_test_single_dagger.yml b/.github/workflows/connector_integration_test_single_dagger.yml index ffc7550ee0b3..56a849133f49 100644 --- a/.github/workflows/connector_integration_test_single_dagger.yml +++ b/.github/workflows/connector_integration_test_single_dagger.yml @@ -39,13 +39,6 @@ jobs: if: github.event_name == 'workflow_dispatch' run: | export _EXPERIMENTAL_DAGGER_RUNNER_HOST="unix:///var/run/buildkit/buildkitd.sock" - DAGGER_CLI_COMMIT="f0119bcde82e06731558a8baf70d6e7d271b21d1" - DAGGER_TMP_BINDIR="/tmp/dagger_${DAGGER_CLI_COMMIT}" - export _EXPERIMENTAL_DAGGER_CLI_BIN="$DAGGER_TMP_BINDIR/dagger" - if [ ! -f "$_EXPERIMENTAL_DAGGER_CLI_BIN" ]; then - mkdir -p "$DAGGER_TMP_BINDIR" - curl "https://dl.dagger.io/dagger/main/${DAGGER_CLI_COMMIT}/dagger_${DAGGER_CLI_COMMIT}_$(uname -s | tr A-Z a-z)_$(uname -m | sed s/x86_64/amd64/).tar.gz" | tar xvz -C "$DAGGER_TMP_BINDIR" - fi airbyte-ci --is-ci --gha-workflow-run-id=${{ github.run_id }} connectors test ${{ github.event.inputs.test-connectors-options }} env: _EXPERIMENTAL_DAGGER_CLOUD_TOKEN: "p.eyJ1IjogIjFiZjEwMmRjLWYyZmQtNDVhNi1iNzM1LTgxNzI1NGFkZDU2ZiIsICJpZCI6ICJlNjk3YzZiYy0yMDhiLTRlMTktODBjZC0yNjIyNGI3ZDBjMDEifQ.hT6eMOYt3KZgNoVGNYI3_v4CC-s19z8uQsBkGrBhU3k" @@ -63,13 +56,6 @@ jobs: if: github.event_name == 'pull_request' run: | export _EXPERIMENTAL_DAGGER_RUNNER_HOST="unix:///var/run/buildkit/buildkitd.sock" - DAGGER_CLI_COMMIT="f0119bcde82e06731558a8baf70d6e7d271b21d1" - DAGGER_TMP_BINDIR="/tmp/dagger_${DAGGER_CLI_COMMIT}" - export _EXPERIMENTAL_DAGGER_CLI_BIN="$DAGGER_TMP_BINDIR/dagger" - if [ ! -f "$_EXPERIMENTAL_DAGGER_CLI_BIN" ]; then - mkdir -p "$DAGGER_TMP_BINDIR" - curl "https://dl.dagger.io/dagger/main/${DAGGER_CLI_COMMIT}/dagger_${DAGGER_CLI_COMMIT}_$(uname -s | tr A-Z a-z)_$(uname -m | sed s/x86_64/amd64/).tar.gz" | tar xvz -C "$DAGGER_TMP_BINDIR" - fi airbyte-ci --is-ci --gha-workflow-run-id=${{ github.run_id }} connectors test --modified env: _EXPERIMENTAL_DAGGER_CLOUD_TOKEN: "p.eyJ1IjogIjFiZjEwMmRjLWYyZmQtNDVhNi1iNzM1LTgxNzI1NGFkZDU2ZiIsICJpZCI6ICJlNjk3YzZiYy0yMDhiLTRlMTktODBjZC0yNjIyNGI3ZDBjMDEifQ.hT6eMOYt3KZgNoVGNYI3_v4CC-s19z8uQsBkGrBhU3k" diff --git a/.github/workflows/connector_nightly_builds_dagger.yml b/.github/workflows/connector_nightly_builds_dagger.yml index 387a7943b3ea..9723ec484d92 100644 --- a/.github/workflows/connector_nightly_builds_dagger.yml +++ b/.github/workflows/connector_nightly_builds_dagger.yml @@ -44,13 +44,6 @@ jobs: - name: Test connectors run: | export _EXPERIMENTAL_DAGGER_RUNNER_HOST="unix:///var/run/buildkit/buildkitd.sock" - DAGGER_CLI_COMMIT="f0119bcde82e06731558a8baf70d6e7d271b21d1" - DAGGER_TMP_BINDIR="/tmp/dagger_${DAGGER_CLI_COMMIT}" - export _EXPERIMENTAL_DAGGER_CLI_BIN="$DAGGER_TMP_BINDIR/dagger" - if [ ! -f "$_EXPERIMENTAL_DAGGER_CLI_BIN" ]; then - mkdir -p "$DAGGER_TMP_BINDIR" - curl "https://dl.dagger.io/dagger/main/${DAGGER_CLI_COMMIT}/dagger_${DAGGER_CLI_COMMIT}_$(uname -s | tr A-Z a-z)_$(uname -m | sed s/x86_64/amd64/).tar.gz" | tar xvz -C "$DAGGER_TMP_BINDIR" - fi airbyte-ci --is-ci --gha-workflow-run-id=${{ github.run_id }} connectors test ${{ inputs.test-connectors-options || '--concurrency=5 --release-stage=generally_available --release-stage=beta' }} env: _EXPERIMENTAL_DAGGER_CLOUD_TOKEN: "p.eyJ1IjogIjFiZjEwMmRjLWYyZmQtNDVhNi1iNzM1LTgxNzI1NGFkZDU2ZiIsICJpZCI6ICJlNjk3YzZiYy0yMDhiLTRlMTktODBjZC0yNjIyNGI3ZDBjMDEifQ.hT6eMOYt3KZgNoVGNYI3_v4CC-s19z8uQsBkGrBhU3k" diff --git a/tools/ci_connector_ops/ci_connector_ops/pipelines/tests/python_connectors.py b/tools/ci_connector_ops/ci_connector_ops/pipelines/tests/python_connectors.py index 16dec87921a3..5cde808fc8f2 100644 --- a/tools/ci_connector_ops/ci_connector_ops/pipelines/tests/python_connectors.py +++ b/tools/ci_connector_ops/ci_connector_ops/pipelines/tests/python_connectors.py @@ -61,7 +61,7 @@ async def _run(self) -> Tuple[StepResult, Container]: Tuple[StepResult, Container]: Failure or success of the package installation and the connector under test container (with the connector package installed). """ connector_under_test = await environments.with_installed_airbyte_connector(self.context) - return await self.get_step_result(connector_under_test), connector_under_test + return (await self.get_step_result(connector_under_test)), connector_under_test class UnitTests(PytestStep): diff --git a/tools/ci_connector_ops/setup.py b/tools/ci_connector_ops/setup.py index 67f0b7fc8f94..9616de6d8b08 100644 --- a/tools/ci_connector_ops/setup.py +++ b/tools/ci_connector_ops/setup.py @@ -43,7 +43,7 @@ def local_pkg(name: str) -> str: ] PIPELINES_REQUIREMENTS = [ - "dagger-io~=0.4.2", + "dagger-io==0.5.0", "asyncer", "anyio", ] From c379849d7f65edc7eac8b659c98fed31a47df27a Mon Sep 17 00:00:00 2001 From: Boluwatife Victor <95125924+BirdboyBolu@users.noreply.github.com> Date: Thu, 13 Apr 2023 21:00:16 +0100 Subject: [PATCH 055/187] Fixed missing punctuations (#25151) * Update README.md I gave a better description to the Airbyte Cloud section, converted a few passive words to active, and added a missing comma. * Update README.md I noticed several punctuation marks were missing, so I fixed them. I also want to use this opportunity to draw get the attention of the docs team. I would love to join Airbyte as a technical writer and be a part of the team. I am more than willing to handle these tasks, even if the organization does not have the current budget to onboard a new technical writer. Also, I filled the form to participate in the Airbyte Writer Program. I hope the team reviews my topic and allow me contribute to the data insight and tutorial articles. Cheers! * Update README.md --------- Co-authored-by: Marcos Marx --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 1e6ca8488e42..57c66ce34555 100644 --- a/README.md +++ b/README.md @@ -28,13 +28,13 @@

    -We believe that only an **open-source** solution to data movement can cover the **long tail of data sources** while empowering data engineers to **customize existing connectors**. Our ultimate vision is to help you move data from any source to any destination. Airbyte already provides [300+ connectors](https://docs.airbyte.com/integrations/) for popular APIs, databases, data warehouses and data lakes. +We believe that only an **open-source** solution to data movement can cover the **long tail of data sources** while empowering data engineers to **customize existing connectors**. Our ultimate vision is to help you move data from any source to any destination. Airbyte already provides [300+ connectors](https://docs.airbyte.com/integrations/) for popular APIs, databases, data warehouses, and data lakes. You can implement Airbyte connectors in any language and take the form of a Docker image that follows the [Airbyte specification](https://docs.airbyte.com/understanding-airbyte/airbyte-protocol/). You can create new connectors very fast with: - The [low-code Connector Development Kit](https://docs.airbyte.com/connector-development/config-based/low-code-cdk-overview) (CDK) for API connectors ([demo](https://www.youtube.com/watch?v=i7VSL2bDvmw)) - The [Python CDK](https://docs.airbyte.com/connector-development/cdk-python/) ([tutorial](https://docs.airbyte.com/connector-development/tutorials/cdk-speedrun)) -Airbyte has a built-in scheduler and uses [Temporal](https://airbyte.com/blog/scale-workflow-orchestration-with-temporal) to orchestrate jobs and ensure reliability at scale. Airbyte leverages [dbt](https://www.youtube.com/watch?v=saXwh6SpeHA) to normalize extracted data and can trigger custom transformations in SQL and dbt. You can also orchestrate Airbyte syncs with [Airflow](https://docs.airbyte.com/operator-guides/using-the-airflow-airbyte-operator), [Prefect](https://docs.airbyte.com/operator-guides/using-prefect-task) or [Dagster](https://docs.airbyte.com/operator-guides/using-dagster-integration). +Airbyte has a built-in scheduler and uses [Temporal](https://airbyte.com/blog/scale-workflow-orchestration-with-temporal) to orchestrate jobs and ensure reliability at scale. Airbyte leverages [dbt](https://www.youtube.com/watch?v=saXwh6SpeHA) to normalize extracted data and can trigger custom transformations in SQL and dbt. You can also orchestrate Airbyte syncs with [Airflow](https://docs.airbyte.com/operator-guides/using-the-airflow-airbyte-operator), [Prefect](https://docs.airbyte.com/operator-guides/using-prefect-task), or [Dagster](https://docs.airbyte.com/operator-guides/using-dagster-integration). ![Airbyte OSS Connections UI](https://user-images.githubusercontent.com/2302748/205949986-5207ca24-f1f0-41b1-97e1-a0745a0de55a.png) @@ -85,13 +85,13 @@ Sign up for [Airbyte Cloud](https://cloud.airbyte.io/signup) and get free credit Get started by checking Github issues and creating a Pull Request. An easy way to start contributing is to update an existing connector or create a new connector using the low-code and Python CDKs. You can find the code for existing connectors in the [connectors](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors) directory. The Airbyte platform is written in Java, and the frontend in React. You can also contribute to our docs and tutorials. Advanced Airbyte users can apply to the [Maintainer program](https://airbyte.com/maintainer-program) and [Writer Program](https://airbyte.com/write-for-the-community). -If you would like to make a contribution to the platform itself, please refer to guides in [the platform repository](https://github.com/airbytehq/airbyte-platform) +If you would like to make a contribution to the platform itself, please refer to guides in [the platform repository](https://github.com/airbytehq/airbyte-platform). Read the [Contributing guide](https://docs.airbyte.com/contributing-to-airbyte/). ## Reporting vulnerabilities -⚠️ Please do not file GitHub issues or post on our public forum for security vulnerabilities as they are public! ⚠️ +⚠️ Please do not file GitHub issues or post on our public forum for security vulnerabilities, as they are public! ⚠️ Airbyte takes security issues very seriously. If you have any concerns about Airbyte or believe you have uncovered a vulnerability, please get in touch via the e-mail address security@airbyte.io. In the message, try to provide a description of the issue and ideally a way of reproducing it. The security team will get back to you as soon as possible. From b089ce393fd0d910fabe454c7856d73393cb319f Mon Sep 17 00:00:00 2001 From: Rodi Reich Zilberman <867491+rodireich@users.noreply.github.com> Date: Thu, 13 Apr 2023 13:47:20 -0700 Subject: [PATCH 056/187] refactor source harness and GitHub action to add source-mysql (#25036) * refactor to add source-mysql * refactor to add source-mysql * refactor to add source-mysql * test * Automated Change * fix if condition * try multiline * new db * add mysql catalogs --------- Co-authored-by: rodireich --- .../connector-performance-command.yml | 13 +- .../integrations/performance/Main.java | 16 +- .../catalogs/source-mysql/10m_catalog.json | 161 ++++++++++++++++++ .../catalogs/source-mysql/1m_catalog.json | 161 ++++++++++++++++++ .../catalogs/source-mysql/20m_catalog.json | 161 ++++++++++++++++++ .../bottleneck_stream1_catalog.json | 37 ++++ .../{ => source-postgres}/10m_catalog.json | 0 .../{ => source-postgres}/1m_catalog.json | 0 .../{ => source-postgres}/20m_catalog.json | 0 .../bottleneck_stream1_catalog.json | 0 10 files changed, 539 insertions(+), 10 deletions(-) create mode 100644 airbyte-integrations/connectors-performance/source-harness/src/main/resources/catalogs/source-mysql/10m_catalog.json create mode 100644 airbyte-integrations/connectors-performance/source-harness/src/main/resources/catalogs/source-mysql/1m_catalog.json create mode 100644 airbyte-integrations/connectors-performance/source-harness/src/main/resources/catalogs/source-mysql/20m_catalog.json create mode 100644 airbyte-integrations/connectors-performance/source-harness/src/main/resources/catalogs/source-mysql/bottleneck_stream1_catalog.json rename airbyte-integrations/connectors-performance/source-harness/src/main/resources/catalogs/{ => source-postgres}/10m_catalog.json (100%) rename airbyte-integrations/connectors-performance/source-harness/src/main/resources/catalogs/{ => source-postgres}/1m_catalog.json (100%) rename airbyte-integrations/connectors-performance/source-harness/src/main/resources/catalogs/{ => source-postgres}/20m_catalog.json (100%) rename airbyte-integrations/connectors-performance/source-harness/src/main/resources/catalogs/{ => source-postgres}/bottleneck_stream1_catalog.json (100%) diff --git a/.github/workflows/connector-performance-command.yml b/.github/workflows/connector-performance-command.yml index c458e0895758..5d43370ff921 100644 --- a/.github/workflows/connector-performance-command.yml +++ b/.github/workflows/connector-performance-command.yml @@ -81,8 +81,9 @@ jobs: if: steps.regex.outputs.first_match != github.event.inputs.connector run: echo "The connector provided has an invalid format!" && exit 1 - name: Filter supported connectors - if: "${{ github.event.inputs.connector != 'connectors/source-postgres' }}" - run: echo "Only connectors/source-postgres currently supported by harness" && exit 1 + if: "${{ github.event.inputs.connector != 'connectors/source-postgres' && + github.event.inputs.connector != 'connectors/source-mysql' }}" + run: echo "Only connectors/source-postgres and source-mysql currently supported by harness" && exit 1 - name: Checkout Airbyte uses: actions/checkout@v3 with: @@ -117,8 +118,9 @@ jobs: run: | echo "Building... ${{github.event.inputs.connector}}" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY # this is a blank line - echo "Running ./gradlew :airbyte-integrations:connectors:source-postgres:build -x check" - ./gradlew :airbyte-integrations:connectors:source-postgres:build -x check + connector_name=$(echo ${{ github.event.inputs.connector }} | cut -d / -f 2) + echo "Running ./gradlew :airbyte-integrations:connectors:$connector_name:build -x check" + ./gradlew :airbyte-integrations:connectors:$connector_name:build -x check - name: KIND Kubernetes Cluster Setup uses: helm/kind-action@v1.4.0 with: @@ -133,7 +135,8 @@ jobs: suffix: '"}}' run: | kubectl apply -f ./tools/bin/admin-service-account.yaml - kind load docker-image airbyte/source-postgres:dev --name chart-testing + connector_name=$(echo $CONN | cut -d / -f 2) + kind load docker-image airbyte/$connector_name:dev --name chart-testing kind load docker-image airbyte/source-harness:dev --name chart-testing export CONNECTOR_IMAGE_NAME=${CONN/connectors/airbyte}:dev export DATASET=$DS diff --git a/airbyte-integrations/connectors-performance/source-harness/src/main/java/io/airbyte/integrations/performance/Main.java b/airbyte-integrations/connectors-performance/source-harness/src/main/java/io/airbyte/integrations/performance/Main.java index 7ceb761128a7..155cd31a79fe 100644 --- a/airbyte-integrations/connectors-performance/source-harness/src/main/java/io/airbyte/integrations/performance/Main.java +++ b/airbyte-integrations/connectors-performance/source-harness/src/main/java/io/airbyte/integrations/performance/Main.java @@ -19,7 +19,7 @@ @Slf4j public class Main { - private static final String CREDENTIALS_PATH = "secrets/%s_credentials.json"; + private static final String CREDENTIALS_PATH = "secrets/%s_%s_credentials.json"; public static void main(final String[] args) { log.info("args: {}", Arrays.toString(args)); @@ -32,9 +32,15 @@ public static void main(final String[] args) { image = args[0]; dataset = args[1]; } + default -> { + log.info("unexpected arguments"); + System.exit(1); + } } - final Path credsPath = Path.of(CREDENTIALS_PATH.formatted(dataset)); + final String connector = image.substring(image.indexOf("/") + 1, image.indexOf(":")); + log.info("Connector name: {}", connector); + final Path credsPath = Path.of(CREDENTIALS_PATH.formatted(connector, dataset)); if (!Files.exists(credsPath)) { throw new IllegalStateException("{module-root}/" + credsPath + " not found. Must provide path to a source-harness credentials file."); @@ -44,7 +50,7 @@ public static void main(final String[] args) { final JsonNode catalog; try { - catalog = getCatalog(dataset); + catalog = getCatalog(dataset, connector); } catch (final IOException ex) { throw new IllegalStateException("Failed to read catalog", ex); } @@ -86,9 +92,9 @@ public static void main(final String[] args) { System.exit(0); } - static JsonNode getCatalog(final String dataset) throws IOException { + static JsonNode getCatalog(final String dataset, final String connector) throws IOException { final ObjectMapper objectMapper = new ObjectMapper(); - final String catalogFilename = "catalogs/%s_catalog.json".formatted(dataset); + final String catalogFilename = "catalogs/%s/%s_catalog.json".formatted(connector, dataset); final InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(catalogFilename); return objectMapper.readTree(is); } diff --git a/airbyte-integrations/connectors-performance/source-harness/src/main/resources/catalogs/source-mysql/10m_catalog.json b/airbyte-integrations/connectors-performance/source-harness/src/main/resources/catalogs/source-mysql/10m_catalog.json new file mode 100644 index 000000000000..75d4fc01be8f --- /dev/null +++ b/airbyte-integrations/connectors-performance/source-harness/src/main/resources/catalogs/source-mysql/10m_catalog.json @@ -0,0 +1,161 @@ +{ + "streams": [ + { + "stream": { + "name": "purchases", + "namespace": "performance_10m", + "json_schema": { + "type": "object", + "properties": { + "id": { + "type": "number", + "airbyte_type": "integer" + }, + "user_id": { + "type": "number", + "airbyte_type": "integer" + }, + "product_id": { + "type": "number", + "airbyte_type": "integer" + }, + "returned_at": { + "type": "string", + "format": "date-time", + "airbyte_type": "timestamp_with_timezone" + }, + "purchased_at": { + "type": "string", + "format": "date-time", + "airbyte_type": "timestamp_with_timezone" + }, + "added_to_cart_at": { + "type": "string", + "format": "date-time", + "airbyte_type": "timestamp_with_timezone" + } + } + }, + "default_cursor_field": [], + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "full_refresh", + "primary_key": [["id"]], + "cursor_field": ["id"], + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "users", + "namespace": "performance_10m", + "json_schema": { + "type": "object", + "properties": { + "id": { + "type": "number", + "airbyte_type": "integer" + }, + "age": { + "type": "number", + "airbyte_type": "integer" + }, + "name": { + "type": "string" + }, + "email": { + "type": "string" + }, + "title": { + "type": "string" + }, + "gender": { + "type": "string" + }, + "height": { + "type": "number" + }, + "weight": { + "type": "number", + "airbyte_type": "integer" + }, + "language": { + "type": "string" + }, + "telephone": { + "type": "string" + }, + "blood_type": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time", + "airbyte_type": "timestamp_with_timezone" + }, + "occupation": { + "type": "string" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "airbyte_type": "timestamp_with_timezone" + }, + "nationality": { + "type": "string" + }, + "academic_degree": { + "type": "string" + } + } + }, + "default_cursor_field": [], + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "full_refresh", + "primary_key": [["id"]], + "cursor_field": ["updated_at"], + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "products", + "namespace": "performance_10m", + "json_schema": { + "type": "object", + "properties": { + "id": { + "type": "number", + "airbyte_type": "integer" + }, + "make": { + "type": "string" + }, + "year": { + "type": "string" + }, + "model": { + "type": "string" + }, + "price": { + "type": "number" + }, + "created_at": { + "type": "string", + "format": "date-time", + "airbyte_type": "timestamp_with_timezone" + } + } + }, + "default_cursor_field": [], + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "full_refresh", + "primary_key": [["id"]], + "cursor_field": ["created_at"], + "destination_sync_mode": "append" + } + ] +} diff --git a/airbyte-integrations/connectors-performance/source-harness/src/main/resources/catalogs/source-mysql/1m_catalog.json b/airbyte-integrations/connectors-performance/source-harness/src/main/resources/catalogs/source-mysql/1m_catalog.json new file mode 100644 index 000000000000..ad274523846a --- /dev/null +++ b/airbyte-integrations/connectors-performance/source-harness/src/main/resources/catalogs/source-mysql/1m_catalog.json @@ -0,0 +1,161 @@ +{ + "streams": [ + { + "stream": { + "name": "purchases", + "namespace": "performance_1m", + "json_schema": { + "type": "object", + "properties": { + "id": { + "type": "number", + "airbyte_type": "integer" + }, + "user_id": { + "type": "number", + "airbyte_type": "integer" + }, + "product_id": { + "type": "number", + "airbyte_type": "integer" + }, + "returned_at": { + "type": "string", + "format": "date-time", + "airbyte_type": "timestamp_with_timezone" + }, + "purchased_at": { + "type": "string", + "format": "date-time", + "airbyte_type": "timestamp_with_timezone" + }, + "added_to_cart_at": { + "type": "string", + "format": "date-time", + "airbyte_type": "timestamp_with_timezone" + } + } + }, + "default_cursor_field": [], + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "full_refresh", + "primary_key": [["id"]], + "cursor_field": ["id"], + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "users", + "namespace": "performance_1m", + "json_schema": { + "type": "object", + "properties": { + "id": { + "type": "number", + "airbyte_type": "integer" + }, + "age": { + "type": "number", + "airbyte_type": "integer" + }, + "name": { + "type": "string" + }, + "email": { + "type": "string" + }, + "title": { + "type": "string" + }, + "gender": { + "type": "string" + }, + "height": { + "type": "number" + }, + "weight": { + "type": "number", + "airbyte_type": "integer" + }, + "language": { + "type": "string" + }, + "telephone": { + "type": "string" + }, + "blood_type": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time", + "airbyte_type": "timestamp_with_timezone" + }, + "occupation": { + "type": "string" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "airbyte_type": "timestamp_with_timezone" + }, + "nationality": { + "type": "string" + }, + "academic_degree": { + "type": "string" + } + } + }, + "default_cursor_field": [], + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "full_refresh", + "primary_key": [["id"]], + "cursor_field": ["updated_at"], + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "products", + "namespace": "performance_1m", + "json_schema": { + "type": "object", + "properties": { + "id": { + "type": "number", + "airbyte_type": "integer" + }, + "make": { + "type": "string" + }, + "year": { + "type": "string" + }, + "model": { + "type": "string" + }, + "price": { + "type": "number" + }, + "created_at": { + "type": "string", + "format": "date-time", + "airbyte_type": "timestamp_with_timezone" + } + } + }, + "default_cursor_field": [], + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "full_refresh", + "primary_key": [["id"]], + "cursor_field": ["created_at"], + "destination_sync_mode": "append" + } + ] +} diff --git a/airbyte-integrations/connectors-performance/source-harness/src/main/resources/catalogs/source-mysql/20m_catalog.json b/airbyte-integrations/connectors-performance/source-harness/src/main/resources/catalogs/source-mysql/20m_catalog.json new file mode 100644 index 000000000000..55c38e69c72f --- /dev/null +++ b/airbyte-integrations/connectors-performance/source-harness/src/main/resources/catalogs/source-mysql/20m_catalog.json @@ -0,0 +1,161 @@ +{ + "streams": [ + { + "stream": { + "name": "purchases", + "namespace": "performance_20m", + "json_schema": { + "type": "object", + "properties": { + "id": { + "type": "number", + "airbyte_type": "integer" + }, + "user_id": { + "type": "number", + "airbyte_type": "integer" + }, + "product_id": { + "type": "number", + "airbyte_type": "integer" + }, + "returned_at": { + "type": "string", + "format": "date-time", + "airbyte_type": "timestamp_with_timezone" + }, + "purchased_at": { + "type": "string", + "format": "date-time", + "airbyte_type": "timestamp_with_timezone" + }, + "added_to_cart_at": { + "type": "string", + "format": "date-time", + "airbyte_type": "timestamp_with_timezone" + } + } + }, + "default_cursor_field": [], + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "full_refresh", + "primary_key": [["id"]], + "cursor_field": ["id"], + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "users", + "namespace": "performance_20m", + "json_schema": { + "type": "object", + "properties": { + "id": { + "type": "number", + "airbyte_type": "integer" + }, + "age": { + "type": "number", + "airbyte_type": "integer" + }, + "name": { + "type": "string" + }, + "email": { + "type": "string" + }, + "title": { + "type": "string" + }, + "gender": { + "type": "string" + }, + "height": { + "type": "number" + }, + "weight": { + "type": "number", + "airbyte_type": "integer" + }, + "language": { + "type": "string" + }, + "telephone": { + "type": "string" + }, + "blood_type": { + "type": "string" + }, + "created_at": { + "type": "string", + "format": "date-time", + "airbyte_type": "timestamp_with_timezone" + }, + "occupation": { + "type": "string" + }, + "updated_at": { + "type": "string", + "format": "date-time", + "airbyte_type": "timestamp_with_timezone" + }, + "nationality": { + "type": "string" + }, + "academic_degree": { + "type": "string" + } + } + }, + "default_cursor_field": [], + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "full_refresh", + "primary_key": [["id"]], + "cursor_field": ["updated_at"], + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "products", + "namespace": "performance_20m", + "json_schema": { + "type": "object", + "properties": { + "id": { + "type": "number", + "airbyte_type": "integer" + }, + "make": { + "type": "string" + }, + "year": { + "type": "string" + }, + "model": { + "type": "string" + }, + "price": { + "type": "number" + }, + "created_at": { + "type": "string", + "format": "date-time", + "airbyte_type": "timestamp_with_timezone" + } + } + }, + "default_cursor_field": [], + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "full_refresh", + "primary_key": [["id"]], + "cursor_field": ["created_at"], + "destination_sync_mode": "append" + } + ] +} diff --git a/airbyte-integrations/connectors-performance/source-harness/src/main/resources/catalogs/source-mysql/bottleneck_stream1_catalog.json b/airbyte-integrations/connectors-performance/source-harness/src/main/resources/catalogs/source-mysql/bottleneck_stream1_catalog.json new file mode 100644 index 000000000000..6e8979b20a2f --- /dev/null +++ b/airbyte-integrations/connectors-performance/source-harness/src/main/resources/catalogs/source-mysql/bottleneck_stream1_catalog.json @@ -0,0 +1,37 @@ +{ + "streams": [ + { + "stream": { + "name": "stream1", + "namespace": "performance_bottleneck", + "json_schema": { + "type": "object", + "properties": { + "field1": { + "type": "string" + }, + "field2": { + "type": "string" + }, + "field3": { + "type": "string" + }, + "field4": { + "type": "string" + }, + "field5": { + "type": "string" + } + } + }, + "default_cursor_field": [], + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_primary_key": [["field1"]] + }, + "sync_mode": "full_refresh", + "primary_key": [["field1"]], + "cursor_field": ["field1"], + "destination_sync_mode": "append" + } + ] +} diff --git a/airbyte-integrations/connectors-performance/source-harness/src/main/resources/catalogs/10m_catalog.json b/airbyte-integrations/connectors-performance/source-harness/src/main/resources/catalogs/source-postgres/10m_catalog.json similarity index 100% rename from airbyte-integrations/connectors-performance/source-harness/src/main/resources/catalogs/10m_catalog.json rename to airbyte-integrations/connectors-performance/source-harness/src/main/resources/catalogs/source-postgres/10m_catalog.json diff --git a/airbyte-integrations/connectors-performance/source-harness/src/main/resources/catalogs/1m_catalog.json b/airbyte-integrations/connectors-performance/source-harness/src/main/resources/catalogs/source-postgres/1m_catalog.json similarity index 100% rename from airbyte-integrations/connectors-performance/source-harness/src/main/resources/catalogs/1m_catalog.json rename to airbyte-integrations/connectors-performance/source-harness/src/main/resources/catalogs/source-postgres/1m_catalog.json diff --git a/airbyte-integrations/connectors-performance/source-harness/src/main/resources/catalogs/20m_catalog.json b/airbyte-integrations/connectors-performance/source-harness/src/main/resources/catalogs/source-postgres/20m_catalog.json similarity index 100% rename from airbyte-integrations/connectors-performance/source-harness/src/main/resources/catalogs/20m_catalog.json rename to airbyte-integrations/connectors-performance/source-harness/src/main/resources/catalogs/source-postgres/20m_catalog.json diff --git a/airbyte-integrations/connectors-performance/source-harness/src/main/resources/catalogs/bottleneck_stream1_catalog.json b/airbyte-integrations/connectors-performance/source-harness/src/main/resources/catalogs/source-postgres/bottleneck_stream1_catalog.json similarity index 100% rename from airbyte-integrations/connectors-performance/source-harness/src/main/resources/catalogs/bottleneck_stream1_catalog.json rename to airbyte-integrations/connectors-performance/source-harness/src/main/resources/catalogs/source-postgres/bottleneck_stream1_catalog.json From 2e77287ded8c97a06d6d9bfb06b2ad1386f03a3c Mon Sep 17 00:00:00 2001 From: Philip Corr Date: Thu, 13 Apr 2023 21:58:17 +0100 Subject: [PATCH 057/187] change google analytics dockerfile order to pip install source (#23082) Co-authored-by: Marcos Marx --- .../connectors/source-google-analytics-v4/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airbyte-integrations/connectors/source-google-analytics-v4/Dockerfile b/airbyte-integrations/connectors/source-google-analytics-v4/Dockerfile index 913bb4a146d6..b514787d3b96 100644 --- a/airbyte-integrations/connectors/source-google-analytics-v4/Dockerfile +++ b/airbyte-integrations/connectors/source-google-analytics-v4/Dockerfile @@ -5,9 +5,9 @@ RUN apt-get update && apt-get install -y bash && rm -rf /var/lib/apt/lists/* WORKDIR /airbyte/integration_code COPY setup.py ./ -RUN pip install . COPY source_google_analytics_v4 ./source_google_analytics_v4 COPY main.py ./ +RUN pip install . ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] From 3a741c187284b07aceb223888d517eef0fe598f8 Mon Sep 17 00:00:00 2001 From: Lake Mossman Date: Thu, 13 Apr 2023 14:10:08 -0700 Subject: [PATCH 058/187] Always show client cert and key (#25131) * make CA cert and key always show * make same change for mysql * update readmes * update strict-encrypt version and expected spec * fix expected spec for mysql strict encrypt * auto-bump connector version * manually bump seed for postgres and mysql --------- Co-authored-by: Octavia Squidington III --- .../src/main/resources/seed/oss_catalog.json | 55 ++++++++++--------- .../resources/seed/source_definitions.yaml | 6 +- .../src/main/resources/seed/source_specs.yaml | 31 ++++++----- .../source-alloydb-strict-encrypt/Dockerfile | 2 +- .../connectors/source-alloydb/Dockerfile | 2 +- .../source-mysql-strict-encrypt/Dockerfile | 2 +- .../src/test/resources/expected_spec.json | 12 ++-- .../connectors/source-mysql/Dockerfile | 2 +- .../source-mysql/src/main/resources/spec.json | 12 ++-- .../resources/expected_spec.json | 12 ++-- .../source-postgres-strict-encrypt/Dockerfile | 2 +- .../expected_strict_encrypt_spec.json | 14 +++-- .../connectors/source-postgres/Dockerfile | 2 +- .../src/main/resources/spec.json | 14 +++-- .../resources/expected_spec.json | 14 +++-- connectors.md | 6 +- docs/integrations/sources/alloydb.md | 1 + docs/integrations/sources/mysql.md | 1 + docs/integrations/sources/postgres.md | 1 + 19 files changed, 112 insertions(+), 79 deletions(-) diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json index 17c70e0a4100..e093b07a038b 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json @@ -8008,7 +8008,7 @@ "sourceDefinitionId": "1fa90628-2b9e-11ed-a261-0242ac120002", "name": "AlloyDB for PostgreSQL", "dockerRepository": "airbyte/source-alloydb", - "dockerImageTag": "2.0.19", + "dockerImageTag": "2.0.21", "documentationUrl": "https://docs.airbyte.com/integrations/sources/alloydb", "icon": "alloydb.svg", "sourceType": "database", @@ -8082,15 +8082,6 @@ "group": "advanced", "pattern_descriptor": "key1=value1&key2=value2" }, - "ssl": { - "title": "Connect using SSL", - "description": "Encrypt data using SSL. When activating SSL, please select one of the connection modes.", - "type": "boolean", - "default": false, - "order": 7, - "group": "security", - "always_show": true - }, "ssl_mode": { "title": "SSL Modes", "description": "SSL connection modes. \n Read more in the docs.", @@ -8158,7 +8149,7 @@ }, "ca_certificate": { "type": "string", - "title": "CA certificate", + "title": "CA Certificate", "description": "CA certificate", "airbyte_secret": true, "multiline": true, @@ -8170,7 +8161,8 @@ "description": "Client certificate", "airbyte_secret": true, "multiline": true, - "order": 2 + "order": 2, + "always_show": true }, "client_key": { "type": "string", @@ -8178,7 +8170,8 @@ "description": "Client key", "airbyte_secret": true, "multiline": true, - "order": 3 + "order": 3, + "always_show": true }, "client_key_password": { "type": "string", @@ -8213,7 +8206,8 @@ "description": "Client certificate", "airbyte_secret": true, "multiline": true, - "order": 2 + "order": 2, + "always_show": true }, "client_key": { "type": "string", @@ -8221,7 +8215,8 @@ "description": "Client key", "airbyte_secret": true, "multiline": true, - "order": 3 + "order": 3, + "always_show": true }, "client_key_password": { "type": "string", @@ -18175,7 +18170,7 @@ "sourceDefinitionId": "435bb9a5-7887-4809-aa58-28c27df0d7ad", "name": "MySQL", "dockerRepository": "airbyte/source-mysql", - "dockerImageTag": "2.0.14", + "dockerImageTag": "2.0.15", "documentationUrl": "https://docs.airbyte.com/integrations/sources/mysql", "icon": "mysql.svg", "sourceType": "database", @@ -18286,7 +18281,8 @@ "description": "Client certificate (this is not a required field, but if you want to use it, you will need to add the Client key as well)", "airbyte_secret": true, "multiline": true, - "order": 2 + "order": 2, + "always_show": true }, "client_key": { "type": "string", @@ -18294,7 +18290,8 @@ "description": "Client key (this is not a required field, but if you want to use it, you will need to add the Client certificate as well)", "airbyte_secret": true, "multiline": true, - "order": 3 + "order": 3, + "always_show": true }, "client_key_password": { "type": "string", @@ -18328,7 +18325,8 @@ "description": "Client certificate (this is not a required field, but if you want to use it, you will need to add the Client key as well)", "airbyte_secret": true, "multiline": true, - "order": 2 + "order": 2, + "always_show": true }, "client_key": { "type": "string", @@ -18336,7 +18334,8 @@ "description": "Client key (this is not a required field, but if you want to use it, you will need to add the Client certificate as well)", "airbyte_secret": true, "multiline": true, - "order": 3 + "order": 3, + "always_show": true }, "client_key_password": { "type": "string", @@ -20897,7 +20896,7 @@ "sourceDefinitionId": "decd338e-5647-4c0b-adf4-da0e75f5a750", "name": "Postgres", "dockerRepository": "airbyte/source-postgres", - "dockerImageTag": "2.0.20", + "dockerImageTag": "2.0.21", "documentationUrl": "https://docs.airbyte.com/integrations/sources/postgres", "icon": "postgresql.svg", "sourceType": "database", @@ -21038,7 +21037,7 @@ }, "ca_certificate": { "type": "string", - "title": "CA certificate", + "title": "CA Certificate", "description": "CA certificate", "airbyte_secret": true, "multiline": true, @@ -21050,7 +21049,8 @@ "description": "Client certificate", "airbyte_secret": true, "multiline": true, - "order": 2 + "order": 2, + "always_show": true }, "client_key": { "type": "string", @@ -21058,7 +21058,8 @@ "description": "Client key", "airbyte_secret": true, "multiline": true, - "order": 3 + "order": 3, + "always_show": true }, "client_key_password": { "type": "string", @@ -21093,7 +21094,8 @@ "description": "Client certificate", "airbyte_secret": true, "multiline": true, - "order": 2 + "order": 2, + "always_show": true }, "client_key": { "type": "string", @@ -21101,7 +21103,8 @@ "description": "Client key", "airbyte_secret": true, "multiline": true, - "order": 3 + "order": 3, + "always_show": true }, "client_key_password": { "type": "string", diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml index 7e2245624c80..9dab9915e409 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml @@ -45,7 +45,7 @@ - name: AlloyDB for PostgreSQL sourceDefinitionId: 1fa90628-2b9e-11ed-a261-0242ac120002 dockerRepository: airbyte/source-alloydb - dockerImageTag: 2.0.19 + dockerImageTag: 2.0.21 documentationUrl: https://docs.airbyte.com/integrations/sources/alloydb icon: alloydb.svg sourceType: database @@ -1282,7 +1282,7 @@ - name: MySQL sourceDefinitionId: 435bb9a5-7887-4809-aa58-28c27df0d7ad dockerRepository: airbyte/source-mysql - dockerImageTag: 2.0.14 + dockerImageTag: 2.0.15 documentationUrl: https://docs.airbyte.com/integrations/sources/mysql icon: mysql.svg sourceType: database @@ -1602,7 +1602,7 @@ - name: Postgres sourceDefinitionId: decd338e-5647-4c0b-adf4-da0e75f5a750 dockerRepository: airbyte/source-postgres - dockerImageTag: 2.0.20 + dockerImageTag: 2.0.21 documentationUrl: https://docs.airbyte.com/integrations/sources/postgres icon: postgresql.svg sourceType: database diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml index 8812fc090970..e0a0efe8e261 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml @@ -370,7 +370,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-alloydb:2.0.19" +- dockerImage: "airbyte/source-alloydb:2.0.21" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/postgres" connectionSpecification: @@ -444,15 +444,6 @@ order: 6 group: "advanced" pattern_descriptor: "key1=value1&key2=value2" - ssl: - title: "Connect using SSL" - description: "Encrypt data using SSL. When activating SSL, please select\ - \ one of the connection modes." - type: "boolean" - default: false - order: 7 - group: "security" - always_show: true ssl_mode: title: "SSL Modes" description: "SSL connection modes. \n Read more Client key as well)", "airbyte_secret": true, "multiline": true, - "order": 2 + "order": 2, + "always_show": true }, "client_key": { "type": "string", @@ -110,7 +111,8 @@ "description": "Client key (this is not a required field, but if you want to use it, you will need to add the Client certificate as well)", "airbyte_secret": true, "multiline": true, - "order": 3 + "order": 3, + "always_show": true }, "client_key_password": { "type": "string", @@ -145,7 +147,8 @@ "description": "Client certificate (this is not a required field, but if you want to use it, you will need to add the Client key as well)", "airbyte_secret": true, "multiline": true, - "order": 2 + "order": 2, + "always_show": true }, "client_key": { "type": "string", @@ -153,7 +156,8 @@ "description": "Client key (this is not a required field, but if you want to use it, you will need to add the Client certificate as well)", "airbyte_secret": true, "multiline": true, - "order": 3 + "order": 3, + "always_show": true }, "client_key_password": { "type": "string", diff --git a/airbyte-integrations/connectors/source-mysql/Dockerfile b/airbyte-integrations/connectors/source-mysql/Dockerfile index 2416d370beeb..e90365b5ede8 100644 --- a/airbyte-integrations/connectors/source-mysql/Dockerfile +++ b/airbyte-integrations/connectors/source-mysql/Dockerfile @@ -16,6 +16,6 @@ ENV APPLICATION source-mysql COPY --from=build /airbyte /airbyte -LABEL io.airbyte.version=2.0.14 +LABEL io.airbyte.version=2.0.15 LABEL io.airbyte.name=airbyte/source-mysql diff --git a/airbyte-integrations/connectors/source-mysql/src/main/resources/spec.json b/airbyte-integrations/connectors/source-mysql/src/main/resources/spec.json index a68ac01958a2..cc949a89b20b 100644 --- a/airbyte-integrations/connectors/source-mysql/src/main/resources/spec.json +++ b/airbyte-integrations/connectors/source-mysql/src/main/resources/spec.json @@ -108,7 +108,8 @@ "description": "Client certificate (this is not a required field, but if you want to use it, you will need to add the Client key as well)", "airbyte_secret": true, "multiline": true, - "order": 2 + "order": 2, + "always_show": true }, "client_key": { "type": "string", @@ -116,7 +117,8 @@ "description": "Client key (this is not a required field, but if you want to use it, you will need to add the Client certificate as well)", "airbyte_secret": true, "multiline": true, - "order": 3 + "order": 3, + "always_show": true }, "client_key_password": { "type": "string", @@ -151,7 +153,8 @@ "description": "Client certificate (this is not a required field, but if you want to use it, you will need to add the Client key as well)", "airbyte_secret": true, "multiline": true, - "order": 2 + "order": 2, + "always_show": true }, "client_key": { "type": "string", @@ -159,7 +162,8 @@ "description": "Client key (this is not a required field, but if you want to use it, you will need to add the Client certificate as well)", "airbyte_secret": true, "multiline": true, - "order": 3 + "order": 3, + "always_show": true }, "client_key_password": { "type": "string", diff --git a/airbyte-integrations/connectors/source-mysql/src/test-integration/resources/expected_spec.json b/airbyte-integrations/connectors/source-mysql/src/test-integration/resources/expected_spec.json index 65bb65bb2842..06a5e3a7e27b 100644 --- a/airbyte-integrations/connectors/source-mysql/src/test-integration/resources/expected_spec.json +++ b/airbyte-integrations/connectors/source-mysql/src/test-integration/resources/expected_spec.json @@ -108,7 +108,8 @@ "description": "Client certificate (this is not a required field, but if you want to use it, you will need to add the Client key as well)", "airbyte_secret": true, "multiline": true, - "order": 2 + "order": 2, + "always_show": true }, "client_key": { "type": "string", @@ -116,7 +117,8 @@ "description": "Client key (this is not a required field, but if you want to use it, you will need to add the Client certificate as well)", "airbyte_secret": true, "multiline": true, - "order": 3 + "order": 3, + "always_show": true }, "client_key_password": { "type": "string", @@ -151,7 +153,8 @@ "description": "Client certificate (this is not a required field, but if you want to use it, you will need to add the Client key as well)", "airbyte_secret": true, "multiline": true, - "order": 2 + "order": 2, + "always_show": true }, "client_key": { "type": "string", @@ -159,7 +162,8 @@ "description": "Client key (this is not a required field, but if you want to use it, you will need to add the Client certificate as well)", "airbyte_secret": true, "multiline": true, - "order": 3 + "order": 3, + "always_show": true }, "client_key_password": { "type": "string", diff --git a/airbyte-integrations/connectors/source-postgres-strict-encrypt/Dockerfile b/airbyte-integrations/connectors/source-postgres-strict-encrypt/Dockerfile index ba29c4028e63..41ba6476feee 100644 --- a/airbyte-integrations/connectors/source-postgres-strict-encrypt/Dockerfile +++ b/airbyte-integrations/connectors/source-postgres-strict-encrypt/Dockerfile @@ -16,5 +16,5 @@ ENV APPLICATION source-postgres-strict-encrypt COPY --from=build /airbyte /airbyte -LABEL io.airbyte.version=2.0.20 +LABEL io.airbyte.version=2.0.21 LABEL io.airbyte.name=airbyte/source-postgres-strict-encrypt diff --git a/airbyte-integrations/connectors/source-postgres-strict-encrypt/src/test-integration/resources/expected_strict_encrypt_spec.json b/airbyte-integrations/connectors/source-postgres-strict-encrypt/src/test-integration/resources/expected_strict_encrypt_spec.json index e2adc76839cf..6f951ca4e515 100644 --- a/airbyte-integrations/connectors/source-postgres-strict-encrypt/src/test-integration/resources/expected_strict_encrypt_spec.json +++ b/airbyte-integrations/connectors/source-postgres-strict-encrypt/src/test-integration/resources/expected_strict_encrypt_spec.json @@ -141,7 +141,7 @@ }, "ca_certificate": { "type": "string", - "title": "CA certificate", + "title": "CA Certificate", "description": "CA certificate", "airbyte_secret": true, "multiline": true, @@ -153,7 +153,8 @@ "description": "Client certificate", "airbyte_secret": true, "multiline": true, - "order": 2 + "order": 2, + "always_show": true }, "client_key": { "type": "string", @@ -161,7 +162,8 @@ "description": "Client key", "airbyte_secret": true, "multiline": true, - "order": 3 + "order": 3, + "always_show": true }, "client_key_password": { "type": "string", @@ -197,7 +199,8 @@ "description": "Client certificate", "airbyte_secret": true, "multiline": true, - "order": 2 + "order": 2, + "always_show": true }, "client_key": { "type": "string", @@ -205,7 +208,8 @@ "description": "Client key", "airbyte_secret": true, "multiline": true, - "order": 3 + "order": 3, + "always_show": true }, "client_key_password": { "type": "string", diff --git a/airbyte-integrations/connectors/source-postgres/Dockerfile b/airbyte-integrations/connectors/source-postgres/Dockerfile index 53b87901063a..687c8beb22a1 100644 --- a/airbyte-integrations/connectors/source-postgres/Dockerfile +++ b/airbyte-integrations/connectors/source-postgres/Dockerfile @@ -16,5 +16,5 @@ ENV APPLICATION source-postgres COPY --from=build /airbyte /airbyte -LABEL io.airbyte.version=2.0.20 +LABEL io.airbyte.version=2.0.21 LABEL io.airbyte.name=airbyte/source-postgres diff --git a/airbyte-integrations/connectors/source-postgres/src/main/resources/spec.json b/airbyte-integrations/connectors/source-postgres/src/main/resources/spec.json index 65d625ca4893..4bc0c37260a1 100644 --- a/airbyte-integrations/connectors/source-postgres/src/main/resources/spec.json +++ b/airbyte-integrations/connectors/source-postgres/src/main/resources/spec.json @@ -140,7 +140,7 @@ }, "ca_certificate": { "type": "string", - "title": "CA certificate", + "title": "CA Certificate", "description": "CA certificate", "airbyte_secret": true, "multiline": true, @@ -152,7 +152,8 @@ "description": "Client certificate", "airbyte_secret": true, "multiline": true, - "order": 2 + "order": 2, + "always_show": true }, "client_key": { "type": "string", @@ -160,7 +161,8 @@ "description": "Client key", "airbyte_secret": true, "multiline": true, - "order": 3 + "order": 3, + "always_show": true }, "client_key_password": { "type": "string", @@ -196,7 +198,8 @@ "description": "Client certificate", "airbyte_secret": true, "multiline": true, - "order": 2 + "order": 2, + "always_show": true }, "client_key": { "type": "string", @@ -204,7 +207,8 @@ "description": "Client key", "airbyte_secret": true, "multiline": true, - "order": 3 + "order": 3, + "always_show": true }, "client_key_password": { "type": "string", diff --git a/airbyte-integrations/connectors/source-postgres/src/test-integration/resources/expected_spec.json b/airbyte-integrations/connectors/source-postgres/src/test-integration/resources/expected_spec.json index 7446b473dfc1..2b89eccbc1f8 100644 --- a/airbyte-integrations/connectors/source-postgres/src/test-integration/resources/expected_spec.json +++ b/airbyte-integrations/connectors/source-postgres/src/test-integration/resources/expected_spec.json @@ -140,7 +140,7 @@ }, "ca_certificate": { "type": "string", - "title": "CA certificate", + "title": "CA Certificate", "description": "CA certificate", "airbyte_secret": true, "multiline": true, @@ -152,7 +152,8 @@ "description": "Client certificate", "airbyte_secret": true, "multiline": true, - "order": 2 + "order": 2, + "always_show": true }, "client_key": { "type": "string", @@ -160,7 +161,8 @@ "description": "Client key", "airbyte_secret": true, "multiline": true, - "order": 3 + "order": 3, + "always_show": true }, "client_key_password": { "type": "string", @@ -196,7 +198,8 @@ "description": "Client certificate", "airbyte_secret": true, "multiline": true, - "order": 2 + "order": 2, + "always_show": true }, "client_key": { "type": "string", @@ -204,7 +207,8 @@ "description": "Client key", "airbyte_secret": true, "multiline": true, - "order": 3 + "order": 3, + "always_show": true }, "client_key_password": { "type": "string", diff --git a/connectors.md b/connectors.md index faea2f66fa20..2d6130a18b16 100644 --- a/connectors.md +++ b/connectors.md @@ -9,7 +9,7 @@ | **Adjust** | Adjust icon | Source | airbyte/source-adjust:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/adjust) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-adjust) | `d3b7fa46-111b-419a-998a-d7f046f6d66d` | | **Aha** | Aha icon | Source | airbyte/source-aha:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/aha) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-aha) | `81ca39dc-4534-4dd2-b848-b0cfd2c11fce` | | **Airtable** | Airtable icon | Source | airbyte/source-airtable:3.0.0 | generally_available | [link](https://docs.airbyte.com/integrations/sources/airtable) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-airtable) | `14c6e7ea-97ed-4f5e-a7b5-25e9a80b8212` | -| **AlloyDB for PostgreSQL** | AlloyDB for PostgreSQL icon | Source | airbyte/source-alloydb:2.0.19 | generally_available | [link](https://docs.airbyte.com/integrations/sources/alloydb) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-alloydb) | `1fa90628-2b9e-11ed-a261-0242ac120002` | +| **AlloyDB for PostgreSQL** | AlloyDB for PostgreSQL icon | Source | airbyte/source-alloydb:2.0.21 | generally_available | [link](https://docs.airbyte.com/integrations/sources/alloydb) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-alloydb) | `1fa90628-2b9e-11ed-a261-0242ac120002` | | **Alpha Vantage** | Alpha Vantage icon | Source | airbyte/source-alpha-vantage:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/alpha-vantage) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-alpha-vantage) | `db385323-9333-4fec-bec3-9e0ca9326c90` | | **Amazon Ads** | Amazon Ads icon | Source | airbyte/source-amazon-ads:1.0.3 | generally_available | [link](https://docs.airbyte.com/integrations/sources/amazon-ads) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-amazon-ads) | `c6b0a29e-1da9-4512-9002-7bfd0cba2246` | | **Amazon SQS** | Amazon SQS icon | Source | airbyte/source-amazon-sqs:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/amazon-sqs) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-amazon-sqs) | `983fd355-6bf3-4709-91b5-37afa391eeb6` | @@ -146,7 +146,7 @@ | **Monday** | Monday icon | Source | airbyte/source-monday:0.2.3 | beta | [link](https://docs.airbyte.com/integrations/sources/monday) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-monday) | `80a54ea2-9959-4040-aac1-eee42423ec9b` | | **MongoDb** | MongoDb icon | Source | airbyte/source-mongodb-v2:0.1.19 | alpha | [link](https://docs.airbyte.com/integrations/sources/mongodb-v2) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-mongodb-v2) | `b2e713cd-cc36-4c0a-b5bd-b47cb8a0561e` | | **My Hours** | My Hours icon | Source | airbyte/source-my-hours:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/my-hours) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-my-hours) | `722ba4bf-06ec-45a4-8dd5-72e4a5cf3903` | -| **MySQL** | MySQL icon | Source | airbyte/source-mysql:2.0.14 | beta | [link](https://docs.airbyte.com/integrations/sources/mysql) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-mysql) | `435bb9a5-7887-4809-aa58-28c27df0d7ad` | +| **MySQL** | MySQL icon | Source | airbyte/source-mysql:2.0.15 | beta | [link](https://docs.airbyte.com/integrations/sources/mysql) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-mysql) | `435bb9a5-7887-4809-aa58-28c27df0d7ad` | | **NASA** | NASA icon | Source | airbyte/source-nasa:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/nasa) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-nasa) | `1a8667d7-7978-43cd-ba4d-d32cbd478971` | | **Netsuite** | Netsuite icon | Source | airbyte/source-netsuite:0.1.3 | alpha | [link](https://docs.airbyte.com/integrations/sources/netsuite) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-netsuite) | `4f2f093d-ce44-4121-8118-9d13b7bfccd0` | | **New York Times** | New York Times icon | Source | airbyte/source-nytimes:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/nytimes) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-nytimes) | `0fae6a9a-04eb-44d4-96e1-e02d3dbc1d83` | @@ -181,7 +181,7 @@ | **PokeAPI** | PokeAPI icon | Source | airbyte/source-pokeapi:0.1.5 | alpha | [link](https://docs.airbyte.com/integrations/sources/pokeapi) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-pokeapi) | `6371b14b-bc68-4236-bfbd-468e8df8e968` | | **Polygon Stock API** | Polygon Stock API icon | Source | airbyte/source-polygon-stock-api:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/polygon-stock-api) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-polygon-stock-api) | `5807d72f-0abc-49f9-8fa5-ae820007032b` | | **PostHog** | PostHog icon | Source | airbyte/source-posthog:0.1.9 | beta | [link](https://docs.airbyte.com/integrations/sources/posthog) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-posthog) | `af6d50ee-dddf-4126-a8ee-7faee990774f` | -| **Postgres** | Postgres icon | Source | airbyte/source-postgres:2.0.20 | generally_available | [link](https://docs.airbyte.com/integrations/sources/postgres) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-postgres) | `decd338e-5647-4c0b-adf4-da0e75f5a750` | +| **Postgres** | Postgres icon | Source | airbyte/source-postgres:2.0.21 | generally_available | [link](https://docs.airbyte.com/integrations/sources/postgres) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-postgres) | `decd338e-5647-4c0b-adf4-da0e75f5a750` | | **Postmark App** | Postmark App icon | Source | airbyte/source-postmarkapp:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/postmarkapp) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-postmarkapp) | `cde75ca1-1e28-4a0f-85bb-90c546de9f1f` | | **PrestaShop** | PrestaShop icon | Source | airbyte/source-prestashop:0.3.1 | beta | [link](https://docs.airbyte.com/integrations/sources/prestashop) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-prestashop) | `d60a46d4-709f-4092-a6b7-2457f7d455f5` | | **Primetric** | Primetric icon | Source | airbyte/source-primetric:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/primetric) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-primetric) | `f636c3c6-4077-45ac-b109-19fc62a283c1` | diff --git a/docs/integrations/sources/alloydb.md b/docs/integrations/sources/alloydb.md index 4ecdeb6e841d..46fad5b4ad33 100644 --- a/docs/integrations/sources/alloydb.md +++ b/docs/integrations/sources/alloydb.md @@ -321,6 +321,7 @@ According to Postgres [documentation](https://www.postgresql.org/docs/14/datatyp | Version | Date | Pull Request | Subject | |:--------|:-----------|:-----------------------------------------------------------|:------------------------------------------------------------------------------------------------------------------------------------------| +| 2.0.21 | 2022-04-12 | [25131](https://github.com/airbytehq/airbyte/pull/25131) | Make Client Certificate and Client Key always show | | 2.0.19 | 2022-04-11 | [24656](https://github.com/airbytehq/airbyte/pull/24656) | CDC minor refactor | | 2.0.17 | 2022-04-05 | [24622](https://github.com/airbytehq/airbyte/pull/24622) | Allow streams not in CDC publication to be synced in Full-refresh mode | | 2.0.15 | 2022-04-04 | [24833](https://github.com/airbytehq/airbyte/pull/24833) | Disallow the "disable" SSL Modes; fix Debezium retry policy configuration | diff --git a/docs/integrations/sources/mysql.md b/docs/integrations/sources/mysql.md index c5e4d7c9d9f1..a4a4e29027b0 100644 --- a/docs/integrations/sources/mysql.md +++ b/docs/integrations/sources/mysql.md @@ -261,6 +261,7 @@ WHERE actor_definition_id ='435bb9a5-7887-4809-aa58-28c27df0d7ad' AND (configura | Version | Date | Pull Request | Subject | |:--------|:-----------|:-----------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 2.0.15 | 2022-04-12 | [25131](https://github.com/airbytehq/airbyte/pull/25131) | Make Client Certificate and Client Key always show | | 2.0.14 | 2022-04-11 | [24656](https://github.com/airbytehq/airbyte/pull/24656) | CDC minor refactor | | 2.0.13 | 2022-04-06 | [24820](https://github.com/airbytehq/airbyte/pull/24820) | Fix data loss bug during an initial failed non-CDC incremental sync | | 2.0.12 | 2022-04-04 | [24833](https://github.com/airbytehq/airbyte/pull/24833) | Fix Debezium retry policy configuration | diff --git a/docs/integrations/sources/postgres.md b/docs/integrations/sources/postgres.md index 47c206ba3fae..3be583679390 100644 --- a/docs/integrations/sources/postgres.md +++ b/docs/integrations/sources/postgres.md @@ -394,6 +394,7 @@ The root causes is that the WALs needed for the incremental sync has been remove | Version | Date | Pull Request | Subject | |:--------|:-----------|:---------------------------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 2.0.21 | 2022-04-12 | [25131](https://github.com/airbytehq/airbyte/pull/25131) | Make Client Certificate and Client Key always show | | 2.0.20 | 2022-04-11 | [24859](https://github.com/airbytehq/airbyte/pull/24859) | Removed SSL toggle and rely on SSL mode dropdown to enable/disable SSL | | 2.0.19 | 2022-04-11 | [24656](https://github.com/airbytehq/airbyte/pull/24656) | CDC minor refactor | | 2.0.18 | 2022-04-06 | [24820](https://github.com/airbytehq/airbyte/pull/24820) | Fix data loss bug during an initial failed non-CDC incremental sync | From c1dccdcfa43dbf5382e52905cd1e27c1bd7b7670 Mon Sep 17 00:00:00 2001 From: Ali Hassan <62539376+Alihassanc5@users.noreply.github.com> Date: Fri, 14 Apr 2023 02:37:39 +0500 Subject: [PATCH 059/187] :bug: Source File: fix column data types for numerical values (#23759) * Fix column data types for numerical values * Update unit tests * Update Dockerfile version * update dockerfile version for source-file-secure * Update source-file in seed file * Update doc * Update source_specs.yaml --------- Co-authored-by: Marcos Marx --- .../init-oss/src/main/resources/seed/source_definitions.yaml | 2 +- .../init-oss/src/main/resources/seed/source_specs.yaml | 2 +- airbyte-integrations/connectors/source-file-secure/Dockerfile | 4 ++-- airbyte-integrations/connectors/source-file/Dockerfile | 2 +- .../connectors/source-file/source_file/client.py | 2 +- .../connectors/source-file/unit_tests/test_client.py | 4 +++- docs/integrations/sources/file.md | 3 ++- 7 files changed, 11 insertions(+), 8 deletions(-) diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml index 9dab9915e409..95461bdadb9e 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml @@ -621,7 +621,7 @@ - name: File (CSV, JSON, Excel, Feather, Parquet) sourceDefinitionId: 778daa7c-feaf-4db6-96f3-70fd645acc77 dockerRepository: airbyte/source-file - dockerImageTag: 0.2.37 + dockerImageTag: 0.2.38 documentationUrl: https://docs.airbyte.com/integrations/sources/file icon: file.svg sourceType: file diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml index e0a0efe8e261..3b704feb87fe 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml @@ -4471,7 +4471,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-file:0.2.37" +- dockerImage: "airbyte/source-file:0.2.38" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/file" connectionSpecification: diff --git a/airbyte-integrations/connectors/source-file-secure/Dockerfile b/airbyte-integrations/connectors/source-file-secure/Dockerfile index f4885bf74965..94f23e7b4204 100644 --- a/airbyte-integrations/connectors/source-file-secure/Dockerfile +++ b/airbyte-integrations/connectors/source-file-secure/Dockerfile @@ -1,4 +1,4 @@ -FROM airbyte/source-file:0.2.37 +FROM airbyte/source-file:0.2.38 WORKDIR /airbyte/integration_code COPY source_file_secure ./source_file_secure @@ -9,5 +9,5 @@ RUN pip install . ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=0.2.37 +LABEL io.airbyte.version=0.2.38 LABEL io.airbyte.name=airbyte/source-file-secure diff --git a/airbyte-integrations/connectors/source-file/Dockerfile b/airbyte-integrations/connectors/source-file/Dockerfile index 003ed907490f..108dcabda7b3 100644 --- a/airbyte-integrations/connectors/source-file/Dockerfile +++ b/airbyte-integrations/connectors/source-file/Dockerfile @@ -17,5 +17,5 @@ COPY source_file ./source_file ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=0.2.37 +LABEL io.airbyte.version=0.2.38 LABEL io.airbyte.name=airbyte/source-file diff --git a/airbyte-integrations/connectors/source-file/source_file/client.py b/airbyte-integrations/connectors/source-file/source_file/client.py index 0aa186207f84..ee78740ebed2 100644 --- a/airbyte-integrations/connectors/source-file/source_file/client.py +++ b/airbyte-integrations/connectors/source-file/source_file/client.py @@ -360,7 +360,7 @@ def dtype_to_json_type(current_type: str, dtype) -> str: return current_type if dtype == object: return "string" - if dtype in number_types and (not current_type or current_type in number_types): + if dtype in number_types and (not current_type or current_type == "number"): return "number" if dtype == "bool" and (not current_type or current_type == "boolean"): return "boolean" diff --git a/airbyte-integrations/connectors/source-file/unit_tests/test_client.py b/airbyte-integrations/connectors/source-file/unit_tests/test_client.py index 6425417c488b..ac6a0fb16ddf 100644 --- a/airbyte-integrations/connectors/source-file/unit_tests/test_client.py +++ b/airbyte-integrations/connectors/source-file/unit_tests/test_client.py @@ -89,8 +89,10 @@ def test_load_nested_json(client, absolute_path, test_files): ("string", "string", "string"), ("", object, "string"), ("", "int64", "number"), + ("", "float64", "number"), ("boolean", "bool", "boolean"), - ("integer", "int64", "string"), + ("number", "int64", "number"), + ("number", "float64", "number"), ], ) def test_dtype_to_json_type(client, current_type, dtype, expected): diff --git a/docs/integrations/sources/file.md b/docs/integrations/sources/file.md index 780075b1b29b..1d9d7c1668bf 100644 --- a/docs/integrations/sources/file.md +++ b/docs/integrations/sources/file.md @@ -190,10 +190,11 @@ In order to read large files from a remote location, this connector uses the [sm | Version | Date | Pull Request | Subject | |:--------|:-----------|:---------------------------------------------------------|:--------------------------------------------------------------------------------------------------------| +| 0.2.38 | 2023-04-12 | [23759](https://github.com/airbytehq/airbyte/pull/23759) | Fix column data types for numerical values | | 0.2.37 | 2023-04-06 | [24525](https://github.com/airbytehq/airbyte/pull/24525) | Fix examples in spec | | 0.2.36 | 2023-03-27 | [24588](https://github.com/airbytehq/airbyte/pull/24588) | Remove traceback from user messages. | | 0.2.35 | 2023-03-03 | [24278](https://github.com/airbytehq/airbyte/pull/24278) | Read only file header when checking connectivity; read only a single chunk when discovering the schema. | -| 0.2.34 | 2023-03-03 | [23723](https://github.com/airbytehq/airbyte/pull/23723) | Update description in spec, make user-friendly error messages and docs. | +| 0.2.34 | 2023-03-03 | [23723](https://github.com/airbytehq/airbyte/pull/23723) | Update description in spec, make user-friendly error messages and docs. | | 0.2.33 | 2023-01-04 | [21012](https://github.com/airbytehq/airbyte/pull/21012) | Fix special characters bug | | 0.2.32 | 2022-12-21 | [20740](https://github.com/airbytehq/airbyte/pull/20740) | Source File: increase SSH timeout to 60s | | 0.2.31 | 2022-11-17 | [19567](https://github.com/airbytehq/airbyte/pull/19567) | Source File: bump 0.2.31 | From acb99aa78df0d76e09df97323e44c6179094ddef Mon Sep 17 00:00:00 2001 From: Evan Tahler Date: Thu, 13 Apr 2023 15:14:44 -0700 Subject: [PATCH 060/187] `connectors.md` gains Github labels for connector issues (#25182) * `connectors.md` gains github label * Automated Commit - Formatting Changes * comment * Automated Commit - Formatting Changes * Automated Change --------- Co-authored-by: evantahler --- .../src/main/resources/seed/oss_catalog.json | 2 +- .../specs/ConnectorMarkdownGenerator.java | 20 +- connectors.md | 676 +++++++++--------- 3 files changed, 354 insertions(+), 344 deletions(-) diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json index e093b07a038b..dfaef0496bce 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json @@ -12548,7 +12548,7 @@ "sourceDefinitionId": "778daa7c-feaf-4db6-96f3-70fd645acc77", "name": "File (CSV, JSON, Excel, Feather, Parquet)", "dockerRepository": "airbyte/source-file", - "dockerImageTag": "0.2.37", + "dockerImageTag": "0.2.38", "documentationUrl": "https://docs.airbyte.com/integrations/sources/file", "icon": "file.svg", "sourceType": "file", diff --git a/airbyte-config-oss/specs-oss/src/main/java/io/airbyte/configoss/specs/ConnectorMarkdownGenerator.java b/airbyte-config-oss/specs-oss/src/main/java/io/airbyte/configoss/specs/ConnectorMarkdownGenerator.java index 78c359e21250..23cd849fd8c4 100644 --- a/airbyte-config-oss/specs-oss/src/main/java/io/airbyte/configoss/specs/ConnectorMarkdownGenerator.java +++ b/airbyte-config-oss/specs-oss/src/main/java/io/airbyte/configoss/specs/ConnectorMarkdownGenerator.java @@ -28,9 +28,10 @@ public class ConnectorMarkdownGenerator { .desc("name for the generated catalog json file").build(); private static final Options OPTIONS = new Options().addOption(PROJECT_ROOT_OPTION).addOption(SEED_ROOT_OPTION).addOption(OUTPUT_FILENAME_OPTION); - private static final String githubCodeBase = "https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors"; + private static final String githubOrgProject = "airbytehq/airbyte"; + private static final String githubCodeBase = "https://github.com/" + githubOrgProject + "/tree/master/airbyte-integrations/connectors"; private static final String githubIconBase = - "https://raw.githubusercontent.com/airbytehq/airbyte/master/airbyte-config-oss/init-oss/src/main/resources/icons"; + "https://raw.githubusercontent.com/" + githubOrgProject + " /master/airbyte-config-oss/init-oss/src/main/resources/icons"; private static final String iconSize = "30"; public static void main(final String[] args) throws Exception { @@ -87,11 +88,12 @@ private String buildMarkdownTable(final List definitions, final String headers.add("Image"); headers.add("Release Stage"); headers.add("Docs"); + headers.add("Issues"); headers.add("Code"); headers.add("ID"); bodyParts.add("| " + String.join(" | ", headers) + " |"); - bodyParts.add("|----|----|----|----|----|----|----|----|"); + bodyParts.add("|----|----|----|----|----|----|----|----|----|"); for (final JsonNode definition : definitions) { final String name = definition.get("name").asText(); final String codeName = definition.get("dockerRepository").asText().split("/")[1]; @@ -102,11 +104,19 @@ private String buildMarkdownTable(final List definitions, final String final String dockerImage = definition.get("dockerRepository").asText() + ":" + definition.get("dockerImageTag").asText(); final String releaseStage = definition.get("releaseStage") != null ? definition.get("releaseStage").asText() : "unknown"; final String documentationUrl = definition.get("documentationUrl") != null ? definition.get("documentationUrl").asText() : ""; - final String docLink = !documentationUrl.equals("") ? "[link](" + documentationUrl + ")" : "missing"; - final String codeLink = "[code](" + githubCodeBase + "/" + codeName + ")"; + final String docLink = !documentationUrl.equals("") ? "[docs](" + documentationUrl + ")" : "missing"; + // we are trying to build a string like connectors/destination/mysql. we need to determine if this + // is a source or destination, lower-case, and then append back some stuff + final String issuesLabel = "connectors/" + (codeName.contains("source-") ? "source" : "destination") + "/" + + codeName.replace("source-", "").replace("destination-", ""); + final String issuesLink = + "[" + issuesLabel + "](https://github.com/" + githubOrgProject + "/issues?q=is:open+is:issue+label:" + issuesLabel + ")"; + // https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/mysql + final String codeLink = "[" + codeName + "](" + githubCodeBase + "/" + codeName + ")"; final String id = "`" + definition.get(type.toLowerCase() + "DefinitionId").asText() + "`"; bodyParts.add("| **" + name + "** | " + iconLink + " | " + type + " | " + dockerImage + " | " + releaseStage + " | " + docLink + " | " + + issuesLink + " | " + codeLink + " | " + id + " |"); } diff --git a/connectors.md b/connectors.md index 2d6130a18b16..46bb1bb0dcdc 100644 --- a/connectors.md +++ b/connectors.md @@ -2,344 +2,344 @@ ## Sources -| Name | Icon | Type | Image | Release Stage | Docs | Code | ID | -|----|----|----|----|----|----|----|----| -| **AWS CloudTrail** | AWS CloudTrail icon | Source | airbyte/source-aws-cloudtrail:0.1.5 | alpha | [link](https://docs.airbyte.com/integrations/sources/aws-cloudtrail) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-aws-cloudtrail) | `6ff047c0-f5d5-4ce5-8c81-204a830fa7e1` | -| **ActiveCampaign** | ActiveCampaign icon | Source | airbyte/source-activecampaign:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/activecampaign) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-activecampaign) | `9f32dab3-77cb-45a1-9d33-347aa5fbe363` | -| **Adjust** | Adjust icon | Source | airbyte/source-adjust:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/adjust) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-adjust) | `d3b7fa46-111b-419a-998a-d7f046f6d66d` | -| **Aha** | Aha icon | Source | airbyte/source-aha:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/aha) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-aha) | `81ca39dc-4534-4dd2-b848-b0cfd2c11fce` | -| **Airtable** | Airtable icon | Source | airbyte/source-airtable:3.0.0 | generally_available | [link](https://docs.airbyte.com/integrations/sources/airtable) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-airtable) | `14c6e7ea-97ed-4f5e-a7b5-25e9a80b8212` | -| **AlloyDB for PostgreSQL** | AlloyDB for PostgreSQL icon | Source | airbyte/source-alloydb:2.0.21 | generally_available | [link](https://docs.airbyte.com/integrations/sources/alloydb) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-alloydb) | `1fa90628-2b9e-11ed-a261-0242ac120002` | -| **Alpha Vantage** | Alpha Vantage icon | Source | airbyte/source-alpha-vantage:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/alpha-vantage) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-alpha-vantage) | `db385323-9333-4fec-bec3-9e0ca9326c90` | -| **Amazon Ads** | Amazon Ads icon | Source | airbyte/source-amazon-ads:1.0.3 | generally_available | [link](https://docs.airbyte.com/integrations/sources/amazon-ads) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-amazon-ads) | `c6b0a29e-1da9-4512-9002-7bfd0cba2246` | -| **Amazon SQS** | Amazon SQS icon | Source | airbyte/source-amazon-sqs:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/amazon-sqs) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-amazon-sqs) | `983fd355-6bf3-4709-91b5-37afa391eeb6` | -| **Amazon Seller Partner** | Amazon Seller Partner icon | Source | airbyte/source-amazon-seller-partner:1.0.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/amazon-seller-partner) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-amazon-seller-partner) | `e55879a8-0ef8-4557-abcf-ab34c53ec460` | -| **Amplitude** | Amplitude icon | Source | airbyte/source-amplitude:0.2.0 | generally_available | [link](https://docs.airbyte.com/integrations/sources/amplitude) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-amplitude) | `fa9f58c6-2d03-4237-aaa4-07d75e0c1396` | -| **Apify Dataset** | Apify Dataset icon | Source | airbyte/source-apify-dataset:0.1.11 | alpha | [link](https://docs.airbyte.com/integrations/sources/apify-dataset) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-apify-dataset) | `47f17145-fe20-4ef5-a548-e29b048adf84` | -| **Appfollow** | Appfollow icon | Source | airbyte/source-appfollow:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/appfollow) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-appfollow) | `b4375641-e270-41d3-9c20-4f9cecad87a8` | -| **AppsFlyer** | AppsFlyer icon | Source | airbyte/source-appsflyer:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/appsflyer) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-appsflyer) | `16447954-e6a8-4593-b140-43dea13bc457` | -| **Appstore** | Appstore icon | Source | airbyte/source-appstore-singer:0.2.6 | alpha | [link](https://docs.airbyte.com/integrations/sources/appstore) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-appstore-singer) | `2af123bf-0aaf-4e0d-9784-cb497f23741a` | -| **Asana** | Asana icon | Source | airbyte/source-asana:0.1.5 | beta | [link](https://docs.airbyte.com/integrations/sources/asana) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-asana) | `d0243522-dccf-4978-8ba0-37ed47a0bdbf` | -| **Ashby** | Ashby icon | Source | airbyte/source-ashby:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/ashby) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-ashby) | `4e8c9fa0-3634-499b-b948-11581b5c3efa` | -| **Auth0** | Auth0 icon | Source | airbyte/source-auth0:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/auth0) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-auth0) | `6c504e48-14aa-4221-9a72-19cf5ff1ae78` | -| **Azure Blob Storage** | Azure Blob Storage icon | Source | airbyte/source-azure-blob-storage:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/azure-blob-storage) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-azure-blob-storage) | `fdaaba68-4875-4ed9-8fcd-4ae1e0a25093` | -| **Azure Table Storage** | Azure Table Storage icon | Source | airbyte/source-azure-table:0.1.3 | alpha | [link](https://docs.airbyte.com/integrations/sources/azure-table) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-azure-table) | `798ae795-5189-42b6-b64e-3cb91db93338` | -| **Babelforce** | Babelforce icon | Source | airbyte/source-babelforce:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/babelforce) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-babelforce) | `971c3e1e-78a5-411e-ad56-c4052b50876b` | -| **BambooHR** | BambooHR icon | Source | airbyte/source-bamboo-hr:0.2.2 | alpha | [link](https://docs.airbyte.com/integrations/sources/bamboo-hr) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-bamboo-hr) | `90916976-a132-4ce9-8bce-82a03dd58788` | -| **BigCommerce** | BigCommerce icon | Source | airbyte/source-bigcommerce:0.1.10 | alpha | [link](https://docs.airbyte.com/integrations/sources/bigcommerce) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-bigcommerce) | `59c5501b-9f95-411e-9269-7143c939adbd` | -| **BigQuery** | BigQuery icon | Source | airbyte/source-bigquery:0.2.3 | alpha | [link](https://docs.airbyte.com/integrations/sources/bigquery) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-bigquery) | `bfd1ddf8-ae8a-4620-b1d7-55597d2ba08c` | -| **Bing Ads** | Bing Ads icon | Source | airbyte/source-bing-ads:0.1.18 | generally_available | [link](https://docs.airbyte.com/integrations/sources/bing-ads) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-bing-ads) | `47f25999-dd5e-4636-8c39-e7cea2453331` | -| **Braintree** | Braintree icon | Source | airbyte/source-braintree:0.1.4 | alpha | [link](https://docs.airbyte.com/integrations/sources/braintree) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-braintree) | `63cea06f-1c75-458d-88fe-ad48c7cb27fd` | -| **Braze** | x | Source | airbyte/source-braze:0.1.3 | alpha | [link](https://docs.airbyte.io/integrations/sources/braze) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-braze) | `68b9c98e-0747-4c84-b05b-d30b47686725` | -| **Breezometer** | Breezometer icon | Source | airbyte/source-breezometer:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/breezometer) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-breezometer) | `7c37685e-8512-4901-addf-9afbef6c0de9` | -| **CallRail** | CallRail icon | Source | airbyte/source-callrail:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/callrail) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-callrail) | `dc98a6ad-2dd1-47b6-9529-2ec35820f9c6` | -| **Cart.com** | Cart.com icon | Source | airbyte/source-cart:0.2.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/cart) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-cart) | `bb1a6d31-6879-4819-a2bd-3eed299ea8e2` | -| **Chargebee** | Chargebee icon | Source | airbyte/source-chargebee:0.2.3 | generally_available | [link](https://docs.airbyte.com/integrations/sources/chargebee) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-chargebee) | `686473f1-76d9-4994-9cc7-9b13da46147c` | -| **Chargify** | Chargify icon | Source | airbyte/source-chargify:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/chargify) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-chargify) | `9b2d3607-7222-4709-9fa2-c2abdebbdd88` | -| **Chartmogul** | Chartmogul icon | Source | airbyte/source-chartmogul:0.2.1 | beta | [link](https://docs.airbyte.com/integrations/sources/chartmogul) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-chartmogul) | `b6604cbd-1b12-4c08-8767-e140d0fb0877` | -| **ClickHouse** | ClickHouse icon | Source | airbyte/source-clickhouse:0.1.17 | alpha | [link](https://docs.airbyte.com/integrations/sources/clickhouse) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-clickhouse) | `bad83517-5e54-4a3d-9b53-63e85fbd4d7c` | -| **ClickUp** | ClickUp icon | Source | airbyte/source-clickup-api:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/click-up) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-clickup-api) | `311a7a27-3fb5-4f7e-8265-5e4afe258b66` | -| **Clockify** | Clockify icon | Source | airbyte/source-clockify:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/clockify) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-clockify) | `e71aae8a-5143-11ed-bdc3-0242ac120002` | -| **Close.com** | Close.com icon | Source | airbyte/source-close-com:0.2.1 | beta | [link](https://docs.airbyte.com/integrations/sources/close-com) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-close-com) | `dfffecb7-9a13-43e9-acdc-b92af7997ca9` | -| **Cockroachdb** | Cockroachdb icon | Source | airbyte/source-cockroachdb:0.1.22 | alpha | [link](https://docs.airbyte.com/integrations/sources/cockroachdb) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-cockroachdb) | `9fa5862c-da7c-11eb-8d19-0242ac130003` | -| **Coda** | Coda icon | Source | airbyte/source-coda:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/coda) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-coda) | `27f910fd-f832-4b2e-bcfd-6ab342e434d8` | -| **Coin API** | Coin API icon | Source | airbyte/source-coin-api:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/coin-api) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-coin-api) | `919984ef-53a2-479b-8ffe-9c1ddb9fc3f3` | -| **CoinGecko Coins** | CoinGecko Coins icon | Source | airbyte/source-coingecko-coins:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/coingecko-coins) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-coingecko-coins) | `9cdd4183-d0ba-40c3-aad3-6f46d4103974` | -| **CoinMarketCap** | CoinMarketCap icon | Source | airbyte/source-coinmarketcap:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/coinmarketcap) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-coinmarketcap) | `239463f5-64bb-4d88-b4bd-18ce673fd572` | -| **Commcare** | x | Source | airbyte/source-commcare:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/commcare) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-commcare) | `f39208dc-7e1c-48b8-919b-5006360cc27f` | -| **Commercetools** | Commercetools icon | Source | airbyte/source-commercetools:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/commercetools) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-commercetools) | `008b2e26-11a3-11ec-82a8-0242ac130003` | -| **ConfigCat** | ConfigCat icon | Source | airbyte/source-configcat:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/configcat) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-configcat) | `4fd7565c-8b99-439b-80d0-2d965e1d958c` | -| **Confluence** | Confluence icon | Source | airbyte/source-confluence:0.1.3 | beta | [link](https://docs.airbyte.com/integrations/sources/confluence) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-confluence) | `cf40a7f8-71f8-45ce-a7fa-fca053e4028c` | -| **ConvertKit** | ConvertKit icon | Source | airbyte/source-convertkit:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/convertkit) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-convertkit) | `be9ee02f-6efe-4970-979b-95f797a37188` | -| **Convex** | Convex icon | Source | airbyte/source-convex:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/convex) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-convex) | `c332628c-f55c-4017-8222-378cfafda9b2` | -| **Copper** | Copper icon | Source | airbyte/source-copper:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/copper) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-copper) | `44f3002f-2df9-4f6d-b21c-02cd3b47d0dc` | -| **Courier** | Courier icon | Source | airbyte/source-courier:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/courier) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-courier) | `0541b2cd-2367-4986-b5f1-b79ff55439e4` | -| **Customer.io** | Customer.io icon | Source | farosai/airbyte-customer-io-source:0.1.23 | alpha | [link](https://docs.airbyte.com/integrations/sources/customer-io) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/airbyte-customer-io-source) | `c47d6804-8b98-449f-970a-5ddb5cb5d7aa` | -| **DV 360** | DV 360 icon | Source | airbyte/source-dv-360:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/dv-360) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-dv-360) | `1356e1d9-977f-4057-ad4b-65f25329cf61` | -| **Datadog** | Datadog icon | Source | airbyte/source-datadog:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/datadog) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-datadog) | `1cfc30c7-82db-43f4-9fd7-ac1b42312cda` | -| **Datascope** | Datascope icon | Source | airbyte/source-datascope:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/datascope) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-datascope) | `8e1ae2d2-4790-44d3-9d83-75b3fc3940ff` | -| **Delighted** | Delighted icon | Source | airbyte/source-delighted:0.2.2 | beta | [link](https://docs.airbyte.com/integrations/sources/delighted) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-delighted) | `cc88c43f-6f53-4e8a-8c4d-b284baaf9635` | -| **Dixa** | Dixa icon | Source | airbyte/source-dixa:0.1.3 | alpha | [link](https://docs.airbyte.com/integrations/sources/dixa) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-dixa) | `0b5c867e-1b12-4d02-ab74-97b2184ff6d7` | -| **Dockerhub** | Dockerhub icon | Source | airbyte/source-dockerhub:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/dockerhub) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-dockerhub) | `72d405a3-56d8-499f-a571-667c03406e43` | -| **Dremio** | Dremio icon | Source | airbyte/source-dremio:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/dremio) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-dremio) | `d99e9ace-8621-46c2-9144-76ae4751d64b` | -| **Drift** | Drift icon | Source | airbyte/source-drift:0.2.6 | alpha | [link](https://docs.airbyte.com/integrations/sources/drift) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-drift) | `445831eb-78db-4b1f-8f1f-0d96ad8739e2` | -| **DynamoDB** | DynamoDB icon | Source | airbyte/source-dynamodb:0.1.2 | alpha | [link](https://docs.airbyte.com/integrations/sources/dynamodb) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-dynamodb) | `50401137-8871-4c5a-abb7-1f5fda35545a` | -| **E2E Testing** | E2E Testing icon | Source | airbyte/source-e2e-test:2.1.4 | alpha | [link](https://docs.airbyte.com/integrations/sources/e2e-test) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-e2e-test) | `d53f9084-fa6b-4a5a-976c-5b8392f4ad8a` | -| **Elasticsearch** | Elasticsearch icon | Source | airbyte/source-elasticsearch:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/elasticsearch) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-elasticsearch) | `7cf88806-25f5-4e1a-b422-b2fa9e1b0090` | -| **EmailOctopus** | EmailOctopus icon | Source | airbyte/source-emailoctopus:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/emailoctopus) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-emailoctopus) | `46b25e70-c980-4590-a811-8deaf50ee09f` | -| **Everhour** | Everhour icon | Source | airbyte/source-everhour:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/everhour) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-everhour) | `6babfc42-c734-4ef6-a817-6eca15f0f9b7` | -| **Exchange Rates Api** | Exchange Rates Api icon | Source | airbyte/source-exchange-rates:1.2.8 | alpha | [link](https://docs.airbyte.com/integrations/sources/exchangeratesapi) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-exchange-rates) | `e2b40e36-aa0e-4bed-b41b-bcea6fa348b1` | -| **Facebook Marketing** | Facebook Marketing icon | Source | airbyte/source-facebook-marketing:0.3.2 | generally_available | [link](https://docs.airbyte.com/integrations/sources/facebook-marketing) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-facebook-marketing) | `e7778cfc-e97c-4458-9ecb-b4f2bba8946c` | -| **Facebook Pages** | Facebook Pages icon | Source | airbyte/source-facebook-pages:0.2.4 | beta | [link](https://docs.airbyte.com/integrations/sources/facebook-pages) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-facebook-pages) | `010eb12f-837b-4685-892d-0a39f76a98f5` | -| **Fastbill** | Fastbill icon | Source | airbyte/source-fastbill:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/fastbill) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-fastbill) | `eb3e9c1c-0467-4eb7-a172-5265e04ccd0a` | -| **Fauna** | Fauna icon | Source | airbyte/source-fauna:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/fauna) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-fauna) | `3825db3e-c94b-42ac-bd53-b5a9507ace2b` | -| **File (CSV, JSON, Excel, Feather, Parquet)** | File (CSV, JSON, Excel, Feather, Parquet) icon | Source | airbyte/source-file:0.2.37 | generally_available | [link](https://docs.airbyte.com/integrations/sources/file) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-file) | `778daa7c-feaf-4db6-96f3-70fd645acc77` | -| **Firebase Realtime Database** | x | Source | airbyte/source-firebase-realtime-database:0.1.0 | alpha | [link](https://docs.airbyte.io/integrations/sources/firebase-realtime-database) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-firebase-realtime-database) | `acb5f973-a565-441e-992f-4946f3e65662` | -| **Firebolt** | Firebolt icon | Source | airbyte/source-firebolt:0.2.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/firebolt) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-firebolt) | `6f2ac653-8623-43c4-8950-19218c7caf3d` | -| **Flexport** | x | Source | airbyte/source-flexport:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/flexport) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-flexport) | `f95337f1-2ad1-4baf-922f-2ca9152de630` | -| **Freshcaller** | Freshcaller icon | Source | airbyte/source-freshcaller:0.1.0 | unknown | [link](https://docs.airbyte.com/integrations/sources/freshcaller) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-freshcaller) | `8a5d48f6-03bb-4038-a942-a8d3f175cca3` | -| **Freshdesk** | Freshdesk icon | Source | airbyte/source-freshdesk:3.0.2 | generally_available | [link](https://docs.airbyte.com/integrations/sources/freshdesk) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-freshdesk) | `ec4b9503-13cb-48ab-a4ab-6ade4be46567` | -| **Freshsales** | Freshsales icon | Source | airbyte/source-freshsales:0.1.4 | beta | [link](https://docs.airbyte.com/integrations/sources/freshsales) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-freshsales) | `eca08d79-7b92-4065-b7f3-79c14836ebe7` | -| **Freshservice** | Freshservice icon | Source | airbyte/source-freshservice:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/freshservice) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-freshservice) | `9bb85338-ea95-4c93-b267-6be89125b267` | -| **GCS** | GCS icon | Source | airbyte/source-gcs:0.1.0 | unknown | [link](https://docs.airbyte.com/integrations/sources/gcs) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-gcs) | `2a8c41ae-8c23-4be0-a73f-2ab10ca1a820` | -| **GNews** | GNews icon | Source | airbyte/source-gnews:0.1.3 | alpha | [link](https://docs.airbyte.com/integrations/sources/gnews) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-gnews) | `ce38aec4-5a77-439a-be29-9ca44fd4e811` | -| **Genesys** | Genesys icon | Source | airbyte/source-genesys:0.1.0 | unknown | [link](https://docs.airbyte.com/integrations/sources/genesys) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-genesys) | `5ea4459a-8f1a-452a-830f-a65c38cc438d` | -| **GetLago** | GetLago icon | Source | airbyte/source-getlago:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/getlago) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-getlago) | `e1a3866b-d3b2-43b6-b6d7-8c1ee4d7f53f` | -| **GitHub** | GitHub icon | Source | airbyte/source-github:0.4.7 | generally_available | [link](https://docs.airbyte.com/integrations/sources/github) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-github) | `ef69ef6e-aa7f-4af1-a01d-ef775033524e` | -| **Gitlab** | Gitlab icon | Source | airbyte/source-gitlab:1.0.3 | beta | [link](https://docs.airbyte.com/integrations/sources/gitlab) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-gitlab) | `5e6175e5-68e1-4c17-bff9-56103bbb0d80` | -| **Glassfrog** | Glassfrog icon | Source | airbyte/source-glassfrog:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/glassfrog) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-glassfrog) | `cf8ff320-6272-4faa-89e6-4402dc17e5d5` | -| **GoCardless** | GoCardless icon | Source | airbyte/source-gocardless:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/gocardless) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-gocardless) | `ba15ac82-5c6a-4fb2-bf24-925c23a1180c` | -| **Gong** | Gong icon | Source | airbyte/source-gong:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/gong) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-gong) | `32382e40-3b49-4b99-9c5c-4076501914e7` | -| **Google Ads** | Google Ads icon | Source | airbyte/source-google-ads:0.2.13 | generally_available | [link](https://docs.airbyte.com/integrations/sources/google-ads) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-google-ads) | `253487c0-2246-43ba-a21f-5116b20a2c50` | -| **Google Analytics (Universal Analytics)** | Google Analytics (Universal Analytics) icon | Source | airbyte/source-google-analytics-v4:0.1.34 | generally_available | [link](https://docs.airbyte.com/integrations/sources/google-analytics-v4) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-google-analytics-v4) | `eff3616a-f9c3-11eb-9a03-0242ac130003` | -| **Google Analytics 4 (GA4)** | Google Analytics 4 (GA4) icon | Source | airbyte/source-google-analytics-data-api:0.1.3 | generally_available | [link](https://docs.airbyte.com/integrations/sources/google-analytics-data-api) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-google-analytics-data-api) | `3cc2eafd-84aa-4dca-93af-322d9dfeec1a` | -| **Google Directory** | Google Directory icon | Source | airbyte/source-google-directory:0.1.9 | alpha | [link](https://docs.airbyte.com/integrations/sources/google-directory) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-google-directory) | `d19ae824-e289-4b14-995a-0632eb46d246` | -| **Google PageSpeed Insights** | Google PageSpeed Insights icon | Source | airbyte/source-google-pagespeed-insights:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/google-pagespeed-insights) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-google-pagespeed-insights) | `1e9086ab-ddac-4c1d-aafd-ba43ff575fe4` | -| **Google Search Console** | Google Search Console icon | Source | airbyte/source-google-search-console:0.1.22 | generally_available | [link](https://docs.airbyte.com/integrations/sources/google-search-console) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-google-search-console) | `eb4c9e00-db83-4d63-a386-39cfa91012a8` | -| **Google Sheets** | Google Sheets icon | Source | airbyte/source-google-sheets:0.2.37 | generally_available | [link](https://docs.airbyte.com/integrations/sources/google-sheets) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-google-sheets) | `71607ba1-c0ac-4799-8049-7f4b90dd50f7` | -| **Google Webfonts** | Google Webfonts icon | Source | airbyte/source-google-webfonts:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/google-webfonts) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-google-webfonts) | `a68fbcde-b465-4ab3-b2a6-b0590a875835` | -| **Google Workspace Admin Reports** | Google Workspace Admin Reports icon | Source | airbyte/source-google-workspace-admin-reports:0.1.8 | alpha | [link](https://docs.airbyte.com/integrations/sources/google-workspace-admin-reports) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-google-workspace-admin-reports) | `ed9dfefa-1bbc-419d-8c5e-4d78f0ef6734` | -| **Greenhouse** | Greenhouse icon | Source | airbyte/source-greenhouse:0.3.1 | generally_available | [link](https://docs.airbyte.com/integrations/sources/greenhouse) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-greenhouse) | `59f1e50a-331f-4f09-b3e8-2e8d4d355f44` | -| **Gridly** | Gridly icon | Source | airbyte/source-gridly:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/gridly) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-gridly) | `6cbea164-3237-433b-9abb-36d384ee4cbf` | -| **Gutendex** | x | Source | airbyte/source-gutendex:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/gutendex) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-gutendex) | `bff9a277-e01d-420d-81ee-80f28a307318` | -| **Harness** | Harness icon | Source | farosai/airbyte-harness-source:0.1.23 | alpha | [link](https://docs.airbyte.com/integrations/sources/harness) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/airbyte-harness-source) | `6fe89830-d04d-401b-aad6-6552ffa5c4af` | -| **Harvest** | Harvest icon | Source | airbyte/source-harvest:0.1.17 | generally_available | [link](https://docs.airbyte.com/integrations/sources/harvest) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-harvest) | `fe2b4084-3386-4d3b-9ad6-308f61a6f1e6` | -| **Hellobaton** | Hellobaton icon | Source | airbyte/source-hellobaton:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/hellobaton) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-hellobaton) | `492b56d1-937c-462e-8076-21ad2031e784` | -| **HubSpot** | HubSpot icon | Source | airbyte/source-hubspot:0.6.0 | generally_available | [link](https://docs.airbyte.com/integrations/sources/hubspot) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-hubspot) | `36c891d9-4bd9-43ac-bad2-10e12756272c` | -| **Hubplanner** | Hubplanner icon | Source | airbyte/source-hubplanner:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/hubplanner) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-hubplanner) | `8097ceb9-383f-42f6-9f92-d3fd4bcc7689` | -| **IBM Db2** | IBM Db2 icon | Source | airbyte/source-db2:0.1.19 | alpha | [link](https://docs.airbyte.com/integrations/sources/db2) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-db2) | `447e0381-3780-4b46-bb62-00a4e3c8b8e2` | -| **IP2Whois** | IP2Whois icon | Source | airbyte/source-ip2whois:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/ip2whois) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-ip2whois) | `f23b7b7c-d705-49a3-9042-09add3b104a5` | -| **Insightly** | Insightly icon | Source | airbyte/source-insightly:0.1.2 | alpha | [link](https://docs.airbyte.com/integrations/sources/insightly) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-insightly) | `38f84314-fe6a-4257-97be-a8dcd942d693` | -| **Instagram** | Instagram icon | Source | airbyte/source-instagram:1.0.5 | generally_available | [link](https://docs.airbyte.com/integrations/sources/instagram) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-instagram) | `6acf6b55-4f1e-4fca-944e-1a3caef8aba8` | -| **Instatus** | Instatus icon | Source | airbyte/source-instatus:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/instatus) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-instatus) | `1901024c-0249-45d0-bcac-31a954652927` | -| **Intercom** | Intercom icon | Source | airbyte/source-intercom:0.2.0 | generally_available | [link](https://docs.airbyte.com/integrations/sources/intercom) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-intercom) | `d8313939-3782-41b0-be29-b3ca20d8dd3a` | -| **Intruder** | Intruder icon | Source | airbyte/source-intruder:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/intruder) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-intruder) | `3d15163b-11d8-412f-b808-795c9b2c3a3a` | -| **Iterable** | Iterable icon | Source | airbyte/source-iterable:0.1.27 | generally_available | [link](https://docs.airbyte.com/integrations/sources/iterable) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-iterable) | `2e875208-0c0b-4ee4-9e92-1cb3156ea799` | -| **Jenkins** | Jenkins icon | Source | farosai/airbyte-jenkins-source:0.1.23 | alpha | [link](https://docs.airbyte.com/integrations/sources/jenkins) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/airbyte-jenkins-source) | `d6f73702-d7a0-4e95-9758-b0fb1af0bfba` | -| **Jira** | Jira icon | Source | airbyte/source-jira:0.3.6 | beta | [link](https://docs.airbyte.com/integrations/sources/jira) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-jira) | `68e63de2-bb83-4c7e-93fa-a8a9051e3993` | -| **K6 Cloud** | K6 Cloud icon | Source | airbyte/source-k6-cloud:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/k6-cloud) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-k6-cloud) | `e300ece7-b073-43a3-852e-8aff36a57f13` | -| **Kafka** | Kafka icon | Source | airbyte/source-kafka:0.2.3 | alpha | [link](https://docs.airbyte.com/integrations/sources/kafka) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-kafka) | `d917a47b-8537-4d0d-8c10-36a9928d4265` | -| **Klarna** | Klarna icon | Source | airbyte/source-klarna:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/klarna) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-klarna) | `60c24725-00ae-490c-991d-55b78c3197e0` | -| **Klaviyo** | Klaviyo icon | Source | airbyte/source-klaviyo:0.3.0 | generally_available | [link](https://docs.airbyte.com/integrations/sources/klaviyo) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-klaviyo) | `95e8cffd-b8c4-4039-968e-d32fb4a69bde` | -| **Kustomer** | Kustomer icon | Source | airbyte/source-kustomer-singer:0.1.2 | alpha | [link](https://docs.airbyte.com/integrations/sources/kustomer) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-kustomer-singer) | `cd06e646-31bf-4dc8-af48-cbc6530fcad3` | -| **Kyriba** | Kyriba icon | Source | airbyte/source-kyriba:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/kyriba) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-kyriba) | `547dc08e-ab51-421d-953b-8f3745201a8c` | -| **LaunchDarkly** | LaunchDarkly icon | Source | airbyte/source-launchdarkly:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/launchdarkly) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-launchdarkly) | `f96bb511-5e3c-48fc-b408-547953cd81a4` | -| **Lemlist** | x | Source | airbyte/source-lemlist:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/lemlist) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-lemlist) | `789f8e7a-2d28-11ec-8d3d-0242ac130003` | -| **Lever Hiring** | Lever Hiring icon | Source | airbyte/source-lever-hiring:0.1.3 | alpha | [link](https://docs.airbyte.com/integrations/sources/lever-hiring) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-lever-hiring) | `3981c999-bd7d-4afc-849b-e53dea90c948` | -| **LinkedIn Ads** | LinkedIn Ads icon | Source | airbyte/source-linkedin-ads:0.1.15 | generally_available | [link](https://docs.airbyte.com/integrations/sources/linkedin-ads) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-linkedin-ads) | `137ece28-5434-455c-8f34-69dc3782f451` | -| **LinkedIn Pages** | LinkedIn Pages icon | Source | airbyte/source-linkedin-pages:1.0.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/linkedin-pages) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-linkedin-pages) | `af54297c-e8f8-4d63-a00d-a94695acc9d3` | -| **Linnworks** | Linnworks icon | Source | airbyte/source-linnworks:0.1.5 | alpha | [link](https://docs.airbyte.com/integrations/sources/linnworks) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-linnworks) | `7b86879e-26c5-4ef6-a5ce-2be5c7b46d1e` | -| **Lokalise** | Lokalise icon | Source | airbyte/source-lokalise:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/lokalise) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-lokalise) | `45e0b135-615c-40ac-b38e-e65b0944197f` | -| **Looker** | Looker icon | Source | airbyte/source-looker:0.2.8 | alpha | [link](https://docs.airbyte.com/integrations/sources/looker) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-looker) | `00405b19-9768-4e0c-b1ae-9fc2ee2b2a8c` | -| **Mailchimp** | Mailchimp icon | Source | airbyte/source-mailchimp:0.3.5 | generally_available | [link](https://docs.airbyte.com/integrations/sources/mailchimp) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-mailchimp) | `b03a9f3e-22a5-11eb-adc1-0242ac120002` | -| **MailerLite** | MailerLite icon | Source | airbyte/source-mailerlite:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/mailerlite) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-mailerlite) | `dc3b9003-2432-4e93-a7f4-4620b0f14674` | -| **MailerSend** | MailerSend icon | Source | airbyte/source-mailersend:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/mailersend) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-mailersend) | `2707d529-3c04-46eb-9c7e-40d4038df6f7` | -| **Mailgun** | Mailgun icon | Source | airbyte/source-mailgun:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/mailgun) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-mailgun) | `5b9cb09e-1003-4f9c-983d-5779d1b2cd51` | -| **Mailjet Mail** | Mailjet Mail icon | Source | airbyte/source-mailjet-mail:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/mailjet-mail) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-mailjet-mail) | `56582331-5de2-476b-b913-5798de77bbdf` | -| **Mailjet SMS** | Mailjet SMS icon | Source | airbyte/source-mailjet-sms:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/mailjet-sms) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-mailjet-sms) | `6ec2acea-7fd1-4378-b403-41a666e0c028` | -| **Marketo** | Marketo icon | Source | airbyte/source-marketo:1.0.3 | generally_available | [link](https://docs.airbyte.com/integrations/sources/marketo) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-marketo) | `9e0556f4-69df-4522-a3fb-03264d36b348` | -| **Metabase** | Metabase icon | Source | airbyte/source-metabase:0.3.1 | beta | [link](https://docs.airbyte.com/integrations/sources/metabase) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-metabase) | `c7cb421b-942e-4468-99ee-e369bcabaec5` | -| **Microsoft Dataverse** | Microsoft Dataverse icon | Source | airbyte/source-microsoft-dataverse:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/microsoft-dataverse) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-microsoft-dataverse) | `9220e3de-3b60-4bb2-a46f-046d59ea235a` | -| **Microsoft SQL Server (MSSQL)** | Microsoft SQL Server (MSSQL) icon | Source | airbyte/source-mssql:1.0.11 | alpha | [link](https://docs.airbyte.com/integrations/sources/mssql) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-mssql) | `b5ea17b1-f170-46dc-bc31-cc744ca984c1` | -| **Microsoft teams** | Microsoft teams icon | Source | airbyte/source-microsoft-teams:0.2.5 | alpha | [link](https://docs.airbyte.com/integrations/sources/microsoft-teams) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-microsoft-teams) | `eaf50f04-21dd-4620-913b-2a83f5635227` | -| **Mixpanel** | Mixpanel icon | Source | airbyte/source-mixpanel:0.1.31 | generally_available | [link](https://docs.airbyte.com/integrations/sources/mixpanel) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-mixpanel) | `12928b32-bf0a-4f1e-964f-07e12e37153a` | -| **Monday** | Monday icon | Source | airbyte/source-monday:0.2.3 | beta | [link](https://docs.airbyte.com/integrations/sources/monday) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-monday) | `80a54ea2-9959-4040-aac1-eee42423ec9b` | -| **MongoDb** | MongoDb icon | Source | airbyte/source-mongodb-v2:0.1.19 | alpha | [link](https://docs.airbyte.com/integrations/sources/mongodb-v2) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-mongodb-v2) | `b2e713cd-cc36-4c0a-b5bd-b47cb8a0561e` | -| **My Hours** | My Hours icon | Source | airbyte/source-my-hours:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/my-hours) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-my-hours) | `722ba4bf-06ec-45a4-8dd5-72e4a5cf3903` | -| **MySQL** | MySQL icon | Source | airbyte/source-mysql:2.0.15 | beta | [link](https://docs.airbyte.com/integrations/sources/mysql) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-mysql) | `435bb9a5-7887-4809-aa58-28c27df0d7ad` | -| **NASA** | NASA icon | Source | airbyte/source-nasa:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/nasa) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-nasa) | `1a8667d7-7978-43cd-ba4d-d32cbd478971` | -| **Netsuite** | Netsuite icon | Source | airbyte/source-netsuite:0.1.3 | alpha | [link](https://docs.airbyte.com/integrations/sources/netsuite) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-netsuite) | `4f2f093d-ce44-4121-8118-9d13b7bfccd0` | -| **New York Times** | New York Times icon | Source | airbyte/source-nytimes:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/nytimes) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-nytimes) | `0fae6a9a-04eb-44d4-96e1-e02d3dbc1d83` | -| **News API** | News API icon | Source | airbyte/source-news-api:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/news-api) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-news-api) | `df38991e-f35b-4af2-996d-36817f614587` | -| **Newsdata** | x | Source | airbyte/source-newsdata:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/newsdata) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-newsdata) | `60bd11d8-2632-4daa-a688-b47336d32093` | -| **Notion** | Notion icon | Source | airbyte/source-notion:1.0.4 | generally_available | [link](https://docs.airbyte.com/integrations/sources/notion) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-notion) | `6e00b415-b02e-4160-bf02-58176a0ae687` | -| **Okta** | Okta icon | Source | airbyte/source-okta:0.1.14 | alpha | [link](https://docs.airbyte.com/integrations/sources/okta) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-okta) | `1d4fdb25-64fc-4569-92da-fcdca79a8372` | -| **Omnisend** | Omnisend icon | Source | airbyte/source-omnisend:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/omnisend) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-omnisend) | `e7f0c5e2-4815-48c4-90cf-f47124209835` | -| **OneSignal** | OneSignal icon | Source | airbyte/source-onesignal:1.0.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/onesignal) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-onesignal) | `bb6afd81-87d5-47e3-97c4-e2c2901b1cf8` | -| **Open Exchange Rates** | Open Exchange Rates icon | Source | airbyte/source-open-exchange-rates:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/open-exchange-rates) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-open-exchange-rates) | `77d5ca6b-d345-4dce-ba1e-1935a75778b8` | -| **OpenWeather** | OpenWeather icon | Source | airbyte/source-openweather:0.1.6 | alpha | [link](https://docs.airbyte.com/integrations/sources/openweather) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-openweather) | `d8540a80-6120-485d-b7d6-272bca477d9b` | -| **Opsgenie** | x | Source | airbyte/source-opsgenie:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/opsgenie) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-opsgenie) | `06bdb480-2598-40b8-8b0f-fc2e2d2abdda` | -| **Oracle DB** | Oracle DB icon | Source | airbyte/source-oracle:0.3.24 | alpha | [link](https://docs.airbyte.com/integrations/sources/oracle) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-oracle) | `b39a7370-74c3-45a6-ac3a-380d48520a83` | -| **Orb** | Orb icon | Source | airbyte/source-orb:1.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/orb) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-orb) | `7f0455fb-4518-4ec0-b7a3-d808bf8081cc` | -| **Orbit** | Orbit icon | Source | airbyte/source-orbit:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/orbit) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-orbit) | `95bcc041-1d1a-4c2e-8802-0ca5b1bfa36a` | -| **Oura** | Oura icon | Source | airbyte/source-oura:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/oura) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-oura) | `2bf6c581-bec5-4e32-891d-de33036bd631` | -| **Outreach** | Outreach icon | Source | airbyte/source-outreach:0.2.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/outreach) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-outreach) | `3490c201-5d95-4783-b600-eaf07a4c7787` | -| **PagerDuty** | PagerDuty icon | Source | farosai/airbyte-pagerduty-source:0.1.23 | alpha | [link](https://docs.airbyte.com/integrations/sources/pagerduty) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/airbyte-pagerduty-source) | `2817b3f0-04e4-4c7a-9f32-7a5e8a83db95` | -| **Pardot** | Pardot icon | Source | airbyte/source-pardot:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/pardot) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-pardot) | `ad15c7ba-72a7-440b-af15-b9a963dc1a8a` | -| **PartnerStack** | PartnerStack icon | Source | airbyte/source-partnerstack:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/partnerstack) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-partnerstack) | `d30fb809-6456-484d-8e2c-ee12e0f6888d` | -| **Paypal Transaction** | Paypal Transaction icon | Source | airbyte/source-paypal-transaction:0.1.12 | generally_available | [link](https://docs.airbyte.com/integrations/sources/paypal-transaction) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-paypal-transaction) | `d913b0f2-cc51-4e55-a44c-8ba1697b9239` | -| **Paystack** | Paystack icon | Source | airbyte/source-paystack:0.1.3 | beta | [link](https://docs.airbyte.com/integrations/sources/paystack) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-paystack) | `193bdcb8-1dd9-48d1-aade-91cadfd74f9b` | -| **Pendo** | Pendo icon | Source | airbyte/source-pendo:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/pendo) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-pendo) | `b1ccb590-e84f-46c0-83a0-2048ccfffdae` | -| **PersistIq** | PersistIq icon | Source | airbyte/source-persistiq:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/persistiq) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-persistiq) | `3052c77e-8b91-47e2-97a0-a29a22794b4b` | -| **Pexels API** | Pexels API icon | Source | airbyte/source-pexels-api:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/pexels-api) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-pexels-api) | `69d9eb65-8026-47dc-baf1-e4bf67901fd6` | -| **Pinterest** | Pinterest icon | Source | airbyte/source-pinterest:0.2.4 | generally_available | [link](https://docs.airbyte.com/integrations/sources/pinterest) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-pinterest) | `5cb7e5fe-38c2-11ec-8d3d-0242ac130003` | -| **Pipedrive** | Pipedrive icon | Source | airbyte/source-pipedrive:0.1.17 | beta | [link](https://docs.airbyte.com/integrations/sources/pipedrive) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-pipedrive) | `d8286229-c680-4063-8c59-23b9b391c700` | -| **Pivotal Tracker** | Pivotal Tracker icon | Source | airbyte/source-pivotal-tracker:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/pivotal-tracker) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-pivotal-tracker) | `d60f5393-f99e-4310-8d05-b1876820f40e` | -| **Plaid** | Plaid icon | Source | airbyte/source-plaid:0.3.2 | alpha | [link](https://docs.airbyte.com/integrations/sources/plaid) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-plaid) | `ed799e2b-2158-4c66-8da4-b40fe63bc72a` | -| **Plausible** | Plausible icon | Source | airbyte/source-plausible:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/plausible) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-plausible) | `603ba446-3d75-41d7-92f3-aba901f8b897` | -| **Pocket** | Pocket icon | Source | airbyte/source-pocket:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/pocket) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-pocket) | `b0dd65f1-081f-4731-9c51-38e9e6aa0ebf` | -| **PokeAPI** | PokeAPI icon | Source | airbyte/source-pokeapi:0.1.5 | alpha | [link](https://docs.airbyte.com/integrations/sources/pokeapi) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-pokeapi) | `6371b14b-bc68-4236-bfbd-468e8df8e968` | -| **Polygon Stock API** | Polygon Stock API icon | Source | airbyte/source-polygon-stock-api:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/polygon-stock-api) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-polygon-stock-api) | `5807d72f-0abc-49f9-8fa5-ae820007032b` | -| **PostHog** | PostHog icon | Source | airbyte/source-posthog:0.1.9 | beta | [link](https://docs.airbyte.com/integrations/sources/posthog) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-posthog) | `af6d50ee-dddf-4126-a8ee-7faee990774f` | -| **Postgres** | Postgres icon | Source | airbyte/source-postgres:2.0.21 | generally_available | [link](https://docs.airbyte.com/integrations/sources/postgres) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-postgres) | `decd338e-5647-4c0b-adf4-da0e75f5a750` | -| **Postmark App** | Postmark App icon | Source | airbyte/source-postmarkapp:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/postmarkapp) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-postmarkapp) | `cde75ca1-1e28-4a0f-85bb-90c546de9f1f` | -| **PrestaShop** | PrestaShop icon | Source | airbyte/source-prestashop:0.3.1 | beta | [link](https://docs.airbyte.com/integrations/sources/prestashop) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-prestashop) | `d60a46d4-709f-4092-a6b7-2457f7d455f5` | -| **Primetric** | Primetric icon | Source | airbyte/source-primetric:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/primetric) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-primetric) | `f636c3c6-4077-45ac-b109-19fc62a283c1` | -| **Public APIs** | Public APIs icon | Source | airbyte/source-public-apis:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/public-apis) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-public-apis) | `a4617b39-3c14-44cd-a2eb-6e720f269235` | -| **Punk API** | Punk API icon | Source | airbyte/source-punk-api:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/punk-api) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-punk-api) | `dbe9b7ae-7b46-4e44-a507-02a343cf7230` | -| **PyPI** | PyPI icon | Source | airbyte/source-pypi:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/pypi) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-pypi) | `88ecd3a8-5f5b-11ed-9b6a-0242ac120002` | -| **Qonto** | Qonto icon | Source | airbyte/source-qonto:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/public-qonto) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-qonto) | `f7c0b910-5f66-11ed-9b6a-0242ac120002` | -| **Qualaroo** | Qualaroo icon | Source | airbyte/source-qualaroo:0.1.2 | alpha | [link](https://docs.airbyte.com/integrations/sources/qualaroo) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-qualaroo) | `b08e4776-d1de-4e80-ab5c-1e51dad934a2` | -| **QuickBooks** | QuickBooks icon | Source | airbyte/source-quickbooks:2.0.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/quickbooks) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-quickbooks) | `cf9c4355-b171-4477-8f2d-6c5cc5fc8b7e` | -| **RD Station Marketing** | RD Station Marketing icon | Source | airbyte/source-rd-station-marketing:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/rd-station-marketing) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-rd-station-marketing) | `fb141f29-be2a-450b-a4f2-2cd203a00f84` | -| **RKI Covid** | RKI Covid icon | Source | airbyte/source-rki-covid:0.1.2 | alpha | [link](https://docs.airbyte.com/integrations/sources/rki-covid) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-rki-covid) | `d78e5de0-aa44-4744-aa4f-74c818ccfe19` | -| **RSS** | RSS icon | Source | airbyte/source-rss:0.1.0 | unknown | [link](https://docs.airbyte.com/integrations/sources/rss) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-rss) | `0efee448-6948-49e2-b786-17db50647908` | -| **Railz** | Railz icon | Source | airbyte/source-railz:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/railz) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-railz) | `9b6cc0c0-da81-4103-bbfd-5279e18a849a` | -| **Recharge** | Recharge icon | Source | airbyte/source-recharge:0.2.9 | generally_available | [link](https://docs.airbyte.com/integrations/sources/recharge) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-recharge) | `45d2e135-2ede-49e1-939f-3e3ec357a65e` | -| **Recreation** | Recreation icon | Source | airbyte/source-recreation:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/recreation) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-recreation) | `25d7535d-91e0-466a-aa7f-af81578be277` | -| **Recruitee** | Recruitee icon | Source | airbyte/source-recruitee:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/recruitee) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-recruitee) | `3b046ac7-d8d3-4eb3-b122-f96b2a16d8a8` | -| **Recurly** | Recurly icon | Source | airbyte/source-recurly:0.4.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/recurly) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-recurly) | `cd42861b-01fc-4658-a8ab-5d11d0510f01` | -| **Redshift** | Redshift icon | Source | airbyte/source-redshift:0.3.16 | alpha | [link](https://docs.airbyte.com/integrations/sources/redshift) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-redshift) | `e87ffa8e-a3b5-f69c-9076-6011339de1f6` | -| **Reply.io** | Reply.io icon | Source | airbyte/source-reply-io:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/reply-io) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-reply-io) | `8cc6537e-f8a6-423c-b960-e927af76116e` | -| **Retently** | Retently icon | Source | airbyte/source-retently:0.1.3 | alpha | [link](https://docs.airbyte.com/integrations/sources/retently) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-retently) | `db04ecd1-42e7-4115-9cec-95812905c626` | -| **Rocket.chat** | Rocket.chat icon | Source | airbyte/source-rocket-chat:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/rocket-chat) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-rocket-chat) | `921d9608-3915-450b-8078-0af18801ea1b` | -| **S3** | S3 icon | Source | airbyte/source-s3:2.0.4 | generally_available | [link](https://docs.airbyte.com/integrations/sources/s3) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-s3) | `69589781-7828-43c5-9f63-8925b1c1ccc2` | -| **SAP Fieldglass** | SAP Fieldglass icon | Source | airbyte/source-sap-fieldglass:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/sap-fieldglass) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-sap-fieldglass) | `ec5f3102-fb31-4916-99ae-864faf8e7e25` | -| **SFTP** | SFTP icon | Source | airbyte/source-sftp:0.1.2 | alpha | [link](https://docs.airbyte.com/integrations/sources/sftp) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-sftp) | `a827c52e-791c-4135-a245-e233c5255199` | -| **SFTP Bulk** | SFTP Bulk icon | Source | airbyte/source-sftp-bulk:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/sftp-bulk) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-sftp-bulk) | `31e3242f-dee7-4cdc-a4b8-8e06c5458517` | -| **SalesLoft** | SalesLoft icon | Source | airbyte/source-salesloft:1.0.0 | beta | [link](https://docs.airbyte.com/integrations/sources/salesloft) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-salesloft) | `41991d12-d4b5-439e-afd0-260a31d4c53f` | -| **Salesforce** | Salesforce icon | Source | airbyte/source-salesforce:2.0.9 | generally_available | [link](https://docs.airbyte.com/integrations/sources/salesforce) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-salesforce) | `b117307c-14b6-41aa-9422-947e34922962` | -| **Sample Data (Faker)** | Sample Data (Faker) icon | Source | airbyte/source-faker:2.0.3 | beta | [link](https://docs.airbyte.com/integrations/sources/faker) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-faker) | `dfd88b22-b603-4c3d-aad7-3701784586b1` | -| **SearchMetrics** | SearchMetrics icon | Source | airbyte/source-search-metrics:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/search-metrics) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-search-metrics) | `8d7ef552-2c0f-11ec-8d3d-0242ac130003` | -| **Secoda** | Secoda icon | Source | airbyte/source-secoda:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/secoda) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-secoda) | `da9fc6b9-8059-4be0-b204-f56e22e4d52d` | -| **Sendgrid** | Sendgrid icon | Source | airbyte/source-sendgrid:0.3.1 | generally_available | [link](https://docs.airbyte.com/integrations/sources/sendgrid) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-sendgrid) | `fbb5fbe2-16ad-4cf4-af7d-ff9d9c316c87` | -| **Sendinblue** | Sendinblue icon | Source | airbyte/source-sendinblue:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/sendinblue) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-sendinblue) | `2e88fa20-a2f6-43cc-bba6-98a0a3f244fb` | -| **Senseforce** | Senseforce icon | Source | airbyte/source-senseforce:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/senseforce) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-senseforce) | `39de93cb-1511-473e-a673-5cbedb9436af` | -| **Sentry** | Sentry icon | Source | airbyte/source-sentry:0.2.0 | generally_available | [link](https://docs.airbyte.com/integrations/sources/sentry) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-sentry) | `cdaf146a-9b75-49fd-9dd2-9d64a0bb4781` | -| **Shopify** | Shopify icon | Source | airbyte/source-shopify:0.3.2 | alpha | [link](https://docs.airbyte.com/integrations/sources/shopify) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-shopify) | `9da77001-af33-4bcd-be46-6252bf9342b9` | -| **Short.io** | Short.io icon | Source | airbyte/source-shortio:0.1.3 | alpha | [link](https://docs.airbyte.com/integrations/sources/shortio) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-shortio) | `2fed2292-5586-480c-af92-9944e39fe12d` | -| **Slack** | Slack icon | Source | airbyte/source-slack:0.1.25 | generally_available | [link](https://docs.airbyte.com/integrations/sources/slack) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-slack) | `c2281cee-86f9-4a86-bb48-d23286b4c7bd` | -| **Smaily** | Smaily icon | Source | airbyte/source-smaily:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/smaily) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-smaily) | `781f8b1d-4e20-4842-a2c3-cd9b119d65fa` | -| **SmartEngage** | SmartEngage icon | Source | airbyte/source-smartengage:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/smartengage) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-smartengage) | `21cc4a17-a011-4485-8a3e-e2341a91ab9f` | -| **Smartsheets** | Smartsheets icon | Source | airbyte/source-smartsheets:1.0.0 | beta | [link](https://docs.airbyte.com/integrations/sources/smartsheets) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-smartsheets) | `374ebc65-6636-4ea0-925c-7d35999a8ffc` | -| **Snapchat Marketing** | Snapchat Marketing icon | Source | airbyte/source-snapchat-marketing:0.1.15 | generally_available | [link](https://docs.airbyte.com/integrations/sources/snapchat-marketing) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-snapchat-marketing) | `200330b2-ea62-4d11-ac6d-cfe3e3f8ab2b` | -| **Snowflake** | Snowflake icon | Source | airbyte/source-snowflake:0.1.34 | alpha | [link](https://docs.airbyte.com/integrations/sources/snowflake) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-snowflake) | `e2d65910-8c8b-40a1-ae7d-ee2416b2bfa2` | -| **Sonar Cloud** | Sonar Cloud icon | Source | airbyte/source-sonar-cloud:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/sonar-cloud) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-sonar-cloud) | `3ab1d7d0-1577-4ab9-bcc4-1ff6a4c2c9f2` | -| **SpaceX API** | SpaceX API icon | Source | airbyte/source-spacex-api:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/spacex-api) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-spacex-api) | `62235e65-af7a-4138-9130-0bda954eb6a8` | -| **Square** | Square icon | Source | airbyte/source-square:0.2.2 | beta | [link](https://docs.airbyte.com/integrations/sources/square) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-square) | `77225a51-cd15-4a13-af02-65816bd0ecf4` | -| **Statuspage** | Statuspage icon | Source | airbyte/source-statuspage:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/statuspage) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-statuspage) | `74cbd708-46c3-4512-9c93-abd5c3e9a94d` | -| **Strava** | Strava icon | Source | airbyte/source-strava:0.1.4 | beta | [link](https://docs.airbyte.com/integrations/sources/strava) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-strava) | `7a4327c4-315a-11ec-8d3d-0242ac130003` | -| **Stripe** | Stripe icon | Source | airbyte/source-stripe:3.1.0 | generally_available | [link](https://docs.airbyte.com/integrations/sources/stripe) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-stripe) | `e094cb9a-26de-4645-8761-65c0c425d1de` | -| **SurveyCTO** | SurveyCTO icon | Source | airbyte/source-surveycto:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/surveycto) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-surveycto) | `dd4632f4-15e0-4649-9b71-41719fb1fdee` | -| **SurveyMonkey** | SurveyMonkey icon | Source | airbyte/source-surveymonkey:0.1.16 | generally_available | [link](https://docs.airbyte.com/integrations/sources/surveymonkey) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-surveymonkey) | `badc5925-0485-42be-8caa-b34096cb71b5` | -| **SurveySparrow** | SurveySparrow icon | Source | airbyte/source-survey-sparrow:0.2.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/survey-sparrow) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-survey-sparrow) | `4a4d887b-0f2d-4b33-ab7f-9b01b9072804` | -| **TMDb** | TMDb icon | Source | airbyte/source-tmdb:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/tmdb) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-tmdb) | `6240848f-f795-45eb-8f5e-c7542822fc03` | -| **TPLcentral** | x | Source | airbyte/source-tplcentral:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/tplcentral) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-tplcentral) | `f9b6c538-ee12-42fe-8d4b-0c10f5955417` | -| **TVMaze Schedule** | TVMaze Schedule icon | Source | airbyte/source-tvmaze-schedule:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/tvmaze-schedule) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-tvmaze-schedule) | `bd14b08f-9f43-400f-b2b6-7248b5c72561` | -| **TalkDesk Explore** | TalkDesk Explore icon | Source | airbyte/source-talkdesk-explore:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/talkdesk-explore) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-talkdesk-explore) | `f00d2cf4-3c28-499a-ba93-b50b6f26359e` | -| **Tempo** | Tempo icon | Source | airbyte/source-tempo:0.3.1 | beta | [link](https://docs.airbyte.com/integrations/sources/tempo) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-tempo) | `d1aa448b-7c54-498e-ad95-263cbebcd2db` | -| **The Guardian API** | The Guardian API icon | Source | airbyte/source-the-guardian-api:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/the-guardian-api) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-the-guardian-api) | `d42bd69f-6bf0-4d0b-9209-16231af07a92` | -| **TiDB** | TiDB icon | Source | airbyte/source-tidb:0.2.4 | alpha | [link](https://docs.airbyte.com/integrations/sources/tidb) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-tidb) | `0dad1a35-ccf8-4d03-b73e-6788c00b13ae` | -| **TikTok Marketing** | TikTok Marketing icon | Source | airbyte/source-tiktok-marketing:3.0.1 | generally_available | [link](https://docs.airbyte.com/integrations/sources/tiktok-marketing) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-tiktok-marketing) | `4bfac00d-ce15-44ff-95b9-9e3c3e8fbd35` | -| **Timely** | Timely icon | Source | airbyte/source-timely:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/timely) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-timely) | `bc617b5f-1b9e-4a2d-bebe-782fd454a771` | -| **Todoist** | Todoist icon | Source | airbyte/source-todoist:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/todoist) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-todoist) | `7d272065-c316-4c04-a433-cd4ee143f83e` | -| **Toggl** | Toggl icon | Source | airbyte/source-toggl:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/toggl) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-toggl) | `7e7c844f-2300-4342-b7d3-6dd7992593cd` | -| **Trello** | Trello icon | Source | airbyte/source-trello:0.3.1 | beta | [link](https://docs.airbyte.com/integrations/sources/trello) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-trello) | `8da67652-004c-11ec-9a03-0242ac130003` | -| **TrustPilot** | TrustPilot icon | Source | airbyte/source-trustpilot:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/trustpilot) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-trustpilot) | `d7e23ea6-d741-4314-9209-a33c91a2e945` | -| **Twilio** | Twilio icon | Source | airbyte/source-twilio:0.5.0 | generally_available | [link](https://docs.airbyte.com/integrations/sources/twilio) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-twilio) | `b9dc6155-672e-42ea-b10d-9f1f1fb95ab1` | -| **Twilio Taskrouter** | Twilio Taskrouter icon | Source | airbyte/source-twilio-taskrouter:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/twilio-taskrouter) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-twilio-taskrouter) | `2446953b-b794-429b-a9b3-c821ba992a48` | -| **Twitter** | Twitter icon | Source | airbyte/source-twitter:0.1.2 | beta | [link](https://docs.airbyte.com/integrations/sources/twitter) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-twitter) | `d7fd4f40-5e5a-4b8b-918f-a73077f8c131` | -| **Tyntec SMS** | Tyntec SMS icon | Source | airbyte/source-tyntec-sms:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/tyntec-sms) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-tyntec-sms) | `3c0c3cd1-b3e0-464a-9090-d3ceb5f92346` | -| **Typeform** | Typeform icon | Source | airbyte/source-typeform:0.1.12 | beta | [link](https://docs.airbyte.com/integrations/sources/typeform) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-typeform) | `e7eff203-90bf-43e5-a240-19ea3056c474` | -| **US Census** | US Census icon | Source | airbyte/source-us-census:0.1.2 | alpha | [link](https://docs.airbyte.com/integrations/sources/us-census) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-us-census) | `c4cfaeda-c757-489a-8aba-859fb08b6970` | -| **Unleash** | Unleash icon | Source | airbyte/source-unleash:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/unleash) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-unleash) | `f77914a1-442b-4195-9355-8810a1f4ed3f` | -| **Vantage** | Vantage icon | Source | airbyte/source-vantage:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/vantage) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-vantage) | `28ce1fbd-1e15-453f-aa9f-da6c4d928e92` | -| **VictorOps** | VictorOps icon | Source | farosai/airbyte-victorops-source:0.1.23 | alpha | [link](https://docs.airbyte.com/integrations/sources/victorops) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/airbyte-victorops-source) | `7e20ce3e-d820-4327-ad7a-88f3927fd97a` | -| **Visma E-conomic** | Visma E-conomic icon | Source | airbyte/source-visma-economic:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/visma-economic) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-visma-economic) | `42495935-95de-4f5c-ae08-8fac00f6b308` | -| **Vitally** | Vitally icon | Source | airbyte/source-vitally:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/vitally) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-vitally) | `6c6d8b0c-db35-4cd1-a7de-0ca8b080f5ac` | -| **Waiteraid** | Waiteraid icon | Source | airbyte/source-waiteraid:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/waiteraid) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-waiteraid) | `03a53b13-794a-4d6b-8544-3b36ed8f3ce4` | -| **Weatherstack** | Weatherstack icon | Source | airbyte/source-weatherstack:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/weatherstack) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-weatherstack) | `5db8292c-5f5a-11ed-9b6a-0242ac120002` | -| **Webflow** | Webflow icon | Source | airbyte/source-webflow:0.1.2 | alpha | [link](https://docs.airbyte.com/integrations/sources/webflow) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-webflow) | `ef580275-d9a9-48bb-af5e-db0f5855be04` | -| **Whisky Hunter** | Whisky Hunter icon | Source | airbyte/source-whisky-hunter:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/whisky-hunter) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-whisky-hunter) | `e65f84c0-7598-458a-bfac-f770c381ff5d` | -| **Wikipedia Pageviews** | Wikipedia Pageviews icon | Source | airbyte/source-wikipedia-pageviews:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/wikipedia-pageviews) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-wikipedia-pageviews) | `87c58f70-6f7a-4f70-aba5-bab1a458f5ba` | -| **WooCommerce** | WooCommerce icon | Source | airbyte/source-woocommerce:0.2.2 | beta | [link](https://docs.airbyte.com/integrations/sources/woocommerce) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-woocommerce) | `2a2552ca-9f78-4c1c-9eb7-4d0dc66d72df` | -| **WorkRamp** | WorkRamp icon | Source | airbyte/source-workramp:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/workramp) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-workramp) | `05b0bce2-4ec4-4534-bb1a-5d0127bd91b7` | -| **Workable** | Workable icon | Source | airbyte/source-workable:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/workable) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-workable) | `ef3c99c6-9e90-43c8-9517-926cfd978517` | -| **Wrike** | Wrike icon | Source | airbyte/source-wrike:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/wrike) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-wrike) | `9c13f986-a13b-4988-b808-4705badf71c2` | -| **Xero** | Xero icon | Source | airbyte/source-xero:0.2.1 | beta | [link](https://docs.airbyte.com/integrations/sources/xero) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-xero) | `6fd1e833-dd6e-45ec-a727-ab917c5be892` | -| **Yandex Metrica** | Yandex Metrica icon | Source | airbyte/source-yandex-metrica:1.0.0 | beta | [link](https://docs.airbyte.com/integrations/sources/yandex-metrica) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-yandex-metrica) | `7865dce4-2211-4f6a-88e5-9d0fe161afe7` | -| **YouTube Analytics** | YouTube Analytics icon | Source | airbyte/source-youtube-analytics:0.1.3 | beta | [link](https://docs.airbyte.com/integrations/sources/youtube-analytics) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-youtube-analytics) | `afa734e4-3571-11ec-991a-1e0031268139` | -| **Younium** | Younium icon | Source | airbyte/source-younium:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/younium) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-younium) | `9c74c2d7-531a-4ebf-b6d8-6181f805ecdc` | -| **Zapier Supported Storage** | Zapier Supported Storage icon | Source | airbyte/source-zapier-supported-storage:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/zendesk-supported-storage) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-zapier-supported-storage) | `b8c917bc-7d1b-4828-995f-6726820266d0` | -| **Zendesk Chat** | Zendesk Chat icon | Source | airbyte/source-zendesk-chat:0.1.14 | generally_available | [link](https://docs.airbyte.com/integrations/sources/zendesk-chat) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-zendesk-chat) | `40d24d0f-b8f9-4fe0-9e6c-b06c0f3f45e4` | -| **Zendesk Sell** | Zendesk Sell icon | Source | airbyte/source-zendesk-sell:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/zendesk-sell) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-zendesk-sell) | `982eaa4c-bba1-4cce-a971-06a41f700b8c` | -| **Zendesk Sunshine** | Zendesk Sunshine icon | Source | airbyte/source-zendesk-sunshine:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/zendesk-sunshine) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-zendesk-sunshine) | `325e0640-e7b3-4e24-b823-3361008f603f` | -| **Zendesk Support** | Zendesk Support icon | Source | airbyte/source-zendesk-support:0.2.27 | generally_available | [link](https://docs.airbyte.com/integrations/sources/zendesk-support) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-zendesk-support) | `79c1aa37-dae3-42ae-b333-d1c105477715` | -| **Zendesk Talk** | Zendesk Talk icon | Source | airbyte/source-zendesk-talk:0.1.7 | generally_available | [link](https://docs.airbyte.com/integrations/sources/zendesk-talk) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-zendesk-talk) | `c8630570-086d-4a40-99ae-ea5b18673071` | -| **Zenefits** | Zenefits icon | Source | airbyte/source-zenefits:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/zenefits) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-zenefits) | `8baba53d-2fe3-4e33-bc85-210d0eb62884` | -| **Zenloop** | Zenloop icon | Source | airbyte/source-zenloop:0.1.6 | beta | [link](https://docs.airbyte.com/integrations/sources/zenloop) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-zenloop) | `f1e4c7f6-db5c-4035-981f-d35ab4998794` | -| **ZohoCRM** | ZohoCRM icon | Source | airbyte/source-zoho-crm:0.1.2 | alpha | [link](https://docs.airbyte.com/integrations/sources/zoho-crm) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-zoho-crm) | `4942d392-c7b5-4271-91f9-3b4f4e51eb3e` | -| **Zoom** | Zoom icon | Source | airbyte/source-zoom:0.1.1 | alpha | [link](https://docs.airbyte.io/integrations/sources/zoom) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-zoom) | `cbfd9856-1322-44fb-bcf1-0b39b7a8e92e` | -| **Zuora** | Zuora icon | Source | airbyte/source-zuora:0.1.3 | alpha | [link](https://docs.airbyte.com/integrations/sources/zuora) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-zuora) | `3dc3037c-5ce8-4661-adc2-f7a9e3c5ece5` | -| **n8n** | n8n icon | Source | airbyte/source-n8n:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/sources/n8n) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-n8n) | `4a961f66-5e99-4430-8320-a73afe52f7a2` | -| **xkcd** | xkcd icon | Source | airbyte/source-xkcd:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/sources/xkcd) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-xkcd) | `80fddd16-17bd-4c0c-bf4a-80df7863fc9d` | +| Name | Icon | Type | Image | Release Stage | Docs | Issues | Code | ID | +|----|----|----|----|----|----|----|----|----| +| **AWS CloudTrail** | AWS CloudTrail icon | Source | airbyte/source-aws-cloudtrail:0.1.5 | alpha | [docs](https://docs.airbyte.com/integrations/sources/aws-cloudtrail) | [connectors/source/aws-cloudtrail](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/aws-cloudtrail) | [source-aws-cloudtrail](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-aws-cloudtrail) | `6ff047c0-f5d5-4ce5-8c81-204a830fa7e1` | +| **ActiveCampaign** | ActiveCampaign icon | Source | airbyte/source-activecampaign:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/activecampaign) | [connectors/source/activecampaign](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/activecampaign) | [source-activecampaign](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-activecampaign) | `9f32dab3-77cb-45a1-9d33-347aa5fbe363` | +| **Adjust** | Adjust icon | Source | airbyte/source-adjust:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/adjust) | [connectors/source/adjust](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/adjust) | [source-adjust](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-adjust) | `d3b7fa46-111b-419a-998a-d7f046f6d66d` | +| **Aha** | Aha icon | Source | airbyte/source-aha:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/aha) | [connectors/source/aha](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/aha) | [source-aha](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-aha) | `81ca39dc-4534-4dd2-b848-b0cfd2c11fce` | +| **Airtable** | Airtable icon | Source | airbyte/source-airtable:3.0.0 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/airtable) | [connectors/source/airtable](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/airtable) | [source-airtable](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-airtable) | `14c6e7ea-97ed-4f5e-a7b5-25e9a80b8212` | +| **AlloyDB for PostgreSQL** | AlloyDB for PostgreSQL icon | Source | airbyte/source-alloydb:2.0.21 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/alloydb) | [connectors/source/alloydb](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/alloydb) | [source-alloydb](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-alloydb) | `1fa90628-2b9e-11ed-a261-0242ac120002` | +| **Alpha Vantage** | Alpha Vantage icon | Source | airbyte/source-alpha-vantage:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/alpha-vantage) | [connectors/source/alpha-vantage](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/alpha-vantage) | [source-alpha-vantage](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-alpha-vantage) | `db385323-9333-4fec-bec3-9e0ca9326c90` | +| **Amazon Ads** | Amazon Ads icon | Source | airbyte/source-amazon-ads:1.0.3 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/amazon-ads) | [connectors/source/amazon-ads](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/amazon-ads) | [source-amazon-ads](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-amazon-ads) | `c6b0a29e-1da9-4512-9002-7bfd0cba2246` | +| **Amazon SQS** | Amazon SQS icon | Source | airbyte/source-amazon-sqs:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/amazon-sqs) | [connectors/source/amazon-sqs](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/amazon-sqs) | [source-amazon-sqs](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-amazon-sqs) | `983fd355-6bf3-4709-91b5-37afa391eeb6` | +| **Amazon Seller Partner** | Amazon Seller Partner icon | Source | airbyte/source-amazon-seller-partner:1.0.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/amazon-seller-partner) | [connectors/source/amazon-seller-partner](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/amazon-seller-partner) | [source-amazon-seller-partner](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-amazon-seller-partner) | `e55879a8-0ef8-4557-abcf-ab34c53ec460` | +| **Amplitude** | Amplitude icon | Source | airbyte/source-amplitude:0.2.0 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/amplitude) | [connectors/source/amplitude](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/amplitude) | [source-amplitude](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-amplitude) | `fa9f58c6-2d03-4237-aaa4-07d75e0c1396` | +| **Apify Dataset** | Apify Dataset icon | Source | airbyte/source-apify-dataset:0.1.11 | alpha | [docs](https://docs.airbyte.com/integrations/sources/apify-dataset) | [connectors/source/apify-dataset](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/apify-dataset) | [source-apify-dataset](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-apify-dataset) | `47f17145-fe20-4ef5-a548-e29b048adf84` | +| **Appfollow** | Appfollow icon | Source | airbyte/source-appfollow:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/appfollow) | [connectors/source/appfollow](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/appfollow) | [source-appfollow](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-appfollow) | `b4375641-e270-41d3-9c20-4f9cecad87a8` | +| **AppsFlyer** | AppsFlyer icon | Source | airbyte/source-appsflyer:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/appsflyer) | [connectors/source/appsflyer](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/appsflyer) | [source-appsflyer](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-appsflyer) | `16447954-e6a8-4593-b140-43dea13bc457` | +| **Appstore** | Appstore icon | Source | airbyte/source-appstore-singer:0.2.6 | alpha | [docs](https://docs.airbyte.com/integrations/sources/appstore) | [connectors/source/appstore-singer](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/appstore-singer) | [source-appstore-singer](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-appstore-singer) | `2af123bf-0aaf-4e0d-9784-cb497f23741a` | +| **Asana** | Asana icon | Source | airbyte/source-asana:0.1.5 | beta | [docs](https://docs.airbyte.com/integrations/sources/asana) | [connectors/source/asana](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/asana) | [source-asana](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-asana) | `d0243522-dccf-4978-8ba0-37ed47a0bdbf` | +| **Ashby** | Ashby icon | Source | airbyte/source-ashby:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/ashby) | [connectors/source/ashby](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/ashby) | [source-ashby](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-ashby) | `4e8c9fa0-3634-499b-b948-11581b5c3efa` | +| **Auth0** | Auth0 icon | Source | airbyte/source-auth0:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/auth0) | [connectors/source/auth0](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/auth0) | [source-auth0](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-auth0) | `6c504e48-14aa-4221-9a72-19cf5ff1ae78` | +| **Azure Blob Storage** | Azure Blob Storage icon | Source | airbyte/source-azure-blob-storage:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/azure-blob-storage) | [connectors/source/azure-blob-storage](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/azure-blob-storage) | [source-azure-blob-storage](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-azure-blob-storage) | `fdaaba68-4875-4ed9-8fcd-4ae1e0a25093` | +| **Azure Table Storage** | Azure Table Storage icon | Source | airbyte/source-azure-table:0.1.3 | alpha | [docs](https://docs.airbyte.com/integrations/sources/azure-table) | [connectors/source/azure-table](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/azure-table) | [source-azure-table](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-azure-table) | `798ae795-5189-42b6-b64e-3cb91db93338` | +| **Babelforce** | Babelforce icon | Source | airbyte/source-babelforce:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/babelforce) | [connectors/source/babelforce](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/babelforce) | [source-babelforce](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-babelforce) | `971c3e1e-78a5-411e-ad56-c4052b50876b` | +| **BambooHR** | BambooHR icon | Source | airbyte/source-bamboo-hr:0.2.2 | alpha | [docs](https://docs.airbyte.com/integrations/sources/bamboo-hr) | [connectors/source/bamboo-hr](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/bamboo-hr) | [source-bamboo-hr](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-bamboo-hr) | `90916976-a132-4ce9-8bce-82a03dd58788` | +| **BigCommerce** | BigCommerce icon | Source | airbyte/source-bigcommerce:0.1.10 | alpha | [docs](https://docs.airbyte.com/integrations/sources/bigcommerce) | [connectors/source/bigcommerce](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/bigcommerce) | [source-bigcommerce](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-bigcommerce) | `59c5501b-9f95-411e-9269-7143c939adbd` | +| **BigQuery** | BigQuery icon | Source | airbyte/source-bigquery:0.2.3 | alpha | [docs](https://docs.airbyte.com/integrations/sources/bigquery) | [connectors/source/bigquery](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/bigquery) | [source-bigquery](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-bigquery) | `bfd1ddf8-ae8a-4620-b1d7-55597d2ba08c` | +| **Bing Ads** | Bing Ads icon | Source | airbyte/source-bing-ads:0.1.18 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/bing-ads) | [connectors/source/bing-ads](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/bing-ads) | [source-bing-ads](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-bing-ads) | `47f25999-dd5e-4636-8c39-e7cea2453331` | +| **Braintree** | Braintree icon | Source | airbyte/source-braintree:0.1.4 | alpha | [docs](https://docs.airbyte.com/integrations/sources/braintree) | [connectors/source/braintree](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/braintree) | [source-braintree](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-braintree) | `63cea06f-1c75-458d-88fe-ad48c7cb27fd` | +| **Braze** | x | Source | airbyte/source-braze:0.1.3 | alpha | [docs](https://docs.airbyte.io/integrations/sources/braze) | [connectors/source/braze](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/braze) | [source-braze](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-braze) | `68b9c98e-0747-4c84-b05b-d30b47686725` | +| **Breezometer** | Breezometer icon | Source | airbyte/source-breezometer:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/breezometer) | [connectors/source/breezometer](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/breezometer) | [source-breezometer](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-breezometer) | `7c37685e-8512-4901-addf-9afbef6c0de9` | +| **CallRail** | CallRail icon | Source | airbyte/source-callrail:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/callrail) | [connectors/source/callrail](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/callrail) | [source-callrail](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-callrail) | `dc98a6ad-2dd1-47b6-9529-2ec35820f9c6` | +| **Cart.com** | Cart.com icon | Source | airbyte/source-cart:0.2.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/cart) | [connectors/source/cart](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/cart) | [source-cart](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-cart) | `bb1a6d31-6879-4819-a2bd-3eed299ea8e2` | +| **Chargebee** | Chargebee icon | Source | airbyte/source-chargebee:0.2.3 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/chargebee) | [connectors/source/chargebee](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/chargebee) | [source-chargebee](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-chargebee) | `686473f1-76d9-4994-9cc7-9b13da46147c` | +| **Chargify** | Chargify icon | Source | airbyte/source-chargify:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/chargify) | [connectors/source/chargify](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/chargify) | [source-chargify](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-chargify) | `9b2d3607-7222-4709-9fa2-c2abdebbdd88` | +| **Chartmogul** | Chartmogul icon | Source | airbyte/source-chartmogul:0.2.1 | beta | [docs](https://docs.airbyte.com/integrations/sources/chartmogul) | [connectors/source/chartmogul](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/chartmogul) | [source-chartmogul](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-chartmogul) | `b6604cbd-1b12-4c08-8767-e140d0fb0877` | +| **ClickHouse** | ClickHouse icon | Source | airbyte/source-clickhouse:0.1.17 | alpha | [docs](https://docs.airbyte.com/integrations/sources/clickhouse) | [connectors/source/clickhouse](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/clickhouse) | [source-clickhouse](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-clickhouse) | `bad83517-5e54-4a3d-9b53-63e85fbd4d7c` | +| **ClickUp** | ClickUp icon | Source | airbyte/source-clickup-api:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/click-up) | [connectors/source/clickup-api](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/clickup-api) | [source-clickup-api](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-clickup-api) | `311a7a27-3fb5-4f7e-8265-5e4afe258b66` | +| **Clockify** | Clockify icon | Source | airbyte/source-clockify:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/clockify) | [connectors/source/clockify](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/clockify) | [source-clockify](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-clockify) | `e71aae8a-5143-11ed-bdc3-0242ac120002` | +| **Close.com** | Close.com icon | Source | airbyte/source-close-com:0.2.1 | beta | [docs](https://docs.airbyte.com/integrations/sources/close-com) | [connectors/source/close-com](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/close-com) | [source-close-com](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-close-com) | `dfffecb7-9a13-43e9-acdc-b92af7997ca9` | +| **Cockroachdb** | Cockroachdb icon | Source | airbyte/source-cockroachdb:0.1.22 | alpha | [docs](https://docs.airbyte.com/integrations/sources/cockroachdb) | [connectors/source/cockroachdb](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/cockroachdb) | [source-cockroachdb](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-cockroachdb) | `9fa5862c-da7c-11eb-8d19-0242ac130003` | +| **Coda** | Coda icon | Source | airbyte/source-coda:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/coda) | [connectors/source/coda](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/coda) | [source-coda](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-coda) | `27f910fd-f832-4b2e-bcfd-6ab342e434d8` | +| **Coin API** | Coin API icon | Source | airbyte/source-coin-api:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/coin-api) | [connectors/source/coin-api](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/coin-api) | [source-coin-api](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-coin-api) | `919984ef-53a2-479b-8ffe-9c1ddb9fc3f3` | +| **CoinGecko Coins** | CoinGecko Coins icon | Source | airbyte/source-coingecko-coins:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/coingecko-coins) | [connectors/source/coingecko-coins](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/coingecko-coins) | [source-coingecko-coins](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-coingecko-coins) | `9cdd4183-d0ba-40c3-aad3-6f46d4103974` | +| **CoinMarketCap** | CoinMarketCap icon | Source | airbyte/source-coinmarketcap:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/coinmarketcap) | [connectors/source/coinmarketcap](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/coinmarketcap) | [source-coinmarketcap](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-coinmarketcap) | `239463f5-64bb-4d88-b4bd-18ce673fd572` | +| **Commcare** | x | Source | airbyte/source-commcare:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/commcare) | [connectors/source/commcare](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/commcare) | [source-commcare](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-commcare) | `f39208dc-7e1c-48b8-919b-5006360cc27f` | +| **Commercetools** | Commercetools icon | Source | airbyte/source-commercetools:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/commercetools) | [connectors/source/commercetools](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/commercetools) | [source-commercetools](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-commercetools) | `008b2e26-11a3-11ec-82a8-0242ac130003` | +| **ConfigCat** | ConfigCat icon | Source | airbyte/source-configcat:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/configcat) | [connectors/source/configcat](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/configcat) | [source-configcat](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-configcat) | `4fd7565c-8b99-439b-80d0-2d965e1d958c` | +| **Confluence** | Confluence icon | Source | airbyte/source-confluence:0.1.3 | beta | [docs](https://docs.airbyte.com/integrations/sources/confluence) | [connectors/source/confluence](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/confluence) | [source-confluence](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-confluence) | `cf40a7f8-71f8-45ce-a7fa-fca053e4028c` | +| **ConvertKit** | ConvertKit icon | Source | airbyte/source-convertkit:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/convertkit) | [connectors/source/convertkit](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/convertkit) | [source-convertkit](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-convertkit) | `be9ee02f-6efe-4970-979b-95f797a37188` | +| **Convex** | Convex icon | Source | airbyte/source-convex:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/convex) | [connectors/source/convex](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/convex) | [source-convex](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-convex) | `c332628c-f55c-4017-8222-378cfafda9b2` | +| **Copper** | Copper icon | Source | airbyte/source-copper:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/copper) | [connectors/source/copper](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/copper) | [source-copper](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-copper) | `44f3002f-2df9-4f6d-b21c-02cd3b47d0dc` | +| **Courier** | Courier icon | Source | airbyte/source-courier:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/courier) | [connectors/source/courier](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/courier) | [source-courier](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-courier) | `0541b2cd-2367-4986-b5f1-b79ff55439e4` | +| **Customer.io** | Customer.io icon | Source | farosai/airbyte-customer-io-source:0.1.23 | alpha | [docs](https://docs.airbyte.com/integrations/sources/customer-io) | [connectors/destination/airbyte-customer-io-source](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/airbyte-customer-io-source) | [airbyte-customer-io-source](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/airbyte-customer-io-source) | `c47d6804-8b98-449f-970a-5ddb5cb5d7aa` | +| **DV 360** | DV 360 icon | Source | airbyte/source-dv-360:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/dv-360) | [connectors/source/dv-360](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/dv-360) | [source-dv-360](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-dv-360) | `1356e1d9-977f-4057-ad4b-65f25329cf61` | +| **Datadog** | Datadog icon | Source | airbyte/source-datadog:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/datadog) | [connectors/source/datadog](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/datadog) | [source-datadog](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-datadog) | `1cfc30c7-82db-43f4-9fd7-ac1b42312cda` | +| **Datascope** | Datascope icon | Source | airbyte/source-datascope:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/datascope) | [connectors/source/datascope](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/datascope) | [source-datascope](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-datascope) | `8e1ae2d2-4790-44d3-9d83-75b3fc3940ff` | +| **Delighted** | Delighted icon | Source | airbyte/source-delighted:0.2.2 | beta | [docs](https://docs.airbyte.com/integrations/sources/delighted) | [connectors/source/delighted](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/delighted) | [source-delighted](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-delighted) | `cc88c43f-6f53-4e8a-8c4d-b284baaf9635` | +| **Dixa** | Dixa icon | Source | airbyte/source-dixa:0.1.3 | alpha | [docs](https://docs.airbyte.com/integrations/sources/dixa) | [connectors/source/dixa](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/dixa) | [source-dixa](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-dixa) | `0b5c867e-1b12-4d02-ab74-97b2184ff6d7` | +| **Dockerhub** | Dockerhub icon | Source | airbyte/source-dockerhub:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/dockerhub) | [connectors/source/dockerhub](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/dockerhub) | [source-dockerhub](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-dockerhub) | `72d405a3-56d8-499f-a571-667c03406e43` | +| **Dremio** | Dremio icon | Source | airbyte/source-dremio:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/dremio) | [connectors/source/dremio](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/dremio) | [source-dremio](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-dremio) | `d99e9ace-8621-46c2-9144-76ae4751d64b` | +| **Drift** | Drift icon | Source | airbyte/source-drift:0.2.6 | alpha | [docs](https://docs.airbyte.com/integrations/sources/drift) | [connectors/source/drift](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/drift) | [source-drift](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-drift) | `445831eb-78db-4b1f-8f1f-0d96ad8739e2` | +| **DynamoDB** | DynamoDB icon | Source | airbyte/source-dynamodb:0.1.2 | alpha | [docs](https://docs.airbyte.com/integrations/sources/dynamodb) | [connectors/source/dynamodb](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/dynamodb) | [source-dynamodb](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-dynamodb) | `50401137-8871-4c5a-abb7-1f5fda35545a` | +| **E2E Testing** | E2E Testing icon | Source | airbyte/source-e2e-test:2.1.4 | alpha | [docs](https://docs.airbyte.com/integrations/sources/e2e-test) | [connectors/source/e2e-test](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/e2e-test) | [source-e2e-test](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-e2e-test) | `d53f9084-fa6b-4a5a-976c-5b8392f4ad8a` | +| **Elasticsearch** | Elasticsearch icon | Source | airbyte/source-elasticsearch:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/elasticsearch) | [connectors/source/elasticsearch](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/elasticsearch) | [source-elasticsearch](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-elasticsearch) | `7cf88806-25f5-4e1a-b422-b2fa9e1b0090` | +| **EmailOctopus** | EmailOctopus icon | Source | airbyte/source-emailoctopus:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/emailoctopus) | [connectors/source/emailoctopus](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/emailoctopus) | [source-emailoctopus](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-emailoctopus) | `46b25e70-c980-4590-a811-8deaf50ee09f` | +| **Everhour** | Everhour icon | Source | airbyte/source-everhour:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/everhour) | [connectors/source/everhour](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/everhour) | [source-everhour](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-everhour) | `6babfc42-c734-4ef6-a817-6eca15f0f9b7` | +| **Exchange Rates Api** | Exchange Rates Api icon | Source | airbyte/source-exchange-rates:1.2.8 | alpha | [docs](https://docs.airbyte.com/integrations/sources/exchangeratesapi) | [connectors/source/exchange-rates](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/exchange-rates) | [source-exchange-rates](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-exchange-rates) | `e2b40e36-aa0e-4bed-b41b-bcea6fa348b1` | +| **Facebook Marketing** | Facebook Marketing icon | Source | airbyte/source-facebook-marketing:0.3.2 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/facebook-marketing) | [connectors/source/facebook-marketing](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/facebook-marketing) | [source-facebook-marketing](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-facebook-marketing) | `e7778cfc-e97c-4458-9ecb-b4f2bba8946c` | +| **Facebook Pages** | Facebook Pages icon | Source | airbyte/source-facebook-pages:0.2.4 | beta | [docs](https://docs.airbyte.com/integrations/sources/facebook-pages) | [connectors/source/facebook-pages](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/facebook-pages) | [source-facebook-pages](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-facebook-pages) | `010eb12f-837b-4685-892d-0a39f76a98f5` | +| **Fastbill** | Fastbill icon | Source | airbyte/source-fastbill:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/fastbill) | [connectors/source/fastbill](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/fastbill) | [source-fastbill](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-fastbill) | `eb3e9c1c-0467-4eb7-a172-5265e04ccd0a` | +| **Fauna** | Fauna icon | Source | airbyte/source-fauna:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/fauna) | [connectors/source/fauna](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/fauna) | [source-fauna](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-fauna) | `3825db3e-c94b-42ac-bd53-b5a9507ace2b` | +| **File (CSV, JSON, Excel, Feather, Parquet)** | File (CSV, JSON, Excel, Feather, Parquet) icon | Source | airbyte/source-file:0.2.38 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/file) | [connectors/source/file](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/file) | [source-file](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-file) | `778daa7c-feaf-4db6-96f3-70fd645acc77` | +| **Firebase Realtime Database** | x | Source | airbyte/source-firebase-realtime-database:0.1.0 | alpha | [docs](https://docs.airbyte.io/integrations/sources/firebase-realtime-database) | [connectors/source/firebase-realtime-database](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/firebase-realtime-database) | [source-firebase-realtime-database](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-firebase-realtime-database) | `acb5f973-a565-441e-992f-4946f3e65662` | +| **Firebolt** | Firebolt icon | Source | airbyte/source-firebolt:0.2.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/firebolt) | [connectors/source/firebolt](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/firebolt) | [source-firebolt](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-firebolt) | `6f2ac653-8623-43c4-8950-19218c7caf3d` | +| **Flexport** | x | Source | airbyte/source-flexport:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/flexport) | [connectors/source/flexport](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/flexport) | [source-flexport](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-flexport) | `f95337f1-2ad1-4baf-922f-2ca9152de630` | +| **Freshcaller** | Freshcaller icon | Source | airbyte/source-freshcaller:0.1.0 | unknown | [docs](https://docs.airbyte.com/integrations/sources/freshcaller) | [connectors/source/freshcaller](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/freshcaller) | [source-freshcaller](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-freshcaller) | `8a5d48f6-03bb-4038-a942-a8d3f175cca3` | +| **Freshdesk** | Freshdesk icon | Source | airbyte/source-freshdesk:3.0.2 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/freshdesk) | [connectors/source/freshdesk](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/freshdesk) | [source-freshdesk](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-freshdesk) | `ec4b9503-13cb-48ab-a4ab-6ade4be46567` | +| **Freshsales** | Freshsales icon | Source | airbyte/source-freshsales:0.1.4 | beta | [docs](https://docs.airbyte.com/integrations/sources/freshsales) | [connectors/source/freshsales](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/freshsales) | [source-freshsales](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-freshsales) | `eca08d79-7b92-4065-b7f3-79c14836ebe7` | +| **Freshservice** | Freshservice icon | Source | airbyte/source-freshservice:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/freshservice) | [connectors/source/freshservice](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/freshservice) | [source-freshservice](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-freshservice) | `9bb85338-ea95-4c93-b267-6be89125b267` | +| **GCS** | GCS icon | Source | airbyte/source-gcs:0.1.0 | unknown | [docs](https://docs.airbyte.com/integrations/sources/gcs) | [connectors/source/gcs](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/gcs) | [source-gcs](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-gcs) | `2a8c41ae-8c23-4be0-a73f-2ab10ca1a820` | +| **GNews** | GNews icon | Source | airbyte/source-gnews:0.1.3 | alpha | [docs](https://docs.airbyte.com/integrations/sources/gnews) | [connectors/source/gnews](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/gnews) | [source-gnews](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-gnews) | `ce38aec4-5a77-439a-be29-9ca44fd4e811` | +| **Genesys** | Genesys icon | Source | airbyte/source-genesys:0.1.0 | unknown | [docs](https://docs.airbyte.com/integrations/sources/genesys) | [connectors/source/genesys](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/genesys) | [source-genesys](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-genesys) | `5ea4459a-8f1a-452a-830f-a65c38cc438d` | +| **GetLago** | GetLago icon | Source | airbyte/source-getlago:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/getlago) | [connectors/source/getlago](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/getlago) | [source-getlago](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-getlago) | `e1a3866b-d3b2-43b6-b6d7-8c1ee4d7f53f` | +| **GitHub** | GitHub icon | Source | airbyte/source-github:0.4.7 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/github) | [connectors/source/github](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/github) | [source-github](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-github) | `ef69ef6e-aa7f-4af1-a01d-ef775033524e` | +| **Gitlab** | Gitlab icon | Source | airbyte/source-gitlab:1.0.3 | beta | [docs](https://docs.airbyte.com/integrations/sources/gitlab) | [connectors/source/gitlab](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/gitlab) | [source-gitlab](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-gitlab) | `5e6175e5-68e1-4c17-bff9-56103bbb0d80` | +| **Glassfrog** | Glassfrog icon | Source | airbyte/source-glassfrog:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/glassfrog) | [connectors/source/glassfrog](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/glassfrog) | [source-glassfrog](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-glassfrog) | `cf8ff320-6272-4faa-89e6-4402dc17e5d5` | +| **GoCardless** | GoCardless icon | Source | airbyte/source-gocardless:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/gocardless) | [connectors/source/gocardless](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/gocardless) | [source-gocardless](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-gocardless) | `ba15ac82-5c6a-4fb2-bf24-925c23a1180c` | +| **Gong** | Gong icon | Source | airbyte/source-gong:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/gong) | [connectors/source/gong](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/gong) | [source-gong](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-gong) | `32382e40-3b49-4b99-9c5c-4076501914e7` | +| **Google Ads** | Google Ads icon | Source | airbyte/source-google-ads:0.2.13 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/google-ads) | [connectors/source/google-ads](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/google-ads) | [source-google-ads](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-google-ads) | `253487c0-2246-43ba-a21f-5116b20a2c50` | +| **Google Analytics (Universal Analytics)** | Google Analytics (Universal Analytics) icon | Source | airbyte/source-google-analytics-v4:0.1.34 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/google-analytics-v4) | [connectors/source/google-analytics-v4](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/google-analytics-v4) | [source-google-analytics-v4](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-google-analytics-v4) | `eff3616a-f9c3-11eb-9a03-0242ac130003` | +| **Google Analytics 4 (GA4)** | Google Analytics 4 (GA4) icon | Source | airbyte/source-google-analytics-data-api:0.1.3 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/google-analytics-data-api) | [connectors/source/google-analytics-data-api](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/google-analytics-data-api) | [source-google-analytics-data-api](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-google-analytics-data-api) | `3cc2eafd-84aa-4dca-93af-322d9dfeec1a` | +| **Google Directory** | Google Directory icon | Source | airbyte/source-google-directory:0.1.9 | alpha | [docs](https://docs.airbyte.com/integrations/sources/google-directory) | [connectors/source/google-directory](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/google-directory) | [source-google-directory](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-google-directory) | `d19ae824-e289-4b14-995a-0632eb46d246` | +| **Google PageSpeed Insights** | Google PageSpeed Insights icon | Source | airbyte/source-google-pagespeed-insights:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/google-pagespeed-insights) | [connectors/source/google-pagespeed-insights](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/google-pagespeed-insights) | [source-google-pagespeed-insights](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-google-pagespeed-insights) | `1e9086ab-ddac-4c1d-aafd-ba43ff575fe4` | +| **Google Search Console** | Google Search Console icon | Source | airbyte/source-google-search-console:0.1.22 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/google-search-console) | [connectors/source/google-search-console](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/google-search-console) | [source-google-search-console](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-google-search-console) | `eb4c9e00-db83-4d63-a386-39cfa91012a8` | +| **Google Sheets** | Google Sheets icon | Source | airbyte/source-google-sheets:0.2.37 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/google-sheets) | [connectors/source/google-sheets](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/google-sheets) | [source-google-sheets](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-google-sheets) | `71607ba1-c0ac-4799-8049-7f4b90dd50f7` | +| **Google Webfonts** | Google Webfonts icon | Source | airbyte/source-google-webfonts:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/google-webfonts) | [connectors/source/google-webfonts](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/google-webfonts) | [source-google-webfonts](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-google-webfonts) | `a68fbcde-b465-4ab3-b2a6-b0590a875835` | +| **Google Workspace Admin Reports** | Google Workspace Admin Reports icon | Source | airbyte/source-google-workspace-admin-reports:0.1.8 | alpha | [docs](https://docs.airbyte.com/integrations/sources/google-workspace-admin-reports) | [connectors/source/google-workspace-admin-reports](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/google-workspace-admin-reports) | [source-google-workspace-admin-reports](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-google-workspace-admin-reports) | `ed9dfefa-1bbc-419d-8c5e-4d78f0ef6734` | +| **Greenhouse** | Greenhouse icon | Source | airbyte/source-greenhouse:0.3.1 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/greenhouse) | [connectors/source/greenhouse](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/greenhouse) | [source-greenhouse](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-greenhouse) | `59f1e50a-331f-4f09-b3e8-2e8d4d355f44` | +| **Gridly** | Gridly icon | Source | airbyte/source-gridly:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/gridly) | [connectors/source/gridly](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/gridly) | [source-gridly](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-gridly) | `6cbea164-3237-433b-9abb-36d384ee4cbf` | +| **Gutendex** | x | Source | airbyte/source-gutendex:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/gutendex) | [connectors/source/gutendex](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/gutendex) | [source-gutendex](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-gutendex) | `bff9a277-e01d-420d-81ee-80f28a307318` | +| **Harness** | Harness icon | Source | farosai/airbyte-harness-source:0.1.23 | alpha | [docs](https://docs.airbyte.com/integrations/sources/harness) | [connectors/destination/airbyte-harness-source](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/airbyte-harness-source) | [airbyte-harness-source](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/airbyte-harness-source) | `6fe89830-d04d-401b-aad6-6552ffa5c4af` | +| **Harvest** | Harvest icon | Source | airbyte/source-harvest:0.1.17 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/harvest) | [connectors/source/harvest](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/harvest) | [source-harvest](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-harvest) | `fe2b4084-3386-4d3b-9ad6-308f61a6f1e6` | +| **Hellobaton** | Hellobaton icon | Source | airbyte/source-hellobaton:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/hellobaton) | [connectors/source/hellobaton](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/hellobaton) | [source-hellobaton](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-hellobaton) | `492b56d1-937c-462e-8076-21ad2031e784` | +| **HubSpot** | HubSpot icon | Source | airbyte/source-hubspot:0.6.0 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/hubspot) | [connectors/source/hubspot](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/hubspot) | [source-hubspot](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-hubspot) | `36c891d9-4bd9-43ac-bad2-10e12756272c` | +| **Hubplanner** | Hubplanner icon | Source | airbyte/source-hubplanner:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/hubplanner) | [connectors/source/hubplanner](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/hubplanner) | [source-hubplanner](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-hubplanner) | `8097ceb9-383f-42f6-9f92-d3fd4bcc7689` | +| **IBM Db2** | IBM Db2 icon | Source | airbyte/source-db2:0.1.19 | alpha | [docs](https://docs.airbyte.com/integrations/sources/db2) | [connectors/source/db2](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/db2) | [source-db2](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-db2) | `447e0381-3780-4b46-bb62-00a4e3c8b8e2` | +| **IP2Whois** | IP2Whois icon | Source | airbyte/source-ip2whois:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/ip2whois) | [connectors/source/ip2whois](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/ip2whois) | [source-ip2whois](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-ip2whois) | `f23b7b7c-d705-49a3-9042-09add3b104a5` | +| **Insightly** | Insightly icon | Source | airbyte/source-insightly:0.1.2 | alpha | [docs](https://docs.airbyte.com/integrations/sources/insightly) | [connectors/source/insightly](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/insightly) | [source-insightly](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-insightly) | `38f84314-fe6a-4257-97be-a8dcd942d693` | +| **Instagram** | Instagram icon | Source | airbyte/source-instagram:1.0.5 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/instagram) | [connectors/source/instagram](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/instagram) | [source-instagram](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-instagram) | `6acf6b55-4f1e-4fca-944e-1a3caef8aba8` | +| **Instatus** | Instatus icon | Source | airbyte/source-instatus:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/instatus) | [connectors/source/instatus](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/instatus) | [source-instatus](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-instatus) | `1901024c-0249-45d0-bcac-31a954652927` | +| **Intercom** | Intercom icon | Source | airbyte/source-intercom:0.2.0 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/intercom) | [connectors/source/intercom](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/intercom) | [source-intercom](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-intercom) | `d8313939-3782-41b0-be29-b3ca20d8dd3a` | +| **Intruder** | Intruder icon | Source | airbyte/source-intruder:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/intruder) | [connectors/source/intruder](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/intruder) | [source-intruder](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-intruder) | `3d15163b-11d8-412f-b808-795c9b2c3a3a` | +| **Iterable** | Iterable icon | Source | airbyte/source-iterable:0.1.27 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/iterable) | [connectors/source/iterable](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/iterable) | [source-iterable](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-iterable) | `2e875208-0c0b-4ee4-9e92-1cb3156ea799` | +| **Jenkins** | Jenkins icon | Source | farosai/airbyte-jenkins-source:0.1.23 | alpha | [docs](https://docs.airbyte.com/integrations/sources/jenkins) | [connectors/destination/airbyte-jenkins-source](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/airbyte-jenkins-source) | [airbyte-jenkins-source](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/airbyte-jenkins-source) | `d6f73702-d7a0-4e95-9758-b0fb1af0bfba` | +| **Jira** | Jira icon | Source | airbyte/source-jira:0.3.6 | beta | [docs](https://docs.airbyte.com/integrations/sources/jira) | [connectors/source/jira](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/jira) | [source-jira](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-jira) | `68e63de2-bb83-4c7e-93fa-a8a9051e3993` | +| **K6 Cloud** | K6 Cloud icon | Source | airbyte/source-k6-cloud:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/k6-cloud) | [connectors/source/k6-cloud](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/k6-cloud) | [source-k6-cloud](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-k6-cloud) | `e300ece7-b073-43a3-852e-8aff36a57f13` | +| **Kafka** | Kafka icon | Source | airbyte/source-kafka:0.2.3 | alpha | [docs](https://docs.airbyte.com/integrations/sources/kafka) | [connectors/source/kafka](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/kafka) | [source-kafka](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-kafka) | `d917a47b-8537-4d0d-8c10-36a9928d4265` | +| **Klarna** | Klarna icon | Source | airbyte/source-klarna:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/klarna) | [connectors/source/klarna](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/klarna) | [source-klarna](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-klarna) | `60c24725-00ae-490c-991d-55b78c3197e0` | +| **Klaviyo** | Klaviyo icon | Source | airbyte/source-klaviyo:0.3.0 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/klaviyo) | [connectors/source/klaviyo](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/klaviyo) | [source-klaviyo](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-klaviyo) | `95e8cffd-b8c4-4039-968e-d32fb4a69bde` | +| **Kustomer** | Kustomer icon | Source | airbyte/source-kustomer-singer:0.1.2 | alpha | [docs](https://docs.airbyte.com/integrations/sources/kustomer) | [connectors/source/kustomer-singer](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/kustomer-singer) | [source-kustomer-singer](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-kustomer-singer) | `cd06e646-31bf-4dc8-af48-cbc6530fcad3` | +| **Kyriba** | Kyriba icon | Source | airbyte/source-kyriba:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/kyriba) | [connectors/source/kyriba](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/kyriba) | [source-kyriba](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-kyriba) | `547dc08e-ab51-421d-953b-8f3745201a8c` | +| **LaunchDarkly** | LaunchDarkly icon | Source | airbyte/source-launchdarkly:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/launchdarkly) | [connectors/source/launchdarkly](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/launchdarkly) | [source-launchdarkly](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-launchdarkly) | `f96bb511-5e3c-48fc-b408-547953cd81a4` | +| **Lemlist** | x | Source | airbyte/source-lemlist:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/lemlist) | [connectors/source/lemlist](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/lemlist) | [source-lemlist](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-lemlist) | `789f8e7a-2d28-11ec-8d3d-0242ac130003` | +| **Lever Hiring** | Lever Hiring icon | Source | airbyte/source-lever-hiring:0.1.3 | alpha | [docs](https://docs.airbyte.com/integrations/sources/lever-hiring) | [connectors/source/lever-hiring](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/lever-hiring) | [source-lever-hiring](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-lever-hiring) | `3981c999-bd7d-4afc-849b-e53dea90c948` | +| **LinkedIn Ads** | LinkedIn Ads icon | Source | airbyte/source-linkedin-ads:0.1.15 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/linkedin-ads) | [connectors/source/linkedin-ads](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/linkedin-ads) | [source-linkedin-ads](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-linkedin-ads) | `137ece28-5434-455c-8f34-69dc3782f451` | +| **LinkedIn Pages** | LinkedIn Pages icon | Source | airbyte/source-linkedin-pages:1.0.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/linkedin-pages) | [connectors/source/linkedin-pages](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/linkedin-pages) | [source-linkedin-pages](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-linkedin-pages) | `af54297c-e8f8-4d63-a00d-a94695acc9d3` | +| **Linnworks** | Linnworks icon | Source | airbyte/source-linnworks:0.1.5 | alpha | [docs](https://docs.airbyte.com/integrations/sources/linnworks) | [connectors/source/linnworks](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/linnworks) | [source-linnworks](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-linnworks) | `7b86879e-26c5-4ef6-a5ce-2be5c7b46d1e` | +| **Lokalise** | Lokalise icon | Source | airbyte/source-lokalise:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/lokalise) | [connectors/source/lokalise](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/lokalise) | [source-lokalise](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-lokalise) | `45e0b135-615c-40ac-b38e-e65b0944197f` | +| **Looker** | Looker icon | Source | airbyte/source-looker:0.2.8 | alpha | [docs](https://docs.airbyte.com/integrations/sources/looker) | [connectors/source/looker](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/looker) | [source-looker](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-looker) | `00405b19-9768-4e0c-b1ae-9fc2ee2b2a8c` | +| **Mailchimp** | Mailchimp icon | Source | airbyte/source-mailchimp:0.3.5 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/mailchimp) | [connectors/source/mailchimp](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/mailchimp) | [source-mailchimp](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-mailchimp) | `b03a9f3e-22a5-11eb-adc1-0242ac120002` | +| **MailerLite** | MailerLite icon | Source | airbyte/source-mailerlite:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/mailerlite) | [connectors/source/mailerlite](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/mailerlite) | [source-mailerlite](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-mailerlite) | `dc3b9003-2432-4e93-a7f4-4620b0f14674` | +| **MailerSend** | MailerSend icon | Source | airbyte/source-mailersend:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/mailersend) | [connectors/source/mailersend](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/mailersend) | [source-mailersend](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-mailersend) | `2707d529-3c04-46eb-9c7e-40d4038df6f7` | +| **Mailgun** | Mailgun icon | Source | airbyte/source-mailgun:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/mailgun) | [connectors/source/mailgun](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/mailgun) | [source-mailgun](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-mailgun) | `5b9cb09e-1003-4f9c-983d-5779d1b2cd51` | +| **Mailjet Mail** | Mailjet Mail icon | Source | airbyte/source-mailjet-mail:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/mailjet-mail) | [connectors/source/mailjet-mail](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/mailjet-mail) | [source-mailjet-mail](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-mailjet-mail) | `56582331-5de2-476b-b913-5798de77bbdf` | +| **Mailjet SMS** | Mailjet SMS icon | Source | airbyte/source-mailjet-sms:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/mailjet-sms) | [connectors/source/mailjet-sms](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/mailjet-sms) | [source-mailjet-sms](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-mailjet-sms) | `6ec2acea-7fd1-4378-b403-41a666e0c028` | +| **Marketo** | Marketo icon | Source | airbyte/source-marketo:1.0.3 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/marketo) | [connectors/source/marketo](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/marketo) | [source-marketo](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-marketo) | `9e0556f4-69df-4522-a3fb-03264d36b348` | +| **Metabase** | Metabase icon | Source | airbyte/source-metabase:0.3.1 | beta | [docs](https://docs.airbyte.com/integrations/sources/metabase) | [connectors/source/metabase](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/metabase) | [source-metabase](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-metabase) | `c7cb421b-942e-4468-99ee-e369bcabaec5` | +| **Microsoft Dataverse** | Microsoft Dataverse icon | Source | airbyte/source-microsoft-dataverse:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/microsoft-dataverse) | [connectors/source/microsoft-dataverse](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/microsoft-dataverse) | [source-microsoft-dataverse](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-microsoft-dataverse) | `9220e3de-3b60-4bb2-a46f-046d59ea235a` | +| **Microsoft SQL Server (MSSQL)** | Microsoft SQL Server (MSSQL) icon | Source | airbyte/source-mssql:1.0.11 | alpha | [docs](https://docs.airbyte.com/integrations/sources/mssql) | [connectors/source/mssql](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/mssql) | [source-mssql](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-mssql) | `b5ea17b1-f170-46dc-bc31-cc744ca984c1` | +| **Microsoft teams** | Microsoft teams icon | Source | airbyte/source-microsoft-teams:0.2.5 | alpha | [docs](https://docs.airbyte.com/integrations/sources/microsoft-teams) | [connectors/source/microsoft-teams](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/microsoft-teams) | [source-microsoft-teams](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-microsoft-teams) | `eaf50f04-21dd-4620-913b-2a83f5635227` | +| **Mixpanel** | Mixpanel icon | Source | airbyte/source-mixpanel:0.1.31 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/mixpanel) | [connectors/source/mixpanel](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/mixpanel) | [source-mixpanel](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-mixpanel) | `12928b32-bf0a-4f1e-964f-07e12e37153a` | +| **Monday** | Monday icon | Source | airbyte/source-monday:0.2.3 | beta | [docs](https://docs.airbyte.com/integrations/sources/monday) | [connectors/source/monday](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/monday) | [source-monday](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-monday) | `80a54ea2-9959-4040-aac1-eee42423ec9b` | +| **MongoDb** | MongoDb icon | Source | airbyte/source-mongodb-v2:0.1.19 | alpha | [docs](https://docs.airbyte.com/integrations/sources/mongodb-v2) | [connectors/source/mongodb-v2](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/mongodb-v2) | [source-mongodb-v2](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-mongodb-v2) | `b2e713cd-cc36-4c0a-b5bd-b47cb8a0561e` | +| **My Hours** | My Hours icon | Source | airbyte/source-my-hours:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/my-hours) | [connectors/source/my-hours](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/my-hours) | [source-my-hours](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-my-hours) | `722ba4bf-06ec-45a4-8dd5-72e4a5cf3903` | +| **MySQL** | MySQL icon | Source | airbyte/source-mysql:2.0.15 | beta | [docs](https://docs.airbyte.com/integrations/sources/mysql) | [connectors/source/mysql](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/mysql) | [source-mysql](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-mysql) | `435bb9a5-7887-4809-aa58-28c27df0d7ad` | +| **NASA** | NASA icon | Source | airbyte/source-nasa:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/nasa) | [connectors/source/nasa](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/nasa) | [source-nasa](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-nasa) | `1a8667d7-7978-43cd-ba4d-d32cbd478971` | +| **Netsuite** | Netsuite icon | Source | airbyte/source-netsuite:0.1.3 | alpha | [docs](https://docs.airbyte.com/integrations/sources/netsuite) | [connectors/source/netsuite](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/netsuite) | [source-netsuite](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-netsuite) | `4f2f093d-ce44-4121-8118-9d13b7bfccd0` | +| **New York Times** | New York Times icon | Source | airbyte/source-nytimes:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/nytimes) | [connectors/source/nytimes](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/nytimes) | [source-nytimes](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-nytimes) | `0fae6a9a-04eb-44d4-96e1-e02d3dbc1d83` | +| **News API** | News API icon | Source | airbyte/source-news-api:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/news-api) | [connectors/source/news-api](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/news-api) | [source-news-api](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-news-api) | `df38991e-f35b-4af2-996d-36817f614587` | +| **Newsdata** | x | Source | airbyte/source-newsdata:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/newsdata) | [connectors/source/newsdata](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/newsdata) | [source-newsdata](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-newsdata) | `60bd11d8-2632-4daa-a688-b47336d32093` | +| **Notion** | Notion icon | Source | airbyte/source-notion:1.0.4 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/notion) | [connectors/source/notion](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/notion) | [source-notion](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-notion) | `6e00b415-b02e-4160-bf02-58176a0ae687` | +| **Okta** | Okta icon | Source | airbyte/source-okta:0.1.14 | alpha | [docs](https://docs.airbyte.com/integrations/sources/okta) | [connectors/source/okta](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/okta) | [source-okta](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-okta) | `1d4fdb25-64fc-4569-92da-fcdca79a8372` | +| **Omnisend** | Omnisend icon | Source | airbyte/source-omnisend:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/omnisend) | [connectors/source/omnisend](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/omnisend) | [source-omnisend](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-omnisend) | `e7f0c5e2-4815-48c4-90cf-f47124209835` | +| **OneSignal** | OneSignal icon | Source | airbyte/source-onesignal:1.0.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/onesignal) | [connectors/source/onesignal](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/onesignal) | [source-onesignal](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-onesignal) | `bb6afd81-87d5-47e3-97c4-e2c2901b1cf8` | +| **Open Exchange Rates** | Open Exchange Rates icon | Source | airbyte/source-open-exchange-rates:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/open-exchange-rates) | [connectors/source/open-exchange-rates](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/open-exchange-rates) | [source-open-exchange-rates](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-open-exchange-rates) | `77d5ca6b-d345-4dce-ba1e-1935a75778b8` | +| **OpenWeather** | OpenWeather icon | Source | airbyte/source-openweather:0.1.6 | alpha | [docs](https://docs.airbyte.com/integrations/sources/openweather) | [connectors/source/openweather](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/openweather) | [source-openweather](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-openweather) | `d8540a80-6120-485d-b7d6-272bca477d9b` | +| **Opsgenie** | x | Source | airbyte/source-opsgenie:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/opsgenie) | [connectors/source/opsgenie](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/opsgenie) | [source-opsgenie](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-opsgenie) | `06bdb480-2598-40b8-8b0f-fc2e2d2abdda` | +| **Oracle DB** | Oracle DB icon | Source | airbyte/source-oracle:0.3.24 | alpha | [docs](https://docs.airbyte.com/integrations/sources/oracle) | [connectors/source/oracle](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/oracle) | [source-oracle](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-oracle) | `b39a7370-74c3-45a6-ac3a-380d48520a83` | +| **Orb** | Orb icon | Source | airbyte/source-orb:1.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/orb) | [connectors/source/orb](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/orb) | [source-orb](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-orb) | `7f0455fb-4518-4ec0-b7a3-d808bf8081cc` | +| **Orbit** | Orbit icon | Source | airbyte/source-orbit:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/orbit) | [connectors/source/orbit](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/orbit) | [source-orbit](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-orbit) | `95bcc041-1d1a-4c2e-8802-0ca5b1bfa36a` | +| **Oura** | Oura icon | Source | airbyte/source-oura:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/oura) | [connectors/source/oura](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/oura) | [source-oura](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-oura) | `2bf6c581-bec5-4e32-891d-de33036bd631` | +| **Outreach** | Outreach icon | Source | airbyte/source-outreach:0.2.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/outreach) | [connectors/source/outreach](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/outreach) | [source-outreach](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-outreach) | `3490c201-5d95-4783-b600-eaf07a4c7787` | +| **PagerDuty** | PagerDuty icon | Source | farosai/airbyte-pagerduty-source:0.1.23 | alpha | [docs](https://docs.airbyte.com/integrations/sources/pagerduty) | [connectors/destination/airbyte-pagerduty-source](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/airbyte-pagerduty-source) | [airbyte-pagerduty-source](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/airbyte-pagerduty-source) | `2817b3f0-04e4-4c7a-9f32-7a5e8a83db95` | +| **Pardot** | Pardot icon | Source | airbyte/source-pardot:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/pardot) | [connectors/source/pardot](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/pardot) | [source-pardot](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-pardot) | `ad15c7ba-72a7-440b-af15-b9a963dc1a8a` | +| **PartnerStack** | PartnerStack icon | Source | airbyte/source-partnerstack:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/partnerstack) | [connectors/source/partnerstack](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/partnerstack) | [source-partnerstack](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-partnerstack) | `d30fb809-6456-484d-8e2c-ee12e0f6888d` | +| **Paypal Transaction** | Paypal Transaction icon | Source | airbyte/source-paypal-transaction:0.1.12 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/paypal-transaction) | [connectors/source/paypal-transaction](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/paypal-transaction) | [source-paypal-transaction](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-paypal-transaction) | `d913b0f2-cc51-4e55-a44c-8ba1697b9239` | +| **Paystack** | Paystack icon | Source | airbyte/source-paystack:0.1.3 | beta | [docs](https://docs.airbyte.com/integrations/sources/paystack) | [connectors/source/paystack](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/paystack) | [source-paystack](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-paystack) | `193bdcb8-1dd9-48d1-aade-91cadfd74f9b` | +| **Pendo** | Pendo icon | Source | airbyte/source-pendo:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/pendo) | [connectors/source/pendo](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/pendo) | [source-pendo](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-pendo) | `b1ccb590-e84f-46c0-83a0-2048ccfffdae` | +| **PersistIq** | PersistIq icon | Source | airbyte/source-persistiq:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/persistiq) | [connectors/source/persistiq](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/persistiq) | [source-persistiq](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-persistiq) | `3052c77e-8b91-47e2-97a0-a29a22794b4b` | +| **Pexels API** | Pexels API icon | Source | airbyte/source-pexels-api:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/pexels-api) | [connectors/source/pexels-api](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/pexels-api) | [source-pexels-api](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-pexels-api) | `69d9eb65-8026-47dc-baf1-e4bf67901fd6` | +| **Pinterest** | Pinterest icon | Source | airbyte/source-pinterest:0.2.4 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/pinterest) | [connectors/source/pinterest](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/pinterest) | [source-pinterest](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-pinterest) | `5cb7e5fe-38c2-11ec-8d3d-0242ac130003` | +| **Pipedrive** | Pipedrive icon | Source | airbyte/source-pipedrive:0.1.17 | beta | [docs](https://docs.airbyte.com/integrations/sources/pipedrive) | [connectors/source/pipedrive](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/pipedrive) | [source-pipedrive](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-pipedrive) | `d8286229-c680-4063-8c59-23b9b391c700` | +| **Pivotal Tracker** | Pivotal Tracker icon | Source | airbyte/source-pivotal-tracker:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/pivotal-tracker) | [connectors/source/pivotal-tracker](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/pivotal-tracker) | [source-pivotal-tracker](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-pivotal-tracker) | `d60f5393-f99e-4310-8d05-b1876820f40e` | +| **Plaid** | Plaid icon | Source | airbyte/source-plaid:0.3.2 | alpha | [docs](https://docs.airbyte.com/integrations/sources/plaid) | [connectors/source/plaid](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/plaid) | [source-plaid](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-plaid) | `ed799e2b-2158-4c66-8da4-b40fe63bc72a` | +| **Plausible** | Plausible icon | Source | airbyte/source-plausible:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/plausible) | [connectors/source/plausible](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/plausible) | [source-plausible](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-plausible) | `603ba446-3d75-41d7-92f3-aba901f8b897` | +| **Pocket** | Pocket icon | Source | airbyte/source-pocket:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/pocket) | [connectors/source/pocket](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/pocket) | [source-pocket](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-pocket) | `b0dd65f1-081f-4731-9c51-38e9e6aa0ebf` | +| **PokeAPI** | PokeAPI icon | Source | airbyte/source-pokeapi:0.1.5 | alpha | [docs](https://docs.airbyte.com/integrations/sources/pokeapi) | [connectors/source/pokeapi](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/pokeapi) | [source-pokeapi](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-pokeapi) | `6371b14b-bc68-4236-bfbd-468e8df8e968` | +| **Polygon Stock API** | Polygon Stock API icon | Source | airbyte/source-polygon-stock-api:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/polygon-stock-api) | [connectors/source/polygon-stock-api](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/polygon-stock-api) | [source-polygon-stock-api](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-polygon-stock-api) | `5807d72f-0abc-49f9-8fa5-ae820007032b` | +| **PostHog** | PostHog icon | Source | airbyte/source-posthog:0.1.9 | beta | [docs](https://docs.airbyte.com/integrations/sources/posthog) | [connectors/source/posthog](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/posthog) | [source-posthog](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-posthog) | `af6d50ee-dddf-4126-a8ee-7faee990774f` | +| **Postgres** | Postgres icon | Source | airbyte/source-postgres:2.0.21 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/postgres) | [connectors/source/postgres](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/postgres) | [source-postgres](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-postgres) | `decd338e-5647-4c0b-adf4-da0e75f5a750` | +| **Postmark App** | Postmark App icon | Source | airbyte/source-postmarkapp:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/postmarkapp) | [connectors/source/postmarkapp](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/postmarkapp) | [source-postmarkapp](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-postmarkapp) | `cde75ca1-1e28-4a0f-85bb-90c546de9f1f` | +| **PrestaShop** | PrestaShop icon | Source | airbyte/source-prestashop:0.3.1 | beta | [docs](https://docs.airbyte.com/integrations/sources/prestashop) | [connectors/source/prestashop](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/prestashop) | [source-prestashop](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-prestashop) | `d60a46d4-709f-4092-a6b7-2457f7d455f5` | +| **Primetric** | Primetric icon | Source | airbyte/source-primetric:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/primetric) | [connectors/source/primetric](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/primetric) | [source-primetric](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-primetric) | `f636c3c6-4077-45ac-b109-19fc62a283c1` | +| **Public APIs** | Public APIs icon | Source | airbyte/source-public-apis:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/public-apis) | [connectors/source/public-apis](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/public-apis) | [source-public-apis](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-public-apis) | `a4617b39-3c14-44cd-a2eb-6e720f269235` | +| **Punk API** | Punk API icon | Source | airbyte/source-punk-api:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/punk-api) | [connectors/source/punk-api](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/punk-api) | [source-punk-api](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-punk-api) | `dbe9b7ae-7b46-4e44-a507-02a343cf7230` | +| **PyPI** | PyPI icon | Source | airbyte/source-pypi:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/pypi) | [connectors/source/pypi](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/pypi) | [source-pypi](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-pypi) | `88ecd3a8-5f5b-11ed-9b6a-0242ac120002` | +| **Qonto** | Qonto icon | Source | airbyte/source-qonto:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/public-qonto) | [connectors/source/qonto](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/qonto) | [source-qonto](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-qonto) | `f7c0b910-5f66-11ed-9b6a-0242ac120002` | +| **Qualaroo** | Qualaroo icon | Source | airbyte/source-qualaroo:0.1.2 | alpha | [docs](https://docs.airbyte.com/integrations/sources/qualaroo) | [connectors/source/qualaroo](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/qualaroo) | [source-qualaroo](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-qualaroo) | `b08e4776-d1de-4e80-ab5c-1e51dad934a2` | +| **QuickBooks** | QuickBooks icon | Source | airbyte/source-quickbooks:2.0.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/quickbooks) | [connectors/source/quickbooks](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/quickbooks) | [source-quickbooks](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-quickbooks) | `cf9c4355-b171-4477-8f2d-6c5cc5fc8b7e` | +| **RD Station Marketing** | RD Station Marketing icon | Source | airbyte/source-rd-station-marketing:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/rd-station-marketing) | [connectors/source/rd-station-marketing](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/rd-station-marketing) | [source-rd-station-marketing](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-rd-station-marketing) | `fb141f29-be2a-450b-a4f2-2cd203a00f84` | +| **RKI Covid** | RKI Covid icon | Source | airbyte/source-rki-covid:0.1.2 | alpha | [docs](https://docs.airbyte.com/integrations/sources/rki-covid) | [connectors/source/rki-covid](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/rki-covid) | [source-rki-covid](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-rki-covid) | `d78e5de0-aa44-4744-aa4f-74c818ccfe19` | +| **RSS** | RSS icon | Source | airbyte/source-rss:0.1.0 | unknown | [docs](https://docs.airbyte.com/integrations/sources/rss) | [connectors/source/rss](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/rss) | [source-rss](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-rss) | `0efee448-6948-49e2-b786-17db50647908` | +| **Railz** | Railz icon | Source | airbyte/source-railz:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/railz) | [connectors/source/railz](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/railz) | [source-railz](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-railz) | `9b6cc0c0-da81-4103-bbfd-5279e18a849a` | +| **Recharge** | Recharge icon | Source | airbyte/source-recharge:0.2.9 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/recharge) | [connectors/source/recharge](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/recharge) | [source-recharge](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-recharge) | `45d2e135-2ede-49e1-939f-3e3ec357a65e` | +| **Recreation** | Recreation icon | Source | airbyte/source-recreation:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/recreation) | [connectors/source/recreation](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/recreation) | [source-recreation](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-recreation) | `25d7535d-91e0-466a-aa7f-af81578be277` | +| **Recruitee** | Recruitee icon | Source | airbyte/source-recruitee:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/recruitee) | [connectors/source/recruitee](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/recruitee) | [source-recruitee](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-recruitee) | `3b046ac7-d8d3-4eb3-b122-f96b2a16d8a8` | +| **Recurly** | Recurly icon | Source | airbyte/source-recurly:0.4.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/recurly) | [connectors/source/recurly](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/recurly) | [source-recurly](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-recurly) | `cd42861b-01fc-4658-a8ab-5d11d0510f01` | +| **Redshift** | Redshift icon | Source | airbyte/source-redshift:0.3.16 | alpha | [docs](https://docs.airbyte.com/integrations/sources/redshift) | [connectors/source/redshift](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/redshift) | [source-redshift](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-redshift) | `e87ffa8e-a3b5-f69c-9076-6011339de1f6` | +| **Reply.io** | Reply.io icon | Source | airbyte/source-reply-io:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/reply-io) | [connectors/source/reply-io](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/reply-io) | [source-reply-io](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-reply-io) | `8cc6537e-f8a6-423c-b960-e927af76116e` | +| **Retently** | Retently icon | Source | airbyte/source-retently:0.1.3 | alpha | [docs](https://docs.airbyte.com/integrations/sources/retently) | [connectors/source/retently](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/retently) | [source-retently](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-retently) | `db04ecd1-42e7-4115-9cec-95812905c626` | +| **Rocket.chat** | Rocket.chat icon | Source | airbyte/source-rocket-chat:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/rocket-chat) | [connectors/source/rocket-chat](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/rocket-chat) | [source-rocket-chat](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-rocket-chat) | `921d9608-3915-450b-8078-0af18801ea1b` | +| **S3** | S3 icon | Source | airbyte/source-s3:2.0.4 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/s3) | [connectors/source/s3](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/s3) | [source-s3](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-s3) | `69589781-7828-43c5-9f63-8925b1c1ccc2` | +| **SAP Fieldglass** | SAP Fieldglass icon | Source | airbyte/source-sap-fieldglass:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/sap-fieldglass) | [connectors/source/sap-fieldglass](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/sap-fieldglass) | [source-sap-fieldglass](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-sap-fieldglass) | `ec5f3102-fb31-4916-99ae-864faf8e7e25` | +| **SFTP** | SFTP icon | Source | airbyte/source-sftp:0.1.2 | alpha | [docs](https://docs.airbyte.com/integrations/sources/sftp) | [connectors/source/sftp](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/sftp) | [source-sftp](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-sftp) | `a827c52e-791c-4135-a245-e233c5255199` | +| **SFTP Bulk** | SFTP Bulk icon | Source | airbyte/source-sftp-bulk:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/sftp-bulk) | [connectors/source/sftp-bulk](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/sftp-bulk) | [source-sftp-bulk](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-sftp-bulk) | `31e3242f-dee7-4cdc-a4b8-8e06c5458517` | +| **SalesLoft** | SalesLoft icon | Source | airbyte/source-salesloft:1.0.0 | beta | [docs](https://docs.airbyte.com/integrations/sources/salesloft) | [connectors/source/salesloft](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/salesloft) | [source-salesloft](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-salesloft) | `41991d12-d4b5-439e-afd0-260a31d4c53f` | +| **Salesforce** | Salesforce icon | Source | airbyte/source-salesforce:2.0.9 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/salesforce) | [connectors/source/salesforce](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/salesforce) | [source-salesforce](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-salesforce) | `b117307c-14b6-41aa-9422-947e34922962` | +| **Sample Data (Faker)** | Sample Data (Faker) icon | Source | airbyte/source-faker:2.0.3 | beta | [docs](https://docs.airbyte.com/integrations/sources/faker) | [connectors/source/faker](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/faker) | [source-faker](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-faker) | `dfd88b22-b603-4c3d-aad7-3701784586b1` | +| **SearchMetrics** | SearchMetrics icon | Source | airbyte/source-search-metrics:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/search-metrics) | [connectors/source/search-metrics](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/search-metrics) | [source-search-metrics](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-search-metrics) | `8d7ef552-2c0f-11ec-8d3d-0242ac130003` | +| **Secoda** | Secoda icon | Source | airbyte/source-secoda:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/secoda) | [connectors/source/secoda](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/secoda) | [source-secoda](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-secoda) | `da9fc6b9-8059-4be0-b204-f56e22e4d52d` | +| **Sendgrid** | Sendgrid icon | Source | airbyte/source-sendgrid:0.3.1 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/sendgrid) | [connectors/source/sendgrid](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/sendgrid) | [source-sendgrid](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-sendgrid) | `fbb5fbe2-16ad-4cf4-af7d-ff9d9c316c87` | +| **Sendinblue** | Sendinblue icon | Source | airbyte/source-sendinblue:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/sendinblue) | [connectors/source/sendinblue](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/sendinblue) | [source-sendinblue](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-sendinblue) | `2e88fa20-a2f6-43cc-bba6-98a0a3f244fb` | +| **Senseforce** | Senseforce icon | Source | airbyte/source-senseforce:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/senseforce) | [connectors/source/senseforce](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/senseforce) | [source-senseforce](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-senseforce) | `39de93cb-1511-473e-a673-5cbedb9436af` | +| **Sentry** | Sentry icon | Source | airbyte/source-sentry:0.2.0 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/sentry) | [connectors/source/sentry](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/sentry) | [source-sentry](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-sentry) | `cdaf146a-9b75-49fd-9dd2-9d64a0bb4781` | +| **Shopify** | Shopify icon | Source | airbyte/source-shopify:0.3.2 | alpha | [docs](https://docs.airbyte.com/integrations/sources/shopify) | [connectors/source/shopify](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/shopify) | [source-shopify](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-shopify) | `9da77001-af33-4bcd-be46-6252bf9342b9` | +| **Short.io** | Short.io icon | Source | airbyte/source-shortio:0.1.3 | alpha | [docs](https://docs.airbyte.com/integrations/sources/shortio) | [connectors/source/shortio](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/shortio) | [source-shortio](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-shortio) | `2fed2292-5586-480c-af92-9944e39fe12d` | +| **Slack** | Slack icon | Source | airbyte/source-slack:0.1.25 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/slack) | [connectors/source/slack](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/slack) | [source-slack](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-slack) | `c2281cee-86f9-4a86-bb48-d23286b4c7bd` | +| **Smaily** | Smaily icon | Source | airbyte/source-smaily:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/smaily) | [connectors/source/smaily](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/smaily) | [source-smaily](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-smaily) | `781f8b1d-4e20-4842-a2c3-cd9b119d65fa` | +| **SmartEngage** | SmartEngage icon | Source | airbyte/source-smartengage:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/smartengage) | [connectors/source/smartengage](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/smartengage) | [source-smartengage](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-smartengage) | `21cc4a17-a011-4485-8a3e-e2341a91ab9f` | +| **Smartsheets** | Smartsheets icon | Source | airbyte/source-smartsheets:1.0.0 | beta | [docs](https://docs.airbyte.com/integrations/sources/smartsheets) | [connectors/source/smartsheets](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/smartsheets) | [source-smartsheets](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-smartsheets) | `374ebc65-6636-4ea0-925c-7d35999a8ffc` | +| **Snapchat Marketing** | Snapchat Marketing icon | Source | airbyte/source-snapchat-marketing:0.1.15 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/snapchat-marketing) | [connectors/source/snapchat-marketing](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/snapchat-marketing) | [source-snapchat-marketing](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-snapchat-marketing) | `200330b2-ea62-4d11-ac6d-cfe3e3f8ab2b` | +| **Snowflake** | Snowflake icon | Source | airbyte/source-snowflake:0.1.34 | alpha | [docs](https://docs.airbyte.com/integrations/sources/snowflake) | [connectors/source/snowflake](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/snowflake) | [source-snowflake](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-snowflake) | `e2d65910-8c8b-40a1-ae7d-ee2416b2bfa2` | +| **Sonar Cloud** | Sonar Cloud icon | Source | airbyte/source-sonar-cloud:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/sonar-cloud) | [connectors/source/sonar-cloud](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/sonar-cloud) | [source-sonar-cloud](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-sonar-cloud) | `3ab1d7d0-1577-4ab9-bcc4-1ff6a4c2c9f2` | +| **SpaceX API** | SpaceX API icon | Source | airbyte/source-spacex-api:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/spacex-api) | [connectors/source/spacex-api](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/spacex-api) | [source-spacex-api](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-spacex-api) | `62235e65-af7a-4138-9130-0bda954eb6a8` | +| **Square** | Square icon | Source | airbyte/source-square:0.2.2 | beta | [docs](https://docs.airbyte.com/integrations/sources/square) | [connectors/source/square](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/square) | [source-square](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-square) | `77225a51-cd15-4a13-af02-65816bd0ecf4` | +| **Statuspage** | Statuspage icon | Source | airbyte/source-statuspage:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/statuspage) | [connectors/source/statuspage](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/statuspage) | [source-statuspage](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-statuspage) | `74cbd708-46c3-4512-9c93-abd5c3e9a94d` | +| **Strava** | Strava icon | Source | airbyte/source-strava:0.1.4 | beta | [docs](https://docs.airbyte.com/integrations/sources/strava) | [connectors/source/strava](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/strava) | [source-strava](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-strava) | `7a4327c4-315a-11ec-8d3d-0242ac130003` | +| **Stripe** | Stripe icon | Source | airbyte/source-stripe:3.1.0 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/stripe) | [connectors/source/stripe](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/stripe) | [source-stripe](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-stripe) | `e094cb9a-26de-4645-8761-65c0c425d1de` | +| **SurveyCTO** | SurveyCTO icon | Source | airbyte/source-surveycto:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/surveycto) | [connectors/source/surveycto](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/surveycto) | [source-surveycto](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-surveycto) | `dd4632f4-15e0-4649-9b71-41719fb1fdee` | +| **SurveyMonkey** | SurveyMonkey icon | Source | airbyte/source-surveymonkey:0.1.16 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/surveymonkey) | [connectors/source/surveymonkey](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/surveymonkey) | [source-surveymonkey](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-surveymonkey) | `badc5925-0485-42be-8caa-b34096cb71b5` | +| **SurveySparrow** | SurveySparrow icon | Source | airbyte/source-survey-sparrow:0.2.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/survey-sparrow) | [connectors/source/survey-sparrow](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/survey-sparrow) | [source-survey-sparrow](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-survey-sparrow) | `4a4d887b-0f2d-4b33-ab7f-9b01b9072804` | +| **TMDb** | TMDb icon | Source | airbyte/source-tmdb:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/tmdb) | [connectors/source/tmdb](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/tmdb) | [source-tmdb](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-tmdb) | `6240848f-f795-45eb-8f5e-c7542822fc03` | +| **TPLcentral** | x | Source | airbyte/source-tplcentral:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/tplcentral) | [connectors/source/tplcentral](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/tplcentral) | [source-tplcentral](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-tplcentral) | `f9b6c538-ee12-42fe-8d4b-0c10f5955417` | +| **TVMaze Schedule** | TVMaze Schedule icon | Source | airbyte/source-tvmaze-schedule:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/tvmaze-schedule) | [connectors/source/tvmaze-schedule](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/tvmaze-schedule) | [source-tvmaze-schedule](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-tvmaze-schedule) | `bd14b08f-9f43-400f-b2b6-7248b5c72561` | +| **TalkDesk Explore** | TalkDesk Explore icon | Source | airbyte/source-talkdesk-explore:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/talkdesk-explore) | [connectors/source/talkdesk-explore](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/talkdesk-explore) | [source-talkdesk-explore](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-talkdesk-explore) | `f00d2cf4-3c28-499a-ba93-b50b6f26359e` | +| **Tempo** | Tempo icon | Source | airbyte/source-tempo:0.3.1 | beta | [docs](https://docs.airbyte.com/integrations/sources/tempo) | [connectors/source/tempo](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/tempo) | [source-tempo](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-tempo) | `d1aa448b-7c54-498e-ad95-263cbebcd2db` | +| **The Guardian API** | The Guardian API icon | Source | airbyte/source-the-guardian-api:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/the-guardian-api) | [connectors/source/the-guardian-api](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/the-guardian-api) | [source-the-guardian-api](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-the-guardian-api) | `d42bd69f-6bf0-4d0b-9209-16231af07a92` | +| **TiDB** | TiDB icon | Source | airbyte/source-tidb:0.2.4 | alpha | [docs](https://docs.airbyte.com/integrations/sources/tidb) | [connectors/source/tidb](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/tidb) | [source-tidb](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-tidb) | `0dad1a35-ccf8-4d03-b73e-6788c00b13ae` | +| **TikTok Marketing** | TikTok Marketing icon | Source | airbyte/source-tiktok-marketing:3.0.1 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/tiktok-marketing) | [connectors/source/tiktok-marketing](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/tiktok-marketing) | [source-tiktok-marketing](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-tiktok-marketing) | `4bfac00d-ce15-44ff-95b9-9e3c3e8fbd35` | +| **Timely** | Timely icon | Source | airbyte/source-timely:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/timely) | [connectors/source/timely](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/timely) | [source-timely](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-timely) | `bc617b5f-1b9e-4a2d-bebe-782fd454a771` | +| **Todoist** | Todoist icon | Source | airbyte/source-todoist:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/todoist) | [connectors/source/todoist](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/todoist) | [source-todoist](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-todoist) | `7d272065-c316-4c04-a433-cd4ee143f83e` | +| **Toggl** | Toggl icon | Source | airbyte/source-toggl:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/toggl) | [connectors/source/toggl](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/toggl) | [source-toggl](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-toggl) | `7e7c844f-2300-4342-b7d3-6dd7992593cd` | +| **Trello** | Trello icon | Source | airbyte/source-trello:0.3.1 | beta | [docs](https://docs.airbyte.com/integrations/sources/trello) | [connectors/source/trello](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/trello) | [source-trello](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-trello) | `8da67652-004c-11ec-9a03-0242ac130003` | +| **TrustPilot** | TrustPilot icon | Source | airbyte/source-trustpilot:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/trustpilot) | [connectors/source/trustpilot](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/trustpilot) | [source-trustpilot](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-trustpilot) | `d7e23ea6-d741-4314-9209-a33c91a2e945` | +| **Twilio** | Twilio icon | Source | airbyte/source-twilio:0.5.0 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/twilio) | [connectors/source/twilio](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/twilio) | [source-twilio](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-twilio) | `b9dc6155-672e-42ea-b10d-9f1f1fb95ab1` | +| **Twilio Taskrouter** | Twilio Taskrouter icon | Source | airbyte/source-twilio-taskrouter:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/twilio-taskrouter) | [connectors/source/twilio-taskrouter](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/twilio-taskrouter) | [source-twilio-taskrouter](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-twilio-taskrouter) | `2446953b-b794-429b-a9b3-c821ba992a48` | +| **Twitter** | Twitter icon | Source | airbyte/source-twitter:0.1.2 | beta | [docs](https://docs.airbyte.com/integrations/sources/twitter) | [connectors/source/twitter](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/twitter) | [source-twitter](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-twitter) | `d7fd4f40-5e5a-4b8b-918f-a73077f8c131` | +| **Tyntec SMS** | Tyntec SMS icon | Source | airbyte/source-tyntec-sms:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/tyntec-sms) | [connectors/source/tyntec-sms](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/tyntec-sms) | [source-tyntec-sms](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-tyntec-sms) | `3c0c3cd1-b3e0-464a-9090-d3ceb5f92346` | +| **Typeform** | Typeform icon | Source | airbyte/source-typeform:0.1.12 | beta | [docs](https://docs.airbyte.com/integrations/sources/typeform) | [connectors/source/typeform](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/typeform) | [source-typeform](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-typeform) | `e7eff203-90bf-43e5-a240-19ea3056c474` | +| **US Census** | US Census icon | Source | airbyte/source-us-census:0.1.2 | alpha | [docs](https://docs.airbyte.com/integrations/sources/us-census) | [connectors/source/us-census](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/us-census) | [source-us-census](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-us-census) | `c4cfaeda-c757-489a-8aba-859fb08b6970` | +| **Unleash** | Unleash icon | Source | airbyte/source-unleash:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/unleash) | [connectors/source/unleash](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/unleash) | [source-unleash](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-unleash) | `f77914a1-442b-4195-9355-8810a1f4ed3f` | +| **Vantage** | Vantage icon | Source | airbyte/source-vantage:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/vantage) | [connectors/source/vantage](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/vantage) | [source-vantage](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-vantage) | `28ce1fbd-1e15-453f-aa9f-da6c4d928e92` | +| **VictorOps** | VictorOps icon | Source | farosai/airbyte-victorops-source:0.1.23 | alpha | [docs](https://docs.airbyte.com/integrations/sources/victorops) | [connectors/destination/airbyte-victorops-source](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/airbyte-victorops-source) | [airbyte-victorops-source](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/airbyte-victorops-source) | `7e20ce3e-d820-4327-ad7a-88f3927fd97a` | +| **Visma E-conomic** | Visma E-conomic icon | Source | airbyte/source-visma-economic:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/visma-economic) | [connectors/source/visma-economic](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/visma-economic) | [source-visma-economic](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-visma-economic) | `42495935-95de-4f5c-ae08-8fac00f6b308` | +| **Vitally** | Vitally icon | Source | airbyte/source-vitally:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/vitally) | [connectors/source/vitally](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/vitally) | [source-vitally](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-vitally) | `6c6d8b0c-db35-4cd1-a7de-0ca8b080f5ac` | +| **Waiteraid** | Waiteraid icon | Source | airbyte/source-waiteraid:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/waiteraid) | [connectors/source/waiteraid](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/waiteraid) | [source-waiteraid](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-waiteraid) | `03a53b13-794a-4d6b-8544-3b36ed8f3ce4` | +| **Weatherstack** | Weatherstack icon | Source | airbyte/source-weatherstack:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/weatherstack) | [connectors/source/weatherstack](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/weatherstack) | [source-weatherstack](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-weatherstack) | `5db8292c-5f5a-11ed-9b6a-0242ac120002` | +| **Webflow** | Webflow icon | Source | airbyte/source-webflow:0.1.2 | alpha | [docs](https://docs.airbyte.com/integrations/sources/webflow) | [connectors/source/webflow](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/webflow) | [source-webflow](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-webflow) | `ef580275-d9a9-48bb-af5e-db0f5855be04` | +| **Whisky Hunter** | Whisky Hunter icon | Source | airbyte/source-whisky-hunter:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/whisky-hunter) | [connectors/source/whisky-hunter](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/whisky-hunter) | [source-whisky-hunter](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-whisky-hunter) | `e65f84c0-7598-458a-bfac-f770c381ff5d` | +| **Wikipedia Pageviews** | Wikipedia Pageviews icon | Source | airbyte/source-wikipedia-pageviews:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/wikipedia-pageviews) | [connectors/source/wikipedia-pageviews](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/wikipedia-pageviews) | [source-wikipedia-pageviews](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-wikipedia-pageviews) | `87c58f70-6f7a-4f70-aba5-bab1a458f5ba` | +| **WooCommerce** | WooCommerce icon | Source | airbyte/source-woocommerce:0.2.2 | beta | [docs](https://docs.airbyte.com/integrations/sources/woocommerce) | [connectors/source/woocommerce](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/woocommerce) | [source-woocommerce](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-woocommerce) | `2a2552ca-9f78-4c1c-9eb7-4d0dc66d72df` | +| **WorkRamp** | WorkRamp icon | Source | airbyte/source-workramp:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/workramp) | [connectors/source/workramp](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/workramp) | [source-workramp](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-workramp) | `05b0bce2-4ec4-4534-bb1a-5d0127bd91b7` | +| **Workable** | Workable icon | Source | airbyte/source-workable:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/workable) | [connectors/source/workable](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/workable) | [source-workable](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-workable) | `ef3c99c6-9e90-43c8-9517-926cfd978517` | +| **Wrike** | Wrike icon | Source | airbyte/source-wrike:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/wrike) | [connectors/source/wrike](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/wrike) | [source-wrike](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-wrike) | `9c13f986-a13b-4988-b808-4705badf71c2` | +| **Xero** | Xero icon | Source | airbyte/source-xero:0.2.1 | beta | [docs](https://docs.airbyte.com/integrations/sources/xero) | [connectors/source/xero](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/xero) | [source-xero](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-xero) | `6fd1e833-dd6e-45ec-a727-ab917c5be892` | +| **Yandex Metrica** | Yandex Metrica icon | Source | airbyte/source-yandex-metrica:1.0.0 | beta | [docs](https://docs.airbyte.com/integrations/sources/yandex-metrica) | [connectors/source/yandex-metrica](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/yandex-metrica) | [source-yandex-metrica](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-yandex-metrica) | `7865dce4-2211-4f6a-88e5-9d0fe161afe7` | +| **YouTube Analytics** | YouTube Analytics icon | Source | airbyte/source-youtube-analytics:0.1.3 | beta | [docs](https://docs.airbyte.com/integrations/sources/youtube-analytics) | [connectors/source/youtube-analytics](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/youtube-analytics) | [source-youtube-analytics](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-youtube-analytics) | `afa734e4-3571-11ec-991a-1e0031268139` | +| **Younium** | Younium icon | Source | airbyte/source-younium:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/younium) | [connectors/source/younium](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/younium) | [source-younium](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-younium) | `9c74c2d7-531a-4ebf-b6d8-6181f805ecdc` | +| **Zapier Supported Storage** | Zapier Supported Storage icon | Source | airbyte/source-zapier-supported-storage:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/zendesk-supported-storage) | [connectors/source/zapier-supported-storage](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/zapier-supported-storage) | [source-zapier-supported-storage](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-zapier-supported-storage) | `b8c917bc-7d1b-4828-995f-6726820266d0` | +| **Zendesk Chat** | Zendesk Chat icon | Source | airbyte/source-zendesk-chat:0.1.14 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/zendesk-chat) | [connectors/source/zendesk-chat](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/zendesk-chat) | [source-zendesk-chat](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-zendesk-chat) | `40d24d0f-b8f9-4fe0-9e6c-b06c0f3f45e4` | +| **Zendesk Sell** | Zendesk Sell icon | Source | airbyte/source-zendesk-sell:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/zendesk-sell) | [connectors/source/zendesk-sell](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/zendesk-sell) | [source-zendesk-sell](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-zendesk-sell) | `982eaa4c-bba1-4cce-a971-06a41f700b8c` | +| **Zendesk Sunshine** | Zendesk Sunshine icon | Source | airbyte/source-zendesk-sunshine:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/zendesk-sunshine) | [connectors/source/zendesk-sunshine](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/zendesk-sunshine) | [source-zendesk-sunshine](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-zendesk-sunshine) | `325e0640-e7b3-4e24-b823-3361008f603f` | +| **Zendesk Support** | Zendesk Support icon | Source | airbyte/source-zendesk-support:0.2.27 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/zendesk-support) | [connectors/source/zendesk-support](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/zendesk-support) | [source-zendesk-support](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-zendesk-support) | `79c1aa37-dae3-42ae-b333-d1c105477715` | +| **Zendesk Talk** | Zendesk Talk icon | Source | airbyte/source-zendesk-talk:0.1.7 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/zendesk-talk) | [connectors/source/zendesk-talk](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/zendesk-talk) | [source-zendesk-talk](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-zendesk-talk) | `c8630570-086d-4a40-99ae-ea5b18673071` | +| **Zenefits** | Zenefits icon | Source | airbyte/source-zenefits:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/zenefits) | [connectors/source/zenefits](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/zenefits) | [source-zenefits](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-zenefits) | `8baba53d-2fe3-4e33-bc85-210d0eb62884` | +| **Zenloop** | Zenloop icon | Source | airbyte/source-zenloop:0.1.6 | beta | [docs](https://docs.airbyte.com/integrations/sources/zenloop) | [connectors/source/zenloop](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/zenloop) | [source-zenloop](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-zenloop) | `f1e4c7f6-db5c-4035-981f-d35ab4998794` | +| **ZohoCRM** | ZohoCRM icon | Source | airbyte/source-zoho-crm:0.1.2 | alpha | [docs](https://docs.airbyte.com/integrations/sources/zoho-crm) | [connectors/source/zoho-crm](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/zoho-crm) | [source-zoho-crm](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-zoho-crm) | `4942d392-c7b5-4271-91f9-3b4f4e51eb3e` | +| **Zoom** | Zoom icon | Source | airbyte/source-zoom:0.1.1 | alpha | [docs](https://docs.airbyte.io/integrations/sources/zoom) | [connectors/source/zoom](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/zoom) | [source-zoom](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-zoom) | `cbfd9856-1322-44fb-bcf1-0b39b7a8e92e` | +| **Zuora** | Zuora icon | Source | airbyte/source-zuora:0.1.3 | alpha | [docs](https://docs.airbyte.com/integrations/sources/zuora) | [connectors/source/zuora](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/zuora) | [source-zuora](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-zuora) | `3dc3037c-5ce8-4661-adc2-f7a9e3c5ece5` | +| **n8n** | n8n icon | Source | airbyte/source-n8n:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/n8n) | [connectors/source/n8n](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/n8n) | [source-n8n](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-n8n) | `4a961f66-5e99-4430-8320-a73afe52f7a2` | +| **xkcd** | xkcd icon | Source | airbyte/source-xkcd:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/xkcd) | [connectors/source/xkcd](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/xkcd) | [source-xkcd](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-xkcd) | `80fddd16-17bd-4c0c-bf4a-80df7863fc9d` | ## Destinations -| Name | Icon | Type | Image | Release Stage | Docs | Code | ID | -|----|----|----|----|----|----|----|----| -| **AWS Datalake** | AWS Datalake icon | Destination | airbyte/destination-aws-datalake:0.1.2 | alpha | [link](https://docs.airbyte.com/integrations/destinations/aws-datalake) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-aws-datalake) | `99878c90-0fbd-46d3-9d98-ffde879d17fc` | -| **Amazon SQS** | Amazon SQS icon | Destination | airbyte/destination-amazon-sqs:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/destinations/amazon-sqs) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-amazon-sqs) | `0eeee7fb-518f-4045-bacc-9619e31c43ea` | -| **Apache Doris** | Apache Doris icon | Destination | airbyte/destination-doris:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/destinations/doris) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-doris) | `05c161bf-ca73-4d48-b524-d392be417002` | -| **Apache Iceberg** | x | Destination | airbyte/destination-iceberg:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/destinations/iceberg) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-iceberg) | `df65a8f3-9908-451b-aa9b-445462803560` | -| **Azure Blob Storage** | Azure Blob Storage icon | Destination | airbyte/destination-azure-blob-storage:0.2.0 | alpha | [link](https://docs.airbyte.com/integrations/destinations/azureblobstorage) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-azure-blob-storage) | `b4c5d105-31fd-4817-96b6-cb923bfc04cb` | -| **BigQuery** | BigQuery icon | Destination | airbyte/destination-bigquery:1.2.20 | generally_available | [link](https://docs.airbyte.com/integrations/destinations/bigquery) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-bigquery) | `22f6c74f-5699-40ff-833c-4a879ea40133` | -| **BigQuery (denormalized typed struct)** | BigQuery (denormalized typed struct) icon | Destination | airbyte/destination-bigquery-denormalized:1.2.20 | beta | [link](https://docs.airbyte.com/integrations/destinations/bigquery) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-bigquery-denormalized) | `079d5540-f236-4294-ba7c-ade8fd918496` | -| **Cassandra** | Cassandra icon | Destination | airbyte/destination-cassandra:0.1.4 | alpha | [link](https://docs.airbyte.com/integrations/destinations/cassandra) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-cassandra) | `707456df-6f4f-4ced-b5c6-03f73bcad1c5` | -| **Chargify (Keen)** | Chargify (Keen) icon | Destination | airbyte/destination-keen:0.2.4 | alpha | [link](https://docs.airbyte.com/integrations/destinations/keen) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-keen) | `81740ce8-d764-4ea7-94df-16bb41de36ae` | -| **Clickhouse** | Clickhouse icon | Destination | airbyte/destination-clickhouse:0.2.3 | alpha | [link](https://docs.airbyte.com/integrations/destinations/clickhouse) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-clickhouse) | `ce0d828e-1dc4-496c-b122-2da42e637e48` | -| **Cloudflare R2** | Cloudflare R2 icon | Destination | airbyte/destination-r2:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/destinations/r2) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-r2) | `0fb07be9-7c3b-4336-850d-5efc006152ee` | -| **Convex** | Convex icon | Destination | airbyte/destination-convex:0.1.0 | alpha | [link](https://docs.airbyte.io/integrations/destinations/convex) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-convex) | `3eb4d99c-11fa-4561-a259-fc88e0c2f8f4` | -| **Databend** | Databend icon | Destination | airbyte/destination-databend:0.1.2 | alpha | [link](https://docs.airbyte.com/integrations/destinations/databend) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-databend) | `302e4d8e-08d3-4098-acd4-ac67ca365b88` | -| **Databricks Lakehouse** | Databricks Lakehouse icon | Destination | airbyte/destination-databricks:1.0.0 | alpha | [link](https://docs.airbyte.com/integrations/destinations/databricks) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-databricks) | `072d5540-f236-4294-ba7c-ade8fd918496` | -| **DuckDB** | DuckDB icon | Destination | airbyte/destination-duckdb:0.1.0 | alpha | [link](https://docs.airbyte.io/integrations/destinations/duckdb) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-duckdb) | `94bd199c-2ff0-4aa2-b98e-17f0acb72610` | -| **DynamoDB** | DynamoDB icon | Destination | airbyte/destination-dynamodb:0.1.7 | alpha | [link](https://docs.airbyte.com/integrations/destinations/dynamodb) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-dynamodb) | `8ccd8909-4e99-4141-b48d-4984b70b2d89` | -| **E2E Testing** | E2E Testing icon | Destination | airbyte/destination-e2e-test:0.2.4 | unknown | [link](https://docs.airbyte.com/integrations/destinations/e2e-test) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-e2e-test) | `2eb65e87-983a-4fd7-b3e3-9d9dc6eb8537` | -| **ElasticSearch** | ElasticSearch icon | Destination | airbyte/destination-elasticsearch:0.1.6 | alpha | [link](https://docs.airbyte.com/integrations/destinations/elasticsearch) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-elasticsearch) | `68f351a7-2745-4bef-ad7f-996b8e51bb8c` | -| **Exasol** | x | Destination | airbyte/destination-exasol:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/destinations/exasol) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-exasol) | `bb6071d9-6f34-4766-bec2-d1d4ed81a653` | -| **Firebolt** | Firebolt icon | Destination | airbyte/destination-firebolt:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/destinations/firebolt) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-firebolt) | `18081484-02a5-4662-8dba-b270b582f321` | -| **Google Cloud Storage (GCS)** | Google Cloud Storage (GCS) icon | Destination | airbyte/destination-gcs:0.2.16 | beta | [link](https://docs.airbyte.com/integrations/destinations/gcs) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-gcs) | `ca8f6566-e555-4b40-943a-545bf123117a` | -| **Google Firestore** | Google Firestore icon | Destination | airbyte/destination-firestore:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/destinations/firestore) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-firestore) | `27dc7500-6d1b-40b1-8b07-e2f2aea3c9f4` | -| **Google PubSub** | Google PubSub icon | Destination | airbyte/destination-pubsub:0.2.0 | alpha | [link](https://docs.airbyte.com/integrations/destinations/pubsub) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-pubsub) | `356668e2-7e34-47f3-a3b0-67a8a481b692` | -| **Google Sheets** | Google Sheets icon | Destination | airbyte/destination-google-sheets:0.1.2 | alpha | [link](https://docs.airbyte.com/integrations/destinations/google-sheets) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-google-sheets) | `a4cbd2d1-8dbe-4818-b8bc-b90ad782d12a` | -| **Kafka** | Kafka icon | Destination | airbyte/destination-kafka:0.1.10 | alpha | [link](https://docs.airbyte.com/integrations/destinations/kafka) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-kafka) | `9f760101-60ae-462f-9ee6-b7a9dafd454d` | -| **Kinesis** | Kinesis icon | Destination | airbyte/destination-kinesis:0.1.5 | alpha | [link](https://docs.airbyte.com/integrations/destinations/kinesis) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-kinesis) | `6d1d66d4-26ab-4602-8d32-f85894b04955` | -| **Local CSV** | Local CSV icon | Destination | airbyte/destination-csv:1.0.0 | alpha | [link](https://docs.airbyte.com/integrations/destinations/local-csv) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-csv) | `8be1cf83-fde1-477f-a4ad-318d23c9f3c6` | -| **Local JSON** | Local JSON icon | Destination | airbyte/destination-local-json:0.2.11 | alpha | [link](https://docs.airbyte.com/integrations/destinations/local-json) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-local-json) | `a625d593-bba5-4a1c-a53d-2d246268a816` | -| **Local SQLite** | Local SQLite icon | Destination | airbyte/destination-sqlite:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/destinations/local-sqlite) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-sqlite) | `b76be0a6-27dc-4560-95f6-2623da0bd7b6` | -| **MQTT** | MQTT icon | Destination | airbyte/destination-mqtt:0.1.3 | alpha | [link](https://docs.airbyte.com/integrations/destinations/mqtt) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-mqtt) | `f3802bc4-5406-4752-9e8d-01e504ca8194` | -| **MS SQL Server** | MS SQL Server icon | Destination | airbyte/destination-mssql:0.1.23 | alpha | [link](https://docs.airbyte.com/integrations/destinations/mssql) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-mssql) | `d4353156-9217-4cad-8dd7-c108fd4f74cf` | -| **MariaDB ColumnStore** | MariaDB ColumnStore icon | Destination | airbyte/destination-mariadb-columnstore:0.1.7 | alpha | [link](https://docs.airbyte.com/integrations/destinations/mariadb-columnstore) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-mariadb-columnstore) | `294a4790-429b-40ae-9516-49826b9702e1` | -| **MeiliSearch** | MeiliSearch icon | Destination | airbyte/destination-meilisearch:1.0.0 | alpha | [link](https://docs.airbyte.com/integrations/destinations/meilisearch) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-meilisearch) | `af7c921e-5892-4ff2-b6c1-4a5ab258fb7e` | -| **MongoDB** | MongoDB icon | Destination | airbyte/destination-mongodb:0.1.9 | alpha | [link](https://docs.airbyte.com/integrations/destinations/mongodb) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-mongodb) | `8b746512-8c2e-6ac1-4adc-b59faafd473c` | -| **MySQL** | MySQL icon | Destination | airbyte/destination-mysql:0.1.20 | alpha | [link](https://docs.airbyte.com/integrations/destinations/mysql) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-mysql) | `ca81ee7c-3163-4246-af40-094cc31e5e42` | -| **Oracle** | Oracle icon | Destination | airbyte/destination-oracle:0.1.19 | alpha | [link](https://docs.airbyte.com/integrations/destinations/oracle) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-oracle) | `3986776d-2319-4de9-8af8-db14c0996e72` | -| **Postgres** | Postgres icon | Destination | airbyte/destination-postgres:0.3.27 | alpha | [link](https://docs.airbyte.com/integrations/destinations/postgres) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-postgres) | `25c5221d-dce2-4163-ade9-739ef790f503` | -| **Pulsar** | Pulsar icon | Destination | airbyte/destination-pulsar:0.1.3 | alpha | [link](https://docs.airbyte.com/integrations/destinations/pulsar) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-pulsar) | `2340cbba-358e-11ec-8d3d-0242ac130203` | -| **RabbitMQ** | RabbitMQ icon | Destination | airbyte/destination-rabbitmq:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/destinations/rabbitmq) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-rabbitmq) | `e06ad785-ad6f-4647-b2e8-3027a5c59454` | -| **Redis** | Redis icon | Destination | airbyte/destination-redis:0.1.4 | alpha | [link](https://docs.airbyte.com/integrations/destinations/redis) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-redis) | `d4d3fef9-e319-45c2-881a-bd02ce44cc9f` | -| **Redpanda** | Redpanda icon | Destination | airbyte/destination-redpanda:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/destinations/redpanda) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-redpanda) | `825c5ee3-ed9a-4dd1-a2b6-79ed722f7b13` | -| **Redshift** | Redshift icon | Destination | airbyte/destination-redshift:0.4.5 | beta | [link](https://docs.airbyte.com/integrations/destinations/redshift) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-redshift) | `f7a7d195-377f-cf5b-70a5-be6b819019dc` | -| **Rockset** | x | Destination | airbyte/destination-rockset:0.1.4 | alpha | [link](https://docs.airbyte.com/integrations/destinations/rockset) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-rockset) | `2c9d93a7-9a17-4789-9de9-f46f0097eb70` | -| **S3** | S3 icon | Destination | airbyte/destination-s3:0.3.23 | generally_available | [link](https://docs.airbyte.com/integrations/destinations/s3) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-s3) | `4816b78f-1489-44c1-9060-4b19d5fa9362` | -| **S3 Glue** | S3 Glue icon | Destination | airbyte/destination-s3-glue:0.1.5 | alpha | [link](https://docs.airbyte.com/integrations/destinations/s3-glue) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-s3-glue) | `471e5cab-8ed1-49f3-ba11-79c687784737` | -| **SFTP-JSON** | SFTP-JSON icon | Destination | airbyte/destination-sftp-json:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/destinations/sftp-json) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-sftp-json) | `e9810f61-4bab-46d2-bb22-edfc902e0644` | -| **Scylla** | Scylla icon | Destination | airbyte/destination-scylla:0.1.3 | alpha | [link](https://docs.airbyte.com/integrations/destinations/scylla) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-scylla) | `3dc6f384-cd6b-4be3-ad16-a41450899bf0` | -| **SelectDB** | SelectDB icon | Destination | airbyte/destination-selectdb:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/destinations/selectdb) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-selectdb) | `50a559a7-6323-4e33-8aa0-51dfd9dfadac` | -| **Snowflake** | Snowflake icon | Destination | airbyte/destination-snowflake:0.4.61 | generally_available | [link](https://docs.airbyte.com/integrations/destinations/snowflake) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-snowflake) | `424892c4-daac-4491-b35d-c6688ba547ba` | -| **Streamr** | Streamr icon | Destination | ghcr.io/devmate-cloud/streamr-airbyte-connectors:0.0.1 | alpha | [link](https://docs.airbyte.com/integrations/destinations/streamr) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/devmate-cloud) | `eebd85cf-60b2-4af6-9ba0-edeca01437b0` | -| **Teradata Vantage** | Teradata Vantage icon | Destination | airbyte/destination-teradata:0.1.1 | alpha | [link](https://docs.airbyte.io/integrations/destinations/teradata) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-teradata) | `58e6f9da-904e-11ed-a1eb-0242ac120002` | -| **TiDB** | TiDB icon | Destination | airbyte/destination-tidb:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/destinations/tidb) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-tidb) | `06ec60c7-7468-45c0-91ac-174f6e1a788b` | -| **Typesense** | Typesense icon | Destination | airbyte/destination-typesense:0.1.0 | alpha | [link](https://docs.airbyte.com/integrations/destinations/typesense) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-typesense) | `36be8dc6-9851-49af-b776-9d4c30e4ab6a` | -| **Weaviate** | Weaviate icon | Destination | airbyte/destination-weaviate:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/destinations/weaviate) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-weaviate) | `7b7d7a0d-954c-45a0-bcfc-39a634b97736` | -| **YugabyteDB** | YugabyteDB icon | Destination | airbyte/destination-yugabytedb:0.1.1 | alpha | [link](https://docs.airbyte.com/integrations/destinations/yugabytedb) | [code](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-yugabytedb) | `2300fdcf-a532-419f-9f24-a014336e7966` | \ No newline at end of file +| Name | Icon | Type | Image | Release Stage | Docs | Issues | Code | ID | +|----|----|----|----|----|----|----|----|----| +| **AWS Datalake** | AWS Datalake icon | Destination | airbyte/destination-aws-datalake:0.1.2 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/aws-datalake) | [connectors/destination/aws-datalake](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/aws-datalake) | [destination-aws-datalake](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-aws-datalake) | `99878c90-0fbd-46d3-9d98-ffde879d17fc` | +| **Amazon SQS** | Amazon SQS icon | Destination | airbyte/destination-amazon-sqs:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/amazon-sqs) | [connectors/destination/amazon-sqs](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/amazon-sqs) | [destination-amazon-sqs](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-amazon-sqs) | `0eeee7fb-518f-4045-bacc-9619e31c43ea` | +| **Apache Doris** | Apache Doris icon | Destination | airbyte/destination-doris:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/doris) | [connectors/destination/doris](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/doris) | [destination-doris](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-doris) | `05c161bf-ca73-4d48-b524-d392be417002` | +| **Apache Iceberg** | x | Destination | airbyte/destination-iceberg:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/iceberg) | [connectors/destination/iceberg](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/iceberg) | [destination-iceberg](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-iceberg) | `df65a8f3-9908-451b-aa9b-445462803560` | +| **Azure Blob Storage** | Azure Blob Storage icon | Destination | airbyte/destination-azure-blob-storage:0.2.0 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/azureblobstorage) | [connectors/destination/azure-blob-storage](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/azure-blob-storage) | [destination-azure-blob-storage](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-azure-blob-storage) | `b4c5d105-31fd-4817-96b6-cb923bfc04cb` | +| **BigQuery** | BigQuery icon | Destination | airbyte/destination-bigquery:1.2.20 | generally_available | [docs](https://docs.airbyte.com/integrations/destinations/bigquery) | [connectors/destination/bigquery](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/bigquery) | [destination-bigquery](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-bigquery) | `22f6c74f-5699-40ff-833c-4a879ea40133` | +| **BigQuery (denormalized typed struct)** | BigQuery (denormalized typed struct) icon | Destination | airbyte/destination-bigquery-denormalized:1.2.20 | beta | [docs](https://docs.airbyte.com/integrations/destinations/bigquery) | [connectors/destination/bigquery-denormalized](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/bigquery-denormalized) | [destination-bigquery-denormalized](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-bigquery-denormalized) | `079d5540-f236-4294-ba7c-ade8fd918496` | +| **Cassandra** | Cassandra icon | Destination | airbyte/destination-cassandra:0.1.4 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/cassandra) | [connectors/destination/cassandra](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/cassandra) | [destination-cassandra](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-cassandra) | `707456df-6f4f-4ced-b5c6-03f73bcad1c5` | +| **Chargify (Keen)** | Chargify (Keen) icon | Destination | airbyte/destination-keen:0.2.4 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/keen) | [connectors/destination/keen](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/keen) | [destination-keen](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-keen) | `81740ce8-d764-4ea7-94df-16bb41de36ae` | +| **Clickhouse** | Clickhouse icon | Destination | airbyte/destination-clickhouse:0.2.3 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/clickhouse) | [connectors/destination/clickhouse](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/clickhouse) | [destination-clickhouse](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-clickhouse) | `ce0d828e-1dc4-496c-b122-2da42e637e48` | +| **Cloudflare R2** | Cloudflare R2 icon | Destination | airbyte/destination-r2:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/r2) | [connectors/destination/r2](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/r2) | [destination-r2](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-r2) | `0fb07be9-7c3b-4336-850d-5efc006152ee` | +| **Convex** | Convex icon | Destination | airbyte/destination-convex:0.1.0 | alpha | [docs](https://docs.airbyte.io/integrations/destinations/convex) | [connectors/destination/convex](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/convex) | [destination-convex](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-convex) | `3eb4d99c-11fa-4561-a259-fc88e0c2f8f4` | +| **Databend** | Databend icon | Destination | airbyte/destination-databend:0.1.2 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/databend) | [connectors/destination/databend](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/databend) | [destination-databend](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-databend) | `302e4d8e-08d3-4098-acd4-ac67ca365b88` | +| **Databricks Lakehouse** | Databricks Lakehouse icon | Destination | airbyte/destination-databricks:1.0.0 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/databricks) | [connectors/destination/databricks](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/databricks) | [destination-databricks](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-databricks) | `072d5540-f236-4294-ba7c-ade8fd918496` | +| **DuckDB** | DuckDB icon | Destination | airbyte/destination-duckdb:0.1.0 | alpha | [docs](https://docs.airbyte.io/integrations/destinations/duckdb) | [connectors/destination/duckdb](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/duckdb) | [destination-duckdb](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-duckdb) | `94bd199c-2ff0-4aa2-b98e-17f0acb72610` | +| **DynamoDB** | DynamoDB icon | Destination | airbyte/destination-dynamodb:0.1.7 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/dynamodb) | [connectors/destination/dynamodb](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/dynamodb) | [destination-dynamodb](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-dynamodb) | `8ccd8909-4e99-4141-b48d-4984b70b2d89` | +| **E2E Testing** | E2E Testing icon | Destination | airbyte/destination-e2e-test:0.2.4 | unknown | [docs](https://docs.airbyte.com/integrations/destinations/e2e-test) | [connectors/destination/e2e-test](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/e2e-test) | [destination-e2e-test](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-e2e-test) | `2eb65e87-983a-4fd7-b3e3-9d9dc6eb8537` | +| **ElasticSearch** | ElasticSearch icon | Destination | airbyte/destination-elasticsearch:0.1.6 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/elasticsearch) | [connectors/destination/elasticsearch](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/elasticsearch) | [destination-elasticsearch](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-elasticsearch) | `68f351a7-2745-4bef-ad7f-996b8e51bb8c` | +| **Exasol** | x | Destination | airbyte/destination-exasol:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/exasol) | [connectors/destination/exasol](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/exasol) | [destination-exasol](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-exasol) | `bb6071d9-6f34-4766-bec2-d1d4ed81a653` | +| **Firebolt** | Firebolt icon | Destination | airbyte/destination-firebolt:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/firebolt) | [connectors/destination/firebolt](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/firebolt) | [destination-firebolt](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-firebolt) | `18081484-02a5-4662-8dba-b270b582f321` | +| **Google Cloud Storage (GCS)** | Google Cloud Storage (GCS) icon | Destination | airbyte/destination-gcs:0.2.16 | beta | [docs](https://docs.airbyte.com/integrations/destinations/gcs) | [connectors/destination/gcs](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/gcs) | [destination-gcs](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-gcs) | `ca8f6566-e555-4b40-943a-545bf123117a` | +| **Google Firestore** | Google Firestore icon | Destination | airbyte/destination-firestore:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/firestore) | [connectors/destination/firestore](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/firestore) | [destination-firestore](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-firestore) | `27dc7500-6d1b-40b1-8b07-e2f2aea3c9f4` | +| **Google PubSub** | Google PubSub icon | Destination | airbyte/destination-pubsub:0.2.0 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/pubsub) | [connectors/destination/pubsub](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/pubsub) | [destination-pubsub](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-pubsub) | `356668e2-7e34-47f3-a3b0-67a8a481b692` | +| **Google Sheets** | Google Sheets icon | Destination | airbyte/destination-google-sheets:0.1.2 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/google-sheets) | [connectors/destination/google-sheets](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/google-sheets) | [destination-google-sheets](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-google-sheets) | `a4cbd2d1-8dbe-4818-b8bc-b90ad782d12a` | +| **Kafka** | Kafka icon | Destination | airbyte/destination-kafka:0.1.10 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/kafka) | [connectors/destination/kafka](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/kafka) | [destination-kafka](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-kafka) | `9f760101-60ae-462f-9ee6-b7a9dafd454d` | +| **Kinesis** | Kinesis icon | Destination | airbyte/destination-kinesis:0.1.5 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/kinesis) | [connectors/destination/kinesis](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/kinesis) | [destination-kinesis](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-kinesis) | `6d1d66d4-26ab-4602-8d32-f85894b04955` | +| **Local CSV** | Local CSV icon | Destination | airbyte/destination-csv:1.0.0 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/local-csv) | [connectors/destination/csv](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/csv) | [destination-csv](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-csv) | `8be1cf83-fde1-477f-a4ad-318d23c9f3c6` | +| **Local JSON** | Local JSON icon | Destination | airbyte/destination-local-json:0.2.11 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/local-json) | [connectors/destination/local-json](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/local-json) | [destination-local-json](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-local-json) | `a625d593-bba5-4a1c-a53d-2d246268a816` | +| **Local SQLite** | Local SQLite icon | Destination | airbyte/destination-sqlite:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/local-sqlite) | [connectors/destination/sqlite](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/sqlite) | [destination-sqlite](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-sqlite) | `b76be0a6-27dc-4560-95f6-2623da0bd7b6` | +| **MQTT** | MQTT icon | Destination | airbyte/destination-mqtt:0.1.3 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/mqtt) | [connectors/destination/mqtt](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/mqtt) | [destination-mqtt](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-mqtt) | `f3802bc4-5406-4752-9e8d-01e504ca8194` | +| **MS SQL Server** | MS SQL Server icon | Destination | airbyte/destination-mssql:0.1.23 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/mssql) | [connectors/destination/mssql](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/mssql) | [destination-mssql](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-mssql) | `d4353156-9217-4cad-8dd7-c108fd4f74cf` | +| **MariaDB ColumnStore** | MariaDB ColumnStore icon | Destination | airbyte/destination-mariadb-columnstore:0.1.7 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/mariadb-columnstore) | [connectors/destination/mariadb-columnstore](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/mariadb-columnstore) | [destination-mariadb-columnstore](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-mariadb-columnstore) | `294a4790-429b-40ae-9516-49826b9702e1` | +| **MeiliSearch** | MeiliSearch icon | Destination | airbyte/destination-meilisearch:1.0.0 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/meilisearch) | [connectors/destination/meilisearch](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/meilisearch) | [destination-meilisearch](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-meilisearch) | `af7c921e-5892-4ff2-b6c1-4a5ab258fb7e` | +| **MongoDB** | MongoDB icon | Destination | airbyte/destination-mongodb:0.1.9 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/mongodb) | [connectors/destination/mongodb](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/mongodb) | [destination-mongodb](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-mongodb) | `8b746512-8c2e-6ac1-4adc-b59faafd473c` | +| **MySQL** | MySQL icon | Destination | airbyte/destination-mysql:0.1.20 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/mysql) | [connectors/destination/mysql](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/mysql) | [destination-mysql](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-mysql) | `ca81ee7c-3163-4246-af40-094cc31e5e42` | +| **Oracle** | Oracle icon | Destination | airbyte/destination-oracle:0.1.19 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/oracle) | [connectors/destination/oracle](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/oracle) | [destination-oracle](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-oracle) | `3986776d-2319-4de9-8af8-db14c0996e72` | +| **Postgres** | Postgres icon | Destination | airbyte/destination-postgres:0.3.27 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/postgres) | [connectors/destination/postgres](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/postgres) | [destination-postgres](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-postgres) | `25c5221d-dce2-4163-ade9-739ef790f503` | +| **Pulsar** | Pulsar icon | Destination | airbyte/destination-pulsar:0.1.3 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/pulsar) | [connectors/destination/pulsar](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/pulsar) | [destination-pulsar](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-pulsar) | `2340cbba-358e-11ec-8d3d-0242ac130203` | +| **RabbitMQ** | RabbitMQ icon | Destination | airbyte/destination-rabbitmq:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/rabbitmq) | [connectors/destination/rabbitmq](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/rabbitmq) | [destination-rabbitmq](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-rabbitmq) | `e06ad785-ad6f-4647-b2e8-3027a5c59454` | +| **Redis** | Redis icon | Destination | airbyte/destination-redis:0.1.4 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/redis) | [connectors/destination/redis](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/redis) | [destination-redis](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-redis) | `d4d3fef9-e319-45c2-881a-bd02ce44cc9f` | +| **Redpanda** | Redpanda icon | Destination | airbyte/destination-redpanda:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/redpanda) | [connectors/destination/redpanda](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/redpanda) | [destination-redpanda](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-redpanda) | `825c5ee3-ed9a-4dd1-a2b6-79ed722f7b13` | +| **Redshift** | Redshift icon | Destination | airbyte/destination-redshift:0.4.5 | beta | [docs](https://docs.airbyte.com/integrations/destinations/redshift) | [connectors/destination/redshift](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/redshift) | [destination-redshift](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-redshift) | `f7a7d195-377f-cf5b-70a5-be6b819019dc` | +| **Rockset** | x | Destination | airbyte/destination-rockset:0.1.4 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/rockset) | [connectors/destination/rockset](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/rockset) | [destination-rockset](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-rockset) | `2c9d93a7-9a17-4789-9de9-f46f0097eb70` | +| **S3** | S3 icon | Destination | airbyte/destination-s3:0.3.23 | generally_available | [docs](https://docs.airbyte.com/integrations/destinations/s3) | [connectors/destination/s3](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/s3) | [destination-s3](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-s3) | `4816b78f-1489-44c1-9060-4b19d5fa9362` | +| **S3 Glue** | S3 Glue icon | Destination | airbyte/destination-s3-glue:0.1.5 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/s3-glue) | [connectors/destination/s3-glue](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/s3-glue) | [destination-s3-glue](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-s3-glue) | `471e5cab-8ed1-49f3-ba11-79c687784737` | +| **SFTP-JSON** | SFTP-JSON icon | Destination | airbyte/destination-sftp-json:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/sftp-json) | [connectors/destination/sftp-json](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/sftp-json) | [destination-sftp-json](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-sftp-json) | `e9810f61-4bab-46d2-bb22-edfc902e0644` | +| **Scylla** | Scylla icon | Destination | airbyte/destination-scylla:0.1.3 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/scylla) | [connectors/destination/scylla](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/scylla) | [destination-scylla](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-scylla) | `3dc6f384-cd6b-4be3-ad16-a41450899bf0` | +| **SelectDB** | SelectDB icon | Destination | airbyte/destination-selectdb:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/selectdb) | [connectors/destination/selectdb](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/selectdb) | [destination-selectdb](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-selectdb) | `50a559a7-6323-4e33-8aa0-51dfd9dfadac` | +| **Snowflake** | Snowflake icon | Destination | airbyte/destination-snowflake:0.4.61 | generally_available | [docs](https://docs.airbyte.com/integrations/destinations/snowflake) | [connectors/destination/snowflake](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/snowflake) | [destination-snowflake](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-snowflake) | `424892c4-daac-4491-b35d-c6688ba547ba` | +| **Streamr** | Streamr icon | Destination | ghcr.io/devmate-cloud/streamr-airbyte-connectors:0.0.1 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/streamr) | [connectors/destination/devmate-cloud](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/devmate-cloud) | [devmate-cloud](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/devmate-cloud) | `eebd85cf-60b2-4af6-9ba0-edeca01437b0` | +| **Teradata Vantage** | Teradata Vantage icon | Destination | airbyte/destination-teradata:0.1.1 | alpha | [docs](https://docs.airbyte.io/integrations/destinations/teradata) | [connectors/destination/teradata](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/teradata) | [destination-teradata](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-teradata) | `58e6f9da-904e-11ed-a1eb-0242ac120002` | +| **TiDB** | TiDB icon | Destination | airbyte/destination-tidb:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/tidb) | [connectors/destination/tidb](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/tidb) | [destination-tidb](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-tidb) | `06ec60c7-7468-45c0-91ac-174f6e1a788b` | +| **Typesense** | Typesense icon | Destination | airbyte/destination-typesense:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/typesense) | [connectors/destination/typesense](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/typesense) | [destination-typesense](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-typesense) | `36be8dc6-9851-49af-b776-9d4c30e4ab6a` | +| **Weaviate** | Weaviate icon | Destination | airbyte/destination-weaviate:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/weaviate) | [connectors/destination/weaviate](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/weaviate) | [destination-weaviate](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-weaviate) | `7b7d7a0d-954c-45a0-bcfc-39a634b97736` | +| **YugabyteDB** | YugabyteDB icon | Destination | airbyte/destination-yugabytedb:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/destinations/yugabytedb) | [connectors/destination/yugabytedb](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/yugabytedb) | [destination-yugabytedb](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/destination-yugabytedb) | `2300fdcf-a532-419f-9f24-a014336e7966` | \ No newline at end of file From d1b72d5e80c17161c369a3bfa64df9caae049279 Mon Sep 17 00:00:00 2001 From: Davin Chia Date: Thu, 13 Apr 2023 15:47:31 -0700 Subject: [PATCH 061/187] Housekeeping: Remove unused workflows. (#25191) This is no longer used with Move's move to Zenhub. --- .../workflows/platform-workflow-labels.yml | 41 ------------------- 1 file changed, 41 deletions(-) delete mode 100644 .github/workflows/platform-workflow-labels.yml diff --git a/.github/workflows/platform-workflow-labels.yml b/.github/workflows/platform-workflow-labels.yml deleted file mode 100644 index 1cfc84310a85..000000000000 --- a/.github/workflows/platform-workflow-labels.yml +++ /dev/null @@ -1,41 +0,0 @@ -name: Platform Workflow Labels - -on: - issues: - types: [ labeled, unlabeled ] - -jobs: - label_issues: - if: ${{ github.event.action == 'labeled' && github.event.label.name == 'team/platform-move' }} - runs-on: ubuntu-latest - permissions: - issues: write - steps: - - name: Label Issue - uses: andymckay/labeler@1.0.4 - with: - add-labels: "platform-move/requires-grooming" - repo-token: ${{ secrets.GITHUB_TOKEN }} - - name: Add Issue To Project - uses: actions/add-to-project@v0.3.0 - with: - project-url: https://github.com/orgs/airbytehq/projects/25 - github-token: ${{ secrets.PLATFORM_WORKFLOW_PROJECT_AUTOMATION }} - unlabel_issues: - if: ${{ github.event.action == 'unlabeled' && github.event.label.name == 'team/platform-move' }} - runs-on: ubuntu-latest - permissions: - issues: write - steps: - - name: Unlabel Issue - uses: andymckay/labeler@1.0.4 - with: - remove-labels: "platform-move/requires-grooming" - repo-token: ${{ secrets.GITHUB_TOKEN }} - - name: Remove Issue From Project - uses: monry/actions-delete-issue-from-project@v2.0.1 - with: - github-token: ${{ secrets.PLATFORM_WORKFLOW_PROJECT_AUTOMATION }} - project-owner: airbytehq - project-number: 25 - issue-id: ${{ github.event.issue.node_id }} From 77e60bef1c39e053cf26b8d320e788d09f6e699e Mon Sep 17 00:00:00 2001 From: Cole Snodgrass Date: Thu, 13 Apr 2023 16:00:06 -0700 Subject: [PATCH 062/187] increase sentry heartbeat - 43200->64800 (#25185) * increase sentry heartbeat - 43200->64800 * Automated Change --------- Co-authored-by: colesnodgrass --- .../init-oss/src/main/resources/seed/oss_catalog.json | 2 +- .../init-oss/src/main/resources/seed/source_definitions.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json index dfaef0496bce..7fb37ecba2cc 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json @@ -27624,7 +27624,7 @@ "allowedHosts": { "hosts": [ "*" ] }, - "maxSecondsBetweenMessages": 43200 + "maxSecondsBetweenMessages": 64800 }, { "sourceDefinitionId": "3dc3037c-5ce8-4661-adc2-f7a9e3c5ece5", "name": "Zuora", diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml index 95461bdadb9e..357a3b10b582 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml @@ -2428,7 +2428,7 @@ allowedHosts: hosts: - "*" - maxSecondsBetweenMessages: 43200 + maxSecondsBetweenMessages: 64800 - name: Zuora sourceDefinitionId: 3dc3037c-5ce8-4661-adc2-f7a9e3c5ece5 dockerRepository: airbyte/source-zuora From abf2c19f6da9e389b2e498e21a814eb2da0bd166 Mon Sep 17 00:00:00 2001 From: timroes Date: Fri, 14 Apr 2023 08:03:22 +0000 Subject: [PATCH 063/187] Bump Airbyte version from 0.43.2 to 0.44.0 --- .bumpversion.cfg | 2 +- .env | 2 +- docs/operator-guides/upgrading-airbyte.md | 2 +- flags.yml | 2 ++ gradle.properties | 2 +- octavia-cli/Dockerfile | 2 +- octavia-cli/README.md | 2 +- octavia-cli/install.sh | 2 +- octavia-cli/setup.py | 2 +- 9 files changed, 10 insertions(+), 8 deletions(-) diff --git a/.bumpversion.cfg b/.bumpversion.cfg index b1c362312671..44430afc19b0 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.43.2 +current_version = 0.44.0 commit = False tag = False parse = (?P\d+)\.(?P\d+)\.(?P\d+)(\-[a-z]+)? diff --git a/.env b/.env index 6e0399555de1..c4f298318f38 100644 --- a/.env +++ b/.env @@ -10,7 +10,7 @@ ### SHARED ### -VERSION=0.43.2 +VERSION=0.44.0 # When using the airbyte-db via default docker image CONFIG_ROOT=/data diff --git a/docs/operator-guides/upgrading-airbyte.md b/docs/operator-guides/upgrading-airbyte.md index 446e42a0f3c5..5eba6572d1f3 100644 --- a/docs/operator-guides/upgrading-airbyte.md +++ b/docs/operator-guides/upgrading-airbyte.md @@ -109,7 +109,7 @@ If you are upgrading from (i.e. your current version of Airbyte is) Airbyte vers Here's an example of what it might look like with the values filled in. It assumes that the downloaded `airbyte_archive.tar.gz` is in `/tmp`. ```bash - docker run --rm -v /tmp:/config airbyte/migration:0.43.2 --\ + docker run --rm -v /tmp:/config airbyte/migration:0.44.0 --\ --input /config/airbyte_archive.tar.gz\ --output /config/airbyte_archive_migrated.tar.gz ``` diff --git a/flags.yml b/flags.yml index 032f2836bf03..9b468b5ba11d 100644 --- a/flags.yml +++ b/flags.yml @@ -11,3 +11,5 @@ flags: serve: false - name: heartbeat-max-seconds-between-messages serve: "10800" + - name: validation.removeValidationLimit + serve: false diff --git a/gradle.properties b/gradle.properties index fab9b9655592..12bf0a4cd9f8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -VERSION=0.43.2 +VERSION=0.44.0 # NOTE: some of these values are overwritten in CI! # NOTE: if you want to override this for your local machine, set overrides in ~/.gradle/gradle.properties diff --git a/octavia-cli/Dockerfile b/octavia-cli/Dockerfile index 5639fab96511..285646c9c83a 100644 --- a/octavia-cli/Dockerfile +++ b/octavia-cli/Dockerfile @@ -14,5 +14,5 @@ USER octavia-cli WORKDIR /home/octavia-project ENTRYPOINT ["octavia"] -LABEL io.airbyte.version=0.43.2 +LABEL io.airbyte.version=0.44.0 LABEL io.airbyte.name=airbyte/octavia-cli diff --git a/octavia-cli/README.md b/octavia-cli/README.md index 36160940be9f..d71556008f9b 100644 --- a/octavia-cli/README.md +++ b/octavia-cli/README.md @@ -104,7 +104,7 @@ This script: ```bash touch ~/.octavia # Create a file to store env variables that will be mapped the octavia-cli container mkdir my_octavia_project_directory # Create your octavia project directory where YAML configurations will be stored. -docker run --name octavia-cli -i --rm -v my_octavia_project_directory:/home/octavia-project --network host --user $(id -u):$(id -g) --env-file ~/.octavia airbyte/octavia-cli:0.43.2 +docker run --name octavia-cli -i --rm -v my_octavia_project_directory:/home/octavia-project --network host --user $(id -u):$(id -g) --env-file ~/.octavia airbyte/octavia-cli:0.44.0 ``` ### Using `docker-compose` diff --git a/octavia-cli/install.sh b/octavia-cli/install.sh index 02d99e6d390d..8f07012a190b 100755 --- a/octavia-cli/install.sh +++ b/octavia-cli/install.sh @@ -3,7 +3,7 @@ # This install scripts currently only works for ZSH and Bash profiles. # It creates an octavia alias in your profile bound to a docker run command and your current user. -VERSION=0.43.2 +VERSION=0.44.0 OCTAVIA_ENV_FILE=${HOME}/.octavia detect_profile() { diff --git a/octavia-cli/setup.py b/octavia-cli/setup.py index 960dcc259191..f0b5f74f1d7c 100644 --- a/octavia-cli/setup.py +++ b/octavia-cli/setup.py @@ -15,7 +15,7 @@ setup( name="octavia-cli", - version="0.43.2", + version="0.44.0", description="A command line interface to manage Airbyte configurations", long_description=README, author="Airbyte", From 961fe9983ae1bd714354a465102518300861339a Mon Sep 17 00:00:00 2001 From: Augustin Date: Fri, 14 Apr 2023 10:41:03 +0200 Subject: [PATCH 064/187] dagger CI: auth to dockerhub (#25196) * auth to dockerhub sometime * map docker hub username and password to env var * Revert "auth to dockerhub sometime" This reverts commit d82bf8813a0ad276cd54ab2232e821379323f8b6. * Revert "Revert "auth to dockerhub sometime"" This reverts commit bc9bc61d407e421d9ba9ce97d38092301448e6bf. * login to dockerhub * login to dockerhub * revert changes --- .github/actions/run-dagger-pipeline/action.yml | 5 +++++ .../workflows/connector_integration_test_single_dagger.yml | 5 +++++ .github/workflows/connector_nightly_builds_dagger.yml | 5 +++++ 3 files changed, 15 insertions(+) diff --git a/.github/actions/run-dagger-pipeline/action.yml b/.github/actions/run-dagger-pipeline/action.yml index dca73bbb168e..58aed6f62d66 100644 --- a/.github/actions/run-dagger-pipeline/action.yml +++ b/.github/actions/run-dagger-pipeline/action.yml @@ -17,6 +17,11 @@ runs: id: get-start-timestamp run: echo "::set-output name=start-timestamp::$(date +%s)" shell: bash + - name: Login to DockerHub + run: "docker login -u ${DOCKER_HUB_USERNAME} -p ${DOCKER_HUB_PASSWORD}" + env: + DOCKER_HUB_USERNAME: ${{ secrets.DOCKER_HUB_USERNAME }} + DOCKER_HUB_PASSWORD: ${{ secrets.DOCKER_HUB_PASSWORD }} - name: Checkout Airbyte uses: actions/checkout@v3 with: diff --git a/.github/workflows/connector_integration_test_single_dagger.yml b/.github/workflows/connector_integration_test_single_dagger.yml index 56a849133f49..44b9285a8d28 100644 --- a/.github/workflows/connector_integration_test_single_dagger.yml +++ b/.github/workflows/connector_integration_test_single_dagger.yml @@ -19,6 +19,11 @@ jobs: - name: Get start timestamp id: get-start-timestamp run: echo "::set-output name=start-timestamp::$(date +%s)" + - name: Login to DockerHub + run: "docker login -u ${DOCKER_HUB_USERNAME} -p ${DOCKER_HUB_PASSWORD}" + env: + DOCKER_HUB_USERNAME: ${{ secrets.DOCKER_HUB_USERNAME }} + DOCKER_HUB_PASSWORD: ${{ secrets.DOCKER_HUB_PASSWORD }} - name: Checkout Airbyte uses: actions/checkout@v3 with: diff --git a/.github/workflows/connector_nightly_builds_dagger.yml b/.github/workflows/connector_nightly_builds_dagger.yml index 9723ec484d92..e43125995a1c 100644 --- a/.github/workflows/connector_nightly_builds_dagger.yml +++ b/.github/workflows/connector_nightly_builds_dagger.yml @@ -25,6 +25,11 @@ jobs: - name: Get start timestamp id: get-start-timestamp run: echo "::set-output name=start-timestamp::$(date +%s)" + - name: Login to DockerHub + run: "docker login -u ${DOCKER_HUB_USERNAME} -p ${DOCKER_HUB_PASSWORD}" + env: + DOCKER_HUB_USERNAME: ${{ secrets.DOCKER_HUB_USERNAME }} + DOCKER_HUB_PASSWORD: ${{ secrets.DOCKER_HUB_PASSWORD }} - name: Checkout Airbyte uses: actions/checkout@v3 with: From 3b911bcc04f60039e0e42c1d202ce06918474243 Mon Sep 17 00:00:00 2001 From: Augustin Date: Fri, 14 Apr 2023 12:40:49 +0200 Subject: [PATCH 065/187] airbyte-ci: orchestrate the upload of modified metadata.yaml files to GCS (#25044) --- .../metadata_upload_manifest_dagger.yml | 22 +++++ .../lib/metadata_service/commands.py | 3 +- .../lib/tests/test_commands.py | 4 +- .../ci_connector_ops/pipelines/README.md | 7 +- .../pipelines/actions/environments.py | 1 + .../pipelines/commands/airbyte_ci.py | 11 ++- .../pipelines/commands/groups/connectors.py | 2 +- .../pipelines/commands/groups/metadata.py | 79 +++++++++++---- .../ci_connector_ops/pipelines/contexts.py | 1 + .../pipelines/pipelines/metadata.py | 98 +++++++++++++++++-- .../ci_connector_ops/pipelines/utils.py | 75 +++++++++++--- tools/ci_connector_ops/setup.py | 1 + 12 files changed, 259 insertions(+), 45 deletions(-) create mode 100644 .github/workflows/metadata_upload_manifest_dagger.yml diff --git a/.github/workflows/metadata_upload_manifest_dagger.yml b/.github/workflows/metadata_upload_manifest_dagger.yml new file mode 100644 index 000000000000..8f46252ffb77 --- /dev/null +++ b/.github/workflows/metadata_upload_manifest_dagger.yml @@ -0,0 +1,22 @@ +name: Upload modified metadata files to GCS + +on: + push: + branches: + - master +jobs: + upload_modified_metadata_files_to_gcs: + name: Upload modified metadata files to GCS + runs-on: medium-runner + steps: + - name: Checkout Airbyte + uses: actions/checkout@v2 + - name: Run metadata upload pipeline + id: metadata-upload-pipeline + uses: ./.github/actions/run-dagger-pipeline + with: + subcommand: "metadata upload dev-airbyte-cloud-connector-metadata-service" + context: "master" + env: + CI_GITHUB_ACCESS_TOKEN: ${{ secrets.GH_PAT_MAINTENANCE_OCTAVIA }} + GCS_CREDENTIALS: ${{ secrets.METADATA_SERVICE_DEV_GCS_CREDENTIALS }} diff --git a/airbyte-ci/connectors/metadata_service/lib/metadata_service/commands.py b/airbyte-ci/connectors/metadata_service/lib/metadata_service/commands.py index 32668cfc58b5..a382b5979281 100644 --- a/airbyte-ci/connectors/metadata_service/lib/metadata_service/commands.py +++ b/airbyte-ci/connectors/metadata_service/lib/metadata_service/commands.py @@ -4,7 +4,6 @@ import pathlib import click - from metadata_service.gcs_upload import upload_metadata_to_gcs from metadata_service.validators.metadata_validator import validate_metadata_file from pydantic import ValidationError @@ -46,5 +45,7 @@ def upload(metadata_file_path: pathlib.Path, bucket_name: str, service_account_f exit(1) if uploaded: click.secho(f"The metadata file {metadata_file_path} was uploaded to {blob_id}.", color="green") + exit(0) else: click.secho(f"The metadata file {metadata_file_path} was not uploaded.", color="yellow") + exit(5) diff --git a/airbyte-ci/connectors/metadata_service/lib/tests/test_commands.py b/airbyte-ci/connectors/metadata_service/lib/tests/test_commands.py index ee6036ebafb9..35019919d940 100644 --- a/airbyte-ci/connectors/metadata_service/lib/tests/test_commands.py +++ b/airbyte-ci/connectors/metadata_service/lib/tests/test_commands.py @@ -45,11 +45,13 @@ def test_upload(mocker, valid_metadata_yaml_files, uploaded): result = runner.invoke( commands.upload, [metadata_file_path, "my-bucket", "-sa", metadata_file_path] ) # Using valid_metadata_yaml_files[0] as SA because it exists... - assert result.exit_code == 0 if uploaded: commands.click.secho.assert_called_with(f"The metadata file {metadata_file_path} was uploaded to blob_id.", color="green") + assert result.exit_code == 0 else: commands.click.secho.assert_called_with(f"The metadata file {metadata_file_path} was not uploaded.", color="yellow") + # We exit with 5 status code to share with the CI pipeline that the upload was skipped. + assert result.exit_code == 5 @pytest.mark.parametrize( diff --git a/tools/ci_connector_ops/ci_connector_ops/pipelines/README.md b/tools/ci_connector_ops/ci_connector_ops/pipelines/README.md index 0d34b2dc1a0b..eca36d65d39f 100644 --- a/tools/ci_connector_ops/ci_connector_ops/pipelines/README.md +++ b/tools/ci_connector_ops/ci_connector_ops/pipelines/README.md @@ -125,7 +125,7 @@ The new metadata service also uses dagger for its reproducible CI pipeline. To see all available commands run ```bash -airbyte-ci metadata-service --help +airbyte-ci metadata --help ``` For example to run the unit tests for the metadata service library you can run @@ -133,6 +133,11 @@ For example to run the unit tests for the metadata service library you can run airbyte-ci metadata test lib ``` +For example to upload all the connector metadata files to GCS: +```bash +# You should set a valid JSON service account in the GCS_CREDENTIALS env var before uploading the files. +airbyte-ci metadata upload --all +``` ## Questions for the Dagger team ### Remaining questions: diff --git a/tools/ci_connector_ops/ci_connector_ops/pipelines/actions/environments.py b/tools/ci_connector_ops/ci_connector_ops/pipelines/actions/environments.py index e0d83d353b0f..20d97acb4f1c 100644 --- a/tools/ci_connector_ops/ci_connector_ops/pipelines/actions/environments.py +++ b/tools/ci_connector_ops/ci_connector_ops/pipelines/actions/environments.py @@ -15,6 +15,7 @@ if TYPE_CHECKING: from ci_connector_ops.pipelines.contexts import ConnectorTestContext, PipelineContext + PYPROJECT_TOML_FILE_PATH = "pyproject.toml" CONNECTOR_TESTING_REQUIREMENTS = [ diff --git a/tools/ci_connector_ops/ci_connector_ops/pipelines/commands/airbyte_ci.py b/tools/ci_connector_ops/ci_connector_ops/pipelines/commands/airbyte_ci.py index 5359b9b1fc05..643f3a211848 100644 --- a/tools/ci_connector_ops/ci_connector_ops/pipelines/commands/airbyte_ci.py +++ b/tools/ci_connector_ops/ci_connector_ops/pipelines/commands/airbyte_ci.py @@ -6,7 +6,13 @@ import click from ci_connector_ops.pipelines.contexts import CIContext -from ci_connector_ops.pipelines.utils import get_current_epoch_time, get_current_git_branch, get_current_git_revision, get_modified_files +from ci_connector_ops.pipelines.utils import ( + get_current_epoch_time, + get_current_git_branch, + get_current_git_revision, + get_modified_files_in_branch, + get_modified_files_in_commit, +) from .groups.connectors import connectors from .groups.metadata import metadata @@ -46,7 +52,8 @@ def airbyte_ci( ) ctx.obj["ci_context"] = ci_context ctx.obj["pipeline_start_timestamp"] = pipeline_start_timestamp - ctx.obj["modified_files"] = get_modified_files(git_branch, git_revision, diffed_branch, is_local) + ctx.obj["modified_files_in_branch"] = get_modified_files_in_branch(git_branch, git_revision, diffed_branch, is_local) + ctx.obj["modified_files_in_commit"] = get_modified_files_in_commit(git_branch, git_revision, is_local) airbyte_ci.add_command(connectors) diff --git a/tools/ci_connector_ops/ci_connector_ops/pipelines/commands/groups/connectors.py b/tools/ci_connector_ops/ci_connector_ops/pipelines/commands/groups/connectors.py index ed1701abd8d6..a41216b837db 100644 --- a/tools/ci_connector_ops/ci_connector_ops/pipelines/commands/groups/connectors.py +++ b/tools/ci_connector_ops/ci_connector_ops/pipelines/commands/groups/connectors.py @@ -108,7 +108,7 @@ def test( connector_name (str): The connector technical name. E.G. source-pokeapi """ connectors_under_test = get_all_released_connectors() - modified_connectors = get_modified_connectors(ctx.obj["modified_files"]) + modified_connectors = get_modified_connectors(ctx.obj["modified_files_in_branch"]) if modified: connectors_under_test = modified_connectors else: diff --git a/tools/ci_connector_ops/ci_connector_ops/pipelines/commands/groups/metadata.py b/tools/ci_connector_ops/ci_connector_ops/pipelines/commands/groups/metadata.py index c7746e8294e0..31d2ffe11a7a 100644 --- a/tools/ci_connector_ops/ci_connector_ops/pipelines/commands/groups/metadata.py +++ b/tools/ci_connector_ops/ci_connector_ops/pipelines/commands/groups/metadata.py @@ -1,18 +1,19 @@ -import click -import anyio +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# import logging -from rich.logging import RichHandler - +import anyio +import click +from ci_connector_ops.pipelines.contexts import CIContext from ci_connector_ops.pipelines.pipelines.metadata import ( run_metadata_lib_test_pipeline, run_metadata_orchestrator_test_pipeline, + run_metadata_upload_pipeline, run_metadata_validation_pipeline, ) -from ci_connector_ops.pipelines.utils import ( - DaggerPipelineCommand, - get_modified_connectors, -) +from ci_connector_ops.pipelines.utils import DaggerPipelineCommand, get_all_metadata_files, get_modified_metadata_files +from rich.logging import RichHandler logging.basicConfig(level=logging.INFO, format="%(name)s: %(message)s", datefmt="[%X]", handlers=[RichHandler(rich_tracebacks=True)]) logger = logging.getLogger(__name__) @@ -30,29 +31,69 @@ def metadata(ctx: click.Context): @metadata.command(cls=DaggerPipelineCommand, help="Commands related to validating the metadata files.") +@click.option("--modified-only/--all", default=True) @click.pass_context -def validate(ctx: click.Context): - modified_files = ctx.obj["modified_files"] - modified_connectors = get_modified_connectors(modified_files) +def validate(ctx: click.Context, modified_only: bool): + if modified_only: + modified_files = ctx.obj["modified_files_in_branch"] + metadata_to_validate = get_modified_metadata_files(modified_files) + if not metadata_to_validate: + click.secho("No modified metadata found. Skipping metadata validation.") + return + else: + click.secho("Will run metadata validation on all the metadata files found in the repo.") + metadata_to_validate = get_all_metadata_files() + + click.secho(f"Will validate {len(metadata_to_validate)} metadata files.") + + return anyio.run( + run_metadata_validation_pipeline, + ctx.obj["is_local"], + ctx.obj["git_branch"], + ctx.obj["git_revision"], + ctx.obj.get("gha_workflow_run_url"), + ctx.obj.get("pipeline_start_timestamp"), + ctx.obj.get("ci_context"), + metadata_to_validate, + ) - if not modified_connectors: - click.secho("No modified connectors found. Skipping metadata validation.") - return - metadata_connectors = [connector.technical_name for connector in modified_connectors] - metadata_source_paths = [connector.code_directory for connector in modified_connectors] +# UPLOAD COMMAND - click.secho(f"Validating metadata for the following connectors: {', '.join(metadata_connectors)}") + +@metadata.command(cls=DaggerPipelineCommand, help="Commands related to uploading the metadata files to remote storage.") +@click.argument("gcs-bucket-name", type=click.STRING) +@click.option( + "--gcs-credentials", help="Credentials in JSON format with permission to get and upload on the GCS bucket", envvar="GCS_CREDENTIALS" +) +@click.option("--modified-only/--all", default=True) +@click.pass_context +def upload(ctx: click.Context, gcs_bucket_name: str, gcs_credentials: str, modified_only: bool): + if modified_only: + if ctx.obj["ci_context"] is not CIContext.MASTER and ctx.obj["git_branch"] != "master": + click.secho("Not on the master branch. Skipping metadata upload.") + return + modified_files = ctx.obj["modified_files_in_commit"] + metadata_to_upload = get_modified_metadata_files(modified_files) + if not metadata_to_upload: + click.secho("No modified metadata found. Skipping metadata upload.") + return + else: + metadata_to_upload = get_all_metadata_files() + + click.secho(f"Will upload {len(metadata_to_upload)} metadata files.") return anyio.run( - run_metadata_validation_pipeline, + run_metadata_upload_pipeline, ctx.obj["is_local"], ctx.obj["git_branch"], ctx.obj["git_revision"], ctx.obj.get("gha_workflow_run_url"), ctx.obj.get("pipeline_start_timestamp"), ctx.obj.get("ci_context"), - metadata_source_paths, + metadata_to_upload, + gcs_bucket_name, + gcs_credentials, ) diff --git a/tools/ci_connector_ops/ci_connector_ops/pipelines/contexts.py b/tools/ci_connector_ops/ci_connector_ops/pipelines/contexts.py index c970524adcf0..09dd70ac95b7 100644 --- a/tools/ci_connector_ops/ci_connector_ops/pipelines/contexts.py +++ b/tools/ci_connector_ops/ci_connector_ops/pipelines/contexts.py @@ -28,6 +28,7 @@ class CIContext(str, Enum): MANUAL = "manual" PULL_REQUEST = "pull_request" NIGHTLY_BUILDS = "nightly_builds" + MASTER = "master" class ContextState(Enum): diff --git a/tools/ci_connector_ops/ci_connector_ops/pipelines/pipelines/metadata.py b/tools/ci_connector_ops/ci_connector_ops/pipelines/pipelines/metadata.py index e1caa509d8c7..42a31c198849 100644 --- a/tools/ci_connector_ops/ci_connector_ops/pipelines/pipelines/metadata.py +++ b/tools/ci_connector_ops/ci_connector_ops/pipelines/pipelines/metadata.py @@ -1,6 +1,7 @@ # # Copyright (c) 2023 Airbyte, Inc., all rights reserved. # +import uuid from pathlib import Path from typing import Optional, Set @@ -8,7 +9,7 @@ from ci_connector_ops.pipelines.actions.environments import with_poetry_module from ci_connector_ops.pipelines.bases import Step, StepStatus, TestReport from ci_connector_ops.pipelines.contexts import PipelineContext -from ci_connector_ops.pipelines.utils import DAGGER_CONFIG, execute_concurrently +from ci_connector_ops.pipelines.utils import DAGGER_CONFIG, METADATA_FILE_NAME, execute_concurrently METADATA_DIR = "airbyte-ci/connectors/metadata_service" METADATA_LIB_MODULE_PATH = "lib" @@ -28,14 +29,56 @@ async def _run(self, poetry_run_args: list) -> StepStatus: return await self.get_step_result(poetry_run_exec) +def get_metadata_file_from_path(context: PipelineContext, metadata_path: Path) -> dagger.File: + if metadata_path.is_file() and metadata_path.name != METADATA_FILE_NAME: + breakpoint() + raise ValueError(f"The metadata file name is not {METADATA_FILE_NAME}, it is {metadata_path.name} .") + if metadata_path.is_dir(): + metadata_path = metadata_path / METADATA_FILE_NAME + if not metadata_path.exists(): + raise FileNotFoundError(f"{str(metadata_path)} does not exist.") + return context.get_repo_dir(str(metadata_path.parent), include=[METADATA_FILE_NAME]).file(METADATA_FILE_NAME) + + class MetadataValidation(PoetryRun): - def __init__(self, context: PipelineContext, metadata_file_path: Path): - super().__init__(context, f"Validate {metadata_file_path}", METADATA_DIR, METADATA_LIB_MODULE_PATH) - self.metadata_file = self.context.get_repo_dir(str(metadata_file_path), include=["metadata.yaml"]).file("metadata.yaml") - self.poetry_run_container = self.poetry_run_container.with_mounted_file("metadata.yaml", self.metadata_file) + def __init__(self, context: PipelineContext, metadata_path: Path): + title = f"Validate {metadata_path}" + super().__init__(context, title, METADATA_DIR, METADATA_LIB_MODULE_PATH) + self.poetry_run_container = self.poetry_run_container.with_mounted_file( + METADATA_FILE_NAME, get_metadata_file_from_path(context, metadata_path) + ) + + async def _run(self) -> StepStatus: + return await super()._run(["metadata_service", "validate", METADATA_FILE_NAME]) + + +class MetadataUpload(PoetryRun): + + GCS_CREDENTIALS_CONTAINER_PATH = "gcs_credentials.json" + + def __init__(self, context: PipelineContext, metadata_path: Path, gcs_bucket_name: str, gcs_credentials: str): + title = f"Upload {metadata_path}" + self.gcs_bucket_name = gcs_bucket_name + super().__init__(context, title, METADATA_DIR, METADATA_LIB_MODULE_PATH) + self.poetry_run_container = ( + self.poetry_run_container.with_file(METADATA_FILE_NAME, get_metadata_file_from_path(context, metadata_path)).with_new_file( + self.GCS_CREDENTIALS_CONTAINER_PATH, gcs_credentials + ) + # The cache buster ensures we always run the upload command (in case of remote bucket change) + .with_env_variable("CACHEBUSTER", str(uuid.uuid4())) + ) async def _run(self) -> StepStatus: - return await super()._run(["metadata_service", "validate", "metadata.yaml"]) + return await super()._run( + [ + "metadata_service", + "upload", + METADATA_FILE_NAME, + self.gcs_bucket_name, + "--service-account-file-path", + self.GCS_CREDENTIALS_CONTAINER_PATH, + ] + ) async def run_metadata_validation_pipeline( @@ -45,7 +88,7 @@ async def run_metadata_validation_pipeline( gha_workflow_run_url: Optional[str], pipeline_start_timestamp: Optional[int], ci_context: Optional[str], - metadata_source_paths: Set[Path], + metadata_to_validate: Set[Path], ) -> bool: metadata_pipeline_context = PipelineContext( pipeline_name="Metadata Service Validation Pipeline", @@ -60,9 +103,9 @@ async def run_metadata_validation_pipeline( async with dagger.Connection(DAGGER_CONFIG) as dagger_client: metadata_pipeline_context.dagger_client = dagger_client.pipeline(metadata_pipeline_context.pipeline_name) async with metadata_pipeline_context: - validation_steps = [MetadataValidation(metadata_pipeline_context, metadata_path).run for metadata_path in metadata_source_paths] + validation_steps = [MetadataValidation(metadata_pipeline_context, metadata_path).run for metadata_path in metadata_to_validate] - results = await execute_concurrently(validation_steps, concurrency=len(validation_steps)) + results = await execute_concurrently(validation_steps, concurrency=10) metadata_pipeline_context.test_report = TestReport(pipeline_context=metadata_pipeline_context, steps_results=results) return metadata_pipeline_context.test_report.success @@ -132,3 +175,40 @@ async def run_metadata_orchestrator_test_pipeline( metadata_pipeline_context.test_report = TestReport(pipeline_context=metadata_pipeline_context, steps_results=[result]) return metadata_pipeline_context.test_report.success + + +async def run_metadata_upload_pipeline( + is_local: bool, + git_branch: str, + git_revision: str, + gha_workflow_run_url: Optional[str], + pipeline_start_timestamp: Optional[int], + ci_context: Optional[str], + metadata_to_upload: Set[Path], + gcs_bucket_name: str, + gcs_credentials: str, +) -> bool: + pipeline_context = PipelineContext( + pipeline_name="Metadata Upload Pipeline", + is_local=is_local, + git_branch=git_branch, + git_revision=git_revision, + gha_workflow_run_url=gha_workflow_run_url, + pipeline_start_timestamp=pipeline_start_timestamp, + ci_context=ci_context, + ) + + async with dagger.Connection(DAGGER_CONFIG) as dagger_client: + pipeline_context.dagger_client = dagger_client.pipeline(pipeline_context.pipeline_name) + + async with pipeline_context: + + results = await execute_concurrently( + [ + MetadataUpload(pipeline_context, metadata_path, gcs_bucket_name, gcs_credentials).run + for metadata_path in metadata_to_upload + ] + ) + pipeline_context.test_report = TestReport(pipeline_context, results) + + return pipeline_context.test_report.success diff --git a/tools/ci_connector_ops/ci_connector_ops/pipelines/utils.py b/tools/ci_connector_ops/ci_connector_ops/pipelines/utils.py index aed7e1508eae..9f94f80fc86d 100644 --- a/tools/ci_connector_ops/ci_connector_ops/pipelines/utils.py +++ b/tools/ci_connector_ops/ci_connector_ops/pipelines/utils.py @@ -8,6 +8,7 @@ import re import sys import unicodedata +from glob import glob from pathlib import Path from typing import Any, Callable, List, Optional, Set @@ -17,9 +18,11 @@ import git from ci_connector_ops.utils import DESTINATION_CONNECTOR_PATH_PREFIX, SOURCE_CONNECTOR_PATH_PREFIX, Connector, get_connector_name_from_path from dagger import Config, Connection, Container, DaggerError, File, QueryError +from more_itertools import chunked DAGGER_CONFIG = Config(log_output=sys.stderr) AIRBYTE_REPO_URL = "https://github.com/airbytehq/airbyte.git" +METADATA_FILE_NAME = "metadata.yaml" # This utils will probably be redundant once https://github.com/dagger/dagger/issues/3764 is implemented @@ -122,7 +125,9 @@ def get_current_epoch_time() -> int: # noqa D103 return round(datetime.datetime.utcnow().timestamp()) -async def get_modified_files_remote(current_git_branch: str, current_git_revision: str, diffed_branch: str = "origin/master") -> Set[str]: +async def get_modified_files_in_branch_remote( + current_git_branch: str, current_git_revision: str, diffed_branch: str = "origin/master" +) -> Set[str]: """Use git diff to spot the modified files on the remote branch.""" async with Connection(DAGGER_CONFIG) as dagger_client: modified_files = await ( @@ -151,19 +156,58 @@ async def get_modified_files_remote(current_git_branch: str, current_git_revisio return set(modified_files.split("\n")) -def get_modified_files_local(current_git_revision: str, diffed_branch: str = "master") -> Set[str]: +def get_modified_files_in_branch_local(current_git_revision: str, diffed_branch: str = "master") -> Set[str]: """Use git diff to spot the modified files on the local branch.""" airbyte_repo = git.Repo() modified_files = airbyte_repo.git.diff("--diff-filter=MA", "--name-only", f"{diffed_branch}...{current_git_revision}").split("\n") return set(modified_files) -def get_modified_files(current_git_branch: str, current_git_revision: str, diffed_branch: str, is_local: bool = True) -> Set[str]: +def get_modified_files_in_branch(current_git_branch: str, current_git_revision: str, diffed_branch: str, is_local: bool = True) -> Set[str]: """Retrieve the list of modified files on the branch.""" if is_local: - return get_modified_files_local(current_git_revision, diffed_branch) + return get_modified_files_in_branch_local(current_git_revision, diffed_branch) else: - return anyio.run(get_modified_files_remote, current_git_branch, current_git_revision, diffed_branch) + return anyio.run(get_modified_files_in_branch_remote, current_git_branch, current_git_revision, diffed_branch) + + +async def get_modified_files_in_commit_remote(current_git_branch: str, current_git_revision: str) -> Set[str]: + async with Connection(DAGGER_CONFIG) as dagger_client: + modified_files = await ( + dagger_client.container() + .from_("alpine/git:latest") + .with_workdir("/repo") + .with_exec(["init"]) + .with_env_variable("CACHEBUSTER", current_git_revision) + .with_exec( + [ + "remote", + "add", + "--fetch", + "--track", + current_git_branch, + "origin", + AIRBYTE_REPO_URL, + ] + ) + .with_exec(["checkout", "-t", f"origin/{current_git_branch}"]) + .with_exec(["diff-tree", "--no-commit-id", "--name-only", current_git_revision, "-r"]) + .stdout() + ) + return set(modified_files.split("\n")) + + +def get_modified_files_in_commit_local(current_git_revision: str) -> Set[str]: + airbyte_repo = git.Repo() + modified_files = airbyte_repo.git.diff_tree("--no-commit-id", "--name-only", current_git_revision, "-r").split("\n") + return set(modified_files) + + +def get_modified_files_in_commit(current_git_branch: str, current_git_revision: str, is_local: bool = True) -> Set[str]: + if is_local: + return get_modified_files_in_commit_local(current_git_revision) + else: + return anyio.run(get_modified_files_in_commit_remote, current_git_branch, current_git_revision) def get_modified_connectors(modified_files: Set[str]) -> Set[Connector]: @@ -175,6 +219,14 @@ def get_modified_connectors(modified_files: Set[str]) -> Set[Connector]: return set(modified_connectors) +def get_modified_metadata_files(modified_files: Set[str]) -> Set[Path]: + return {Path(f) for f in modified_files if f.endswith(METADATA_FILE_NAME) and f.startswith("airbyte-integrations/connectors")} + + +def get_all_metadata_files() -> Set[Path]: + return {Path(metadata_file) for metadata_file in glob("airbyte-integrations/connectors/**/metadata.yaml", recursive=True)} + + def slugify(value: Any, allow_unicode: bool = False): """ Taken from https://github.com/django/django/blob/master/django/utils/text.py. @@ -249,10 +301,11 @@ def invoke(self, ctx: click.Context) -> Any: return sys.exit(1) -async def execute_concurrently(steps: List[Callable], concurrency: int = 5): - semaphore = anyio.Semaphore(concurrency) - async with semaphore: +async def execute_concurrently(steps: List[Callable], concurrency=5): + tasks = [] + # Asyncer does not have builtin semaphore, so control concurrency via chunks of steps + # Anyio has semaphores but does not have the soonify method which allow access to results via the value task attribute. + for chunk in chunked(steps, concurrency): async with asyncer.create_task_group() as task_group: - tasks = [task_group.soonify(step)() for step in steps] - - return [task.value for task in tasks] + tasks += [task_group.soonify(step)() for step in chunk] + return [task.value for task in tasks] diff --git a/tools/ci_connector_ops/setup.py b/tools/ci_connector_ops/setup.py index 9616de6d8b08..aaf7bb35a499 100644 --- a/tools/ci_connector_ops/setup.py +++ b/tools/ci_connector_ops/setup.py @@ -46,6 +46,7 @@ def local_pkg(name: str) -> str: "dagger-io==0.5.0", "asyncer", "anyio", + "more-itertools", ] setup( From 4b4598fefa56c7c0470694fed750c9ce92c0cac8 Mon Sep 17 00:00:00 2001 From: Arsen Losenko <20901439+arsenlosenko@users.noreply.github.com> Date: Fri, 14 Apr 2023 18:06:20 +0300 Subject: [PATCH 066/187] Source Hubspot: update expected records (#25152) * Source Hubspot: update expected records * Update expected records --- .../source-hubspot/integration_tests/expected_records.jsonl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/airbyte-integrations/connectors/source-hubspot/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-hubspot/integration_tests/expected_records.jsonl index e4ef67c04b0f..d2be7cc0c90a 100644 --- a/airbyte-integrations/connectors/source-hubspot/integration_tests/expected_records.jsonl +++ b/airbyte-integrations/connectors/source-hubspot/integration_tests/expected_records.jsonl @@ -17,9 +17,9 @@ {"stream": "products", "data": {"id": "1783898388", "properties": {"amount": null, "createdate": "2023-01-31T00:08:27.149000+00:00", "description": null, "discount": null, "hs_all_accessible_team_ids": null, "hs_all_assigned_business_unit_ids": null, "hs_all_owner_ids": null, "hs_all_team_ids": null, "hs_avatar_filemanager_key": null, "hs_cost_of_goods_sold": null, "hs_created_by_user_id": 12282590, "hs_createdate": null, "hs_discount_percentage": null, "hs_folder_id": null, "hs_images": null, "hs_lastmodifieddate": "2023-01-31T00:28:58.829000+00:00", "hs_merged_object_ids": null, "hs_object_id": 1783898388, "hs_product_type": "inventory", "hs_read_only": null, "hs_recurring_billing_period": null, "hs_recurring_billing_start_date": null, "hs_sku": null, "hs_unique_creation_key": null, "hs_updated_by_user_id": 12282590, "hs_url": null, "hs_user_ids_of_all_notification_followers": null, "hs_user_ids_of_all_notification_unfollowers": null, "hs_user_ids_of_all_owners": null, "hubspot_owner_assigneddate": null, "hubspot_owner_id": null, "hubspot_team_id": null, "name": "test", "price": 1.0, "quantity": null, "recurringbillingfrequency": null, "tax": null, "test": null, "test_product_price": null}, "createdAt": "2023-01-31T00:08:27.149Z", "updatedAt": "2023-01-31T00:28:58.829Z", "archived": false}, "emitted_at": 1675125114562} {"stream": "subscription_changes", "data": {"timestamp": 1675123491624, "recipient": "testingapicontact_0@hubspot.com", "portalId": 8727216, "normalizedEmailId": "6b59e963-cabc-4bf8-baec-feab401bdd98", "changes": [{"source": "SOURCE_HUBSPOT_CUSTOMER", "timestamp": 1675123491624, "changeType": "SUBSCRIPTION_STATUS", "subscriptionId": 23704464, "portalId": 8727216, "causedByEvent": {"id": "cd276838-3925-4649-9a38-2b61761362c4", "created": 1675123491624}, "change": "SUBSCRIBED"}]}, "emitted_at": 1675125115109} {"stream": "workflows", "data": {"migrationStatus": {"portalId": 8727216, "workflowId": 40032127, "migrationStatus": "EXECUTION_MIGRATED", "enrollmentMigrationStatus": "PLATFORM_OWNED", "platformOwnsActions": true, "lastSuccessfulMigrationTimestamp": null, "enrollmentMigrationTimestamp": null, "flowId": 321690519}, "name": "Unnamed workflow - Mon Mar 15 2021 12:58:03 GMT+0200 (cloned)", "id": 40032127, "type": "DRIP_DELAY", "portalId": 8727216, "insertedAt": 1675124258190, "updatedAt": 1675124308226, "enabled": true, "description": "", "contactListIds": {"enrolled": 167, "active": 168, "completed": 169, "succeeded": 170}, "creationSource": {"sourceApplication": {"source": "DIRECT_API", "serviceName": "AutomationPlatformService-userweb"}, "createdByUser": {"userId": 12282590, "userEmail": "integration-test@airbyte.io"}, "clonedFromWorkflowId": 23314874, "createdAt": 1675124258186}, "updateSource": {"sourceApplication": {"source": "DIRECT_API", "serviceName": "AutomationPlatformService-userweb"}, "updatedByUser": {"userId": 12282590, "userEmail": "integration-test@airbyte.io"}, "updatedAt": 1675124308226}, "originalAuthorUserId": 12282590, "personaTagIds": [], "lastUpdatedByUserId": 12282590, "contactCounts": {"active": 0, "enrolled": 0}}, "emitted_at": 1675125115992} -{"stream": "companies", "data": {"id": "4992593519", "properties": {"about_us": null, "address": null, "address2": null, "annualrevenue": null, "city": "San Francisco", "closedate": null, "closedate_timestamp_earliest_value_a2a17e6e": null, "country": "United States", "createdate": "2020-12-10T07:58:09.554000+00:00", "days_to_close": null, "description": "Airbyte is an open-source data integration platform to build ELT pipelines. Consolidate your data in your data warehouses, lakes and databases.", "domain": "airbyte.io", "engagements_last_meeting_booked": null, "engagements_last_meeting_booked_campaign": null, "engagements_last_meeting_booked_medium": null, "engagements_last_meeting_booked_source": null, "facebook_company_page": null, "facebookfans": null, "first_contact_createdate": null, "first_contact_createdate_timestamp_earliest_value_78b50eea": null, "first_conversion_date": null, "first_conversion_date_timestamp_earliest_value_61f58f2c": null, "first_conversion_event_name": null, "first_conversion_event_name_timestamp_earliest_value_68ddae0a": null, "first_deal_created_date": "2021-05-21T10:17:06.028000+00:00", "founded_year": "2020", "googleplus_page": null, "hs_additional_domains": null, "hs_all_accessible_team_ids": null, "hs_all_assigned_business_unit_ids": null, "hs_all_owner_ids": "52550153", "hs_all_team_ids": null, "hs_analytics_first_timestamp": null, "hs_analytics_first_timestamp_timestamp_earliest_value_11e3a63a": null, "hs_analytics_first_touch_converting_campaign": null, "hs_analytics_first_touch_converting_campaign_timestamp_earliest_value_4757fe10": null, "hs_analytics_first_visit_timestamp": null, "hs_analytics_first_visit_timestamp_timestamp_earliest_value_accc17ae": null, "hs_analytics_last_timestamp": null, "hs_analytics_last_timestamp_timestamp_latest_value_4e16365a": null, "hs_analytics_last_touch_converting_campaign": null, "hs_analytics_last_touch_converting_campaign_timestamp_latest_value_81a64e30": null, "hs_analytics_last_visit_timestamp": null, "hs_analytics_last_visit_timestamp_timestamp_latest_value_999a0fce": null, "hs_analytics_latest_source": null, "hs_analytics_latest_source_data_1": null, "hs_analytics_latest_source_data_2": null, "hs_analytics_latest_source_timestamp": null, "hs_analytics_num_page_views": null, "hs_analytics_num_page_views_cardinality_sum_e46e85b0": null, "hs_analytics_num_visits": null, "hs_analytics_num_visits_cardinality_sum_53d952a6": null, "hs_analytics_source": null, "hs_analytics_source_data_1": null, "hs_analytics_source_data_1_timestamp_earliest_value_9b2f1fa1": null, "hs_analytics_source_data_2": null, "hs_analytics_source_data_2_timestamp_earliest_value_9b2f9400": null, "hs_analytics_source_timestamp_earliest_value_25a3a52c": null, "hs_annual_revenue_currency_code": "USD", "hs_avatar_filemanager_key": null, "hs_created_by_user_id": 12282590, "hs_createdate": null, "hs_date_entered_customer": null, "hs_date_entered_evangelist": null, "hs_date_entered_lead": null, "hs_date_entered_marketingqualifiedlead": null, "hs_date_entered_opportunity": "2021-05-21T10:17:28.964000+00:00", "hs_date_entered_other": null, "hs_date_entered_salesqualifiedlead": null, "hs_date_entered_subscriber": null, "hs_date_exited_customer": null, "hs_date_exited_evangelist": null, "hs_date_exited_lead": null, "hs_date_exited_marketingqualifiedlead": null, "hs_date_exited_opportunity": null, "hs_date_exited_other": null, "hs_date_exited_salesqualifiedlead": null, "hs_date_exited_subscriber": null, "hs_ideal_customer_profile": null, "hs_is_target_account": null, "hs_last_booked_meeting_date": null, "hs_last_logged_call_date": null, "hs_last_open_task_date": null, "hs_last_sales_activity_date": null, "hs_last_sales_activity_timestamp": null, "hs_last_sales_activity_type": null, "hs_lastmodifieddate": "2023-01-26T11:45:49.817000+00:00", "hs_latest_createdate_of_active_subscriptions": null, "hs_latest_meeting_activity": null, "hs_lead_status": null, "hs_merged_object_ids": null, "hs_num_blockers": null, "hs_num_child_companies": 0.0, "hs_num_contacts_with_buying_roles": null, "hs_num_decision_makers": null, "hs_num_open_deals": 1.0, "hs_object_id": 4992593519, "hs_parent_company_id": null, "hs_pinned_engagement_id": null, "hs_pipeline": null, "hs_predictivecontactscore_v2": null, "hs_predictivecontactscore_v2_next_max_max_d4e58c1e": null, "hs_read_only": null, "hs_sales_email_last_replied": null, "hs_target_account": null, "hs_target_account_probability": 0.5476861596107483, "hs_target_account_recommendation_snooze_time": null, "hs_target_account_recommendation_state": null, "hs_time_in_customer": null, "hs_time_in_evangelist": null, "hs_time_in_lead": null, "hs_time_in_marketingqualifiedlead": null, "hs_time_in_opportunity": 56015197090.0, "hs_time_in_other": null, "hs_time_in_salesqualifiedlead": null, "hs_time_in_subscriber": null, "hs_total_deal_value": null, "hs_unique_creation_key": null, "hs_updated_by_user_id": 12282590, "hs_user_ids_of_all_notification_followers": null, "hs_user_ids_of_all_notification_unfollowers": null, "hs_user_ids_of_all_owners": "12282590", "hubspot_owner_assigneddate": "2020-12-10T07:58:09.554000+00:00", "hubspot_owner_id": "52550153", "hubspot_team_id": null, "hubspotscore": null, "industry": null, "is_public": true, "lifecyclestage": "opportunity", "linkedin_company_page": "https://www.linkedin.com/company/airbytehq", "linkedinbio": "Airbyte is an open-source data integration platform to build ELT pipelines. Consolidate your data in your data warehouses, lakes and databases.", "name": "Airbyte test1", "notes_last_contacted": null, "notes_last_updated": null, "notes_next_activity_date": null, "num_associated_contacts": 0.0, "num_associated_deals": 1.0, "num_contacted_notes": null, "num_conversion_events": null, "num_conversion_events_cardinality_sum_d095f14b": null, "num_notes": null, "numberofemployees": 200.0, "phone": "+1 415-307-4864", "recent_conversion_date": null, "recent_conversion_date_timestamp_latest_value_72856da1": null, "recent_conversion_event_name": null, "recent_conversion_event_name_timestamp_latest_value_66c820bf": null, "recent_deal_amount": null, "recent_deal_close_date": null, "state": "CA", "timezone": "America/Los_Angeles", "total_money_raised": null, "total_revenue": null, "twitterbio": null, "twitterfollowers": null, "twitterhandle": "AirbyteHQ", "type": null, "web_technologies": "slack;segment;google_tag_manager;greenhouse;google_analytics;intercom;piwik;google_apps;hubspot;facebook_advertiser", "website": "airbyte.io", "zip": "94114"}, "createdAt": "2020-12-10T07:58:09.554Z", "updatedAt": "2023-01-26T11:45:49.817Z", "archived": false}, "emitted_at": 1677607447041} -{"stream": "companies", "data": {"id": "5000787595", "properties": {"about_us": null, "address": "2261 Market Street", "address2": null, "annualrevenue": null, "city": "San Francisco", "closedate": null, "closedate_timestamp_earliest_value_a2a17e6e": null, "country": "United States", "createdate": "2020-12-11T01:28:27.673000+00:00", "days_to_close": null, "description": "Airbyte is an open-source data integration platform to build ELT pipelines. Consolidate your data in your data warehouses, lakes and databases.", "domain": "Daxtarity.com", "engagements_last_meeting_booked": null, "engagements_last_meeting_booked_campaign": null, "engagements_last_meeting_booked_medium": null, "engagements_last_meeting_booked_source": null, "facebook_company_page": null, "facebookfans": null, "first_contact_createdate": null, "first_contact_createdate_timestamp_earliest_value_78b50eea": null, "first_conversion_date": null, "first_conversion_date_timestamp_earliest_value_61f58f2c": null, "first_conversion_event_name": null, "first_conversion_event_name_timestamp_earliest_value_68ddae0a": null, "first_deal_created_date": null, "founded_year": "2020", "googleplus_page": null, "hs_additional_domains": null, "hs_all_accessible_team_ids": null, "hs_all_assigned_business_unit_ids": null, "hs_all_owner_ids": "52550153", "hs_all_team_ids": null, "hs_analytics_first_timestamp": null, "hs_analytics_first_timestamp_timestamp_earliest_value_11e3a63a": null, "hs_analytics_first_touch_converting_campaign": null, "hs_analytics_first_touch_converting_campaign_timestamp_earliest_value_4757fe10": null, "hs_analytics_first_visit_timestamp": null, "hs_analytics_first_visit_timestamp_timestamp_earliest_value_accc17ae": null, "hs_analytics_last_timestamp": null, "hs_analytics_last_timestamp_timestamp_latest_value_4e16365a": null, "hs_analytics_last_touch_converting_campaign": null, "hs_analytics_last_touch_converting_campaign_timestamp_latest_value_81a64e30": null, "hs_analytics_last_visit_timestamp": null, "hs_analytics_last_visit_timestamp_timestamp_latest_value_999a0fce": null, "hs_analytics_latest_source": "", "hs_analytics_latest_source_data_1": "", "hs_analytics_latest_source_data_2": "", "hs_analytics_latest_source_timestamp": null, "hs_analytics_num_page_views": null, "hs_analytics_num_page_views_cardinality_sum_e46e85b0": null, "hs_analytics_num_visits": null, "hs_analytics_num_visits_cardinality_sum_53d952a6": null, "hs_analytics_source": "", "hs_analytics_source_data_1": "", "hs_analytics_source_data_1_timestamp_earliest_value_9b2f1fa1": null, "hs_analytics_source_data_2": "", "hs_analytics_source_data_2_timestamp_earliest_value_9b2f9400": null, "hs_analytics_source_timestamp_earliest_value_25a3a52c": null, "hs_annual_revenue_currency_code": "USD", "hs_avatar_filemanager_key": null, "hs_created_by_user_id": 12282590, "hs_createdate": null, "hs_date_entered_customer": null, "hs_date_entered_evangelist": null, "hs_date_entered_lead": null, "hs_date_entered_marketingqualifiedlead": null, "hs_date_entered_opportunity": null, "hs_date_entered_other": null, "hs_date_entered_salesqualifiedlead": null, "hs_date_entered_subscriber": null, "hs_date_exited_customer": null, "hs_date_exited_evangelist": null, "hs_date_exited_lead": null, "hs_date_exited_marketingqualifiedlead": null, "hs_date_exited_opportunity": null, "hs_date_exited_other": null, "hs_date_exited_salesqualifiedlead": null, "hs_date_exited_subscriber": null, "hs_ideal_customer_profile": null, "hs_is_target_account": null, "hs_last_booked_meeting_date": null, "hs_last_logged_call_date": null, "hs_last_open_task_date": null, "hs_last_sales_activity_date": null, "hs_last_sales_activity_timestamp": null, "hs_last_sales_activity_type": null, "hs_lastmodifieddate": "2023-01-23T15:41:56.644000+00:00", "hs_latest_createdate_of_active_subscriptions": null, "hs_latest_meeting_activity": null, "hs_lead_status": null, "hs_merged_object_ids": null, "hs_num_blockers": 0.0, "hs_num_child_companies": 0.0, "hs_num_contacts_with_buying_roles": 0.0, "hs_num_decision_makers": 0.0, "hs_num_open_deals": 0.0, "hs_object_id": 5000787595, "hs_parent_company_id": null, "hs_pinned_engagement_id": null, "hs_pipeline": null, "hs_predictivecontactscore_v2": null, "hs_predictivecontactscore_v2_next_max_max_d4e58c1e": null, "hs_read_only": null, "hs_sales_email_last_replied": null, "hs_target_account": null, "hs_target_account_probability": 0.4076234698295593, "hs_target_account_recommendation_snooze_time": null, "hs_target_account_recommendation_state": null, "hs_time_in_customer": null, "hs_time_in_evangelist": null, "hs_time_in_lead": null, "hs_time_in_marketingqualifiedlead": null, "hs_time_in_opportunity": null, "hs_time_in_other": null, "hs_time_in_salesqualifiedlead": null, "hs_time_in_subscriber": null, "hs_total_deal_value": null, "hs_unique_creation_key": null, "hs_updated_by_user_id": 12282590, "hs_user_ids_of_all_notification_followers": null, "hs_user_ids_of_all_notification_unfollowers": null, "hs_user_ids_of_all_owners": "12282590", "hubspot_owner_assigneddate": "2020-12-11T01:28:27.673000+00:00", "hubspot_owner_id": "52550153", "hubspot_team_id": null, "hubspotscore": null, "industry": null, "is_public": true, "lifecyclestage": null, "linkedin_company_page": "https://www.linkedin.com/company/airbytehq", "linkedinbio": "Airbyte is an open-source data integration platform to build ELT pipelines. Consolidate your data in your data warehouses, lakes and databases.", "name": "Daxtarity", "notes_last_contacted": null, "notes_last_updated": null, "notes_next_activity_date": null, "num_associated_contacts": 0.0, "num_associated_deals": null, "num_contacted_notes": null, "num_conversion_events": null, "num_conversion_events_cardinality_sum_d095f14b": null, "num_notes": null, "numberofemployees": 50.0, "phone": "+1 415-307-4864", "recent_conversion_date": null, "recent_conversion_date_timestamp_latest_value_72856da1": null, "recent_conversion_event_name": null, "recent_conversion_event_name_timestamp_latest_value_66c820bf": null, "recent_deal_amount": null, "recent_deal_close_date": null, "state": "CA", "timezone": "America/Los_Angeles", "total_money_raised": null, "total_revenue": null, "twitterbio": null, "twitterfollowers": null, "twitterhandle": "AirbyteHQ", "type": null, "web_technologies": "slack;google_tag_manager;greenhouse;google_analytics;intercom;piwik;google_apps;hubspot;facebook_advertiser", "website": "Daxtarity.com", "zip": "94114"}, "createdAt": "2020-12-11T01:28:27.673Z", "updatedAt": "2023-01-23T15:41:56.644Z", "archived": false}, "emitted_at": 1677607447042} -{"stream": "companies", "data": {"id": "11481383026", "properties": {"about_us": null, "address": null, "address2": null, "annualrevenue": 1.0, "city": "Test", "closedate": null, "closedate_timestamp_earliest_value_a2a17e6e": null, "country": null, "createdate": "2023-01-30T23:22:56.969000+00:00", "days_to_close": null, "description": "Test", "domain": "test.test", "engagements_last_meeting_booked": null, "engagements_last_meeting_booked_campaign": null, "engagements_last_meeting_booked_medium": null, "engagements_last_meeting_booked_source": null, "facebook_company_page": null, "facebookfans": null, "first_contact_createdate": null, "first_contact_createdate_timestamp_earliest_value_78b50eea": null, "first_conversion_date": null, "first_conversion_date_timestamp_earliest_value_61f58f2c": null, "first_conversion_event_name": null, "first_conversion_event_name_timestamp_earliest_value_68ddae0a": null, "first_deal_created_date": null, "founded_year": null, "googleplus_page": null, "hs_additional_domains": null, "hs_all_accessible_team_ids": null, "hs_all_assigned_business_unit_ids": null, "hs_all_owner_ids": "52550153", "hs_all_team_ids": null, "hs_analytics_first_timestamp": null, "hs_analytics_first_timestamp_timestamp_earliest_value_11e3a63a": null, "hs_analytics_first_touch_converting_campaign": null, "hs_analytics_first_touch_converting_campaign_timestamp_earliest_value_4757fe10": null, "hs_analytics_first_visit_timestamp": null, "hs_analytics_first_visit_timestamp_timestamp_earliest_value_accc17ae": null, "hs_analytics_last_timestamp": null, "hs_analytics_last_timestamp_timestamp_latest_value_4e16365a": null, "hs_analytics_last_touch_converting_campaign": null, "hs_analytics_last_touch_converting_campaign_timestamp_latest_value_81a64e30": null, "hs_analytics_last_visit_timestamp": null, "hs_analytics_last_visit_timestamp_timestamp_latest_value_999a0fce": null, "hs_analytics_latest_source": null, "hs_analytics_latest_source_data_1": null, "hs_analytics_latest_source_data_2": null, "hs_analytics_latest_source_timestamp": null, "hs_analytics_num_page_views": null, "hs_analytics_num_page_views_cardinality_sum_e46e85b0": null, "hs_analytics_num_visits": null, "hs_analytics_num_visits_cardinality_sum_53d952a6": null, "hs_analytics_source": null, "hs_analytics_source_data_1": null, "hs_analytics_source_data_1_timestamp_earliest_value_9b2f1fa1": null, "hs_analytics_source_data_2": null, "hs_analytics_source_data_2_timestamp_earliest_value_9b2f9400": null, "hs_analytics_source_timestamp_earliest_value_25a3a52c": null, "hs_annual_revenue_currency_code": "USD", "hs_avatar_filemanager_key": null, "hs_created_by_user_id": 12282590, "hs_createdate": null, "hs_date_entered_customer": null, "hs_date_entered_evangelist": null, "hs_date_entered_lead": "2023-01-30T23:22:56.969000+00:00", "hs_date_entered_marketingqualifiedlead": null, "hs_date_entered_opportunity": null, "hs_date_entered_other": null, "hs_date_entered_salesqualifiedlead": null, "hs_date_entered_subscriber": null, "hs_date_exited_customer": null, "hs_date_exited_evangelist": null, "hs_date_exited_lead": null, "hs_date_exited_marketingqualifiedlead": null, "hs_date_exited_opportunity": null, "hs_date_exited_other": null, "hs_date_exited_salesqualifiedlead": null, "hs_date_exited_subscriber": null, "hs_ideal_customer_profile": null, "hs_is_target_account": null, "hs_last_booked_meeting_date": null, "hs_last_logged_call_date": null, "hs_last_open_task_date": "2023-02-03T07:00:00+00:00", "hs_last_sales_activity_date": null, "hs_last_sales_activity_timestamp": null, "hs_last_sales_activity_type": null, "hs_lastmodifieddate": "2023-02-03T07:03:57.136000+00:00", "hs_latest_createdate_of_active_subscriptions": null, "hs_latest_meeting_activity": null, "hs_lead_status": null, "hs_merged_object_ids": null, "hs_num_blockers": 0.0, "hs_num_child_companies": 0.0, "hs_num_contacts_with_buying_roles": 0.0, "hs_num_decision_makers": 0.0, "hs_num_open_deals": 0.0, "hs_object_id": 11481383026, "hs_parent_company_id": null, "hs_pinned_engagement_id": null, "hs_pipeline": "companies-lifecycle-pipeline", "hs_predictivecontactscore_v2": null, "hs_predictivecontactscore_v2_next_max_max_d4e58c1e": null, "hs_read_only": null, "hs_sales_email_last_replied": null, "hs_target_account": null, "hs_target_account_probability": 0.4076234698295593, "hs_target_account_recommendation_snooze_time": null, "hs_target_account_recommendation_state": null, "hs_time_in_customer": null, "hs_time_in_evangelist": null, "hs_time_in_lead": 2486470337.0, "hs_time_in_marketingqualifiedlead": null, "hs_time_in_opportunity": null, "hs_time_in_other": null, "hs_time_in_salesqualifiedlead": null, "hs_time_in_subscriber": null, "hs_total_deal_value": null, "hs_unique_creation_key": null, "hs_updated_by_user_id": 12282590, "hs_user_ids_of_all_notification_followers": null, "hs_user_ids_of_all_notification_unfollowers": null, "hs_user_ids_of_all_owners": "12282590", "hubspot_owner_assigneddate": "2023-01-30T23:22:56.969000+00:00", "hubspot_owner_id": "52550153", "hubspot_team_id": null, "hubspotscore": null, "industry": "ACCOUNTING", "is_public": null, "lifecyclestage": "lead", "linkedin_company_page": "Test", "linkedinbio": null, "name": "Test", "notes_last_contacted": null, "notes_last_updated": "2023-02-03T07:00:00+00:00", "notes_next_activity_date": null, "num_associated_contacts": 0.0, "num_associated_deals": null, "num_contacted_notes": 0.0, "num_conversion_events": null, "num_conversion_events_cardinality_sum_d095f14b": null, "num_notes": 2.0, "numberofemployees": 1.0, "phone": null, "recent_conversion_date": null, "recent_conversion_date_timestamp_latest_value_72856da1": null, "recent_conversion_event_name": null, "recent_conversion_event_name_timestamp_latest_value_66c820bf": null, "recent_deal_amount": null, "recent_deal_close_date": null, "state": "Test", "timezone": "3", "total_money_raised": null, "total_revenue": null, "twitterbio": null, "twitterfollowers": null, "twitterhandle": null, "type": "PROSPECT", "web_technologies": null, "website": "test.test", "zip": "00000"}, "createdAt": "2023-01-30T23:22:56.969Z", "updatedAt": "2023-02-03T07:03:57.136Z", "archived": false}, "emitted_at": 1677607447570} +{"stream": "companies", "data": {"id": "4992593519", "properties": {"about_us": null, "address": null, "address2": null, "annualrevenue": null, "city": "San Francisco", "closedate": null, "closedate_timestamp_earliest_value_a2a17e6e": null, "country": "United States", "createdate": "2020-12-10T07:58:09.554000+00:00", "custom_company_property": null, "days_to_close": null, "description": "Airbyte is an open-source data integration platform to build ELT pipelines. Consolidate your data in your data warehouses, lakes and databases.", "domain": "airbyte.io", "engagements_last_meeting_booked": null, "engagements_last_meeting_booked_campaign": null, "engagements_last_meeting_booked_medium": null, "engagements_last_meeting_booked_source": null, "facebook_company_page": null, "facebookfans": null, "first_contact_createdate": null, "first_contact_createdate_timestamp_earliest_value_78b50eea": null, "first_conversion_date": null, "first_conversion_date_timestamp_earliest_value_61f58f2c": null, "first_conversion_event_name": null, "first_conversion_event_name_timestamp_earliest_value_68ddae0a": null, "first_deal_created_date": "2021-05-21T10:17:06.028000+00:00", "founded_year": "2020", "googleplus_page": null, "hs_additional_domains": null, "hs_all_accessible_team_ids": null, "hs_all_assigned_business_unit_ids": null, "hs_all_owner_ids": "52550153", "hs_all_team_ids": null, "hs_analytics_first_timestamp": null, "hs_analytics_first_timestamp_timestamp_earliest_value_11e3a63a": null, "hs_analytics_first_touch_converting_campaign": null, "hs_analytics_first_touch_converting_campaign_timestamp_earliest_value_4757fe10": null, "hs_analytics_first_visit_timestamp": null, "hs_analytics_first_visit_timestamp_timestamp_earliest_value_accc17ae": null, "hs_analytics_last_timestamp": null, "hs_analytics_last_timestamp_timestamp_latest_value_4e16365a": null, "hs_analytics_last_touch_converting_campaign": null, "hs_analytics_last_touch_converting_campaign_timestamp_latest_value_81a64e30": null, "hs_analytics_last_visit_timestamp": null, "hs_analytics_last_visit_timestamp_timestamp_latest_value_999a0fce": null, "hs_analytics_latest_source": null, "hs_analytics_latest_source_data_1": null, "hs_analytics_latest_source_data_2": null, "hs_analytics_latest_source_timestamp": null, "hs_analytics_num_page_views": null, "hs_analytics_num_page_views_cardinality_sum_e46e85b0": null, "hs_analytics_num_visits": null, "hs_analytics_num_visits_cardinality_sum_53d952a6": null, "hs_analytics_source": null, "hs_analytics_source_data_1": null, "hs_analytics_source_data_1_timestamp_earliest_value_9b2f1fa1": null, "hs_analytics_source_data_2": null, "hs_analytics_source_data_2_timestamp_earliest_value_9b2f9400": null, "hs_analytics_source_timestamp_earliest_value_25a3a52c": null, "hs_annual_revenue_currency_code": "USD", "hs_avatar_filemanager_key": null, "hs_created_by_user_id": 12282590, "hs_createdate": null, "hs_date_entered_customer": null, "hs_date_entered_evangelist": null, "hs_date_entered_lead": null, "hs_date_entered_marketingqualifiedlead": null, "hs_date_entered_opportunity": "2021-05-21T10:17:28.964000+00:00", "hs_date_entered_other": null, "hs_date_entered_salesqualifiedlead": null, "hs_date_entered_subscriber": null, "hs_date_exited_customer": null, "hs_date_exited_evangelist": null, "hs_date_exited_lead": null, "hs_date_exited_marketingqualifiedlead": null, "hs_date_exited_opportunity": null, "hs_date_exited_other": null, "hs_date_exited_salesqualifiedlead": null, "hs_date_exited_subscriber": null, "hs_ideal_customer_profile": null, "hs_is_target_account": null, "hs_last_booked_meeting_date": null, "hs_last_logged_call_date": null, "hs_last_open_task_date": null, "hs_last_sales_activity_date": null, "hs_last_sales_activity_timestamp": null, "hs_last_sales_activity_type": null, "hs_lastmodifieddate": "2023-01-26T11:45:49.817000+00:00", "hs_latest_createdate_of_active_subscriptions": null, "hs_latest_meeting_activity": null, "hs_lead_status": null, "hs_merged_object_ids": null, "hs_num_blockers": null, "hs_num_child_companies": 0, "hs_num_contacts_with_buying_roles": null, "hs_num_decision_makers": null, "hs_num_open_deals": 1, "hs_object_id": 4992593519, "hs_parent_company_id": null, "hs_pinned_engagement_id": null, "hs_pipeline": null, "hs_predictivecontactscore_v2": null, "hs_predictivecontactscore_v2_next_max_max_d4e58c1e": null, "hs_read_only": null, "hs_sales_email_last_replied": null, "hs_target_account": null, "hs_target_account_probability": 0.5476861596107483, "hs_target_account_recommendation_snooze_time": null, "hs_target_account_recommendation_state": null, "hs_time_in_customer": null, "hs_time_in_evangelist": null, "hs_time_in_lead": null, "hs_time_in_marketingqualifiedlead": null, "hs_time_in_opportunity": 59800511614, "hs_time_in_other": null, "hs_time_in_salesqualifiedlead": null, "hs_time_in_subscriber": null, "hs_total_deal_value": null, "hs_unique_creation_key": null, "hs_updated_by_user_id": 12282590, "hs_user_ids_of_all_notification_followers": null, "hs_user_ids_of_all_notification_unfollowers": null, "hs_user_ids_of_all_owners": "12282590", "hubspot_owner_assigneddate": "2020-12-10T07:58:09.554000+00:00", "hubspot_owner_id": "52550153", "hubspot_team_id": null, "hubspotscore": null, "industry": null, "is_public": true, "lifecyclestage": "opportunity", "linkedin_company_page": "https://www.linkedin.com/company/airbytehq", "linkedinbio": "Airbyte is an open-source data integration platform to build ELT pipelines. Consolidate your data in your data warehouses, lakes and databases.", "name": "Airbyte test1", "notes_last_contacted": null, "notes_last_updated": null, "notes_next_activity_date": null, "num_associated_contacts": 0, "num_associated_deals": 1, "num_contacted_notes": null, "num_conversion_events": null, "num_conversion_events_cardinality_sum_d095f14b": null, "num_notes": null, "numberofemployees": 200, "phone": "+1 415-307-4864", "recent_conversion_date": null, "recent_conversion_date_timestamp_latest_value_72856da1": null, "recent_conversion_event_name": null, "recent_conversion_event_name_timestamp_latest_value_66c820bf": null, "recent_deal_amount": null, "recent_deal_close_date": null, "state": "CA", "timezone": "America/Los_Angeles", "total_money_raised": null, "total_revenue": null, "twitterbio": null, "twitterfollowers": null, "twitterhandle": "AirbyteHQ", "type": null, "web_technologies": "slack;segment;google_tag_manager;greenhouse;google_analytics;intercom;piwik;google_apps;hubspot;facebook_advertiser", "website": "airbyte.io", "zip": "94114"}, "createdAt": "2020-12-10T07:58:09.554Z", "updatedAt": "2023-01-26T11:45:49.817Z", "archived": false}, "emitted_at": 1681392760867} +{"stream": "companies", "data": {"id": "5000787595", "properties": {"about_us": null, "address": "2261 Market Street", "address2": null, "annualrevenue": null, "city": "San Francisco", "closedate": null, "closedate_timestamp_earliest_value_a2a17e6e": null, "country": "United States", "createdate": "2020-12-11T01:28:27.673000+00:00", "custom_company_property": null, "days_to_close": null, "description": "Airbyte is an open-source data integration platform to build ELT pipelines. Consolidate your data in your data warehouses, lakes and databases.", "domain": "Daxtarity.com", "engagements_last_meeting_booked": null, "engagements_last_meeting_booked_campaign": null, "engagements_last_meeting_booked_medium": null, "engagements_last_meeting_booked_source": null, "facebook_company_page": null, "facebookfans": null, "first_contact_createdate": null, "first_contact_createdate_timestamp_earliest_value_78b50eea": null, "first_conversion_date": null, "first_conversion_date_timestamp_earliest_value_61f58f2c": null, "first_conversion_event_name": null, "first_conversion_event_name_timestamp_earliest_value_68ddae0a": null, "first_deal_created_date": null, "founded_year": "2020", "googleplus_page": null, "hs_additional_domains": null, "hs_all_accessible_team_ids": null, "hs_all_assigned_business_unit_ids": null, "hs_all_owner_ids": "52550153", "hs_all_team_ids": null, "hs_analytics_first_timestamp": null, "hs_analytics_first_timestamp_timestamp_earliest_value_11e3a63a": null, "hs_analytics_first_touch_converting_campaign": null, "hs_analytics_first_touch_converting_campaign_timestamp_earliest_value_4757fe10": null, "hs_analytics_first_visit_timestamp": null, "hs_analytics_first_visit_timestamp_timestamp_earliest_value_accc17ae": null, "hs_analytics_last_timestamp": null, "hs_analytics_last_timestamp_timestamp_latest_value_4e16365a": null, "hs_analytics_last_touch_converting_campaign": null, "hs_analytics_last_touch_converting_campaign_timestamp_latest_value_81a64e30": null, "hs_analytics_last_visit_timestamp": null, "hs_analytics_last_visit_timestamp_timestamp_latest_value_999a0fce": null, "hs_analytics_latest_source": "", "hs_analytics_latest_source_data_1": "", "hs_analytics_latest_source_data_2": "", "hs_analytics_latest_source_timestamp": null, "hs_analytics_num_page_views": null, "hs_analytics_num_page_views_cardinality_sum_e46e85b0": null, "hs_analytics_num_visits": null, "hs_analytics_num_visits_cardinality_sum_53d952a6": null, "hs_analytics_source": "", "hs_analytics_source_data_1": "", "hs_analytics_source_data_1_timestamp_earliest_value_9b2f1fa1": null, "hs_analytics_source_data_2": "", "hs_analytics_source_data_2_timestamp_earliest_value_9b2f9400": null, "hs_analytics_source_timestamp_earliest_value_25a3a52c": null, "hs_annual_revenue_currency_code": "USD", "hs_avatar_filemanager_key": null, "hs_created_by_user_id": 12282590, "hs_createdate": null, "hs_date_entered_customer": null, "hs_date_entered_evangelist": null, "hs_date_entered_lead": null, "hs_date_entered_marketingqualifiedlead": null, "hs_date_entered_opportunity": null, "hs_date_entered_other": null, "hs_date_entered_salesqualifiedlead": null, "hs_date_entered_subscriber": null, "hs_date_exited_customer": null, "hs_date_exited_evangelist": null, "hs_date_exited_lead": null, "hs_date_exited_marketingqualifiedlead": null, "hs_date_exited_opportunity": null, "hs_date_exited_other": null, "hs_date_exited_salesqualifiedlead": null, "hs_date_exited_subscriber": null, "hs_ideal_customer_profile": null, "hs_is_target_account": null, "hs_last_booked_meeting_date": null, "hs_last_logged_call_date": null, "hs_last_open_task_date": null, "hs_last_sales_activity_date": null, "hs_last_sales_activity_timestamp": null, "hs_last_sales_activity_type": null, "hs_lastmodifieddate": "2023-01-23T15:41:56.644000+00:00", "hs_latest_createdate_of_active_subscriptions": null, "hs_latest_meeting_activity": null, "hs_lead_status": null, "hs_merged_object_ids": null, "hs_num_blockers": 0, "hs_num_child_companies": 0, "hs_num_contacts_with_buying_roles": 0, "hs_num_decision_makers": 0, "hs_num_open_deals": 0, "hs_object_id": 5000787595, "hs_parent_company_id": null, "hs_pinned_engagement_id": null, "hs_pipeline": null, "hs_predictivecontactscore_v2": null, "hs_predictivecontactscore_v2_next_max_max_d4e58c1e": null, "hs_read_only": null, "hs_sales_email_last_replied": null, "hs_target_account": null, "hs_target_account_probability": 0.4076234698295593, "hs_target_account_recommendation_snooze_time": null, "hs_target_account_recommendation_state": null, "hs_time_in_customer": null, "hs_time_in_evangelist": null, "hs_time_in_lead": null, "hs_time_in_marketingqualifiedlead": null, "hs_time_in_opportunity": null, "hs_time_in_other": null, "hs_time_in_salesqualifiedlead": null, "hs_time_in_subscriber": null, "hs_total_deal_value": null, "hs_unique_creation_key": null, "hs_updated_by_user_id": 12282590, "hs_user_ids_of_all_notification_followers": null, "hs_user_ids_of_all_notification_unfollowers": null, "hs_user_ids_of_all_owners": "12282590", "hubspot_owner_assigneddate": "2020-12-11T01:28:27.673000+00:00", "hubspot_owner_id": "52550153", "hubspot_team_id": null, "hubspotscore": null, "industry": null, "is_public": true, "lifecyclestage": null, "linkedin_company_page": "https://www.linkedin.com/company/airbytehq", "linkedinbio": "Airbyte is an open-source data integration platform to build ELT pipelines. Consolidate your data in your data warehouses, lakes and databases.", "name": "Daxtarity", "notes_last_contacted": null, "notes_last_updated": null, "notes_next_activity_date": null, "num_associated_contacts": 0, "num_associated_deals": null, "num_contacted_notes": null, "num_conversion_events": null, "num_conversion_events_cardinality_sum_d095f14b": null, "num_notes": null, "numberofemployees": 50, "phone": "+1 415-307-4864", "recent_conversion_date": null, "recent_conversion_date_timestamp_latest_value_72856da1": null, "recent_conversion_event_name": null, "recent_conversion_event_name_timestamp_latest_value_66c820bf": null, "recent_deal_amount": null, "recent_deal_close_date": null, "state": "CA", "timezone": "America/Los_Angeles", "total_money_raised": null, "total_revenue": null, "twitterbio": null, "twitterfollowers": null, "twitterhandle": "AirbyteHQ", "type": null, "web_technologies": "slack;google_tag_manager;greenhouse;google_analytics;intercom;piwik;google_apps;hubspot;facebook_advertiser", "website": "Daxtarity.com", "zip": "94114"}, "createdAt": "2020-12-11T01:28:27.673Z", "updatedAt": "2023-01-23T15:41:56.644Z", "archived": false}, "emitted_at": 1681392760868} +{"stream": "companies", "data": {"id": "11481383026", "properties": {"about_us": null, "address": null, "address2": null, "annualrevenue": 1, "city": "Test", "closedate": null, "closedate_timestamp_earliest_value_a2a17e6e": null, "country": null, "createdate": "2023-01-30T23:22:56.969000+00:00", "custom_company_property": "Hello", "days_to_close": null, "description": "Test", "domain": "test.test", "engagements_last_meeting_booked": null, "engagements_last_meeting_booked_campaign": null, "engagements_last_meeting_booked_medium": null, "engagements_last_meeting_booked_source": null, "facebook_company_page": null, "facebookfans": null, "first_contact_createdate": null, "first_contact_createdate_timestamp_earliest_value_78b50eea": null, "first_conversion_date": null, "first_conversion_date_timestamp_earliest_value_61f58f2c": null, "first_conversion_event_name": null, "first_conversion_event_name_timestamp_earliest_value_68ddae0a": null, "first_deal_created_date": null, "founded_year": null, "googleplus_page": null, "hs_additional_domains": null, "hs_all_accessible_team_ids": null, "hs_all_assigned_business_unit_ids": null, "hs_all_owner_ids": "52550153", "hs_all_team_ids": null, "hs_analytics_first_timestamp": null, "hs_analytics_first_timestamp_timestamp_earliest_value_11e3a63a": null, "hs_analytics_first_touch_converting_campaign": null, "hs_analytics_first_touch_converting_campaign_timestamp_earliest_value_4757fe10": null, "hs_analytics_first_visit_timestamp": null, "hs_analytics_first_visit_timestamp_timestamp_earliest_value_accc17ae": null, "hs_analytics_last_timestamp": null, "hs_analytics_last_timestamp_timestamp_latest_value_4e16365a": null, "hs_analytics_last_touch_converting_campaign": null, "hs_analytics_last_touch_converting_campaign_timestamp_latest_value_81a64e30": null, "hs_analytics_last_visit_timestamp": null, "hs_analytics_last_visit_timestamp_timestamp_latest_value_999a0fce": null, "hs_analytics_latest_source": null, "hs_analytics_latest_source_data_1": null, "hs_analytics_latest_source_data_2": null, "hs_analytics_latest_source_timestamp": null, "hs_analytics_num_page_views": null, "hs_analytics_num_page_views_cardinality_sum_e46e85b0": null, "hs_analytics_num_visits": null, "hs_analytics_num_visits_cardinality_sum_53d952a6": null, "hs_analytics_source": null, "hs_analytics_source_data_1": null, "hs_analytics_source_data_1_timestamp_earliest_value_9b2f1fa1": null, "hs_analytics_source_data_2": null, "hs_analytics_source_data_2_timestamp_earliest_value_9b2f9400": null, "hs_analytics_source_timestamp_earliest_value_25a3a52c": null, "hs_annual_revenue_currency_code": "USD", "hs_avatar_filemanager_key": null, "hs_created_by_user_id": 12282590, "hs_createdate": null, "hs_date_entered_customer": null, "hs_date_entered_evangelist": null, "hs_date_entered_lead": "2023-01-30T23:22:56.969000+00:00", "hs_date_entered_marketingqualifiedlead": null, "hs_date_entered_opportunity": null, "hs_date_entered_other": null, "hs_date_entered_salesqualifiedlead": null, "hs_date_entered_subscriber": null, "hs_date_exited_customer": null, "hs_date_exited_evangelist": null, "hs_date_exited_lead": null, "hs_date_exited_marketingqualifiedlead": null, "hs_date_exited_opportunity": null, "hs_date_exited_other": null, "hs_date_exited_salesqualifiedlead": null, "hs_date_exited_subscriber": null, "hs_ideal_customer_profile": null, "hs_is_target_account": null, "hs_last_booked_meeting_date": null, "hs_last_logged_call_date": null, "hs_last_open_task_date": "2023-02-03T07:00:00+00:00", "hs_last_sales_activity_date": null, "hs_last_sales_activity_timestamp": null, "hs_last_sales_activity_type": null, "hs_lastmodifieddate": "2023-04-12T16:58:42.344000+00:00", "hs_latest_createdate_of_active_subscriptions": null, "hs_latest_meeting_activity": null, "hs_lead_status": null, "hs_merged_object_ids": null, "hs_num_blockers": 0, "hs_num_child_companies": 0, "hs_num_contacts_with_buying_roles": 0, "hs_num_decision_makers": 0, "hs_num_open_deals": 0, "hs_object_id": 11481383026, "hs_parent_company_id": null, "hs_pinned_engagement_id": null, "hs_pipeline": "companies-lifecycle-pipeline", "hs_predictivecontactscore_v2": null, "hs_predictivecontactscore_v2_next_max_max_d4e58c1e": null, "hs_read_only": null, "hs_sales_email_last_replied": null, "hs_target_account": null, "hs_target_account_probability": 0.4076234698295593, "hs_target_account_recommendation_snooze_time": null, "hs_target_account_recommendation_state": null, "hs_time_in_customer": null, "hs_time_in_evangelist": null, "hs_time_in_lead": 6271784096, "hs_time_in_marketingqualifiedlead": null, "hs_time_in_opportunity": null, "hs_time_in_other": null, "hs_time_in_salesqualifiedlead": null, "hs_time_in_subscriber": null, "hs_total_deal_value": null, "hs_unique_creation_key": null, "hs_updated_by_user_id": 12282590, "hs_user_ids_of_all_notification_followers": null, "hs_user_ids_of_all_notification_unfollowers": null, "hs_user_ids_of_all_owners": "12282590", "hubspot_owner_assigneddate": "2023-01-30T23:22:56.969000+00:00", "hubspot_owner_id": "52550153", "hubspot_team_id": null, "hubspotscore": null, "industry": "ACCOUNTING", "is_public": null, "lifecyclestage": "lead", "linkedin_company_page": "Test", "linkedinbio": null, "name": "Test", "notes_last_contacted": null, "notes_last_updated": "2023-02-03T07:00:00+00:00", "notes_next_activity_date": null, "num_associated_contacts": 0, "num_associated_deals": null, "num_contacted_notes": 0, "num_conversion_events": null, "num_conversion_events_cardinality_sum_d095f14b": null, "num_notes": 2, "numberofemployees": 1, "phone": null, "recent_conversion_date": null, "recent_conversion_date_timestamp_latest_value_72856da1": null, "recent_conversion_event_name": null, "recent_conversion_event_name_timestamp_latest_value_66c820bf": null, "recent_deal_amount": null, "recent_deal_close_date": null, "state": "Test", "timezone": "3", "total_money_raised": null, "total_revenue": null, "twitterbio": null, "twitterfollowers": null, "twitterhandle": null, "type": "PROSPECT", "web_technologies": null, "website": "test.test", "zip": "00000"}, "createdAt": "2023-01-30T23:22:56.969Z", "updatedAt": "2023-04-12T16:58:42.344Z", "archived": false}, "emitted_at": 1681392761156} {"stream": "contacts_list_memberships", "data": {"canonical-vid": 2501, "static-list-id": 60, "internal-list-id": 2147483643, "timestamp": 1675124235515, "vid": 2501, "is-member": true}, "emitted_at": 1675337054631} {"stream": "contacts_list_memberships", "data": {"canonical-vid": 2501, "static-list-id": 61, "internal-list-id": 2147483643, "timestamp": 1675124259228, "vid": 2501, "is-member": true}, "emitted_at": 1675337054632} {"stream": "contacts_list_memberships", "data": {"canonical-vid": 2501, "static-list-id": 166, "internal-list-id": 2147483643, "timestamp": 1675120848102, "vid": 2501, "is-member": true}, "emitted_at": 1675337054632} From 0c53367874a11303b28ab6265ca998a225ae24e4 Mon Sep 17 00:00:00 2001 From: Arsen Losenko <20901439+arsenlosenko@users.noreply.github.com> Date: Fri, 14 Apr 2023 18:07:03 +0300 Subject: [PATCH 067/187] Source Github: update expected records (#25148) * Source Github: update expected records * Update expected records * Move teams expected records to previous place --- .../source-github/integration_tests/expected_records.jsonl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/airbyte-integrations/connectors/source-github/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-github/integration_tests/expected_records.jsonl index 17a93070eab5..04375710c94f 100644 --- a/airbyte-integrations/connectors/source-github/integration_tests/expected_records.jsonl +++ b/airbyte-integrations/connectors/source-github/integration_tests/expected_records.jsonl @@ -26,10 +26,10 @@ {"stream":"reviews","data":{"node_id":"MDE3OlB1bGxSZXF1ZXN0UmV2aWV3NzQwNjU5Nzk4","id":740659798,"body":"Review commit for branch feature/branch_4","state":"COMMENTED","html_url":"https://github.com/airbytehq/integration-test/pull/5#pullrequestreview-740659798","author_association":"CONTRIBUTOR","submitted_at":"2021-08-27T15:43:42Z","created_at":"2021-08-27T15:43:42Z","updated_at":"2021-08-27T15:43:42Z","user":{"node_id":"MDQ6VXNlcjc0MzkwMQ==","id":743901,"login":"gaart","avatar_url":"https://avatars.githubusercontent.com/u/743901?v=4","html_url":"https://github.com/gaart","site_admin":false,"type":"User"},"repository":"airbytehq/integration-test","pull_request_url":"https://github.com/airbytehq/integration-test/pull/5","commit_id":"31a3e3f19fefce60fba6bfc69dd2b3fb5195a083","_links":{"html":{"href":"https://github.com/airbytehq/integration-test/pull/5#pullrequestreview-740659798"},"pull_request":{"href":"https://github.com/airbytehq/integration-test/pull/5"}}},"emitted_at":1677668764954} {"stream":"stargazers","data":{"starred_at":"2021-08-27T16:23:34Z","user":{"login":"VasylLazebnyk","id":68591643,"node_id":"MDQ6VXNlcjY4NTkxNjQz","avatar_url":"https://avatars.githubusercontent.com/u/68591643?v=4","gravatar_id":"","url":"https://api.github.com/users/VasylLazebnyk","html_url":"https://github.com/VasylLazebnyk","followers_url":"https://api.github.com/users/VasylLazebnyk/followers","following_url":"https://api.github.com/users/VasylLazebnyk/following{/other_user}","gists_url":"https://api.github.com/users/VasylLazebnyk/gists{/gist_id}","starred_url":"https://api.github.com/users/VasylLazebnyk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/VasylLazebnyk/subscriptions","organizations_url":"https://api.github.com/users/VasylLazebnyk/orgs","repos_url":"https://api.github.com/users/VasylLazebnyk/repos","events_url":"https://api.github.com/users/VasylLazebnyk/events{/privacy}","received_events_url":"https://api.github.com/users/VasylLazebnyk/received_events","type":"User","site_admin":false},"repository":"airbytehq/integration-test","user_id":68591643},"emitted_at":1677668765231} {"stream":"tags","data":{"name":"dev-0.9","zipball_url":"https://api.github.com/repos/airbytehq/integration-test/zipball/refs/tags/dev-0.9","tarball_url":"https://api.github.com/repos/airbytehq/integration-test/tarball/refs/tags/dev-0.9","commit":{"sha":"978753aeb56f7b49872279d1b491411a6235aa90","url":"https://api.github.com/repos/airbytehq/integration-test/commits/978753aeb56f7b49872279d1b491411a6235aa90"},"node_id":"MDM6UmVmNDAwMDUyMjEzOnJlZnMvdGFncy9kZXYtMC45","repository":"airbytehq/integration-test"},"emitted_at":1677668765467} -{"stream":"teams","data":{"name":"Zazmic","id":4432406,"node_id":"MDQ6VGVhbTQ0MzI0MDY=","slug":"zazmic","description":"","privacy":"closed","url":"https://api.github.com/organizations/59758427/team/4432406","html_url":"https://github.com/orgs/airbytehq/teams/zazmic","members_url":"https://api.github.com/organizations/59758427/team/4432406/members{/member}","repositories_url":"https://api.github.com/organizations/59758427/team/4432406/repos","permission":"pull","parent":null,"organization":"airbytehq"},"emitted_at":1677668765750} +{"stream":"teams", "data": {"name": "Zazmic", "id": 4432406, "node_id": "MDQ6VGVhbTQ0MzI0MDY=", "slug": "zazmic", "description": "", "privacy": "closed", "notification_setting": "notifications_enabled", "url": "https://api.github.com/organizations/59758427/team/4432406", "html_url": "https://github.com/orgs/airbytehq/teams/zazmic", "members_url": "https://api.github.com/organizations/59758427/team/4432406/members{/member}", "repositories_url": "https://api.github.com/organizations/59758427/team/4432406/repos", "permission": "pull", "parent": null, "organization": "airbytehq"}, "emitted_at": 1681307598422} {"stream":"users","data":{"login":"AirbyteEricksson","id":101604444,"node_id":"U_kgDOBg5cXA","avatar_url":"https://avatars.githubusercontent.com/u/101604444?v=4","gravatar_id":"","url":"https://api.github.com/users/AirbyteEricksson","html_url":"https://github.com/AirbyteEricksson","followers_url":"https://api.github.com/users/AirbyteEricksson/followers","following_url":"https://api.github.com/users/AirbyteEricksson/following{/other_user}","gists_url":"https://api.github.com/users/AirbyteEricksson/gists{/gist_id}","starred_url":"https://api.github.com/users/AirbyteEricksson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AirbyteEricksson/subscriptions","organizations_url":"https://api.github.com/users/AirbyteEricksson/orgs","repos_url":"https://api.github.com/users/AirbyteEricksson/repos","events_url":"https://api.github.com/users/AirbyteEricksson/events{/privacy}","received_events_url":"https://api.github.com/users/AirbyteEricksson/received_events","type":"User","site_admin":false,"organization":"airbytehq"},"emitted_at":1677668766142} {"stream":"workflows","data":{"id":22952989,"node_id":"W_kwDOF9hP9c4BXjwd","name":"Pull Request Labeler","path":".github/workflows/labeler.yml","state":"active","created_at":"2022-03-30T21:30:37.000+02:00","updated_at":"2022-03-30T21:30:37.000+02:00","url":"https://api.github.com/repos/airbytehq/integration-test/actions/workflows/22952989","html_url":"https://github.com/airbytehq/integration-test/blob/master/.github/workflows/labeler.yml","badge_url":"https://github.com/airbytehq/integration-test/workflows/Pull%20Request%20Labeler/badge.svg","repository":"airbytehq/integration-test"},"emitted_at":1677668766580} {"stream":"workflow_runs","data":{"id":3184250176,"name":"Pull Request Labeler","node_id":"WFR_kwLOF9hP9c69y81A","head_branch":"feature/branch_5","head_sha":"f71e5f6894578148d52b487dff07e55804fd9cfd","path":".github/workflows/labeler.yml","display_title":"New PR from feature/branch_5","run_number":3,"event":"pull_request_target","status":"completed","conclusion":"success","workflow_id":22952989,"check_suite_id":8611635614,"check_suite_node_id":"CS_kwDOF9hP9c8AAAACAUshng","url":"https://api.github.com/repos/airbytehq/integration-test/actions/runs/3184250176","html_url":"https://github.com/airbytehq/integration-test/actions/runs/3184250176","pull_requests":[{"url":"https://api.github.com/repos/airbytehq/integration-test/pulls/14","id":984835098,"number":14,"head":{"ref":"feature/branch_5","sha":"f71e5f6894578148d52b487dff07e55804fd9cfd","repo":{"id":400052213,"url":"https://api.github.com/repos/airbytehq/integration-test","name":"integration-test"}},"base":{"ref":"master","sha":"a12c9379604f7b32e54e5459122aa48473f806ee","repo":{"id":400052213,"url":"https://api.github.com/repos/airbytehq/integration-test","name":"integration-test"}}}],"created_at":"2022-10-04T17:41:18Z","updated_at":"2022-10-04T17:41:32Z","actor":{"login":"grubberr","id":195743,"node_id":"MDQ6VXNlcjE5NTc0Mw==","avatar_url":"https://avatars.githubusercontent.com/u/195743?v=4","gravatar_id":"","url":"https://api.github.com/users/grubberr","html_url":"https://github.com/grubberr","followers_url":"https://api.github.com/users/grubberr/followers","following_url":"https://api.github.com/users/grubberr/following{/other_user}","gists_url":"https://api.github.com/users/grubberr/gists{/gist_id}","starred_url":"https://api.github.com/users/grubberr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/grubberr/subscriptions","organizations_url":"https://api.github.com/users/grubberr/orgs","repos_url":"https://api.github.com/users/grubberr/repos","events_url":"https://api.github.com/users/grubberr/events{/privacy}","received_events_url":"https://api.github.com/users/grubberr/received_events","type":"User","site_admin":false},"run_attempt":1,"referenced_workflows":[],"run_started_at":"2022-10-04T17:41:18Z","triggering_actor":{"login":"grubberr","id":195743,"node_id":"MDQ6VXNlcjE5NTc0Mw==","avatar_url":"https://avatars.githubusercontent.com/u/195743?v=4","gravatar_id":"","url":"https://api.github.com/users/grubberr","html_url":"https://github.com/grubberr","followers_url":"https://api.github.com/users/grubberr/followers","following_url":"https://api.github.com/users/grubberr/following{/other_user}","gists_url":"https://api.github.com/users/grubberr/gists{/gist_id}","starred_url":"https://api.github.com/users/grubberr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/grubberr/subscriptions","organizations_url":"https://api.github.com/users/grubberr/orgs","repos_url":"https://api.github.com/users/grubberr/repos","events_url":"https://api.github.com/users/grubberr/events{/privacy}","received_events_url":"https://api.github.com/users/grubberr/received_events","type":"User","site_admin":false},"jobs_url":"https://api.github.com/repos/airbytehq/integration-test/actions/runs/3184250176/jobs","logs_url":"https://api.github.com/repos/airbytehq/integration-test/actions/runs/3184250176/logs","check_suite_url":"https://api.github.com/repos/airbytehq/integration-test/check-suites/8611635614","artifacts_url":"https://api.github.com/repos/airbytehq/integration-test/actions/runs/3184250176/artifacts","cancel_url":"https://api.github.com/repos/airbytehq/integration-test/actions/runs/3184250176/cancel","rerun_url":"https://api.github.com/repos/airbytehq/integration-test/actions/runs/3184250176/rerun","previous_attempt_url":null,"workflow_url":"https://api.github.com/repos/airbytehq/integration-test/actions/workflows/22952989","head_commit":{"id":"f71e5f6894578148d52b487dff07e55804fd9cfd","tree_id":"bb78ec62be8c5c640010e7c897f40932ce59e725","message":"file_5.txt updated\n\nSigned-off-by: Sergey Chvalyuk ","timestamp":"2022-10-04T17:41:08Z","author":{"name":"Sergey Chvalyuk","email":"grubberr@gmail.com"},"committer":{"name":"Sergey Chvalyuk","email":"grubberr@gmail.com"}},"repository":{"id":400052213,"node_id":"MDEwOlJlcG9zaXRvcnk0MDAwNTIyMTM=","name":"integration-test","full_name":"airbytehq/integration-test","private":false,"owner":{"login":"airbytehq","id":59758427,"node_id":"MDEyOk9yZ2FuaXphdGlvbjU5NzU4NDI3","avatar_url":"https://avatars.githubusercontent.com/u/59758427?v=4","gravatar_id":"","url":"https://api.github.com/users/airbytehq","html_url":"https://github.com/airbytehq","followers_url":"https://api.github.com/users/airbytehq/followers","following_url":"https://api.github.com/users/airbytehq/following{/other_user}","gists_url":"https://api.github.com/users/airbytehq/gists{/gist_id}","starred_url":"https://api.github.com/users/airbytehq/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/airbytehq/subscriptions","organizations_url":"https://api.github.com/users/airbytehq/orgs","repos_url":"https://api.github.com/users/airbytehq/repos","events_url":"https://api.github.com/users/airbytehq/events{/privacy}","received_events_url":"https://api.github.com/users/airbytehq/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/airbytehq/integration-test","description":"Used for integration testing the Github source connector","fork":false,"url":"https://api.github.com/repos/airbytehq/integration-test","forks_url":"https://api.github.com/repos/airbytehq/integration-test/forks","keys_url":"https://api.github.com/repos/airbytehq/integration-test/keys{/key_id}","collaborators_url":"https://api.github.com/repos/airbytehq/integration-test/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/airbytehq/integration-test/teams","hooks_url":"https://api.github.com/repos/airbytehq/integration-test/hooks","issue_events_url":"https://api.github.com/repos/airbytehq/integration-test/issues/events{/number}","events_url":"https://api.github.com/repos/airbytehq/integration-test/events","assignees_url":"https://api.github.com/repos/airbytehq/integration-test/assignees{/user}","branches_url":"https://api.github.com/repos/airbytehq/integration-test/branches{/branch}","tags_url":"https://api.github.com/repos/airbytehq/integration-test/tags","blobs_url":"https://api.github.com/repos/airbytehq/integration-test/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/airbytehq/integration-test/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/airbytehq/integration-test/git/refs{/sha}","trees_url":"https://api.github.com/repos/airbytehq/integration-test/git/trees{/sha}","statuses_url":"https://api.github.com/repos/airbytehq/integration-test/statuses/{sha}","languages_url":"https://api.github.com/repos/airbytehq/integration-test/languages","stargazers_url":"https://api.github.com/repos/airbytehq/integration-test/stargazers","contributors_url":"https://api.github.com/repos/airbytehq/integration-test/contributors","subscribers_url":"https://api.github.com/repos/airbytehq/integration-test/subscribers","subscription_url":"https://api.github.com/repos/airbytehq/integration-test/subscription","commits_url":"https://api.github.com/repos/airbytehq/integration-test/commits{/sha}","git_commits_url":"https://api.github.com/repos/airbytehq/integration-test/git/commits{/sha}","comments_url":"https://api.github.com/repos/airbytehq/integration-test/comments{/number}","issue_comment_url":"https://api.github.com/repos/airbytehq/integration-test/issues/comments{/number}","contents_url":"https://api.github.com/repos/airbytehq/integration-test/contents/{+path}","compare_url":"https://api.github.com/repos/airbytehq/integration-test/compare/{base}...{head}","merges_url":"https://api.github.com/repos/airbytehq/integration-test/merges","archive_url":"https://api.github.com/repos/airbytehq/integration-test/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/airbytehq/integration-test/downloads","issues_url":"https://api.github.com/repos/airbytehq/integration-test/issues{/number}","pulls_url":"https://api.github.com/repos/airbytehq/integration-test/pulls{/number}","milestones_url":"https://api.github.com/repos/airbytehq/integration-test/milestones{/number}","notifications_url":"https://api.github.com/repos/airbytehq/integration-test/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/airbytehq/integration-test/labels{/name}","releases_url":"https://api.github.com/repos/airbytehq/integration-test/releases{/id}","deployments_url":"https://api.github.com/repos/airbytehq/integration-test/deployments"},"head_repository":{"id":400052213,"node_id":"MDEwOlJlcG9zaXRvcnk0MDAwNTIyMTM=","name":"integration-test","full_name":"airbytehq/integration-test","private":false,"owner":{"login":"airbytehq","id":59758427,"node_id":"MDEyOk9yZ2FuaXphdGlvbjU5NzU4NDI3","avatar_url":"https://avatars.githubusercontent.com/u/59758427?v=4","gravatar_id":"","url":"https://api.github.com/users/airbytehq","html_url":"https://github.com/airbytehq","followers_url":"https://api.github.com/users/airbytehq/followers","following_url":"https://api.github.com/users/airbytehq/following{/other_user}","gists_url":"https://api.github.com/users/airbytehq/gists{/gist_id}","starred_url":"https://api.github.com/users/airbytehq/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/airbytehq/subscriptions","organizations_url":"https://api.github.com/users/airbytehq/orgs","repos_url":"https://api.github.com/users/airbytehq/repos","events_url":"https://api.github.com/users/airbytehq/events{/privacy}","received_events_url":"https://api.github.com/users/airbytehq/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/airbytehq/integration-test","description":"Used for integration testing the Github source connector","fork":false,"url":"https://api.github.com/repos/airbytehq/integration-test","forks_url":"https://api.github.com/repos/airbytehq/integration-test/forks","keys_url":"https://api.github.com/repos/airbytehq/integration-test/keys{/key_id}","collaborators_url":"https://api.github.com/repos/airbytehq/integration-test/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/airbytehq/integration-test/teams","hooks_url":"https://api.github.com/repos/airbytehq/integration-test/hooks","issue_events_url":"https://api.github.com/repos/airbytehq/integration-test/issues/events{/number}","events_url":"https://api.github.com/repos/airbytehq/integration-test/events","assignees_url":"https://api.github.com/repos/airbytehq/integration-test/assignees{/user}","branches_url":"https://api.github.com/repos/airbytehq/integration-test/branches{/branch}","tags_url":"https://api.github.com/repos/airbytehq/integration-test/tags","blobs_url":"https://api.github.com/repos/airbytehq/integration-test/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/airbytehq/integration-test/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/airbytehq/integration-test/git/refs{/sha}","trees_url":"https://api.github.com/repos/airbytehq/integration-test/git/trees{/sha}","statuses_url":"https://api.github.com/repos/airbytehq/integration-test/statuses/{sha}","languages_url":"https://api.github.com/repos/airbytehq/integration-test/languages","stargazers_url":"https://api.github.com/repos/airbytehq/integration-test/stargazers","contributors_url":"https://api.github.com/repos/airbytehq/integration-test/contributors","subscribers_url":"https://api.github.com/repos/airbytehq/integration-test/subscribers","subscription_url":"https://api.github.com/repos/airbytehq/integration-test/subscription","commits_url":"https://api.github.com/repos/airbytehq/integration-test/commits{/sha}","git_commits_url":"https://api.github.com/repos/airbytehq/integration-test/git/commits{/sha}","comments_url":"https://api.github.com/repos/airbytehq/integration-test/comments{/number}","issue_comment_url":"https://api.github.com/repos/airbytehq/integration-test/issues/comments{/number}","contents_url":"https://api.github.com/repos/airbytehq/integration-test/contents/{+path}","compare_url":"https://api.github.com/repos/airbytehq/integration-test/compare/{base}...{head}","merges_url":"https://api.github.com/repos/airbytehq/integration-test/merges","archive_url":"https://api.github.com/repos/airbytehq/integration-test/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/airbytehq/integration-test/downloads","issues_url":"https://api.github.com/repos/airbytehq/integration-test/issues{/number}","pulls_url":"https://api.github.com/repos/airbytehq/integration-test/pulls{/number}","milestones_url":"https://api.github.com/repos/airbytehq/integration-test/milestones{/number}","notifications_url":"https://api.github.com/repos/airbytehq/integration-test/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/airbytehq/integration-test/labels{/name}","releases_url":"https://api.github.com/repos/airbytehq/integration-test/releases{/id}","deployments_url":"https://api.github.com/repos/airbytehq/integration-test/deployments"}},"emitted_at":1677668766993} {"stream":"workflow_jobs","data":{"id":8705992587,"run_id":3184250176,"workflow_name":"Pull Request Labeler","head_branch":"feature/branch_5","run_url":"https://api.github.com/repos/airbytehq/integration-test/actions/runs/3184250176","run_attempt":1,"node_id":"CR_kwDOF9hP9c8AAAACBurniw","head_sha":"f71e5f6894578148d52b487dff07e55804fd9cfd","url":"https://api.github.com/repos/airbytehq/integration-test/actions/jobs/8705992587","html_url":"https://github.com/airbytehq/integration-test/actions/runs/3184250176/jobs/5192436167","status":"completed","conclusion":"success","created_at":"2022-10-04T17:41:20Z","started_at":"2022-10-04T17:41:27Z","completed_at":"2022-10-04T17:41:30Z","name":"triage","steps":[{"name":"Set up job","status":"completed","conclusion":"success","number":1,"started_at":"2022-10-04T10:41:26.000-07:00","completed_at":"2022-10-04T10:41:27.000-07:00"},{"name":"Run actions/labeler@v3","status":"completed","conclusion":"success","number":2,"started_at":"2022-10-04T10:41:27.000-07:00","completed_at":"2022-10-04T10:41:29.000-07:00"},{"name":"Complete job","status":"completed","conclusion":"success","number":3,"started_at":"2022-10-04T10:41:29.000-07:00","completed_at":"2022-10-04T10:41:29.000-07:00"}],"check_run_url":"https://api.github.com/repos/airbytehq/integration-test/check-runs/8705992587","labels":["ubuntu-latest"],"runner_id":1,"runner_name":"Hosted Agent","runner_group_id":2,"runner_group_name":"GitHub Actions","repository":"airbytehq/integration-test"},"emitted_at":1677668767830} {"stream":"team_members","data":{"login":"sherifnada","id":6246757,"node_id":"MDQ6VXNlcjYyNDY3NTc=","avatar_url":"https://avatars.githubusercontent.com/u/6246757?v=4","gravatar_id":"","url":"https://api.github.com/users/sherifnada","html_url":"https://github.com/sherifnada","followers_url":"https://api.github.com/users/sherifnada/followers","following_url":"https://api.github.com/users/sherifnada/following{/other_user}","gists_url":"https://api.github.com/users/sherifnada/gists{/gist_id}","starred_url":"https://api.github.com/users/sherifnada/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sherifnada/subscriptions","organizations_url":"https://api.github.com/users/sherifnada/orgs","repos_url":"https://api.github.com/users/sherifnada/repos","events_url":"https://api.github.com/users/sherifnada/events{/privacy}","received_events_url":"https://api.github.com/users/sherifnada/received_events","type":"User","site_admin":false,"organization":"airbytehq","team_slug":"zazmic"},"emitted_at":1677668768649} -{"stream":"team_memberships","data":{"state":"active","role":"maintainer","url":"https://api.github.com/organizations/59758427/team/4432406/memberships/sherifnada","organization":"airbytehq","team_slug":"zazmic","username":"sherifnada"},"emitted_at":1677668779034} +{"stream":"team_memberships","data":{"state":"active","role":"maintainer","url":"https://api.github.com/organizations/59758427/team/4432406/memberships/sherifnada","organization":"airbytehq","team_slug":"zazmic","username":"sherifnada"},"emitted_at":1677668779034} \ No newline at end of file From 4b2376b76e4ac518598a8689e6fdf40a6b3b8c55 Mon Sep 17 00:00:00 2001 From: Arsen Losenko <20901439+arsenlosenko@users.noreply.github.com> Date: Fri, 14 Apr 2023 18:40:06 +0300 Subject: [PATCH 068/187] Source Pipedrive: update expected records (#25199) * Source Pipedrive: update expected records * Update expected records * Removed expected record that is not needed --- .../integration_tests/expected_records.jsonl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/airbyte-integrations/connectors/source-pipedrive/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-pipedrive/integration_tests/expected_records.jsonl index f9097d3755b9..f6afedbdc80d 100644 --- a/airbyte-integrations/connectors/source-pipedrive/integration_tests/expected_records.jsonl +++ b/airbyte-integrations/connectors/source-pipedrive/integration_tests/expected_records.jsonl @@ -76,6 +76,6 @@ {"stream":"deal_products","data":{"id":11,"deal_id":17,"product_id":2,"product_variation_id":null,"name":"Item 1","order_nr":1,"item_price":100,"quantity":6,"discount_percentage":0,"duration":1,"duration_unit":null,"sum_no_discount":0,"sum":600,"currency":"USD","active_flag":true,"enabled_flag":true,"add_time":"2023-02-22 08:59:11","last_edit":"2023-02-22 08:59:11","comments":null,"tax":0,"quantity_formatted":"6","sum_formatted":"$600", "product": null},"emitted_at":1678280483291} {"stream":"deal_products","data":{"id":12,"deal_id":20,"product_id":7,"product_variation_id":null,"name":"Item 6","order_nr":1,"item_price":100,"quantity":30,"discount_percentage":0,"duration":1,"duration_unit":null,"sum_no_discount":0,"sum":3000,"currency":"USD","active_flag":true,"enabled_flag":true,"add_time":"2023-02-22 10:24:57","last_edit":"2023-02-22 10:24:57","comments":null,"tax":0,"quantity_formatted":"30","sum_formatted":"$3,000", "product": null},"emitted_at":1678280483602} {"stream":"deal_products","data":{"id":15,"deal_id":23,"product_id":11,"product_variation_id":null,"name":"Item 10","order_nr":1,"item_price":20,"quantity":120,"discount_percentage":0,"duration":1,"duration_unit":null,"sum_no_discount":0,"sum":2400,"currency":"USD","active_flag":true,"enabled_flag":true,"add_time":"2023-02-22 10:30:01","last_edit":"2023-02-22 10:30:01","comments":null,"tax":0.01,"quantity_formatted":"120","sum_formatted":"$2,400", "product": null},"emitted_at":1678280483969} -{"stream":"deal_fields","data":{"id":12453,"key":"title","name":"Title","order_nr":0,"field_type":"varchar","json_column_flag":false,"add_time":"2020-12-10 07:23:48","update_time":"2020-12-10 07:23:48","last_updated_by_user_id":null,"edit_flag":false,"details_visible_flag":false,"add_visible_flag":false,"important_flag":false,"bulk_edit_allowed":true,"filtering_allowed":true,"sortable_flag":true,"searchable_flag":false,"active_flag":true,"projects_detail_visible_flag":false,"show_in_pipelines":{"show_in_all":true},"use_field":"id","link":"/deal/","mandatory_flag":true},"emitted_at":1679400128221} -{"stream":"deal_fields","data":{"id":12454,"key":"creator_user_id","name":"Creator","order_nr":0,"field_type":"user","json_column_flag":false,"add_time":"2020-12-10 07:23:48","update_time":"2020-12-10 07:23:48","last_updated_by_user_id":null,"edit_flag":false,"details_visible_flag":false,"add_visible_flag":false,"important_flag":false,"bulk_edit_allowed":false,"filtering_allowed":true,"sortable_flag":true,"searchable_flag":false,"active_flag":true,"projects_detail_visible_flag":false,"show_in_pipelines":{"show_in_all":true},"mandatory_flag":true},"emitted_at":1679400128221} -{"stream":"deal_fields","data":{"id":12455,"key":"user_id","name":"Owner","order_nr":0,"field_type":"user","json_column_flag":false,"add_time":"2020-12-10 07:23:48","update_time":"2020-12-10 07:23:48","last_updated_by_user_id":null,"edit_flag":false,"details_visible_flag":true,"add_visible_flag":false,"important_flag":false,"bulk_edit_allowed":true,"filtering_allowed":true,"sortable_flag":true,"searchable_flag":false,"active_flag":true,"projects_detail_visible_flag":false,"show_in_pipelines":{"show_in_all":true},"mandatory_flag":true},"emitted_at":1679400128222} +{"stream": "deal_fields", "data": {"id": 12453, "key": "title", "name": "Title", "order_nr": 0, "field_type": "varchar", "json_column_flag": false, "add_time": "2020-12-10 07:23:48", "update_time": "2020-12-10 07:23:48", "last_updated_by_user_id": null, "edit_flag": false, "details_visible_flag": false, "add_visible_flag": false, "important_flag": false, "bulk_edit_allowed": true, "filtering_allowed": true, "sortable_flag": true, "searchable_flag": false, "active_flag": true, "projects_detail_visible_flag": false, "show_in_pipelines": {"show_in_all": true, "pipeline_ids": []}, "use_field": "id", "link": "/deal/", "mandatory_flag": true}, "emitted_at": 1681466011542} +{"stream": "deal_fields", "data": {"id": 12454, "key": "creator_user_id", "name": "Creator", "order_nr": 0, "field_type": "user", "json_column_flag": false, "add_time": "2020-12-10 07:23:48", "update_time": "2020-12-10 07:23:48", "last_updated_by_user_id": null, "edit_flag": false, "details_visible_flag": false, "add_visible_flag": false, "important_flag": false, "bulk_edit_allowed": false, "filtering_allowed": true, "sortable_flag": true, "searchable_flag": false, "active_flag": true, "projects_detail_visible_flag": false, "show_in_pipelines": {"show_in_all": true, "pipeline_ids": []}, "mandatory_flag": true}, "emitted_at": 1681466011542} +{"stream": "deal_fields", "data": {"id": 12455, "key": "user_id", "name": "Owner", "order_nr": 0, "field_type": "user", "json_column_flag": false, "add_time": "2020-12-10 07:23:48", "update_time": "2020-12-10 07:23:48", "last_updated_by_user_id": null, "edit_flag": false, "details_visible_flag": true, "add_visible_flag": false, "important_flag": false, "bulk_edit_allowed": true, "filtering_allowed": true, "sortable_flag": true, "searchable_flag": false, "active_flag": true, "projects_detail_visible_flag": false, "show_in_pipelines": {"show_in_all": true, "pipeline_ids": []}, "mandatory_flag": true}, "emitted_at": 1681466011542} \ No newline at end of file From 0eea77f38e8c769055226098637cf92969ce8e13 Mon Sep 17 00:00:00 2001 From: Arsen Losenko <20901439+arsenlosenko@users.noreply.github.com> Date: Fri, 14 Apr 2023 18:53:11 +0300 Subject: [PATCH 069/187] Source Zendesk Support: update expected records (#25206) --- .../integration_tests/expected_records.jsonl | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/airbyte-integrations/connectors/source-zendesk-support/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-zendesk-support/integration_tests/expected_records.jsonl index 06d364a37fcd..f01f6ee70b50 100644 --- a/airbyte-integrations/connectors/source-zendesk-support/integration_tests/expected_records.jsonl +++ b/airbyte-integrations/connectors/source-zendesk-support/integration_tests/expected_records.jsonl @@ -4,7 +4,6 @@ {"stream":"group_memberships","data":{"url":"https://d3v-airbyte.zendesk.com/api/v2/group_memberships/5059403826063.json","id":5059403826063,"user_id":360786799676,"group_id":5059403825935,"default":false,"created_at":"2022-06-29T12:30:07Z","updated_at":"2022-06-29T12:30:07Z"},"emitted_at":1673880693965} {"stream":"group_memberships","data":{"url":"https://d3v-airbyte.zendesk.com/api/v2/group_memberships/5059436285071.json","id":5059436285071,"user_id":361084605116,"group_id":5059436284943,"default":false,"created_at":"2022-06-29T12:30:48Z","updated_at":"2022-06-29T12:30:48Z"},"emitted_at":1673880693966} {"stream":"group_memberships","data":{"url":"https://d3v-airbyte.zendesk.com/api/v2/group_memberships/5059439464207.json","id":5059439464207,"user_id":361089721035,"group_id":5059439464079,"default":false,"created_at":"2022-06-29T12:29:26Z","updated_at":"2022-06-29T12:29:26Z"},"emitted_at":1673880693966} -{"stream":"group_memberships","data":{"url":"https://d3v-airbyte.zendesk.com/api/v2/group_memberships/5059439847183.json","id":5059439847183,"user_id":360786799676,"group_id":5059436114575,"default":false,"created_at":"2022-06-29T12:30:30Z","updated_at":"2022-06-29T12:30:30Z"},"emitted_at":1673880693966} {"stream":"group_memberships","data":{"url":"https://d3v-airbyte.zendesk.com/api/v2/group_memberships/5059439847695.json","id":5059439847695,"user_id":361089721035,"group_id":5059436114575,"default":false,"created_at":"2022-06-29T12:30:30Z","updated_at":"2022-06-29T12:30:30Z"},"emitted_at":1673880693966} {"stream":"group_memberships","data":{"url":"https://d3v-airbyte.zendesk.com/api/v2/group_memberships/5059452990863.json","id":5059452990863,"user_id":361084605116,"group_id":5059452990735,"default":false,"created_at":"2022-06-29T12:29:36Z","updated_at":"2022-06-29T12:29:36Z"},"emitted_at":1673880693966} {"stream":"group_memberships","data":{"url":"https://d3v-airbyte.zendesk.com/api/v2/group_memberships/5059453143055.json","id":5059453143055,"user_id":361084605116,"group_id":5059473603087,"default":false,"created_at":"2022-06-29T12:29:56Z","updated_at":"2022-06-29T12:29:56Z"},"emitted_at":1673880693966} @@ -20,8 +19,8 @@ {"stream":"groups","data":{"url":"https://d3v-airbyte.zendesk.com/api/v2/groups/5060066676751.json","id":5060066676751,"is_public":true,"name":"Group 17","description":"","default":false,"deleted":false,"created_at":"2022-06-29T16:12:14Z","updated_at":"2022-06-29T16:12:14Z"},"emitted_at":1673880695076} {"stream":"macros","data":{"url":"https://d3v-airbyte.zendesk.com/api/v2/macros/360011363556.json","id":360011363556,"title":"Customer not responding","active":true,"updated_at":"2020-12-11T18:34:06Z","created_at":"2020-12-11T18:34:06Z","default":false,"position":9999,"description":null,"actions":[{"field":"status","value":"pending"},{"field":"comment_value","value":"Hello {{ticket.requester.name}}. Our agent {{current_user.name}} has tried to contact you about this request but we haven't heard back from you yet. Please let us know if we can be of further assistance. Thanks. "}],"restriction":null,"raw_title":"Customer not responding"},"emitted_at":1673880696782} {"stream":"macros","data":{"url":"https://d3v-airbyte.zendesk.com/api/v2/macros/360011363536.json","id":360011363536,"title":"Downgrade and inform","active":true,"updated_at":"2020-12-11T18:34:06Z","created_at":"2020-12-11T18:34:06Z","default":false,"position":9999,"description":null,"actions":[{"field":"priority","value":"low"},{"field":"comment_value","value":"We're currently experiencing unusually high traffic. We'll get back to you as soon as possible."}],"restriction":null,"raw_title":"Downgrade and inform"},"emitted_at":1673880696782} -{"stream":"organizations","data":{"url":"https://d3v-airbyte.zendesk.com/api/v2/organizations/360033549136.json","id":360033549136,"name":"Airbyte","shared_tickets":false,"shared_comments":false,"external_id":null,"created_at":"2020-12-11T18:34:05Z","updated_at":"2020-12-11T18:34:05Z","domain_names":[],"details":null,"notes":null,"group_id":null,"tags":[],"organization_fields":{}},"emitted_at":1673880697932} -{"stream":"organizations","data":{"url":"https://d3v-airbyte.zendesk.com/api/v2/organizations/360045373216.json","id":360045373216,"name":"ressssssss","shared_tickets":false,"shared_comments":false,"external_id":null,"created_at":"2021-07-15T18:29:14Z","updated_at":"2021-07-15T18:29:14Z","domain_names":[],"details":"","notes":"","group_id":null,"tags":[],"organization_fields":{}},"emitted_at":1673880697933} +{"stream": "organizations", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/organizations/360033549136.json", "id": 360033549136, "name": "Airbyte", "shared_tickets": true, "shared_comments": true, "external_id": null, "created_at": "2020-12-11T18:34:05Z", "updated_at": "2023-04-13T14:51:21Z", "domain_names": ["cloud.airbyte.com"], "details": "test", "notes": "test", "group_id": 6770788212111, "tags": ["test"], "organization_fields": {}}, "emitted_at": 1681484466079} +{"stream": "organizations", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/organizations/360045373216.json", "id": 360045373216, "name": "ressssssss", "shared_tickets": false, "shared_comments": false, "external_id": null, "created_at": "2021-07-15T18:29:14Z", "updated_at": "2021-07-15T18:29:14Z", "domain_names": [], "details": "", "notes": "", "group_id": null, "tags": [], "organization_fields": {}}, "emitted_at": 1681484466080} {"stream":"satisfaction_ratings","data":{"url":"https://d3v-airbyte.zendesk.com/api/v2/satisfaction_ratings/4992997209743.json","id":4992997209743,"assignee_id":null,"group_id":null,"requester_id":4992781783439,"ticket_id":121,"score":"offered","created_at":"2022-06-17T16:01:42Z","updated_at":"2022-06-17T16:01:42Z","comment":null},"emitted_at":1673880699052} {"stream":"satisfaction_ratings","data":{"url":"https://d3v-airbyte.zendesk.com/api/v2/satisfaction_ratings/4993646311567.json","id":4993646311567,"assignee_id":null,"group_id":null,"requester_id":4993467856015,"ticket_id":122,"score":"offered","created_at":"2022-06-17T21:01:41Z","updated_at":"2022-06-17T21:01:41Z","comment":null},"emitted_at":1673880699053} {"stream":"satisfaction_ratings","data":{"url":"https://d3v-airbyte.zendesk.com/api/v2/satisfaction_ratings/5138125924367.json","id":5138125924367,"assignee_id":null,"group_id":null,"requester_id":5137812260495,"ticket_id":123,"score":"offered","created_at":"2022-07-13T16:02:03Z","updated_at":"2022-07-13T16:02:03Z","comment":null},"emitted_at":1673880699054} @@ -98,6 +97,6 @@ {"stream":"users","data":{"id":5527080499599,"url":"https://d3v-airbyte.zendesk.com/api/v2/users/5527080499599.json","name":"Caller +1 (732) 769-8461","email":null,"created_at":"2022-09-19T14:43:41Z","updated_at":"2022-09-19T14:43:41Z","time_zone":"Pacific/Noumea","iana_time_zone":"Pacific/Noumea","phone":"+17327698461","shared_phone_number":false,"photo":null,"locale_id":1,"locale":"en-US","organization_id":null,"role":"end-user","verified":true,"external_id":null,"tags":[],"alias":null,"active":true,"shared":false,"shared_agent":false,"last_login_at":null,"two_factor_auth_enabled":false,"signature":null,"details":null,"notes":null,"role_type":null,"custom_role_id":null,"moderator":false,"ticket_restriction":"requested","only_private_comments":false,"restricted_agent":true,"suspended":false,"default_group_id":null,"report_csv":false,"user_fields":{}},"emitted_at":1673880717536} {"stream":"users","data":{"id":5527111815439,"url":"https://d3v-airbyte.zendesk.com/api/v2/users/5527111815439.json","name":"Caller +1 (234) 601-8567","email":null,"created_at":"2022-09-19T14:53:48Z","updated_at":"2022-09-19T14:53:49Z","time_zone":"Pacific/Noumea","iana_time_zone":"Pacific/Noumea","phone":"+12346018567","shared_phone_number":false,"photo":null,"locale_id":1,"locale":"en-US","organization_id":null,"role":"end-user","verified":true,"external_id":null,"tags":[],"alias":null,"active":true,"shared":false,"shared_agent":false,"last_login_at":null,"two_factor_auth_enabled":false,"signature":null,"details":null,"notes":null,"role_type":null,"custom_role_id":null,"moderator":false,"ticket_restriction":"requested","only_private_comments":false,"restricted_agent":true,"suspended":false,"default_group_id":null,"report_csv":false,"user_fields":{}},"emitted_at":1673880717536} {"stream": "brands", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/brands/360000358316.json", "id": 360000358316, "name": "Airbyte", "brand_url": "https://d3v-airbyte.zendesk.com", "subdomain": "d3v-airbyte", "host_mapping": null, "has_help_center": false, "help_center_state": "disabled", "active": true, "default": true, "is_deleted": false, "logo": null, "ticket_form_ids": [360000084116], "signature_template": "{{agent.signature}}", "created_at": "2020-12-11T18:34:04Z", "updated_at": "2020-12-11T18:34:09Z"}, "emitted_at": 1673881264500} -{"stream": "custom_roles", "data": {"id": 360000210636, "name": "Advisor", "description": "Can automate ticket workflows, manage channels and make private comments on tickets", "role_type": 0, "created_at": "2020-12-11T18:34:36Z", "updated_at": "2020-12-11T18:34:36Z", "configuration": {"chat_access": true, "manage_business_rules": true, "manage_dynamic_content": false, "manage_extensions_and_channels": true, "manage_facebook": true, "ticket_deletion": false, "view_deleted_tickets": false, "ticket_tag_editing": true, "twitter_search_access": false, "forum_access_restricted_content": false, "end_user_list_access": "full", "ticket_access": "within-groups", "ticket_comment_access": "none", "voice_access": true, "moderate_forums": false, "light_agent": false, "side_conversation_create": true, "group_access": false, "organization_editing": false, "organization_notes_editing": false, "assign_tickets_to_any_group": false, "end_user_profile_access": "readonly", "explore_access": "readonly", "forum_access": "readonly", "macro_access": "full", "report_access": "none", "ticket_editing": true, "ticket_merge": false, "view_access": "full", "user_view_access": "full", "voice_dashboard_access": false, "manage_contextual_workspaces": false, "manage_organization_fields": false, "manage_ticket_fields": false, "manage_ticket_forms": false, "manage_user_fields": false, "manage_automations": true, "manage_skills": true, "manage_slas": true, "manage_triggers": true, "ticket_redaction": false}, "team_member_count": 0}, "emitted_at": 1678472142307} +{"stream": "custom_roles", "data": {"id": 360000210636, "name": "Advisor", "description": "Can automate ticket workflows, manage channels and make private comments on tickets", "role_type": 0, "created_at": "2020-12-11T18:34:36Z", "updated_at": "2020-12-11T18:34:36Z", "configuration": {"chat_access": true, "manage_business_rules": true, "manage_dynamic_content": false, "manage_extensions_and_channels": true, "manage_facebook": true, "ticket_deletion": false, "view_deleted_tickets": false, "ticket_tag_editing": true, "twitter_search_access": false, "forum_access_restricted_content": false, "end_user_list_access": "full", "ticket_access": "within-groups", "ticket_comment_access": "none", "voice_access": true, "moderate_forums": false, "light_agent": false, "side_conversation_create": true, "group_access": false, "organization_editing": false, "organization_notes_editing": false, "assign_tickets_to_any_group": false, "end_user_profile_access": "readonly", "explore_access": "readonly", "forum_access": "readonly", "macro_access": "full", "report_access": "none", "ticket_editing": true, "ticket_merge": false, "view_access": "full", "user_view_access": "full", "voice_dashboard_access": false, "manage_contextual_workspaces": false, "manage_organization_fields": false, "manage_ticket_fields": false, "manage_ticket_forms": false, "manage_user_fields": false, "manage_automations": true, "manage_skills": true, "manage_slas": true, "manage_triggers": true, "ticket_redaction": false, "manage_roles": "none"}, "team_member_count": 0}, "emitted_at": 1681484993833} {"stream": "tags", "data": {"name": "test", "count": 1}, "emitted_at": 1681311413435} {"stream": "tags", "data": {"name": "tag1204", "count": 1}, "emitted_at": 1681311413435} From 3360cd46315aa6918ccfd7e0c004c2967009ad15 Mon Sep 17 00:00:00 2001 From: Arsen Losenko <20901439+arsenlosenko@users.noreply.github.com> Date: Fri, 14 Apr 2023 19:24:53 +0300 Subject: [PATCH 070/187] Source Twilio: update expected records (#25200) --- .../integration_tests/expected_records.jsonl | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/airbyte-integrations/connectors/source-twilio/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-twilio/integration_tests/expected_records.jsonl index 85f747be5cc2..81a7a2964500 100644 --- a/airbyte-integrations/connectors/source-twilio/integration_tests/expected_records.jsonl +++ b/airbyte-integrations/connectors/source-twilio/integration_tests/expected_records.jsonl @@ -149,17 +149,16 @@ {"stream": "incoming_phone_numbers", "data": {"sid": "PN8c084924cc64659889aaa98af937de56", "account_sid": "ACdade166c12e160e9ed0a6088226718fb", "friendly_name": "Test phone number 7", "phone_number": "+12232174137", "voice_url": "https://handler.twilio.com/twiml/EH3c0946e5d905d6563a71ef432575a1ff", "voice_method": "POST", "voice_fallback_url": "", "voice_fallback_method": "POST", "voice_caller_id_lookup": false, "date_created": "2023-02-16T14:29:03Z", "date_updated": "2023-03-27T08:01:20Z", "sms_url": "https://webhooks.twilio.com/v1/Accounts/ACdade166c12e160e9ed0a6088226718fb/Flows/FWbd726b7110b21294a9f27a47f4ab0080", "sms_method": "POST", "sms_fallback_url": "", "sms_fallback_method": "POST", "address_requirements": "none", "beta": false, "capabilities": {"voice": true, "sms": true, "mms": true}, "status_callback": "", "status_callback_method": "POST", "api_version": "2010-04-01", "voice_application_sid": "", "sms_application_sid": "", "origin": "twilio", "trunk_sid": null, "emergency_status": "Active", "emergency_address_sid": null, "emergency_address_status": "unregistered", "address_sid": "ADa29b1ee20cf61d213f7d7f1a3298309a", "identity_sid": null, "bundle_sid": null, "uri": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/IncomingPhoneNumbers/PN8c084924cc64659889aaa98af937de56.json", "status": "in-use"}, "emitted_at": 1680350316245} {"stream": "incoming_phone_numbers", "data": {"sid": "PN63c288b22a08ce3339371b4e6e10877e", "account_sid": "ACdade166c12e160e9ed0a6088226718fb", "friendly_name": "Test phone number 4", "phone_number": "+19704017747", "voice_url": "https://handler.twilio.com/twiml/EHcdb15ded7c5343ca4e52d85d4d94ebad", "voice_method": "POST", "voice_fallback_url": "", "voice_fallback_method": "POST", "voice_caller_id_lookup": false, "date_created": "2023-02-16T10:07:11Z", "date_updated": "2023-03-27T08:01:44Z", "sms_url": "https://webhooks.twilio.com/v1/Accounts/ACdade166c12e160e9ed0a6088226718fb/Flows/FWbd726b7110b21294a9f27a47f4ab0080", "sms_method": "POST", "sms_fallback_url": "", "sms_fallback_method": "POST", "address_requirements": "none", "beta": false, "capabilities": {"voice": true, "sms": true, "mms": true}, "status_callback": "", "status_callback_method": "POST", "api_version": "2010-04-01", "voice_application_sid": "", "sms_application_sid": "", "origin": "twilio", "trunk_sid": null, "emergency_status": "Active", "emergency_address_sid": null, "emergency_address_status": "unregistered", "address_sid": "ADc5e31ae6ae46befadd5c3f053c5a7153", "identity_sid": null, "bundle_sid": null, "uri": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/IncomingPhoneNumbers/PN63c288b22a08ce3339371b4e6e10877e.json", "status": "in-use"}, "emitted_at": 1680350316247} {"stream": "incoming_phone_numbers", "data": {"sid": "PN24bccae6bf6f7aeb9ab1d4aad7e443af", "account_sid": "AC4cac489c46197c9ebc91c840120a4dee", "friendly_name": "Dependent Phone Number 1", "phone_number": "+14066376761", "voice_url": "https://demo.twilio.com/welcome/voice/", "voice_method": "POST", "voice_fallback_url": "", "voice_fallback_method": "POST", "voice_caller_id_lookup": false, "date_created": "2023-03-23T13:04:22Z", "date_updated": "2023-03-23T13:05:32Z", "sms_url": "https://demo.twilio.com/welcome/sms/reply", "sms_method": "POST", "sms_fallback_url": "", "sms_fallback_method": "POST", "address_requirements": "none", "beta": false, "capabilities": {"voice": true, "sms": true, "mms": true}, "status_callback": "", "status_callback_method": "POST", "api_version": "2010-04-01", "voice_application_sid": "", "sms_application_sid": "", "origin": "twilio", "trunk_sid": null, "emergency_status": "Active", "emergency_address_sid": null, "emergency_address_status": "unregistered", "address_sid": null, "identity_sid": null, "bundle_sid": null, "uri": "/2010-04-01/Accounts/AC4cac489c46197c9ebc91c840120a4dee/IncomingPhoneNumbers/PN24bccae6bf6f7aeb9ab1d4aad7e443af.json", "status": "in-use"}, "emitted_at": 1680350316559} -{"stream": "calls", "data": {"date_updated": "2022-06-17T22:28:34Z", "price_unit": "USD", "parent_call_sid": null, "caller_name": null, "duration": 61, "from": "+15312726629", "to": "+12056561170", "annotation": null, "answered_by": null, "sid": "CAe71d3c7533543b5c81b1be3fc5affa2b", "queue_time": 0, "price": -0.017, "api_version": "2010-04-01", "status": "completed", "direction": "inbound", "start_time": "2022-06-17T22:27:33Z", "date_created": "2022-06-17T22:27:32Z", "from_formatted": "(531) 272-6629", "group_sid": null, "trunk_sid": "", "forwarded_from": "+12056561170", "uri": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe71d3c7533543b5c81b1be3fc5affa2b.json", "account_sid": "ACdade166c12e160e9ed0a6088226718fb", "end_time": "2022-06-17T22:28:34Z", "to_formatted": "(205) 656-1170", "phone_number_sid": "PNe40bd7f3ac343b32fd51275d2d5b3dcc", "subresource_uris": {"feedback": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe71d3c7533543b5c81b1be3fc5affa2b/Feedback.json", "notifications": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe71d3c7533543b5c81b1be3fc5affa2b/Notifications.json", "recordings": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe71d3c7533543b5c81b1be3fc5affa2b/Recordings.json", "streams": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe71d3c7533543b5c81b1be3fc5affa2b/Streams.json", "payments": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe71d3c7533543b5c81b1be3fc5affa2b/Payments.json", "siprec": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe71d3c7533543b5c81b1be3fc5affa2b/Siprec.json", "events": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe71d3c7533543b5c81b1be3fc5affa2b/Events.json", "feedback_summaries": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/FeedbackSummary.json", "user_defined_messages": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe71d3c7533543b5c81b1be3fc5affa2b/UserDefinedMessages.json", "user_defined_message_subscriptions": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe71d3c7533543b5c81b1be3fc5affa2b/UserDefinedMessageSubscriptions.json"}}, "emitted_at": 1655893249727} -{"stream": "calls", "data": {"date_updated": "2022-06-17T13:36:17Z", "price_unit": "USD", "parent_call_sid": null, "caller_name": null, "duration": 96, "from": "+17372040136", "to": "+12056561170", "annotation": null, "answered_by": null, "sid": "CA0a47223735162e1a7df2738327bda2ab", "queue_time": 0, "price": -0.017, "api_version": "2010-04-01", "status": "completed", "direction": "inbound", "start_time": "2022-06-17T13:34:41Z", "date_created": "2022-06-17T13:34:41Z", "from_formatted": "(737) 204-0136", "group_sid": null, "trunk_sid": "", "forwarded_from": "+12056561170", "uri": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA0a47223735162e1a7df2738327bda2ab.json", "account_sid": "ACdade166c12e160e9ed0a6088226718fb", "end_time": "2022-06-17T13:36:17Z", "to_formatted": "(205) 656-1170", "phone_number_sid": "PNe40bd7f3ac343b32fd51275d2d5b3dcc", "subresource_uris": {"feedback": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA0a47223735162e1a7df2738327bda2ab/Feedback.json", "notifications": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA0a47223735162e1a7df2738327bda2ab/Notifications.json", "recordings": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA0a47223735162e1a7df2738327bda2ab/Recordings.json", "streams": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA0a47223735162e1a7df2738327bda2ab/Streams.json", "payments": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA0a47223735162e1a7df2738327bda2ab/Payments.json", "siprec": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA0a47223735162e1a7df2738327bda2ab/Siprec.json", "events": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA0a47223735162e1a7df2738327bda2ab/Events.json", "feedback_summaries": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/FeedbackSummary.json", "user_defined_messages": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA0a47223735162e1a7df2738327bda2ab/UserDefinedMessages.json", "user_defined_message_subscriptions": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA0a47223735162e1a7df2738327bda2ab/UserDefinedMessageSubscriptions.json"}}, "emitted_at": 1655893249739} -{"stream": "calls", "data": {"date_updated": "2022-06-16T20:02:43Z", "price_unit": "USD", "parent_call_sid": null, "caller_name": null, "duration": 124, "from": "+17372040136", "to": "+12056561170", "annotation": null, "answered_by": null, "sid": "CAace5c8813c499253bbbff29ad0da0ccb", "queue_time": 0, "price": -0.0255, "api_version": "2010-04-01", "status": "completed", "direction": "inbound", "start_time": "2022-06-16T20:00:39Z", "date_created": "2022-06-16T20:00:39Z", "from_formatted": "(737) 204-0136", "group_sid": null, "trunk_sid": "", "forwarded_from": "+12056561170", "uri": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAace5c8813c499253bbbff29ad0da0ccb.json", "account_sid": "ACdade166c12e160e9ed0a6088226718fb", "end_time": "2022-06-16T20:02:43Z", "to_formatted": "(205) 656-1170", "phone_number_sid": "PNe40bd7f3ac343b32fd51275d2d5b3dcc", "subresource_uris": {"feedback": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAace5c8813c499253bbbff29ad0da0ccb/Feedback.json", "notifications": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAace5c8813c499253bbbff29ad0da0ccb/Notifications.json", "recordings": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAace5c8813c499253bbbff29ad0da0ccb/Recordings.json", "streams": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAace5c8813c499253bbbff29ad0da0ccb/Streams.json", "payments": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAace5c8813c499253bbbff29ad0da0ccb/Payments.json", "siprec": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAace5c8813c499253bbbff29ad0da0ccb/Siprec.json", "events": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAace5c8813c499253bbbff29ad0da0ccb/Events.json", "feedback_summaries": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/FeedbackSummary.json", "user_defined_messages": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAace5c8813c499253bbbff29ad0da0ccb/UserDefinedMessages.json", "user_defined_message_subscriptions": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAace5c8813c499253bbbff29ad0da0ccb/UserDefinedMessageSubscriptions.json"}}, "emitted_at": 1655893249745} -{"stream": "calls", "data": {"date_updated": "2022-06-02T12:54:05Z", "price_unit": "USD", "parent_call_sid": null, "caller_name": null, "duration": 5, "from": "+12059675338", "to": "+12056561170", "annotation": null, "answered_by": null, "sid": "CAa24e9fbcb6eba3c8cfefc248a3c0b5b4", "queue_time": 0, "price": -0.0085, "api_version": "2010-04-01", "status": "completed", "direction": "inbound", "start_time": "2022-06-02T12:54:00Z", "date_created": "2022-06-02T12:54:00Z", "from_formatted": "(205) 967-5338", "group_sid": null, "trunk_sid": "", "forwarded_from": "+12056561170", "uri": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa24e9fbcb6eba3c8cfefc248a3c0b5b4.json", "account_sid": "ACdade166c12e160e9ed0a6088226718fb", "end_time": "2022-06-02T12:54:05Z", "to_formatted": "(205) 656-1170", "phone_number_sid": "PNe40bd7f3ac343b32fd51275d2d5b3dcc", "subresource_uris": {"feedback": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa24e9fbcb6eba3c8cfefc248a3c0b5b4/Feedback.json", "notifications": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa24e9fbcb6eba3c8cfefc248a3c0b5b4/Notifications.json", "recordings": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa24e9fbcb6eba3c8cfefc248a3c0b5b4/Recordings.json", "streams": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa24e9fbcb6eba3c8cfefc248a3c0b5b4/Streams.json", "payments": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa24e9fbcb6eba3c8cfefc248a3c0b5b4/Payments.json", "siprec": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa24e9fbcb6eba3c8cfefc248a3c0b5b4/Siprec.json", "events": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa24e9fbcb6eba3c8cfefc248a3c0b5b4/Events.json", "feedback_summaries": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/FeedbackSummary.json", "user_defined_messages": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa24e9fbcb6eba3c8cfefc248a3c0b5b4/UserDefinedMessages.json", "user_defined_message_subscriptions": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa24e9fbcb6eba3c8cfefc248a3c0b5b4/UserDefinedMessageSubscriptions.json"}}, "emitted_at": 1655893249752} -{"stream": "calls", "data": {"date_updated": "2022-05-26T22:14:18Z", "price_unit": "USD", "parent_call_sid": null, "caller_name": null, "duration": 69, "from": "+13343585579", "to": "+12056561170", "annotation": null, "answered_by": null, "sid": "CA65f8d6ee9f8783233750f2b0f99cf1b3", "queue_time": 0, "price": -0.017, "api_version": "2010-04-01", "status": "completed", "direction": "inbound", "start_time": "2022-05-26T22:13:09Z", "date_created": "2022-05-26T22:13:09Z", "from_formatted": "(334) 358-5579", "group_sid": null, "trunk_sid": "", "forwarded_from": "+12056561170", "uri": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA65f8d6ee9f8783233750f2b0f99cf1b3.json", "account_sid": "ACdade166c12e160e9ed0a6088226718fb", "end_time": "2022-05-26T22:14:18Z", "to_formatted": "(205) 656-1170", "phone_number_sid": "PNe40bd7f3ac343b32fd51275d2d5b3dcc", "subresource_uris": {"feedback": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA65f8d6ee9f8783233750f2b0f99cf1b3/Feedback.json", "notifications": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA65f8d6ee9f8783233750f2b0f99cf1b3/Notifications.json", "recordings": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA65f8d6ee9f8783233750f2b0f99cf1b3/Recordings.json", "streams": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA65f8d6ee9f8783233750f2b0f99cf1b3/Streams.json", "payments": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA65f8d6ee9f8783233750f2b0f99cf1b3/Payments.json", "siprec": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA65f8d6ee9f8783233750f2b0f99cf1b3/Siprec.json", "events": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA65f8d6ee9f8783233750f2b0f99cf1b3/Events.json", "feedback_summaries": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/FeedbackSummary.json", "user_defined_messages": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA65f8d6ee9f8783233750f2b0f99cf1b3/UserDefinedMessages.json", "user_defined_message_subscriptions": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA65f8d6ee9f8783233750f2b0f99cf1b3/UserDefinedMessageSubscriptions.json"}}, "emitted_at": 1655893249756} -{"stream": "calls", "data": {"date_updated": "2022-05-24T23:00:40Z", "price_unit": "USD", "parent_call_sid": null, "caller_name": null, "duration": 31, "from": "+14156896198", "to": "+12056561170", "annotation": null, "answered_by": null, "sid": "CA5b6907d5ebca072c9bd0f46952b886b6", "queue_time": 0, "price": -0.0085, "api_version": "2010-04-01", "status": "completed", "direction": "inbound", "start_time": "2022-05-24T23:00:09Z", "date_created": "2022-05-24T23:00:09Z", "from_formatted": "(415) 689-6198", "group_sid": null, "trunk_sid": "", "forwarded_from": "+12056561170", "uri": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA5b6907d5ebca072c9bd0f46952b886b6.json", "account_sid": "ACdade166c12e160e9ed0a6088226718fb", "end_time": "2022-05-24T23:00:40Z", "to_formatted": "(205) 656-1170", "phone_number_sid": "PNe40bd7f3ac343b32fd51275d2d5b3dcc", "subresource_uris": {"feedback": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA5b6907d5ebca072c9bd0f46952b886b6/Feedback.json", "notifications": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA5b6907d5ebca072c9bd0f46952b886b6/Notifications.json", "recordings": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA5b6907d5ebca072c9bd0f46952b886b6/Recordings.json", "streams": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA5b6907d5ebca072c9bd0f46952b886b6/Streams.json", "payments": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA5b6907d5ebca072c9bd0f46952b886b6/Payments.json", "siprec": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA5b6907d5ebca072c9bd0f46952b886b6/Siprec.json", "events": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA5b6907d5ebca072c9bd0f46952b886b6/Events.json", "feedback_summaries": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/FeedbackSummary.json", "user_defined_messages": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA5b6907d5ebca072c9bd0f46952b886b6/UserDefinedMessages.json", "user_defined_message_subscriptions": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA5b6907d5ebca072c9bd0f46952b886b6/UserDefinedMessageSubscriptions.json"}}, "emitted_at": 1655893249759} -{"stream": "calls", "data": {"date_updated": "2022-05-11T18:21:15Z", "price_unit": "USD", "parent_call_sid": null, "caller_name": null, "duration": 23, "from": "+12137661124", "to": "+12056561170", "annotation": null, "answered_by": null, "sid": "CA696bd2d2e37ef8501f443807dce444a9", "queue_time": 0, "price": -0.0085, "api_version": "2010-04-01", "status": "completed", "direction": "inbound", "start_time": "2022-05-11T18:20:52Z", "date_created": "2022-05-11T18:20:52Z", "from_formatted": "(213) 766-1124", "group_sid": null, "trunk_sid": "", "forwarded_from": "+12056561170", "uri": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA696bd2d2e37ef8501f443807dce444a9.json", "account_sid": "ACdade166c12e160e9ed0a6088226718fb", "end_time": "2022-05-11T18:21:15Z", "to_formatted": "(205) 656-1170", "phone_number_sid": "PNe40bd7f3ac343b32fd51275d2d5b3dcc", "subresource_uris": {"feedback": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA696bd2d2e37ef8501f443807dce444a9/Feedback.json", "notifications": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA696bd2d2e37ef8501f443807dce444a9/Notifications.json", "recordings": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA696bd2d2e37ef8501f443807dce444a9/Recordings.json", "streams": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA696bd2d2e37ef8501f443807dce444a9/Streams.json", "payments": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA696bd2d2e37ef8501f443807dce444a9/Payments.json", "siprec": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA696bd2d2e37ef8501f443807dce444a9/Siprec.json", "events": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA696bd2d2e37ef8501f443807dce444a9/Events.json", "feedback_summaries": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/FeedbackSummary.json", "user_defined_messages": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA696bd2d2e37ef8501f443807dce444a9/UserDefinedMessages.json", "user_defined_message_subscriptions": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA696bd2d2e37ef8501f443807dce444a9/UserDefinedMessageSubscriptions.json"}}, "emitted_at": 1655893249762} -{"stream": "calls", "data": {"date_updated": "2022-04-20T17:33:25Z", "price_unit": "USD", "parent_call_sid": null, "caller_name": null, "duration": 5, "from": "+12059736828", "to": "+12056561170", "annotation": null, "answered_by": null, "sid": "CAe86d27d7aba7c857135b46f52f578d0b", "queue_time": 0, "price": -0.0085, "api_version": "2010-04-01", "status": "completed", "direction": "inbound", "start_time": "2022-04-20T17:33:20Z", "date_created": "2022-04-20T17:33:20Z", "from_formatted": "(205) 973-6828", "group_sid": null, "trunk_sid": "", "forwarded_from": "+12056561170", "uri": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe86d27d7aba7c857135b46f52f578d0b.json", "account_sid": "ACdade166c12e160e9ed0a6088226718fb", "end_time": "2022-04-20T17:33:25Z", "to_formatted": "(205) 656-1170", "phone_number_sid": "PNe40bd7f3ac343b32fd51275d2d5b3dcc", "subresource_uris": {"feedback": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe86d27d7aba7c857135b46f52f578d0b/Feedback.json", "notifications": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe86d27d7aba7c857135b46f52f578d0b/Notifications.json", "recordings": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe86d27d7aba7c857135b46f52f578d0b/Recordings.json", "streams": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe86d27d7aba7c857135b46f52f578d0b/Streams.json", "payments": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe86d27d7aba7c857135b46f52f578d0b/Payments.json", "siprec": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe86d27d7aba7c857135b46f52f578d0b/Siprec.json", "events": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe86d27d7aba7c857135b46f52f578d0b/Events.json", "feedback_summaries": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/FeedbackSummary.json", "user_defined_messages": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe86d27d7aba7c857135b46f52f578d0b/UserDefinedMessages.json", "user_defined_message_subscriptions": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe86d27d7aba7c857135b46f52f578d0b/UserDefinedMessageSubscriptions.json"}}, "emitted_at": 1655893249765} -{"stream": "calls", "data": {"date_updated": "2022-04-06T21:01:01Z", "price_unit": "USD", "parent_call_sid": null, "caller_name": null, "duration": 6, "from": "+13017951000", "to": "+12056561170", "annotation": null, "answered_by": null, "sid": "CAade9599c9cf53091c1787898093e2675", "queue_time": 0, "price": -0.0085, "api_version": "2010-04-01", "status": "completed", "direction": "inbound", "start_time": "2022-04-06T21:00:55Z", "date_created": "2022-04-06T21:00:55Z", "from_formatted": "(301) 795-1000", "group_sid": null, "trunk_sid": "", "forwarded_from": "+12056561170", "uri": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAade9599c9cf53091c1787898093e2675.json", "account_sid": "ACdade166c12e160e9ed0a6088226718fb", "end_time": "2022-04-06T21:01:01Z", "to_formatted": "(205) 656-1170", "phone_number_sid": "PNe40bd7f3ac343b32fd51275d2d5b3dcc", "subresource_uris": {"feedback": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAade9599c9cf53091c1787898093e2675/Feedback.json", "notifications": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAade9599c9cf53091c1787898093e2675/Notifications.json", "recordings": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAade9599c9cf53091c1787898093e2675/Recordings.json", "streams": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAade9599c9cf53091c1787898093e2675/Streams.json", "payments": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAade9599c9cf53091c1787898093e2675/Payments.json", "siprec": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAade9599c9cf53091c1787898093e2675/Siprec.json", "events": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAade9599c9cf53091c1787898093e2675/Events.json", "feedback_summaries": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/FeedbackSummary.json", "user_defined_messages": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAade9599c9cf53091c1787898093e2675/UserDefinedMessages.json", "user_defined_message_subscriptions": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAade9599c9cf53091c1787898093e2675/UserDefinedMessageSubscriptions.json"}}, "emitted_at": 1655893249767} -{"stream": "calls", "data": {"date_updated": "2022-04-06T20:57:37Z", "price_unit": "USD", "parent_call_sid": null, "caller_name": null, "duration": 6, "from": "+13017951000", "to": "+12056561170", "annotation": null, "answered_by": null, "sid": "CAa3887d4de4849a630bc369351f300171", "queue_time": 0, "price": -0.0085, "api_version": "2010-04-01", "status": "completed", "direction": "inbound", "start_time": "2022-04-06T20:57:31Z", "date_created": "2022-04-06T20:57:31Z", "from_formatted": "(301) 795-1000", "group_sid": null, "trunk_sid": "", "forwarded_from": "+12056561170", "uri": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa3887d4de4849a630bc369351f300171.json", "account_sid": "ACdade166c12e160e9ed0a6088226718fb", "end_time": "2022-04-06T20:57:37Z", "to_formatted": "(205) 656-1170", "phone_number_sid": "PNe40bd7f3ac343b32fd51275d2d5b3dcc", "subresource_uris": {"feedback": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa3887d4de4849a630bc369351f300171/Feedback.json", "notifications": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa3887d4de4849a630bc369351f300171/Notifications.json", "recordings": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa3887d4de4849a630bc369351f300171/Recordings.json", "streams": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa3887d4de4849a630bc369351f300171/Streams.json", "payments": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa3887d4de4849a630bc369351f300171/Payments.json", "siprec": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa3887d4de4849a630bc369351f300171/Siprec.json", "events": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa3887d4de4849a630bc369351f300171/Events.json", "feedback_summaries": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/FeedbackSummary.json", "user_defined_messages": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa3887d4de4849a630bc369351f300171/UserDefinedMessages.json", "user_defined_message_subscriptions": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa3887d4de4849a630bc369351f300171/UserDefinedMessageSubscriptions.json"}}, "emitted_at": 1655893249769} -{"stream": "calls", "data": {"date_updated": "2022-03-13T23:56:37Z", "price_unit": "USD", "parent_call_sid": null, "caller_name": null, "duration": 13, "from": "+12059203962", "to": "+12056561170", "annotation": null, "answered_by": null, "sid": "CA78611ecf5e7f101b1a59be31b8f520f7", "queue_time": 0, "price": -0.0085, "api_version": "2010-04-01", "status": "completed", "direction": "inbound", "start_time": "2022-03-13T23:56:24Z", "date_created": "2022-03-13T23:56:24Z", "from_formatted": "(205) 920-3962", "group_sid": null, "trunk_sid": "", "forwarded_from": "+12056561170", "uri": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA78611ecf5e7f101b1a59be31b8f520f7.json", "account_sid": "ACdade166c12e160e9ed0a6088226718fb", "end_time": "2022-03-13T23:56:37Z", "to_formatted": "(205) 656-1170", "phone_number_sid": "PNe40bd7f3ac343b32fd51275d2d5b3dcc", "subresource_uris": {"feedback": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA78611ecf5e7f101b1a59be31b8f520f7/Feedback.json", "notifications": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA78611ecf5e7f101b1a59be31b8f520f7/Notifications.json", "recordings": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA78611ecf5e7f101b1a59be31b8f520f7/Recordings.json", "streams": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA78611ecf5e7f101b1a59be31b8f520f7/Streams.json", "payments": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA78611ecf5e7f101b1a59be31b8f520f7/Payments.json", "siprec": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA78611ecf5e7f101b1a59be31b8f520f7/Siprec.json", "events": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA78611ecf5e7f101b1a59be31b8f520f7/Events.json", "feedback_summaries": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/FeedbackSummary.json", "user_defined_messages": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA78611ecf5e7f101b1a59be31b8f520f7/UserDefinedMessages.json", "user_defined_message_subscriptions": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA78611ecf5e7f101b1a59be31b8f520f7/UserDefinedMessageSubscriptions.json"}}, "emitted_at": 1655893249771} +{"stream": "calls", "data": {"date_updated": "2022-06-17T22:28:34Z", "price_unit": "USD", "parent_call_sid": null, "caller_name": null, "duration": 61, "from": "+15312726629", "to": "+12056561170", "annotation": null, "answered_by": null, "sid": "CAe71d3c7533543b5c81b1be3fc5affa2b", "queue_time": 0, "price": -0.017, "api_version": "2010-04-01", "status": "completed", "direction": "inbound", "start_time": "2022-06-17T22:27:33Z", "date_created": "2022-06-17T22:27:32Z", "from_formatted": "(531) 272-6629", "group_sid": null, "trunk_sid": "", "forwarded_from": "+12056561170", "uri": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe71d3c7533543b5c81b1be3fc5affa2b.json", "account_sid": "ACdade166c12e160e9ed0a6088226718fb", "end_time": "2022-06-17T22:28:34Z", "to_formatted": "(205) 656-1170", "phone_number_sid": "PNe40bd7f3ac343b32fd51275d2d5b3dcc", "subresource_uris": {"feedback": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe71d3c7533543b5c81b1be3fc5affa2b/Feedback.json", "user_defined_messages": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe71d3c7533543b5c81b1be3fc5affa2b/UserDefinedMessages.json", "notifications": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe71d3c7533543b5c81b1be3fc5affa2b/Notifications.json", "recordings": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe71d3c7533543b5c81b1be3fc5affa2b/Recordings.json", "streams": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe71d3c7533543b5c81b1be3fc5affa2b/Streams.json", "payments": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe71d3c7533543b5c81b1be3fc5affa2b/Payments.json", "user_defined_message_subscriptions": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe71d3c7533543b5c81b1be3fc5affa2b/UserDefinedMessageSubscriptions.json", "siprec": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe71d3c7533543b5c81b1be3fc5affa2b/Siprec.json", "events": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe71d3c7533543b5c81b1be3fc5affa2b/Events.json", "feedback_summaries": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/FeedbackSummary.json"}}, "emitted_at": 1681459251178} +{"stream": "calls", "data": {"date_updated": "2022-06-17T13:36:17Z", "price_unit": "USD", "parent_call_sid": null, "caller_name": null, "duration": 96, "from": "+17372040136", "to": "+12056561170", "annotation": null, "answered_by": null, "sid": "CA0a47223735162e1a7df2738327bda2ab", "queue_time": 0, "price": -0.017, "api_version": "2010-04-01", "status": "completed", "direction": "inbound", "start_time": "2022-06-17T13:34:41Z", "date_created": "2022-06-17T13:34:41Z", "from_formatted": "(737) 204-0136", "group_sid": null, "trunk_sid": "", "forwarded_from": "+12056561170", "uri": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA0a47223735162e1a7df2738327bda2ab.json", "account_sid": "ACdade166c12e160e9ed0a6088226718fb", "end_time": "2022-06-17T13:36:17Z", "to_formatted": "(205) 656-1170", "phone_number_sid": "PNe40bd7f3ac343b32fd51275d2d5b3dcc", "subresource_uris": {"feedback": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA0a47223735162e1a7df2738327bda2ab/Feedback.json", "user_defined_messages": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA0a47223735162e1a7df2738327bda2ab/UserDefinedMessages.json", "notifications": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA0a47223735162e1a7df2738327bda2ab/Notifications.json", "recordings": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA0a47223735162e1a7df2738327bda2ab/Recordings.json", "streams": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA0a47223735162e1a7df2738327bda2ab/Streams.json", "payments": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA0a47223735162e1a7df2738327bda2ab/Payments.json", "user_defined_message_subscriptions": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA0a47223735162e1a7df2738327bda2ab/UserDefinedMessageSubscriptions.json", "siprec": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA0a47223735162e1a7df2738327bda2ab/Siprec.json", "events": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA0a47223735162e1a7df2738327bda2ab/Events.json", "feedback_summaries": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/FeedbackSummary.json"}}, "emitted_at": 1681459251177} +{"stream": "calls", "data": {"date_updated": "2022-06-16T20:02:43Z", "price_unit": "USD", "parent_call_sid": null, "caller_name": null, "duration": 124, "from": "+17372040136", "to": "+12056561170", "annotation": null, "answered_by": null, "sid": "CAace5c8813c499253bbbff29ad0da0ccb", "queue_time": 0, "price": -0.0255, "api_version": "2010-04-01", "status": "completed", "direction": "inbound", "start_time": "2022-06-16T20:00:39Z", "date_created": "2022-06-16T20:00:39Z", "from_formatted": "(737) 204-0136", "group_sid": null, "trunk_sid": "", "forwarded_from": "+12056561170", "uri": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAace5c8813c499253bbbff29ad0da0ccb.json", "account_sid": "ACdade166c12e160e9ed0a6088226718fb", "end_time": "2022-06-16T20:02:43Z", "to_formatted": "(205) 656-1170", "phone_number_sid": "PNe40bd7f3ac343b32fd51275d2d5b3dcc", "subresource_uris": {"feedback": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAace5c8813c499253bbbff29ad0da0ccb/Feedback.json", "user_defined_messages": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAace5c8813c499253bbbff29ad0da0ccb/UserDefinedMessages.json", "notifications": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAace5c8813c499253bbbff29ad0da0ccb/Notifications.json", "recordings": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAace5c8813c499253bbbff29ad0da0ccb/Recordings.json", "streams": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAace5c8813c499253bbbff29ad0da0ccb/Streams.json", "payments": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAace5c8813c499253bbbff29ad0da0ccb/Payments.json", "user_defined_message_subscriptions": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAace5c8813c499253bbbff29ad0da0ccb/UserDefinedMessageSubscriptions.json", "siprec": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAace5c8813c499253bbbff29ad0da0ccb/Siprec.json", "events": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAace5c8813c499253bbbff29ad0da0ccb/Events.json", "feedback_summaries": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/FeedbackSummary.json"}}, "emitted_at": 1681459251176} +{"stream": "calls", "data": {"date_updated": "2022-06-02T12:54:05Z", "price_unit": "USD", "parent_call_sid": null, "caller_name": null, "duration": 5, "from": "+12059675338", "to": "+12056561170", "annotation": null, "answered_by": null, "sid": "CAa24e9fbcb6eba3c8cfefc248a3c0b5b4", "queue_time": 0, "price": -0.0085, "api_version": "2010-04-01", "status": "completed", "direction": "inbound", "start_time": "2022-06-02T12:54:00Z", "date_created": "2022-06-02T12:54:00Z", "from_formatted": "(205) 967-5338", "group_sid": null, "trunk_sid": "", "forwarded_from": "+12056561170", "uri": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa24e9fbcb6eba3c8cfefc248a3c0b5b4.json", "account_sid": "ACdade166c12e160e9ed0a6088226718fb", "end_time": "2022-06-02T12:54:05Z", "to_formatted": "(205) 656-1170", "phone_number_sid": "PNe40bd7f3ac343b32fd51275d2d5b3dcc", "subresource_uris": {"feedback": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa24e9fbcb6eba3c8cfefc248a3c0b5b4/Feedback.json", "user_defined_messages": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa24e9fbcb6eba3c8cfefc248a3c0b5b4/UserDefinedMessages.json", "notifications": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa24e9fbcb6eba3c8cfefc248a3c0b5b4/Notifications.json", "recordings": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa24e9fbcb6eba3c8cfefc248a3c0b5b4/Recordings.json", "streams": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa24e9fbcb6eba3c8cfefc248a3c0b5b4/Streams.json", "payments": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa24e9fbcb6eba3c8cfefc248a3c0b5b4/Payments.json", "user_defined_message_subscriptions": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa24e9fbcb6eba3c8cfefc248a3c0b5b4/UserDefinedMessageSubscriptions.json", "siprec": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa24e9fbcb6eba3c8cfefc248a3c0b5b4/Siprec.json", "events": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa24e9fbcb6eba3c8cfefc248a3c0b5b4/Events.json", "feedback_summaries": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/FeedbackSummary.json"}}, "emitted_at": 1681459251174} +{"stream": "calls", "data": {"date_updated": "2022-05-26T22:14:18Z", "price_unit": "USD", "parent_call_sid": null, "caller_name": null, "duration": 69, "from": "+13343585579", "to": "+12056561170", "annotation": null, "answered_by": null, "sid": "CA65f8d6ee9f8783233750f2b0f99cf1b3", "queue_time": 0, "price": -0.017, "api_version": "2010-04-01", "status": "completed", "direction": "inbound", "start_time": "2022-05-26T22:13:09Z", "date_created": "2022-05-26T22:13:09Z", "from_formatted": "(334) 358-5579", "group_sid": null, "trunk_sid": "", "forwarded_from": "+12056561170", "uri": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA65f8d6ee9f8783233750f2b0f99cf1b3.json", "account_sid": "ACdade166c12e160e9ed0a6088226718fb", "end_time": "2022-05-26T22:14:18Z", "to_formatted": "(205) 656-1170", "phone_number_sid": "PNe40bd7f3ac343b32fd51275d2d5b3dcc", "subresource_uris": {"feedback": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA65f8d6ee9f8783233750f2b0f99cf1b3/Feedback.json", "user_defined_messages": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA65f8d6ee9f8783233750f2b0f99cf1b3/UserDefinedMessages.json", "notifications": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA65f8d6ee9f8783233750f2b0f99cf1b3/Notifications.json", "recordings": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA65f8d6ee9f8783233750f2b0f99cf1b3/Recordings.json", "streams": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA65f8d6ee9f8783233750f2b0f99cf1b3/Streams.json", "payments": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA65f8d6ee9f8783233750f2b0f99cf1b3/Payments.json", "user_defined_message_subscriptions": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA65f8d6ee9f8783233750f2b0f99cf1b3/UserDefinedMessageSubscriptions.json", "siprec": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA65f8d6ee9f8783233750f2b0f99cf1b3/Siprec.json", "events": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA65f8d6ee9f8783233750f2b0f99cf1b3/Events.json", "feedback_summaries": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/FeedbackSummary.json"}}, "emitted_at": 1681459251172} +{"stream": "calls", "data": {"date_updated": "2022-05-24T23:00:40Z", "price_unit": "USD", "parent_call_sid": null, "caller_name": null, "duration": 31, "from": "+14156896198", "to": "+12056561170", "annotation": null, "answered_by": null, "sid": "CA5b6907d5ebca072c9bd0f46952b886b6", "queue_time": 0, "price": -0.0085, "api_version": "2010-04-01", "status": "completed", "direction": "inbound", "start_time": "2022-05-24T23:00:09Z", "date_created": "2022-05-24T23:00:09Z", "from_formatted": "(415) 689-6198", "group_sid": null, "trunk_sid": "", "forwarded_from": "+12056561170", "uri": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA5b6907d5ebca072c9bd0f46952b886b6.json", "account_sid": "ACdade166c12e160e9ed0a6088226718fb", "end_time": "2022-05-24T23:00:40Z", "to_formatted": "(205) 656-1170", "phone_number_sid": "PNe40bd7f3ac343b32fd51275d2d5b3dcc", "subresource_uris": {"feedback": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA5b6907d5ebca072c9bd0f46952b886b6/Feedback.json", "user_defined_messages": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA5b6907d5ebca072c9bd0f46952b886b6/UserDefinedMessages.json", "notifications": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA5b6907d5ebca072c9bd0f46952b886b6/Notifications.json", "recordings": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA5b6907d5ebca072c9bd0f46952b886b6/Recordings.json", "streams": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA5b6907d5ebca072c9bd0f46952b886b6/Streams.json", "payments": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA5b6907d5ebca072c9bd0f46952b886b6/Payments.json", "user_defined_message_subscriptions": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA5b6907d5ebca072c9bd0f46952b886b6/UserDefinedMessageSubscriptions.json", "siprec": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA5b6907d5ebca072c9bd0f46952b886b6/Siprec.json", "events": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA5b6907d5ebca072c9bd0f46952b886b6/Events.json", "feedback_summaries": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/FeedbackSummary.json"}}, "emitted_at": 1681459251171} +{"stream": "calls", "data": {"date_updated": "2022-05-11T18:21:15Z", "price_unit": "USD", "parent_call_sid": null, "caller_name": null, "duration": 23, "from": "+12137661124", "to": "+12056561170", "annotation": null, "answered_by": null, "sid": "CA696bd2d2e37ef8501f443807dce444a9", "queue_time": 0, "price": -0.0085, "api_version": "2010-04-01", "status": "completed", "direction": "inbound", "start_time": "2022-05-11T18:20:52Z", "date_created": "2022-05-11T18:20:52Z", "from_formatted": "(213) 766-1124", "group_sid": null, "trunk_sid": "", "forwarded_from": "+12056561170", "uri": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA696bd2d2e37ef8501f443807dce444a9.json", "account_sid": "ACdade166c12e160e9ed0a6088226718fb", "end_time": "2022-05-11T18:21:15Z", "to_formatted": "(205) 656-1170", "phone_number_sid": "PNe40bd7f3ac343b32fd51275d2d5b3dcc", "subresource_uris": {"feedback": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA696bd2d2e37ef8501f443807dce444a9/Feedback.json", "user_defined_messages": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA696bd2d2e37ef8501f443807dce444a9/UserDefinedMessages.json", "notifications": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA696bd2d2e37ef8501f443807dce444a9/Notifications.json", "recordings": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA696bd2d2e37ef8501f443807dce444a9/Recordings.json", "streams": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA696bd2d2e37ef8501f443807dce444a9/Streams.json", "payments": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA696bd2d2e37ef8501f443807dce444a9/Payments.json", "user_defined_message_subscriptions": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA696bd2d2e37ef8501f443807dce444a9/UserDefinedMessageSubscriptions.json", "siprec": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA696bd2d2e37ef8501f443807dce444a9/Siprec.json", "events": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CA696bd2d2e37ef8501f443807dce444a9/Events.json", "feedback_summaries": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/FeedbackSummary.json"}}, "emitted_at": 1681459251170} +{"stream": "calls", "data": {"date_updated": "2022-04-20T17:33:25Z", "price_unit": "USD", "parent_call_sid": null, "caller_name": null, "duration": 5, "from": "+12059736828", "to": "+12056561170", "annotation": null, "answered_by": null, "sid": "CAe86d27d7aba7c857135b46f52f578d0b", "queue_time": 0, "price": -0.0085, "api_version": "2010-04-01", "status": "completed", "direction": "inbound", "start_time": "2022-04-20T17:33:20Z", "date_created": "2022-04-20T17:33:20Z", "from_formatted": "(205) 973-6828", "group_sid": null, "trunk_sid": "", "forwarded_from": "+12056561170", "uri": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe86d27d7aba7c857135b46f52f578d0b.json", "account_sid": "ACdade166c12e160e9ed0a6088226718fb", "end_time": "2022-04-20T17:33:25Z", "to_formatted": "(205) 656-1170", "phone_number_sid": "PNe40bd7f3ac343b32fd51275d2d5b3dcc", "subresource_uris": {"feedback": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe86d27d7aba7c857135b46f52f578d0b/Feedback.json", "user_defined_messages": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe86d27d7aba7c857135b46f52f578d0b/UserDefinedMessages.json", "notifications": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe86d27d7aba7c857135b46f52f578d0b/Notifications.json", "recordings": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe86d27d7aba7c857135b46f52f578d0b/Recordings.json", "streams": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe86d27d7aba7c857135b46f52f578d0b/Streams.json", "payments": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe86d27d7aba7c857135b46f52f578d0b/Payments.json", "user_defined_message_subscriptions": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe86d27d7aba7c857135b46f52f578d0b/UserDefinedMessageSubscriptions.json", "siprec": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe86d27d7aba7c857135b46f52f578d0b/Siprec.json", "events": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAe86d27d7aba7c857135b46f52f578d0b/Events.json", "feedback_summaries": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/FeedbackSummary.json"}}, "emitted_at": 1681459251168} +{"stream": "calls", "data": {"date_updated": "2022-04-06T21:01:01Z", "price_unit": "USD", "parent_call_sid": null, "caller_name": null, "duration": 6, "from": "+13017951000", "to": "+12056561170", "annotation": null, "answered_by": null, "sid": "CAade9599c9cf53091c1787898093e2675", "queue_time": 0, "price": -0.0085, "api_version": "2010-04-01", "status": "completed", "direction": "inbound", "start_time": "2022-04-06T21:00:55Z", "date_created": "2022-04-06T21:00:55Z", "from_formatted": "(301) 795-1000", "group_sid": null, "trunk_sid": "", "forwarded_from": "+12056561170", "uri": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAade9599c9cf53091c1787898093e2675.json", "account_sid": "ACdade166c12e160e9ed0a6088226718fb", "end_time": "2022-04-06T21:01:01Z", "to_formatted": "(205) 656-1170", "phone_number_sid": "PNe40bd7f3ac343b32fd51275d2d5b3dcc", "subresource_uris": {"feedback": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAade9599c9cf53091c1787898093e2675/Feedback.json", "user_defined_messages": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAade9599c9cf53091c1787898093e2675/UserDefinedMessages.json", "notifications": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAade9599c9cf53091c1787898093e2675/Notifications.json", "recordings": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAade9599c9cf53091c1787898093e2675/Recordings.json", "streams": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAade9599c9cf53091c1787898093e2675/Streams.json", "payments": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAade9599c9cf53091c1787898093e2675/Payments.json", "user_defined_message_subscriptions": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAade9599c9cf53091c1787898093e2675/UserDefinedMessageSubscriptions.json", "siprec": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAade9599c9cf53091c1787898093e2675/Siprec.json", "events": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAade9599c9cf53091c1787898093e2675/Events.json", "feedback_summaries": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/FeedbackSummary.json"}}, "emitted_at": 1681459251167} +{"stream": "calls", "data": {"date_updated": "2022-04-06T20:57:37Z", "price_unit": "USD", "parent_call_sid": null, "caller_name": null, "duration": 6, "from": "+13017951000", "to": "+12056561170", "annotation": null, "answered_by": null, "sid": "CAa3887d4de4849a630bc369351f300171", "queue_time": 0, "price": -0.0085, "api_version": "2010-04-01", "status": "completed", "direction": "inbound", "start_time": "2022-04-06T20:57:31Z", "date_created": "2022-04-06T20:57:31Z", "from_formatted": "(301) 795-1000", "group_sid": null, "trunk_sid": "", "forwarded_from": "+12056561170", "uri": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa3887d4de4849a630bc369351f300171.json", "account_sid": "ACdade166c12e160e9ed0a6088226718fb", "end_time": "2022-04-06T20:57:37Z", "to_formatted": "(205) 656-1170", "phone_number_sid": "PNe40bd7f3ac343b32fd51275d2d5b3dcc", "subresource_uris": {"feedback": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa3887d4de4849a630bc369351f300171/Feedback.json", "user_defined_messages": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa3887d4de4849a630bc369351f300171/UserDefinedMessages.json", "notifications": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa3887d4de4849a630bc369351f300171/Notifications.json", "recordings": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa3887d4de4849a630bc369351f300171/Recordings.json", "streams": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa3887d4de4849a630bc369351f300171/Streams.json", "payments": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa3887d4de4849a630bc369351f300171/Payments.json", "user_defined_message_subscriptions": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa3887d4de4849a630bc369351f300171/UserDefinedMessageSubscriptions.json", "siprec": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa3887d4de4849a630bc369351f300171/Siprec.json", "events": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/CAa3887d4de4849a630bc369351f300171/Events.json", "feedback_summaries": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Calls/FeedbackSummary.json"}}, "emitted_at": 1681459251164} {"stream": "conferences", "data": {"status": "completed", "reason_conference_ended": "last-participant-left", "date_updated": "2022-09-23T14:44:41Z", "region": "us1", "friendly_name": "test_conference", "uri": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Conferences/CFca0fa08200f55a6d60779d18b644a675.json", "account_sid": "ACdade166c12e160e9ed0a6088226718fb", "call_sid_ending_conference": "CA8858f240bdccfb3393def1682c2dbdf0", "sid": "CFca0fa08200f55a6d60779d18b644a675", "date_created": "2022-09-23T14:44:11Z", "api_version": "2010-04-01", "subresource_uris": {"participants": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Conferences/CFca0fa08200f55a6d60779d18b644a675/Participants.json", "recordings": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/Conferences/CFca0fa08200f55a6d60779d18b644a675/Recordings.json"}}, "emitted_at": 1663955824121} {"stream": "outgoing_caller_ids", "data": {"phone_number": "+14153597503", "date_updated": "2020-11-17T04:17:37Z", "friendly_name": "(415) 359-7503", "uri": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/OutgoingCallerIds/PN16ba111c0df5756cfe37044ed0ee3136.json", "account_sid": "ACdade166c12e160e9ed0a6088226718fb", "sid": "PN16ba111c0df5756cfe37044ed0ee3136", "date_created": "2020-11-17T04:17:37Z"}, "emitted_at": 1655893253929} {"stream": "outgoing_caller_ids", "data": {"phone_number": "+18023494963", "date_updated": "2020-12-11T04:28:02Z", "friendly_name": "(802) 349-4963", "uri": "/2010-04-01/Accounts/ACdade166c12e160e9ed0a6088226718fb/OutgoingCallerIds/PN726d635f970c30193cd12e7b994510a1.json", "account_sid": "ACdade166c12e160e9ed0a6088226718fb", "sid": "PN726d635f970c30193cd12e7b994510a1", "date_created": "2020-12-11T04:28:02Z"}, "emitted_at": 1655893253943} From 1fdf3b8c01038901d404f03251d006b6d62b973e Mon Sep 17 00:00:00 2001 From: Alexandre Girard Date: Fri, 14 Apr 2023 10:23:59 -0700 Subject: [PATCH 071/187] connector builder: Emit message at start of slice (#25180) * Move condition for yielding the slice message to an overwritable method * Automated Commit - Formatting Changes * yield the slice log messages * same for incremental * refactor * Revert "refactor" This reverts commit c594365bd82c059df9d3d41656d58d426278aa78. * move flag from factory to source * set the flag * remove debug print * halfmock * clean up * Add a test for a single page * Add another test * Pass the flag * rename --------- Co-authored-by: girarda --- .../connector_builder_handler.py | 4 +- .../airbyte_cdk/sources/abstract_source.py | 12 +- .../manifest_declarative_source.py | 22 ++- .../test_connector_builder_handler.py | 163 +++++++++++++++--- 4 files changed, 173 insertions(+), 28 deletions(-) diff --git a/airbyte-cdk/python/airbyte_cdk/connector_builder/connector_builder_handler.py b/airbyte-cdk/python/airbyte_cdk/connector_builder/connector_builder_handler.py index 76909c8ca6d4..5637b0955e34 100644 --- a/airbyte-cdk/python/airbyte_cdk/connector_builder/connector_builder_handler.py +++ b/airbyte-cdk/python/airbyte_cdk/connector_builder/connector_builder_handler.py @@ -45,7 +45,9 @@ def get_limits(config: Mapping[str, Any]) -> TestReadLimits: def create_source(config: Mapping[str, Any], limits: TestReadLimits) -> ManifestDeclarativeSource: manifest = config["__injected_declarative_manifest"] return ManifestDeclarativeSource( - source_config=manifest, component_factory=ModelToComponentFactory( + emit_connector_builder_messages=True, + source_config=manifest, + component_factory=ModelToComponentFactory( emit_connector_builder_messages=True, limit_pages_fetched_per_slice=limits.max_pages_per_slice, limit_slices_fetched=limits.max_slices) diff --git a/airbyte-cdk/python/airbyte_cdk/sources/abstract_source.py b/airbyte-cdk/python/airbyte_cdk/sources/abstract_source.py index 4beec964909f..8cfcb0b5beaa 100644 --- a/airbyte-cdk/python/airbyte_cdk/sources/abstract_source.py +++ b/airbyte-cdk/python/airbyte_cdk/sources/abstract_source.py @@ -237,7 +237,7 @@ def _read_incremental( has_slices = False for _slice in slices: has_slices = True - if logger.isEnabledFor(logging.DEBUG): + if self.should_log_slice_message(logger): yield AirbyteMessage( type=MessageType.LOG, log=AirbyteLogMessage(level=Level.INFO, message=f"{self.SLICE_LOG_PREFIX}{json.dumps(_slice, default=str)}"), @@ -277,6 +277,14 @@ def _read_incremental( checkpoint = self._checkpoint_state(stream_instance, stream_state, state_manager) yield checkpoint + def should_log_slice_message(self, logger: logging.Logger): + """ + + :param logger: + :return: + """ + return logger.isEnabledFor(logging.DEBUG) + def _read_full_refresh( self, logger: logging.Logger, @@ -290,7 +298,7 @@ def _read_full_refresh( ) total_records_counter = 0 for _slice in slices: - if logger.isEnabledFor(logging.DEBUG): + if self.should_log_slice_message(logger): yield AirbyteMessage( type=MessageType.LOG, log=AirbyteLogMessage(level=Level.INFO, message=f"{self.SLICE_LOG_PREFIX}{json.dumps(_slice, default=str)}"), diff --git a/airbyte-cdk/python/airbyte_cdk/sources/declarative/manifest_declarative_source.py b/airbyte-cdk/python/airbyte_cdk/sources/declarative/manifest_declarative_source.py index 9ddb5c8819b9..82fbb1dfb36d 100644 --- a/airbyte-cdk/python/airbyte_cdk/sources/declarative/manifest_declarative_source.py +++ b/airbyte-cdk/python/airbyte_cdk/sources/declarative/manifest_declarative_source.py @@ -36,7 +36,13 @@ class ManifestDeclarativeSource(DeclarativeSource): VALID_TOP_LEVEL_FIELDS = {"check", "definitions", "schemas", "spec", "streams", "type", "version"} - def __init__(self, source_config: ConnectionDefinition, debug: bool = False, component_factory: ModelToComponentFactory = None): + def __init__( + self, + source_config: ConnectionDefinition, + debug: bool = False, + emit_connector_builder_messages: bool = False, + component_factory: ModelToComponentFactory = None, + ): """ :param source_config(Mapping[str, Any]): The manifest of low-code components that describe the source connector :param debug(bool): True if debug mode is enabled @@ -53,7 +59,8 @@ def __init__(self, source_config: ConnectionDefinition, debug: bool = False, com propagated_source_config = ManifestComponentTransformer().propagate_types_and_parameters("", resolved_source_config, {}) self._source_config = propagated_source_config self._debug = debug - self._constructor = component_factory if component_factory else ModelToComponentFactory() + self._emit_connector_builder_messages = emit_connector_builder_messages + self._constructor = component_factory if component_factory else ModelToComponentFactory(emit_connector_builder_messages) self._validate_source() @@ -66,7 +73,9 @@ def connection_checker(self) -> ConnectionChecker: check = self._source_config["check"] if "type" not in check: check["type"] = "CheckStream" - check_stream = self._constructor.create_component(CheckStreamModel, check, dict()) + check_stream = self._constructor.create_component( + CheckStreamModel, check, dict(), emit_connector_builder_messages=self._emit_connector_builder_messages + ) if isinstance(check_stream, ConnectionChecker): return check_stream else: @@ -76,7 +85,9 @@ def streams(self, config: Mapping[str, Any]) -> List[Stream]: self._emit_manifest_debug_message(extra_args={"source_name": self.name, "parsed_config": json.dumps(self._source_config)}) source_streams = [ - self._constructor.create_component(DeclarativeStreamModel, stream_config, config) + self._constructor.create_component( + DeclarativeStreamModel, stream_config, config, emit_connector_builder_messages=self._emit_connector_builder_messages + ) for stream_config in self._stream_configs(self._source_config) ] @@ -118,6 +129,9 @@ def read( self._configure_logger_level(logger) yield from super().read(logger, config, catalog, state) + def should_log_slice_message(self, logger: logging.Logger): + return self._emit_connector_builder_messages or super(self).should_log_slice_message(logger) + def _configure_logger_level(self, logger: logging.Logger): """ Set the log level to logging.DEBUG if debug mode is enabled diff --git a/airbyte-cdk/python/unit_tests/connector_builder/test_connector_builder_handler.py b/airbyte-cdk/python/unit_tests/connector_builder/test_connector_builder_handler.py index 0ebadda79485..2ac37f24c6ca 100644 --- a/airbyte-cdk/python/unit_tests/connector_builder/test_connector_builder_handler.py +++ b/airbyte-cdk/python/unit_tests/connector_builder/test_connector_builder_handler.py @@ -9,6 +9,7 @@ from unittest.mock import patch import pytest +import requests from airbyte_cdk import connector_builder from airbyte_cdk.connector_builder.connector_builder_handler import ( DEFAULT_MAXIMUM_NUMBER_OF_PAGES_PER_SLICE, @@ -22,10 +23,22 @@ ) from airbyte_cdk.connector_builder.main import handle_connector_builder_request, handle_request, read_stream from airbyte_cdk.connector_builder.models import LogMessage, StreamRead, StreamReadSlicesInner, StreamReadSlicesInnerPagesInner -from airbyte_cdk.models import AirbyteMessage, AirbyteRecordMessage, ConfiguredAirbyteCatalog +from airbyte_cdk.models import ( + AirbyteLogMessage, + AirbyteMessage, + AirbyteRecordMessage, + AirbyteStream, + ConfiguredAirbyteCatalog, + ConfiguredAirbyteStream, + DestinationSyncMode, + Level, + SyncMode, +) +from airbyte_cdk.models import Type from airbyte_cdk.models import Type as MessageType from airbyte_cdk.sources.declarative.declarative_stream import DeclarativeStream from airbyte_cdk.sources.declarative.manifest_declarative_source import ManifestDeclarativeSource +from airbyte_cdk.sources.declarative.retrievers import SimpleRetrieverTestReadDecorator from airbyte_cdk.sources.streams.core import Stream from airbyte_cdk.sources.streams.http import HttpStream from unit_tests.connector_builder.utils import create_configured_catalog @@ -34,23 +47,29 @@ _stream_primary_key = "id" _stream_url_base = "https://api.sendgrid.com" _stream_options = {"name": _stream_name, "primary_key": _stream_primary_key, "url_base": _stream_url_base} +_page_size = 2 MANIFEST = { "version": "0.30.3", "definitions": { - "schema_loader": {"name": "{{ options.stream_name }}", "file_path": "./source_sendgrid/schemas/{{ options.name }}.yaml"}, "retriever": { "paginator": { "type": "DefaultPaginator", - "page_size": 10, + "page_size": _page_size, "page_size_option": {"inject_into": "request_parameter", "field_name": "page_size"}, "page_token_option": {"inject_into": "path", "type": "RequestPath"}, - "pagination_strategy": {"type": "CursorPagination", "cursor_value": "{{ response._metadata.next }}", "page_size": 10}, + "pagination_strategy": {"type": "CursorPagination", "cursor_value": "{{ response._metadata.next }}", "page_size": _page_size}, + }, + "partition_router": { + "type": "ListPartitionRouter", + "values": ["0", "1", "2", "3", "4", "5", "6", "7"], + "cursor_field": "item_id" }, + "" "requester": { "path": "/v3/marketing/lists", "authenticator": {"type": "BearerAuthenticator", "api_token": "{{ config.apikey }}"}, - "request_parameters": {"page_size": "10"}, + "request_parameters": {"a_param": "10"}, }, "record_selector": {"extractor": {"field_path": ["result"]}}, }, @@ -59,7 +78,6 @@ { "type": "DeclarativeStream", "$parameters": _stream_options, - "schema_loader": {"$ref": "#/definitions/schema_loader"}, "retriever": "#/definitions/retriever", }, ], @@ -169,19 +187,23 @@ def test_resolve_manifest(valid_resolve_manifest_config_file): "type": "DeclarativeSource", "version": "0.30.3", "definitions": { - "schema_loader": {"name": "{{ options.stream_name }}", "file_path": "./source_sendgrid/schemas/{{ options.name }}.yaml"}, "retriever": { "paginator": { "type": "DefaultPaginator", - "page_size": 10, + "page_size": _page_size, "page_size_option": {"inject_into": "request_parameter", "field_name": "page_size"}, "page_token_option": {"inject_into": "path", "type": "RequestPath"}, - "pagination_strategy": {"type": "CursorPagination", "cursor_value": "{{ response._metadata.next }}", "page_size": 10}, + "pagination_strategy": {"type": "CursorPagination", "cursor_value": "{{ response._metadata.next }}", "page_size": _page_size}, + }, + "partition_router": { + "type": "ListPartitionRouter", + "values": ["0", "1", "2", "3", "4", "5", "6", "7"], + "cursor_field": "item_id", }, "requester": { "path": "/v3/marketing/lists", "authenticator": {"type": "BearerAuthenticator", "api_token": "{{ config.apikey }}"}, - "request_parameters": {"page_size": "10"}, + "request_parameters": {"a_param": "10"}, }, "record_selector": {"extractor": {"field_path": ["result"]}}, }, @@ -189,19 +211,11 @@ def test_resolve_manifest(valid_resolve_manifest_config_file): "streams": [ { "type": "DeclarativeStream", - "schema_loader": { - "type": "JsonFileSchemaLoader", - "name": "{{ options.stream_name }}", - "file_path": "./source_sendgrid/schemas/{{ options.name }}.yaml", - "primary_key": _stream_primary_key, - "url_base": _stream_url_base, - "$parameters": _stream_options, - }, "retriever": { "type": "SimpleRetriever", "paginator": { "type": "DefaultPaginator", - "page_size": 10, + "page_size": _page_size, "page_size_option": { "type": "RequestOption", "inject_into": "request_parameter", @@ -226,7 +240,7 @@ def test_resolve_manifest(valid_resolve_manifest_config_file): "primary_key": _stream_primary_key, "url_base": _stream_url_base, "$parameters": _stream_options, - "page_size": 10, + "page_size": _page_size, }, "name": _stream_name, "primary_key": _stream_primary_key, @@ -244,7 +258,16 @@ def test_resolve_manifest(valid_resolve_manifest_config_file): "url_base": _stream_url_base, "$parameters": _stream_options, }, - "request_parameters": {"page_size": "10"}, + "request_parameters": {"a_param": "10"}, + "name": _stream_name, + "primary_key": _stream_primary_key, + "url_base": _stream_url_base, + "$parameters": _stream_options, + }, + "partition_router": { + "type": "ListPartitionRouter", + "values": ["0", "1", "2", "3", "4", "5", "6", "7"], + "cursor_field": "item_id", "name": _stream_name, "primary_key": _stream_primary_key, "url_base": _stream_url_base, @@ -512,3 +535,101 @@ def test_create_source(): assert isinstance(source, ManifestDeclarativeSource) assert source._constructor._limit_pages_fetched_per_slice == limits.max_pages_per_slice assert source._constructor._limit_slices_fetched == limits.max_slices + + +def request_log_message(request: dict) -> AirbyteMessage: + return AirbyteMessage(type=Type.LOG, log=AirbyteLogMessage(level=Level.INFO, message=f"request:{json.dumps(request)}")) + + +def response_log_message(response: dict) -> AirbyteMessage: + return AirbyteMessage(type=Type.LOG, log=AirbyteLogMessage(level=Level.INFO, message=f"response:{json.dumps(response)}")) + + +def _create_request(): + url = "https://example.com/api" + headers = {'Content-Type': 'application/json'} + return requests.Request('POST', url, headers=headers, json={"key": "value"}).prepare() + + +def _create_response(body): + response = requests.Response() + response.status_code = 200 + response._content = bytes(json.dumps(body), "utf-8") + response.headers["Content-Type"] = "application/json" + return response + + +def _create_page(response_body): + return _create_request(), _create_response(response_body) + + +@patch.object(HttpStream, "_fetch_next_page", side_effect=(_create_page({"result": [{"id": 0}, {"id": 1}],"_metadata": {"next": "next"}}), _create_page({"result": [{"id": 2}],"_metadata": {"next": "next"}})) * 10) +def test_read_source(mock_http_stream): + """ + This test sort of acts as an integration test for the connector builder. + + Each slice has two pages + The first page has two records + The second page one record + + The response._metadata.next field in the first page tells the paginator to fetch the next page. + """ + max_records = 100 + max_pages_per_slice = 2 + max_slices = 3 + limits = TestReadLimits(max_records, max_pages_per_slice, max_slices) + + catalog = ConfiguredAirbyteCatalog(streams=[ + ConfiguredAirbyteStream(stream=AirbyteStream(name=_stream_name, json_schema={}, supported_sync_modes=[SyncMode.full_refresh]), sync_mode=SyncMode.full_refresh, destination_sync_mode=DestinationSyncMode.append) + ]) + + config = {"__injected_declarative_manifest": MANIFEST} + + source = create_source(config, limits) + + output_data = read_stream(source, config, catalog, limits).record.data + slices = output_data["slices"] + + assert len(slices) == max_slices + for s in slices: + pages = s["pages"] + assert len(pages) == max_pages_per_slice + + first_page, second_page = pages[0], pages[1] + assert len(first_page["records"]) == _page_size + assert len(second_page["records"]) == 1 + + streams = source.streams(config) + for s in streams: + assert isinstance(s.retriever, SimpleRetrieverTestReadDecorator) + + +@patch.object(HttpStream, "_fetch_next_page", side_effect=(_create_page({"result": [{"id": 0}, {"id": 1}],"_metadata": {"next": "next"}}), _create_page({"result": [{"id": 2}],"_metadata": {"next": "next"}}))) +def test_read_source_single_page_single_slice(mock_http_stream): + max_records = 100 + max_pages_per_slice = 1 + max_slices = 1 + limits = TestReadLimits(max_records, max_pages_per_slice, max_slices) + + catalog = ConfiguredAirbyteCatalog(streams=[ + ConfiguredAirbyteStream(stream=AirbyteStream(name=_stream_name, json_schema={}, supported_sync_modes=[SyncMode.full_refresh]), sync_mode=SyncMode.full_refresh, destination_sync_mode=DestinationSyncMode.append) + ]) + + config = {"__injected_declarative_manifest": MANIFEST} + + source = create_source(config, limits) + + output_data = read_stream(source, config, catalog, limits).record.data + slices = output_data["slices"] + + assert len(slices) == max_slices + for s in slices: + pages = s["pages"] + assert len(pages) == max_pages_per_slice + + first_page = pages[0] + assert len(first_page["records"]) == _page_size + + streams = source.streams(config) + for s in streams: + assert isinstance(s.retriever, SimpleRetrieverTestReadDecorator) From 774e2eb1eda2ec61bca215cb0350ea10dfa12e8d Mon Sep 17 00:00:00 2001 From: girarda Date: Fri, 14 Apr 2023 17:30:23 +0000 Subject: [PATCH 072/187] =?UTF-8?q?=F0=9F=A4=96=20Bump=20patch=20version?= =?UTF-8?q?=20of=20Airbyte=20CDK?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- airbyte-cdk/python/.bumpversion.cfg | 2 +- airbyte-cdk/python/CHANGELOG.md | 3 +++ airbyte-cdk/python/Dockerfile | 4 ++-- airbyte-cdk/python/setup.py | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/airbyte-cdk/python/.bumpversion.cfg b/airbyte-cdk/python/.bumpversion.cfg index 087205a91cf3..54afb9d55dba 100644 --- a/airbyte-cdk/python/.bumpversion.cfg +++ b/airbyte-cdk/python/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.34.1 +current_version = 0.34.2 commit = False [bumpversion:file:setup.py] diff --git a/airbyte-cdk/python/CHANGELOG.md b/airbyte-cdk/python/CHANGELOG.md index f6d8b13e547d..9ffeb23fa827 100644 --- a/airbyte-cdk/python/CHANGELOG.md +++ b/airbyte-cdk/python/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog +## 0.34.2 +Emit slice log messages when running the connector builder + ## 0.34.1 set slice and pages limit when reading from the connector builder module diff --git a/airbyte-cdk/python/Dockerfile b/airbyte-cdk/python/Dockerfile index cd5d7989b6e1..e14beda07b01 100644 --- a/airbyte-cdk/python/Dockerfile +++ b/airbyte-cdk/python/Dockerfile @@ -10,7 +10,7 @@ RUN apk --no-cache upgrade \ && apk --no-cache add tzdata build-base # install airbyte-cdk -RUN pip install --prefix=/install airbyte-cdk==0.34.1 +RUN pip install --prefix=/install airbyte-cdk==0.34.2 # build a clean environment FROM base @@ -32,5 +32,5 @@ ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] # needs to be the same as CDK -LABEL io.airbyte.version=0.34.1 +LABEL io.airbyte.version=0.34.2 LABEL io.airbyte.name=airbyte/source-declarative-manifest diff --git a/airbyte-cdk/python/setup.py b/airbyte-cdk/python/setup.py index 40a36d00a372..ef162934137c 100644 --- a/airbyte-cdk/python/setup.py +++ b/airbyte-cdk/python/setup.py @@ -17,7 +17,7 @@ name="airbyte-cdk", # The version of the airbyte-cdk package is used at runtime to validate manifests. That validation must be # updated if our semver format changes such as using release candidate versions. - version="0.34.1", + version="0.34.2", description="A framework for writing Airbyte Connectors.", long_description=README, long_description_content_type="text/markdown", From fcaaf45fb93ef59617050169368f98a23891d822 Mon Sep 17 00:00:00 2001 From: Sajarin Date: Fri, 14 Apr 2023 14:00:18 -0400 Subject: [PATCH 073/187] CI checks for #23868 (#24717) * feat(source-bing-ads): add dimensional columns for AccountPerformanceReport * feat(source-bing-ads): add dimensional columns for AdGroupPerformanceReport * feat(source-bing-ads): add dimensional columns for AdPerformanceReport * feat(source-bing-ads): add dimensional columns for KeywordPerformanceReport * feat(source-bing-ads): add dimensional columns for CampaignPerformanceReport * docs(source-bing-ads): update changelog * chore(source-bing-ads): bump version in Dockerfile * test(source-bing-ads): allow extra fields for basic read * Revert "test(source-bing-ads): allow extra fields for basic read" This reverts commit 961f0d6650321f94be990221c75718876a3b8f78. * test(source-bing-ads): ignore community contributed fields * fix: updated expected_records of report streams * auto-bump connector version * Automated Change --------- Co-authored-by: Rachel RIZK Co-authored-by: Octavia Squidington III Co-authored-by: sajarin --- .../src/main/resources/seed/oss_catalog.json | 2 +- .../resources/seed/source_definitions.yaml | 2 +- .../src/main/resources/seed/source_specs.yaml | 2 +- .../connectors/source-bing-ads/Dockerfile | 2 +- .../acceptance-test-config.yml | 20 ++++++------- .../integration_tests/expected_records.txt | 30 +++++++++---------- .../schemas/account_performance_report.json | 6 ++++ .../schemas/ad_group_performance_report.json | 15 ++++++++++ .../schemas/ad_performance_report.json | 12 ++++++++ .../schemas/campaign_performance_report.json | 9 ++++++ .../schemas/keyword_performance_report.json | 9 ++++++ .../source-bing-ads/source_bing_ads/source.py | 17 +++++++++++ connectors.md | 2 +- docs/integrations/sources/bing-ads.md | 1 + 14 files changed, 99 insertions(+), 30 deletions(-) diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json index 7fb37ecba2cc..1ca63e7d4a52 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json @@ -9715,7 +9715,7 @@ "sourceDefinitionId": "47f25999-dd5e-4636-8c39-e7cea2453331", "name": "Bing Ads", "dockerRepository": "airbyte/source-bing-ads", - "dockerImageTag": "0.1.18", + "dockerImageTag": "0.1.19", "documentationUrl": "https://docs.airbyte.com/integrations/sources/bing-ads", "icon": "bingads.svg", "sourceType": "api", diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml index 357a3b10b582..5a7fcd2b1832 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml @@ -211,7 +211,7 @@ - name: Bing Ads sourceDefinitionId: 47f25999-dd5e-4636-8c39-e7cea2453331 dockerRepository: airbyte/source-bing-ads - dockerImageTag: 0.1.18 + dockerImageTag: 0.1.19 documentationUrl: https://docs.airbyte.com/integrations/sources/bing-ads icon: bingads.svg sourceType: api diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml index 3b704feb87fe..ea4d56af4adc 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml @@ -1958,7 +1958,7 @@ - "overwrite" - "append" - "append_dedup" -- dockerImage: "airbyte/source-bing-ads:0.1.18" +- dockerImage: "airbyte/source-bing-ads:0.1.19" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/bing-ads" connectionSpecification: diff --git a/airbyte-integrations/connectors/source-bing-ads/Dockerfile b/airbyte-integrations/connectors/source-bing-ads/Dockerfile index 3a1c3501e088..3a5298feae5c 100644 --- a/airbyte-integrations/connectors/source-bing-ads/Dockerfile +++ b/airbyte-integrations/connectors/source-bing-ads/Dockerfile @@ -12,5 +12,5 @@ RUN pip install . ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=0.1.18 +LABEL io.airbyte.version=0.1.19 LABEL io.airbyte.name=airbyte/source-bing-ads diff --git a/airbyte-integrations/connectors/source-bing-ads/acceptance-test-config.yml b/airbyte-integrations/connectors/source-bing-ads/acceptance-test-config.yml index 1172bc814967..31f7faef24a1 100644 --- a/airbyte-integrations/connectors/source-bing-ads/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-bing-ads/acceptance-test-config.yml @@ -3,18 +3,18 @@ test_strictness_level: high acceptance_tests: spec: tests: - - spec_path: source_bing_ads/spec.json + - spec_path: source_bing_ads/spec.json discovery: tests: - - config_path: secrets/config.json + - config_path: secrets/config.json connection: tests: - - config_path: secrets/config_old.json - status: succeed - - config_path: secrets/config.json - status: succeed - - config_path: integration_tests/invalid_config.json - status: failed + - config_path: secrets/config_old.json + status: succeed + - config_path: secrets/config.json + status: succeed + - config_path: integration_tests/invalid_config.json + status: failed basic_read: tests: - config_path: secrets/config.json @@ -35,8 +35,8 @@ acceptance_tests: fail_on_extra_columns: false full_refresh: tests: - - config_path: secrets/config.json - configured_catalog_path: integration_tests/configured_catalog.json + - config_path: secrets/config.json + configured_catalog_path: integration_tests/configured_catalog.json incremental: tests: bypass_reason: "SAT doesn't support complex nested states used in incremental report streams" diff --git a/airbyte-integrations/connectors/source-bing-ads/integration_tests/expected_records.txt b/airbyte-integrations/connectors/source-bing-ads/integration_tests/expected_records.txt index 2168526d8cb3..ddabb157f9b3 100644 --- a/airbyte-integrations/connectors/source-bing-ads/integration_tests/expected_records.txt +++ b/airbyte-integrations/connectors/source-bing-ads/integration_tests/expected_records.txt @@ -2,19 +2,19 @@ {"stream":"ads","data":{"AdFormatPreference":"All","DevicePreference":0,"EditorialStatus":"ActiveLimited","FinalAppUrls":null,"FinalMobileUrls":{"string":["https://airbyte.io"]},"FinalUrlSuffix":null,"FinalUrls":{"string":["https://airbyte.io"]},"ForwardCompatibilityMap":null,"Id":84525295496190,"Status":"Active","TrackingUrlTemplate":null,"Type":"ResponsiveSearch","UrlCustomParameters":null,"Descriptions":{"AssetLink":[{"Asset":{"Id":10239221964468,"Name":null,"Type":"TextAsset","Text":"Open data integration for modern data teams"},"AssetPerformanceLabel":"Learning","EditorialStatus":"Active","PinnedField":null},{"Asset":{"Id":10239221964466,"Name":null,"Type":"TextAsset","Text":"Get your data pipelines running in minutes. With pre-built or custom connectors"},"AssetPerformanceLabel":"Learning","EditorialStatus":"Active","PinnedField":null}]},"Domain":"airbyte.io","Headlines":{"AssetLink":[{"Asset":{"Id":10239221964471,"Name":null,"Type":"TextAsset","Text":"Data Integration Tool"},"AssetPerformanceLabel":"Learning","EditorialStatus":"Active","PinnedField":null},{"Asset":{"Id":10239221964469,"Name":null,"Type":"TextAsset","Text":"1,000+ Members"},"AssetPerformanceLabel":"Learning","EditorialStatus":"Active","PinnedField":null},{"Asset":{"Id":10239221964467,"Name":null,"Type":"TextAsset","Text":"Data Management Software"},"AssetPerformanceLabel":"Learning","EditorialStatus":"Active","PinnedField":null}]},"Path1":null,"Path2":null},"emitted_at":1675189577521} {"stream":"campaigns","data":{"AudienceAdsBidAdjustment":0,"BiddingScheme":{"Type":"EnhancedCpc"},"BudgetType":"DailyBudgetStandard","DailyBudget":0.1,"ExperimentId":null,"FinalUrlSuffix":null,"ForwardCompatibilityMap":null,"Id":407519039,"MultimediaAdsBidAdjustment":40,"Name":"integration-test-campaign","Status":"Paused","SubType":null,"TimeZone":"Arizona","TrackingUrlTemplate":null,"UrlCustomParameters":null,"CampaignType":"Search","Settings":{"Setting":[{"Type":"TargetSetting","Details":{"TargetSettingDetail":[{"CriterionTypeGroup":"Audience","TargetAndBid":false}]}}]},"BudgetId":null,"Languages":{"string":["English"]},"AdScheduleUseSearcherTimeZone":false},"emitted_at":1675189585409} {"stream":"accounts","data":{"BillToCustomerId":251186883,"CurrencyCode":"USD","AccountFinancialStatus":"ClearFinancialStatus","Id":180278106,"Language":"English","LastModifiedByUserId":3,"LastModifiedTime":"2021-08-23T07:06:19.147000","Name":"Daxtarity Inc.","Number":"F149GKV5","ParentCustomerId":251186883,"PaymentMethodId":138188746,"PaymentMethodType":"CreditCard","PrimaryUserId":138225488,"AccountLifeCycleStatus":"Active","TimeStamp":"AAAAAE0a41E=","TimeZone":"Arizona","PauseReason":null,"ForwardCompatibilityMap":null,"LinkedAgencies":null,"SalesHouseCustomerId":null,"TaxInformation":null,"BackUpPaymentInstrumentId":null,"BillingThresholdAmount":null,"BusinessAddress":{"City":"San Francisco","CountryCode":"US","Id":149004358,"Line1":"350 29th avenue","Line2":null,"Line3":null,"Line4":null,"PostalCode":"94121","StateOrProvince":"CA","TimeStamp":null,"BusinessName":"Daxtarity Inc."},"AutoTagType":"Inactive","SoldToPaymentInstrumentId":null,"AccountMode":"Expert"},"emitted_at":1675189590928} -{"stream":"account_performance_report_daily","data":{"AccountId":180278106,"TimePeriod":"2021-06-09","CurrencyCode":"USD","AdDistribution":"Search","DeviceType":"Computer","Network":"Bing and Yahoo! search","DeliveredMatchType":"Exact","DeviceOS":"Windows","TopVsOther":"Bing and Yahoo! search - Top","BidMatchType":"Broad","PhoneImpressions":0,"PhoneCalls":0,"Clicks":0,"Ctr":0,"Spend":0,"Impressions":1,"CostPerConversion":null,"Ptr":null,"Assists":0,"ReturnOnAdSpend":null,"CostPerAssist":null,"AverageCpc":0,"AveragePosition":0,"AverageCpm":0,"Conversions":0,"ConversionRate":null,"ConversionsQualified":0,"LowQualityClicks":0,"LowQualityClicksPercent":null,"LowQualityImpressions":2,"LowQualitySophisticatedClicks":0,"LowQualityConversions":0,"LowQualityConversionRate":null,"Revenue":0,"RevenuePerConversion":null,"RevenuePerAssist":null},"emitted_at":1675189607967} -{"stream":"account_performance_report_weekly","data":{"AccountId":180278106,"TimePeriod":"2021-06-06","CurrencyCode":"USD","AdDistribution":"Search","DeviceType":"Computer","Network":"Bing and Yahoo! search","DeliveredMatchType":"Exact","DeviceOS":"Windows","TopVsOther":"Bing and Yahoo! search - Top","BidMatchType":"Broad","PhoneImpressions":0,"PhoneCalls":0,"Clicks":0,"Ctr":0,"Spend":0,"Impressions":1,"CostPerConversion":null,"Ptr":null,"Assists":0,"ReturnOnAdSpend":null,"CostPerAssist":null,"AverageCpc":0,"AveragePosition":0,"AverageCpm":0,"Conversions":0,"ConversionRate":null,"ConversionsQualified":0,"LowQualityClicks":0,"LowQualityClicksPercent":null,"LowQualityImpressions":3,"LowQualitySophisticatedClicks":0,"LowQualityConversions":0,"LowQualityConversionRate":null,"Revenue":0,"RevenuePerConversion":null,"RevenuePerAssist":null},"emitted_at":1675189619945} -{"stream":"account_performance_report_monthly","data":{"AccountId":180278106,"TimePeriod":"2021-06-01","CurrencyCode":"USD","AdDistribution":"Search","DeviceType":"Computer","Network":"Bing and Yahoo! search","DeliveredMatchType":"Exact","DeviceOS":"Unknown","TopVsOther":"Bing and Yahoo! search - Top","BidMatchType":"Broad","PhoneImpressions":0,"PhoneCalls":0,"Clicks":0,"Ctr":null,"Spend":0,"Impressions":0,"CostPerConversion":null,"Ptr":null,"Assists":0,"ReturnOnAdSpend":null,"CostPerAssist":null,"AverageCpc":0,"AveragePosition":0,"AverageCpm":0,"Conversions":0,"ConversionRate":null,"ConversionsQualified":0,"LowQualityClicks":0,"LowQualityClicksPercent":null,"LowQualityImpressions":2,"LowQualitySophisticatedClicks":0,"LowQualityConversions":0,"LowQualityConversionRate":null,"Revenue":0,"RevenuePerConversion":null,"RevenuePerAssist":null},"emitted_at":1675189630754} -{"stream":"ad_group_performance_report_daily","data":{"AccountId":180278106,"CampaignId":413444833,"AdGroupId":1352400325389092,"TimePeriod":"2021-06-09","CurrencyCode":"USD","AdDistribution":"Search","DeviceType":"Computer","Network":"Bing and Yahoo! search","DeliveredMatchType":"Exact","DeviceOS":"Windows","TopVsOther":"Bing and Yahoo! search - Top","BidMatchType":"Broad","Language":"English","Impressions":1,"Clicks":0,"Ctr":0,"Spend":0,"CostPerConversion":null,"QualityScore":0,"ExpectedCtr":"--","AdRelevance":0,"LandingPageExperience":0,"PhoneImpressions":0,"PhoneCalls":0,"Ptr":null,"Assists":0,"CostPerAssist":null,"CustomParameters":null,"FinalUrlSuffix":null,"ViewThroughConversions":0,"AllCostPerConversion":null,"AllReturnOnAdSpend":null,"AllConversions":0,"AllConversionRate":null,"AllRevenue":0,"AllRevenuePerConversion":null,"AverageCpc":0,"AveragePosition":0,"AverageCpm":0,"Conversions":0,"ConversionRate":null,"ConversionsQualified":0,"Revenue":0,"RevenuePerConversion":null,"RevenuePerAssist":null,"HistoricalQualityScore":8,"HistoricalExpectedCtr":2,"HistoricalAdRelevance":3,"HistoricalLandingPageExperience":3},"emitted_at":1675189656024} -{"stream":"ad_group_performance_report_weekly","data":{"AccountId":180278106,"CampaignId":413444833,"AdGroupId":1352400325389092,"TimePeriod":"2021-06-06","CurrencyCode":"USD","AdDistribution":"Search","DeviceType":"Computer","Network":"Bing and Yahoo! search","DeliveredMatchType":"Exact","DeviceOS":"Windows","TopVsOther":"Bing and Yahoo! search - Top","BidMatchType":"Broad","Language":"English","Impressions":1,"Clicks":0,"Ctr":0,"Spend":0,"CostPerConversion":null,"QualityScore":0,"ExpectedCtr":"--","AdRelevance":0,"LandingPageExperience":0,"PhoneImpressions":0,"PhoneCalls":0,"Ptr":null,"Assists":0,"CostPerAssist":null,"CustomParameters":null,"FinalUrlSuffix":null,"ViewThroughConversions":0,"AllCostPerConversion":null,"AllReturnOnAdSpend":null,"AllConversions":0,"AllConversionRate":null,"AllRevenue":0,"AllRevenuePerConversion":null,"AverageCpc":0,"AveragePosition":0,"AverageCpm":0,"Conversions":0,"ConversionRate":null,"ConversionsQualified":0,"Revenue":0,"RevenuePerConversion":null,"RevenuePerAssist":null,"HistoricalQualityScore":8,"HistoricalExpectedCtr":2,"HistoricalAdRelevance":3,"HistoricalLandingPageExperience":3},"emitted_at":1675189669363} -{"stream":"ad_group_performance_report_monthly","data":{"AccountId":180278106,"CampaignId":413444833,"AdGroupId":1352400325389092,"TimePeriod":"2021-06-01","CurrencyCode":"USD","AdDistribution":"Search","DeviceType":"Computer","Network":"Bing and Yahoo! search","DeliveredMatchType":"Exact","DeviceOS":"Windows","TopVsOther":"Bing and Yahoo! search - Top","BidMatchType":"Broad","Language":"English","Impressions":11,"Clicks":0,"Ctr":0,"Spend":0,"CostPerConversion":null,"QualityScore":0,"ExpectedCtr":"--","AdRelevance":0,"LandingPageExperience":0,"PhoneImpressions":0,"PhoneCalls":0,"Ptr":null,"Assists":0,"CostPerAssist":null,"CustomParameters":null,"FinalUrlSuffix":null,"ViewThroughConversions":0,"AllCostPerConversion":null,"AllReturnOnAdSpend":null,"AllConversions":0,"AllConversionRate":null,"AllRevenue":0,"AllRevenuePerConversion":null,"AverageCpc":0,"AveragePosition":0,"AverageCpm":0,"Conversions":0,"ConversionRate":null,"ConversionsQualified":0,"Revenue":0,"RevenuePerConversion":null,"RevenuePerAssist":null,"HistoricalQualityScore":8,"HistoricalExpectedCtr":2,"HistoricalAdRelevance":3,"HistoricalLandingPageExperience":3},"emitted_at":1675189680148} -{"stream":"ad_performance_report_daily","data":{"AccountId":180278106,"CampaignId":413444833,"AdGroupId":1352400325389092,"AdId":84525295496190,"TimePeriod":"2021-06-09","CurrencyCode":"USD","AdDistribution":"Search","DeviceType":"Computer","Language":"English","Network":"Bing and Yahoo! search","DeviceOS":"Unknown","TopVsOther":"Bing and Yahoo! search - Top","BidMatchType":"Broad","DeliveredMatchType":"Broad","Impressions":1,"Clicks":0,"Ctr":0,"Spend":0,"CostPerConversion":null,"DestinationUrl":null,"Assists":0,"ReturnOnAdSpend":null,"CostPerAssist":null,"CustomParameters":null,"FinalAppUrl":null,"AdDescription":null,"AdDescription2":null,"ViewThroughConversions":0,"ViewThroughConversionsQualified":null,"AllCostPerConversion":null,"AllReturnOnAdSpend":null,"Conversions":0,"ConversionRate":null,"ConversionsQualified":0,"AverageCpc":0,"AveragePosition":0,"AverageCpm":0,"AllConversions":0,"AllConversionRate":null,"AllRevenue":0,"AllRevenuePerConversion":null,"Revenue":0,"RevenuePerConversion":null,"RevenuePerAssist":null},"emitted_at":1675189700718} -{"stream":"ad_performance_report_weekly","data":{"AccountId":180278106,"CampaignId":413444833,"AdGroupId":1352400325389092,"AdId":84525295496190,"TimePeriod":"2021-06-06","CurrencyCode":"USD","AdDistribution":"Search","DeviceType":"Computer","Language":"German","Network":"Syndicated search partners","DeviceOS":"Unknown","TopVsOther":"Syndicated search partners - Top","BidMatchType":"Broad","DeliveredMatchType":"Broad","Impressions":7,"Clicks":0,"Ctr":0,"Spend":0,"CostPerConversion":null,"DestinationUrl":null,"Assists":0,"ReturnOnAdSpend":null,"CostPerAssist":null,"CustomParameters":null,"FinalAppUrl":null,"AdDescription":null,"AdDescription2":null,"ViewThroughConversions":0,"ViewThroughConversionsQualified":null,"AllCostPerConversion":null,"AllReturnOnAdSpend":null,"Conversions":0,"ConversionRate":null,"ConversionsQualified":0,"AverageCpc":0,"AveragePosition":0,"AverageCpm":0,"AllConversions":0,"AllConversionRate":null,"AllRevenue":0,"AllRevenuePerConversion":null,"Revenue":0,"RevenuePerConversion":null,"RevenuePerAssist":null},"emitted_at":1675189711572} -{"stream":"ad_performance_report_monthly","data":{"AccountId":180278106,"CampaignId":413444833,"AdGroupId":1352400325389092,"AdId":84525295496190,"TimePeriod":"2021-06-01","CurrencyCode":"USD","AdDistribution":"Search","DeviceType":"Computer","Language":"German","Network":"Bing and Yahoo! search","DeviceOS":"Windows","TopVsOther":"Bing and Yahoo! search - Top","BidMatchType":"Broad","DeliveredMatchType":"Broad","Impressions":1,"Clicks":0,"Ctr":0,"Spend":0,"CostPerConversion":null,"DestinationUrl":null,"Assists":0,"ReturnOnAdSpend":null,"CostPerAssist":null,"CustomParameters":null,"FinalAppUrl":null,"AdDescription":null,"AdDescription2":null,"ViewThroughConversions":0,"ViewThroughConversionsQualified":null,"AllCostPerConversion":null,"AllReturnOnAdSpend":null,"Conversions":0,"ConversionRate":null,"ConversionsQualified":0,"AverageCpc":0,"AveragePosition":0,"AverageCpm":0,"AllConversions":0,"AllConversionRate":null,"AllRevenue":0,"AllRevenuePerConversion":null,"Revenue":0,"RevenuePerConversion":null,"RevenuePerAssist":null},"emitted_at":1675189725727} +{"stream":"account_performance_report_daily", "data":{"AccountId": 180278106, "TimePeriod": "2021-08-03", "CurrencyCode": "USD", "AdDistribution": "Search", "DeviceType": "Tablet", "Network": "Syndicated search partners", "DeliveredMatchType": "Exact", "DeviceOS": "Android", "TopVsOther": "Syndicated search partners - Other", "BidMatchType": "Broad", "AccountName": "Daxtarity Inc.", "AccountNumber": "F149GKV5", "PhoneImpressions": 0, "PhoneCalls": 0, "Clicks": 0, "Ctr": 0.0, "Spend": 0.0, "Impressions": 1, "CostPerConversion": null, "Ptr": null, "Assists": 0, "ReturnOnAdSpend": null, "CostPerAssist": null, "AverageCpc": 0.0, "AveragePosition": 0.0, "AverageCpm": 0.0, "Conversions": 0.0, "ConversionRate": null, "ConversionsQualified": 0.0, "LowQualityClicks": 0, "LowQualityClicksPercent": null, "LowQualityImpressions": 0, "LowQualitySophisticatedClicks": 0, "LowQualityConversions": 0, "LowQualityConversionRate": null, "Revenue": 0.0, "RevenuePerConversion": null, "RevenuePerAssist": null}, "emitted_at": 1679944835117} +{"stream":"account_performance_report_weekly", "data": {"AccountId": 180278106, "TimePeriod": "2021-08-01", "CurrencyCode": "USD", "AdDistribution": "Search", "DeviceType": "Tablet", "Network": "Syndicated search partners", "DeliveredMatchType": "Broad", "DeviceOS": "Android", "TopVsOther": "Syndicated search partners - Top", "BidMatchType": "Broad", "AccountName": "Daxtarity Inc.", "AccountNumber": "F149GKV5", "PhoneImpressions": 0, "PhoneCalls": 0, "Clicks": 0, "Ctr": 0.0, "Spend": 0.0, "Impressions": 1, "CostPerConversion": null, "Ptr": null, "Assists": 0, "ReturnOnAdSpend": null, "CostPerAssist": null, "AverageCpc": 0.0, "AveragePosition": 0.0, "AverageCpm": 0.0, "Conversions": 0.0, "ConversionRate": null, "ConversionsQualified": 0.0, "LowQualityClicks": 0, "LowQualityClicksPercent": null, "LowQualityImpressions": 1, "LowQualitySophisticatedClicks": 0, "LowQualityConversions": 0, "LowQualityConversionRate": null, "Revenue": 0.0, "RevenuePerConversion": null, "RevenuePerAssist": null}, "emitted_at": 1679944953111} +{"stream":"account_performance_report_monthly", "data": {"AccountId": 180278106, "TimePeriod": "2021-08-01", "CurrencyCode": "USD", "AdDistribution": "Search", "DeviceType": "Tablet", "Network": "Syndicated search partners", "DeliveredMatchType": "Broad", "DeviceOS": "Android", "TopVsOther": "Syndicated search partners - Top", "BidMatchType": "Broad", "AccountName": "Daxtarity Inc.", "AccountNumber": "F149GKV5", "PhoneImpressions": 0, "PhoneCalls": 0, "Clicks": 0, "Ctr": 0.0, "Spend": 0.0, "Impressions": 1, "CostPerConversion": null, "Ptr": null, "Assists": 0, "ReturnOnAdSpend": null, "CostPerAssist": null, "AverageCpc": 0.0, "AveragePosition": 0.0, "AverageCpm": 0.0, "Conversions": 0.0, "ConversionRate": null, "ConversionsQualified": 0.0, "LowQualityClicks": 0, "LowQualityClicksPercent": null, "LowQualityImpressions": 1, "LowQualitySophisticatedClicks": 0, "LowQualityConversions": 0, "LowQualityConversionRate": null, "Revenue": 0.0, "RevenuePerConversion": null, "RevenuePerAssist": null}, "emitted_at": 1679945438344} +{"stream":"ad_group_performance_report_daily", "data": {"AccountId": 180278106, "CampaignId": 413444833, "AdGroupId": 1352400325389092, "TimePeriod": "2021-08-03", "CurrencyCode": "USD", "AdDistribution": "Search", "DeviceType": "Tablet", "Network": "Syndicated search partners", "DeliveredMatchType": "Exact", "DeviceOS": "Android", "TopVsOther": "Syndicated search partners - Other", "BidMatchType": "Broad", "Language": "English", "AccountName": "Daxtarity Inc.", "CampaignName": "Test 2", "CampaignType": "Search & content", "AdGroupName": "Airbyte", "AdGroupType": "Standard", "Impressions": 1, "Clicks": 0, "Ctr": 0.0, "Spend": 0.0, "CostPerConversion": null, "QualityScore": 0.0, "ExpectedCtr": "--", "AdRelevance": 0.0, "LandingPageExperience": 0.0, "PhoneImpressions": 0, "PhoneCalls": 0, "Ptr": null, "Assists": 0, "CostPerAssist": null, "CustomParameters": null, "FinalUrlSuffix": null, "ViewThroughConversions": 0, "AllCostPerConversion": null, "AllReturnOnAdSpend": null, "AllConversions": 0, "AllConversionRate": null, "AllRevenue": 0.0, "AllRevenuePerConversion": null, "AverageCpc": 0.0, "AveragePosition": 0.0, "AverageCpm": 0.0, "Conversions": 0.0, "ConversionRate": null, "ConversionsQualified": 0.0, "Revenue": 0.0, "RevenuePerConversion": null, "RevenuePerAssist": null, "HistoricalQualityScore": 8.0, "HistoricalExpectedCtr": 2.0, "HistoricalAdRelevance": 3.0, "HistoricalLandingPageExperience": 3.0}, "emitted_at": 1679950558186} +{"stream":"ad_group_performance_report_weekly", "data": {"AccountId": 180278106, "CampaignId": 413444833, "AdGroupId": 1352400325389092, "TimePeriod": "2021-08-01", "CurrencyCode": "USD", "AdDistribution": "Search", "DeviceType": "Tablet", "Network": "Syndicated search partners", "DeliveredMatchType": "Broad", "DeviceOS": "Android", "TopVsOther": "Syndicated search partners - Top", "BidMatchType": "Broad", "Language": "English", "AccountName": "Daxtarity Inc.", "CampaignName": "Test 2", "CampaignType": "Search & content", "AdGroupName": "Airbyte", "AdGroupType": "Standard", "Impressions": 1, "Clicks": 0, "Ctr": 0.0, "Spend": 0.0, "CostPerConversion": null, "QualityScore": 0.0, "ExpectedCtr": "--", "AdRelevance": 0.0, "LandingPageExperience": 0.0, "PhoneImpressions": 0, "PhoneCalls": 0, "Ptr": null, "Assists": 0, "CostPerAssist": null, "CustomParameters": null, "FinalUrlSuffix": null, "ViewThroughConversions": 0, "AllCostPerConversion": null, "AllReturnOnAdSpend": null, "AllConversions": 0, "AllConversionRate": null, "AllRevenue": 0.0, "AllRevenuePerConversion": null, "AverageCpc": 0.0, "AveragePosition": 0.0, "AverageCpm": 0.0, "Conversions": 0.0, "ConversionRate": null, "ConversionsQualified": 0.0, "Revenue": 0.0, "RevenuePerConversion": null, "RevenuePerAssist": null, "HistoricalQualityScore": 8.0, "HistoricalExpectedCtr": 2.0, "HistoricalAdRelevance": 3.0, "HistoricalLandingPageExperience": 3.0}, "emitted_at": 1679945714359} +{"stream":"ad_group_performance_report_monthly", "data": {"AccountId": 180278106, "CampaignId": 413444833, "AdGroupId": 1352400325389092, "TimePeriod": "2021-08-01", "CurrencyCode": "USD", "AdDistribution": "Search", "DeviceType": "Tablet", "Network": "Syndicated search partners", "DeliveredMatchType": "Broad", "DeviceOS": "Android", "TopVsOther": "Syndicated search partners - Top", "BidMatchType": "Broad", "Language": "English", "AccountName": "Daxtarity Inc.", "CampaignName": "Test 2", "CampaignType": "Search & content", "AdGroupName": "Airbyte", "AdGroupType": "Standard", "Impressions": 1, "Clicks": 0, "Ctr": 0.0, "Spend": 0.0, "CostPerConversion": null, "QualityScore": 0.0, "ExpectedCtr": "--", "AdRelevance": 0.0, "LandingPageExperience": 0.0, "PhoneImpressions": 0, "PhoneCalls": 0, "Ptr": null, "Assists": 0, "CostPerAssist": null, "CustomParameters": null, "FinalUrlSuffix": null, "ViewThroughConversions": 0, "AllCostPerConversion": null, "AllReturnOnAdSpend": null, "AllConversions": 0, "AllConversionRate": null, "AllRevenue": 0.0, "AllRevenuePerConversion": null, "AverageCpc": 0.0, "AveragePosition": 0.0, "AverageCpm": 0.0, "Conversions": 0.0, "ConversionRate": null, "ConversionsQualified": 0.0, "Revenue": 0.0, "RevenuePerConversion": null, "RevenuePerAssist": null, "HistoricalQualityScore": 8.0, "HistoricalExpectedCtr": 2.0, "HistoricalAdRelevance": 3.0, "HistoricalLandingPageExperience": 3.0}, "emitted_at": 1679945656700} +{"stream": "ad_performance_report_daily", "data": {"AccountId": 180278106, "CampaignId": 413444833, "AdGroupId": 1352400325389092, "AdId": 84525295496190, "TimePeriod": "2021-08-03", "CurrencyCode": "USD", "AdDistribution": "Search", "DeviceType": "Tablet", "Language": "English", "Network": "Syndicated search partners", "DeviceOS": "Android", "TopVsOther": "Syndicated search partners - Other", "BidMatchType": "Broad", "DeliveredMatchType": "Exact", "AccountName": "Daxtarity Inc.", "CampaignName": "Test 2", "CampaignType": "Search & content", "AdGroupName": "Airbyte", "Impressions": 1, "Clicks": 0, "Ctr": 0.0, "Spend": 0.0, "CostPerConversion": null, "DestinationUrl": null, "Assists": 0, "ReturnOnAdSpend": null, "CostPerAssist": null, "CustomParameters": null, "FinalAppUrl": null, "AdDescription": null, "AdDescription2": null, "ViewThroughConversions": 0, "ViewThroughConversionsQualified": null, "AllCostPerConversion": null, "AllReturnOnAdSpend": null, "Conversions": 0.0, "ConversionRate": null, "ConversionsQualified": 0.0, "AverageCpc": 0.0, "AveragePosition": 0.0, "AverageCpm": 0.0, "AllConversions": 0, "AllConversionRate": null, "AllRevenue": 0.0, "AllRevenuePerConversion": null, "Revenue": 0.0, "RevenuePerConversion": null, "RevenuePerAssist": null}, "emitted_at": 1679950716583} +{"stream": "ad_performance_report_weekly", "data": {"AccountId": 180278106, "CampaignId": 413444833, "AdGroupId": 1352400325389092, "AdId": 84525295496190, "TimePeriod": "2021-08-01", "CurrencyCode": "USD", "AdDistribution": "Search", "DeviceType": "Tablet", "Language": "English", "Network": "Syndicated search partners", "DeviceOS": "Android", "TopVsOther": "Syndicated search partners - Other", "BidMatchType": "Broad", "DeliveredMatchType": "Phrase", "AccountName": "Daxtarity Inc.", "CampaignName": "Test 2", "CampaignType": "Search & content", "AdGroupName": "Airbyte", "Impressions": 1, "Clicks": 0, "Ctr": 0.0, "Spend": 0.0, "CostPerConversion": null, "DestinationUrl": null, "Assists": 0, "ReturnOnAdSpend": null, "CostPerAssist": null, "CustomParameters": null, "FinalAppUrl": null, "AdDescription": null, "AdDescription2": null, "ViewThroughConversions": 0, "ViewThroughConversionsQualified": null, "AllCostPerConversion": null, "AllReturnOnAdSpend": null, "Conversions": 0.0, "ConversionRate": null, "ConversionsQualified": 0.0, "AverageCpc": 0.0, "AveragePosition": 0.0, "AverageCpm": 0.0, "AllConversions": 0, "AllConversionRate": null, "AllRevenue": 0.0, "AllRevenuePerConversion": null, "Revenue": 0.0, "RevenuePerConversion": null, "RevenuePerAssist": null}, "emitted_at": 1679950767960} +{"stream": "ad_performance_report_monthly", "data": {"AccountId": 180278106, "CampaignId": 413444833, "AdGroupId": 1352400325389092, "AdId": 84525295496190, "TimePeriod": "2021-08-01", "CurrencyCode": "USD", "AdDistribution": "Search", "DeviceType": "Tablet", "Language": "English", "Network": "Syndicated search partners", "DeviceOS": "Android", "TopVsOther": "Syndicated search partners - Other", "BidMatchType": "Broad", "DeliveredMatchType": "Phrase", "AccountName": "Daxtarity Inc.", "CampaignName": "Test 2", "CampaignType": "Search & content", "AdGroupName": "Airbyte", "Impressions": 1, "Clicks": 0, "Ctr": 0.0, "Spend": 0.0, "CostPerConversion": null, "DestinationUrl": null, "Assists": 0, "ReturnOnAdSpend": null, "CostPerAssist": null, "CustomParameters": null, "FinalAppUrl": null, "AdDescription": null, "AdDescription2": null, "ViewThroughConversions": 0, "ViewThroughConversionsQualified": null, "AllCostPerConversion": null, "AllReturnOnAdSpend": null, "Conversions": 0.0, "ConversionRate": null, "ConversionsQualified": 0.0, "AverageCpc": 0.0, "AveragePosition": 0.0, "AverageCpm": 0.0, "AllConversions": 0, "AllConversionRate": null, "AllRevenue": 0.0, "AllRevenuePerConversion": null, "Revenue": 0.0, "RevenuePerConversion": null, "RevenuePerAssist": null}, "emitted_at": 1679950813350} {"stream":"budget_summary_report","data":{"AccountName":"Daxtarity Inc.","AccountNumber":"F149GKV5","AccountId":180278106,"CampaignName":"Test 2","CampaignId":413444833,"Date":"6/9/2021","MonthlyBudget":22.8,"DailySpend":0.71,"MonthToDateSpend":0.71},"emitted_at":1675189738185} -{"stream":"campaign_performance_report_daily","data":{"AccountId":180278106,"CampaignId":413444833,"TimePeriod":"2021-06-09","CurrencyCode":"USD","AdDistribution":"Search","DeviceType":"Computer","Network":"Bing and Yahoo! search","DeliveredMatchType":"Exact","DeviceOS":"Windows","TopVsOther":"Bing and Yahoo! search - Top","BidMatchType":"Broad","CampaignStatus":"Paused","Impressions":1,"Clicks":0,"Ctr":0,"Spend":0,"CostPerConversion":null,"QualityScore":0,"AdRelevance":0,"LandingPageExperience":0,"PhoneImpressions":0,"PhoneCalls":0,"Ptr":null,"Assists":0,"ReturnOnAdSpend":null,"CostPerAssist":null,"CustomParameters":null,"ViewThroughConversions":0,"AllCostPerConversion":null,"AllReturnOnAdSpend":null,"AllConversions":0,"AllConversionRate":null,"AllRevenue":0,"AllRevenuePerConversion":null,"AverageCpc":0,"AveragePosition":0,"AverageCpm":0,"Conversions":0,"ConversionRate":null,"ConversionsQualified":0,"LowQualityClicks":0,"LowQualityClicksPercent":null,"LowQualityImpressions":2,"LowQualitySophisticatedClicks":0,"LowQualityConversions":0,"LowQualityConversionRate":null,"Revenue":0,"RevenuePerConversion":null,"RevenuePerAssist":null,"BudgetName":null,"BudgetStatus":null,"BudgetAssociationStatus":"Current","HistoricalQualityScore":8,"HistoricalExpectedCtr":2,"HistoricalAdRelevance":3,"HistoricalLandingPageExperience":3},"emitted_at":1675189761490} -{"stream":"campaign_performance_report_weekly","data":{"AccountId":180278106,"CampaignId":413444833,"TimePeriod":"2021-06-06","CurrencyCode":"USD","AdDistribution":"Search","DeviceType":"Computer","Network":"Bing and Yahoo! search","DeliveredMatchType":"Exact","DeviceOS":"Windows","TopVsOther":"Bing and Yahoo! search - Top","BidMatchType":"Broad","CampaignStatus":"Paused","Impressions":1,"Clicks":0,"Ctr":0,"Spend":0,"CostPerConversion":null,"QualityScore":0,"AdRelevance":0,"LandingPageExperience":0,"PhoneImpressions":0,"PhoneCalls":0,"Ptr":null,"Assists":0,"ReturnOnAdSpend":null,"CostPerAssist":null,"CustomParameters":null,"ViewThroughConversions":0,"AllCostPerConversion":null,"AllReturnOnAdSpend":null,"AllConversions":0,"AllConversionRate":null,"AllRevenue":0,"AllRevenuePerConversion":null,"AverageCpc":0,"AveragePosition":0,"AverageCpm":0,"Conversions":0,"ConversionRate":null,"ConversionsQualified":0,"LowQualityClicks":0,"LowQualityClicksPercent":null,"LowQualityImpressions":3,"LowQualitySophisticatedClicks":0,"LowQualityConversions":0,"LowQualityConversionRate":null,"Revenue":0,"RevenuePerConversion":null,"RevenuePerAssist":null,"BudgetName":null,"BudgetStatus":null,"BudgetAssociationStatus":"Current","HistoricalQualityScore":8,"HistoricalExpectedCtr":2,"HistoricalAdRelevance":3,"HistoricalLandingPageExperience":3},"emitted_at":1675189775869} -{"stream":"campaign_performance_report_monthly","data":{"AccountId":180278106,"CampaignId":413444833,"TimePeriod":"2021-06-01","CurrencyCode":"USD","AdDistribution":"Search","DeviceType":"Computer","Network":"Bing and Yahoo! search","DeliveredMatchType":"Exact","DeviceOS":"Unknown","TopVsOther":"Bing and Yahoo! search - Top","BidMatchType":"Broad","CampaignStatus":"Paused","Impressions":0,"Clicks":0,"Ctr":null,"Spend":0,"CostPerConversion":null,"QualityScore":0,"AdRelevance":0,"LandingPageExperience":0,"PhoneImpressions":0,"PhoneCalls":0,"Ptr":null,"Assists":0,"ReturnOnAdSpend":null,"CostPerAssist":null,"CustomParameters":null,"ViewThroughConversions":0,"AllCostPerConversion":null,"AllReturnOnAdSpend":null,"AllConversions":0,"AllConversionRate":null,"AllRevenue":0,"AllRevenuePerConversion":null,"AverageCpc":0,"AveragePosition":0,"AverageCpm":0,"Conversions":0,"ConversionRate":null,"ConversionsQualified":0,"LowQualityClicks":0,"LowQualityClicksPercent":null,"LowQualityImpressions":2,"LowQualitySophisticatedClicks":0,"LowQualityConversions":0,"LowQualityConversionRate":null,"Revenue":0,"RevenuePerConversion":null,"RevenuePerAssist":null,"BudgetName":null,"BudgetStatus":null,"BudgetAssociationStatus":"Current","HistoricalQualityScore":8,"HistoricalExpectedCtr":2,"HistoricalAdRelevance":3,"HistoricalLandingPageExperience":3},"emitted_at":1675189789109} -{"stream":"keyword_performance_report_daily","data":{"AccountId":180278106,"CampaignId":413444833,"AdGroupId":1352400325389092,"KeywordId":84525593559627,"AdId":84525295496190,"TimePeriod":"2021-06-13","CurrencyCode":"USD","DeliveredMatchType":"Exact","AdDistribution":"Search","DeviceType":"Smartphone","Language":"English","Network":"Syndicated search partners","DeviceOS":"iOS","TopVsOther":"Syndicated search partners - Top","BidMatchType":"Broad","Keyword":"big data integration tools","KeywordStatus":"Active","Impressions":1,"Clicks":0,"Ctr":0,"CurrentMaxCpc":0.11,"Spend":0,"CostPerConversion":null,"QualityScore":0,"ExpectedCtr":"--","AdRelevance":0,"LandingPageExperience":0,"QualityImpact":0,"Assists":0,"ReturnOnAdSpend":null,"CostPerAssist":null,"CustomParameters":null,"FinalAppUrl":null,"Mainline1Bid":null,"MainlineBid":null,"FirstPageBid":null,"FinalUrlSuffix":null,"ViewThroughConversions":0,"ViewThroughConversionsQualified":null,"AllCostPerConversion":null,"AllReturnOnAdSpend":null,"Conversions":0,"ConversionRate":null,"ConversionsQualified":0,"AverageCpc":0,"AveragePosition":0,"AverageCpm":0,"AllConversions":0,"AllConversionRate":null,"AllRevenue":0,"AllRevenuePerConversion":null,"Revenue":0,"RevenuePerConversion":null,"RevenuePerAssist":null,"HistoricalQualityScore":7,"HistoricalExpectedCtr":2,"HistoricalAdRelevance":2,"HistoricalLandingPageExperience":3},"emitted_at":1675189822883} -{"stream":"keyword_performance_report_weekly","data":{"AccountId":180278106,"CampaignId":413444833,"AdGroupId":1352400325389092,"KeywordId":84525593559627,"AdId":84525295496190,"TimePeriod":"2021-06-13","CurrencyCode":"USD","DeliveredMatchType":"Exact","AdDistribution":"Search","DeviceType":"Smartphone","Language":"English","Network":"Syndicated search partners","DeviceOS":"iOS","TopVsOther":"Syndicated search partners - Top","BidMatchType":"Broad","Keyword":"big data integration tools","KeywordStatus":"Active","Impressions":2,"Clicks":0,"Ctr":0,"CurrentMaxCpc":0.11,"Spend":0,"CostPerConversion":null,"QualityScore":0,"ExpectedCtr":"--","AdRelevance":0,"LandingPageExperience":0,"QualityImpact":0,"Assists":0,"ReturnOnAdSpend":null,"CostPerAssist":null,"CustomParameters":null,"FinalAppUrl":null,"Mainline1Bid":null,"MainlineBid":null,"FirstPageBid":null,"FinalUrlSuffix":null,"ViewThroughConversions":0,"ViewThroughConversionsQualified":null,"AllCostPerConversion":null,"AllReturnOnAdSpend":null,"Conversions":0,"ConversionRate":null,"ConversionsQualified":0,"AverageCpc":0,"AveragePosition":0,"AverageCpm":0,"AllConversions":0,"AllConversionRate":null,"AllRevenue":0,"AllRevenuePerConversion":null,"Revenue":0,"RevenuePerConversion":null,"RevenuePerAssist":null},"emitted_at":1675189841809} -{"stream":"keyword_performance_report_monthly","data":{"AccountId":180278106,"CampaignId":413444833,"AdGroupId":1352400325389092,"KeywordId":84525593559627,"AdId":84525295496190,"TimePeriod":"2021-06-01","CurrencyCode":"USD","DeliveredMatchType":"Exact","AdDistribution":"Search","DeviceType":"Computer","Language":"English","Network":"Bing and Yahoo! search","DeviceOS":"Windows","TopVsOther":"Bing and Yahoo! search - Top","BidMatchType":"Broad","Keyword":"big data integration tools","KeywordStatus":"Active","Impressions":1,"Clicks":0,"Ctr":0,"CurrentMaxCpc":0.11,"Spend":0,"CostPerConversion":null,"QualityScore":0,"ExpectedCtr":"--","AdRelevance":0,"LandingPageExperience":0,"QualityImpact":0,"Assists":0,"ReturnOnAdSpend":null,"CostPerAssist":null,"CustomParameters":null,"FinalAppUrl":null,"Mainline1Bid":null,"MainlineBid":null,"FirstPageBid":null,"FinalUrlSuffix":null,"ViewThroughConversions":0,"ViewThroughConversionsQualified":null,"AllCostPerConversion":null,"AllReturnOnAdSpend":null,"Conversions":0,"ConversionRate":null,"ConversionsQualified":0,"AverageCpc":0,"AveragePosition":0,"AverageCpm":0,"AllConversions":0,"AllConversionRate":null,"AllRevenue":0,"AllRevenuePerConversion":null,"Revenue":0,"RevenuePerConversion":null,"RevenuePerAssist":null},"emitted_at":1675189856551} +{"stream": "campaign_performance_report_daily", "data": {"AccountId": 180278106, "CampaignId": 413444833, "TimePeriod": "2021-08-03", "CurrencyCode": "USD", "AdDistribution": "Search", "DeviceType": "Tablet", "Network": "Syndicated search partners", "DeliveredMatchType": "Exact", "DeviceOS": "Android", "TopVsOther": "Syndicated search partners - Other", "BidMatchType": "Broad", "AccountName": "Daxtarity Inc.", "CampaignName": "Test 2", "CampaignType": "Search & content", "CampaignStatus": "Paused", "Impressions": 1, "Clicks": 0, "Ctr": 0.0, "Spend": 0.0, "CostPerConversion": null, "QualityScore": 0.0, "AdRelevance": 0.0, "LandingPageExperience": 0.0, "PhoneImpressions": 0, "PhoneCalls": 0, "Ptr": null, "Assists": 0, "ReturnOnAdSpend": null, "CostPerAssist": null, "CustomParameters": null, "ViewThroughConversions": 0, "AllCostPerConversion": null, "AllReturnOnAdSpend": null, "AllConversions": 0, "AllConversionRate": null, "AllRevenue": 0.0, "AllRevenuePerConversion": null, "AverageCpc": 0.0, "AveragePosition": 0.0, "AverageCpm": 0.0, "Conversions": 0.0, "ConversionRate": null, "ConversionsQualified": 0.0, "LowQualityClicks": 0, "LowQualityClicksPercent": null, "LowQualityImpressions": 0, "LowQualitySophisticatedClicks": 0, "LowQualityConversions": 0, "LowQualityConversionRate": null, "Revenue": 0.0, "RevenuePerConversion": null, "RevenuePerAssist": null, "BudgetName": null, "BudgetStatus": null, "BudgetAssociationStatus": "Current", "HistoricalQualityScore": 8.0, "HistoricalExpectedCtr": 2.0, "HistoricalAdRelevance": 3.0, "HistoricalLandingPageExperience": 3.0}, "emitted_at": 1679950951582} +{"stream": "campaign_performance_report_weekly", "data": {"AccountId": 180278106, "CampaignId": 413444833, "TimePeriod": "2021-08-01", "CurrencyCode": "USD", "AdDistribution": "Search", "DeviceType": "Tablet", "Network": "Syndicated search partners", "DeliveredMatchType": "Broad", "DeviceOS": "Android", "TopVsOther": "Syndicated search partners - Top", "BidMatchType": "Broad", "AccountName": "Daxtarity Inc.", "CampaignName": "Test 2", "CampaignType": "Search & content", "CampaignStatus": "Paused", "Impressions": 1, "Clicks": 0, "Ctr": 0.0, "Spend": 0.0, "CostPerConversion": null, "QualityScore": 0.0, "AdRelevance": 0.0, "LandingPageExperience": 0.0, "PhoneImpressions": 0, "PhoneCalls": 0, "Ptr": null, "Assists": 0, "ReturnOnAdSpend": null, "CostPerAssist": null, "CustomParameters": null, "ViewThroughConversions": 0, "AllCostPerConversion": null, "AllReturnOnAdSpend": null, "AllConversions": 0, "AllConversionRate": null, "AllRevenue": 0.0, "AllRevenuePerConversion": null, "AverageCpc": 0.0, "AveragePosition": 0.0, "AverageCpm": 0.0, "Conversions": 0.0, "ConversionRate": null, "ConversionsQualified": 0.0, "LowQualityClicks": 0, "LowQualityClicksPercent": null, "LowQualityImpressions": 1, "LowQualitySophisticatedClicks": 0, "LowQualityConversions": 0, "LowQualityConversionRate": null, "Revenue": 0.0, "RevenuePerConversion": null, "RevenuePerAssist": null, "BudgetName": null, "BudgetStatus": null, "BudgetAssociationStatus": "Current", "HistoricalQualityScore": 8.0, "HistoricalExpectedCtr": 2.0, "HistoricalAdRelevance": 3.0, "HistoricalLandingPageExperience": 3.0}, "emitted_at": 1679950998409} +{"stream": "campaign_performance_report_monthly", "data": {"AccountId": 180278106, "CampaignId": 413444833, "TimePeriod": "2021-08-01", "CurrencyCode": "USD", "AdDistribution": "Search", "DeviceType": "Tablet", "Network": "Syndicated search partners", "DeliveredMatchType": "Broad", "DeviceOS": "Android", "TopVsOther": "Syndicated search partners - Top", "BidMatchType": "Broad", "AccountName": "Daxtarity Inc.", "CampaignName": "Test 2", "CampaignType": "Search & content", "CampaignStatus": "Paused", "Impressions": 1, "Clicks": 0, "Ctr": 0.0, "Spend": 0.0, "CostPerConversion": null, "QualityScore": 0.0, "AdRelevance": 0.0, "LandingPageExperience": 0.0, "PhoneImpressions": 0, "PhoneCalls": 0, "Ptr": null, "Assists": 0, "ReturnOnAdSpend": null, "CostPerAssist": null, "CustomParameters": null, "ViewThroughConversions": 0, "AllCostPerConversion": null, "AllReturnOnAdSpend": null, "AllConversions": 0, "AllConversionRate": null, "AllRevenue": 0.0, "AllRevenuePerConversion": null, "AverageCpc": 0.0, "AveragePosition": 0.0, "AverageCpm": 0.0, "Conversions": 0.0, "ConversionRate": null, "ConversionsQualified": 0.0, "LowQualityClicks": 0, "LowQualityClicksPercent": null, "LowQualityImpressions": 1, "LowQualitySophisticatedClicks": 0, "LowQualityConversions": 0, "LowQualityConversionRate": null, "Revenue": 0.0, "RevenuePerConversion": null, "RevenuePerAssist": null, "BudgetName": null, "BudgetStatus": null, "BudgetAssociationStatus": "Current", "HistoricalQualityScore": 8.0, "HistoricalExpectedCtr": 2.0, "HistoricalAdRelevance": 3.0, "HistoricalLandingPageExperience": 3.0}, "emitted_at": 1679951112193} +{"stream": "keyword_performance_report_daily", "data": {"AccountId": 180278106, "CampaignId": 413444833, "AdGroupId": 1352400325389092, "KeywordId": 84525593559629, "AdId": 84525295496190, "TimePeriod": "2021-08-03", "CurrencyCode": "USD", "DeliveredMatchType": "Broad", "AdDistribution": "Search", "DeviceType": "Smartphone", "Language": "English", "Network": "Syndicated search partners", "DeviceOS": "Android", "TopVsOther": "Syndicated search partners - Top", "BidMatchType": "Broad", "AccountName": "Daxtarity Inc.", "CampaignName": "Test 2", "AdGroupName": "Airbyte", "Keyword": "data integration tools", "KeywordStatus": "Active", "Impressions": 1, "Clicks": 0, "Ctr": 0.0, "CurrentMaxCpc": 0.11, "Spend": 0.0, "CostPerConversion": null, "QualityScore": 0.0, "ExpectedCtr": "--", "AdRelevance": 0.0, "LandingPageExperience": 0.0, "QualityImpact": 0.0, "Assists": 0, "ReturnOnAdSpend": null, "CostPerAssist": null, "CustomParameters": null, "FinalAppUrl": null, "Mainline1Bid": null, "MainlineBid": null, "FirstPageBid": null, "FinalUrlSuffix": null, "ViewThroughConversions": 0, "ViewThroughConversionsQualified": null, "AllCostPerConversion": null, "AllReturnOnAdSpend": null, "Conversions": 0.0, "ConversionRate": null, "ConversionsQualified": 0.0, "AverageCpc": 0.0, "AveragePosition": 0.0, "AverageCpm": 0.0, "AllConversions": 0, "AllConversionRate": null, "AllRevenue": 0.0, "AllRevenuePerConversion": null, "Revenue": 0.0, "RevenuePerConversion": null, "RevenuePerAssist": null, "HistoricalQualityScore": 8.0, "HistoricalExpectedCtr": 2.0, "HistoricalAdRelevance": 3.0, "HistoricalLandingPageExperience": 3.0}, "emitted_at": 1679951505600} +{"stream": "keyword_performance_report_weekly", "data": {"AccountId": 180278106, "CampaignId": 413444833, "AdGroupId": 1352400325389092, "KeywordId": 84525593559629, "AdId": 84525295496190, "TimePeriod": "2021-08-01", "CurrencyCode": "USD", "DeliveredMatchType": "Broad", "AdDistribution": "Search", "DeviceType": "Tablet", "Language": "English", "Network": "Syndicated search partners", "DeviceOS": "Android", "TopVsOther": "Syndicated search partners - Top", "BidMatchType": "Broad", "AccountName": "Daxtarity Inc.", "CampaignName": "Test 2", "AdGroupName": "Airbyte", "Keyword": "data integration tools", "KeywordStatus": "Active", "Impressions": 1, "Clicks": 0, "Ctr": 0.0, "CurrentMaxCpc": 0.11, "Spend": 0.0, "CostPerConversion": null, "QualityScore": 0.0, "ExpectedCtr": "--", "AdRelevance": 0.0, "LandingPageExperience": 0.0, "QualityImpact": 0.0, "Assists": 0, "ReturnOnAdSpend": null, "CostPerAssist": null, "CustomParameters": null, "FinalAppUrl": null, "Mainline1Bid": null, "MainlineBid": null, "FirstPageBid": null, "FinalUrlSuffix": null, "ViewThroughConversions": 0, "ViewThroughConversionsQualified": null, "AllCostPerConversion": null, "AllReturnOnAdSpend": null, "Conversions": 0.0, "ConversionRate": null, "ConversionsQualified": 0.0, "AverageCpc": 0.0, "AveragePosition": 0.0, "AverageCpm": 0.0, "AllConversions": 0, "AllConversionRate": null, "AllRevenue": 0.0, "AllRevenuePerConversion": null, "Revenue": 0.0, "RevenuePerConversion": null, "RevenuePerAssist": null}, "emitted_at": 1679951543951} +{"stream": "keyword_performance_report_monthly", "data": {"AccountId": 180278106, "CampaignId": 413444833, "AdGroupId": 1352400325389092, "KeywordId": 84525593559629, "AdId": 84525295496190, "TimePeriod": "2021-08-01", "CurrencyCode": "USD", "DeliveredMatchType": "Broad", "AdDistribution": "Search", "DeviceType": "Tablet", "Language": "English", "Network": "Syndicated search partners", "DeviceOS": "Android", "TopVsOther": "Syndicated search partners - Top", "BidMatchType": "Broad", "AccountName": "Daxtarity Inc.", "CampaignName": "Test 2", "AdGroupName": "Airbyte", "Keyword": "data integration tools", "KeywordStatus": "Active", "Impressions": 1, "Clicks": 0, "Ctr": 0.0, "CurrentMaxCpc": 0.11, "Spend": 0.0, "CostPerConversion": null, "QualityScore": 0.0, "ExpectedCtr": "--", "AdRelevance": 0.0, "LandingPageExperience": 0.0, "QualityImpact": 0.0, "Assists": 0, "ReturnOnAdSpend": null, "CostPerAssist": null, "CustomParameters": null, "FinalAppUrl": null, "Mainline1Bid": null, "MainlineBid": null, "FirstPageBid": null, "FinalUrlSuffix": null, "ViewThroughConversions": 0, "ViewThroughConversionsQualified": null, "AllCostPerConversion": null, "AllReturnOnAdSpend": null, "Conversions": 0.0, "ConversionRate": null, "ConversionsQualified": 0.0, "AverageCpc": 0.0, "AveragePosition": 0.0, "AverageCpm": 0.0, "AllConversions": 0, "AllConversionRate": null, "AllRevenue": 0.0, "AllRevenuePerConversion": null, "Revenue": 0.0, "RevenuePerConversion": null, "RevenuePerAssist": null}, "emitted_at": 1679951588461} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-bing-ads/source_bing_ads/schemas/account_performance_report.json b/airbyte-integrations/connectors/source-bing-ads/source_bing_ads/schemas/account_performance_report.json index 00cbde7e9e55..08a727b5048e 100644 --- a/airbyte-integrations/connectors/source-bing-ads/source_bing_ads/schemas/account_performance_report.json +++ b/airbyte-integrations/connectors/source-bing-ads/source_bing_ads/schemas/account_performance_report.json @@ -31,6 +31,12 @@ "BidMatchType": { "type": ["null", "string"] }, + "AccountName": { + "type": ["null", "string"] + }, + "AccountNumber": { + "type": ["null", "string"] + }, "PhoneImpressions": { "type": ["null", "integer"] }, diff --git a/airbyte-integrations/connectors/source-bing-ads/source_bing_ads/schemas/ad_group_performance_report.json b/airbyte-integrations/connectors/source-bing-ads/source_bing_ads/schemas/ad_group_performance_report.json index 5338d978a162..b0e952bb0aec 100644 --- a/airbyte-integrations/connectors/source-bing-ads/source_bing_ads/schemas/ad_group_performance_report.json +++ b/airbyte-integrations/connectors/source-bing-ads/source_bing_ads/schemas/ad_group_performance_report.json @@ -41,6 +41,21 @@ "Language": { "type": ["null", "string"] }, + "AccountName": { + "type": ["null", "string"] + }, + "CampaignName": { + "type": ["null", "string"] + }, + "CampaignType": { + "type": ["null", "string"] + }, + "AdGroupName": { + "type": ["null", "string"] + }, + "AdGroupType": { + "type": ["null", "string"] + }, "Impressions": { "type": ["null", "integer"] }, diff --git a/airbyte-integrations/connectors/source-bing-ads/source_bing_ads/schemas/ad_performance_report.json b/airbyte-integrations/connectors/source-bing-ads/source_bing_ads/schemas/ad_performance_report.json index 4f015eeb9046..44945b40758e 100644 --- a/airbyte-integrations/connectors/source-bing-ads/source_bing_ads/schemas/ad_performance_report.json +++ b/airbyte-integrations/connectors/source-bing-ads/source_bing_ads/schemas/ad_performance_report.json @@ -44,6 +44,18 @@ "DeliveredMatchType": { "type": ["null", "string"] }, + "AccountName": { + "type": ["null", "string"] + }, + "CampaignName": { + "type": ["null", "string"] + }, + "CampaignType": { + "type": ["null", "string"] + }, + "AdGroupName": { + "type": ["null", "string"] + }, "Impressions": { "type": ["null", "integer"] }, diff --git a/airbyte-integrations/connectors/source-bing-ads/source_bing_ads/schemas/campaign_performance_report.json b/airbyte-integrations/connectors/source-bing-ads/source_bing_ads/schemas/campaign_performance_report.json index 00c8072471f8..c6959227ddb3 100644 --- a/airbyte-integrations/connectors/source-bing-ads/source_bing_ads/schemas/campaign_performance_report.json +++ b/airbyte-integrations/connectors/source-bing-ads/source_bing_ads/schemas/campaign_performance_report.json @@ -35,6 +35,15 @@ "BidMatchType": { "type": ["null", "string"] }, + "AccountName": { + "type": ["null", "string"] + }, + "CampaignName": { + "type": ["null", "string"] + }, + "CampaignType": { + "type": ["null", "string"] + }, "CampaignStatus": { "type": ["null", "string"] }, diff --git a/airbyte-integrations/connectors/source-bing-ads/source_bing_ads/schemas/keyword_performance_report.json b/airbyte-integrations/connectors/source-bing-ads/source_bing_ads/schemas/keyword_performance_report.json index b7ec91ee647e..c4312b10b05e 100644 --- a/airbyte-integrations/connectors/source-bing-ads/source_bing_ads/schemas/keyword_performance_report.json +++ b/airbyte-integrations/connectors/source-bing-ads/source_bing_ads/schemas/keyword_performance_report.json @@ -51,6 +51,15 @@ "BidMatchType": { "type": ["null", "string"] }, + "AccountName": { + "type": ["null", "string"] + }, + "CampaignName": { + "type": ["null", "string"] + }, + "AdGroupName": { + "type": ["null", "string"] + }, "KeywordStatus": { "type": ["null", "string"] }, diff --git a/airbyte-integrations/connectors/source-bing-ads/source_bing_ads/source.py b/airbyte-integrations/connectors/source-bing-ads/source_bing_ads/source.py index 376570459479..949005f8ebd5 100644 --- a/airbyte-integrations/connectors/source-bing-ads/source_bing_ads/source.py +++ b/airbyte-integrations/connectors/source-bing-ads/source_bing_ads/source.py @@ -367,6 +367,9 @@ class CampaignPerformanceReport(ReportsMixin, BingAdsStream): report_columns = [ *primary_key, + "AccountName", + "CampaignName", + "CampaignType", "CampaignStatus", "Impressions", "Clicks", @@ -451,6 +454,10 @@ class AdPerformanceReport(ReportsMixin, BingAdsStream): report_columns = [ *primary_key, + "AccountName", + "CampaignName", + "CampaignType", + "AdGroupName", "Impressions", "Clicks", "Ctr", @@ -519,6 +526,11 @@ class AdGroupPerformanceReport(ReportsMixin, BingAdsStream): report_columns = [ *primary_key, + "AccountName", + "CampaignName", + "CampaignType", + "AdGroupName", + "AdGroupType", "Impressions", "Clicks", "Ctr", @@ -602,6 +614,9 @@ class KeywordPerformanceReport(ReportsMixin, BingAdsStream): report_columns = [ *primary_key, + "AccountName", + "CampaignName", + "AdGroupName", "Keyword", "KeywordStatus", "Impressions", @@ -679,6 +694,8 @@ class AccountPerformanceReport(ReportsMixin, BingAdsStream): report_columns = [ *primary_key, + "AccountName", + "AccountNumber", "PhoneImpressions", "PhoneCalls", "Clicks", diff --git a/connectors.md b/connectors.md index 46bb1bb0dcdc..bb2b6e9bba4b 100644 --- a/connectors.md +++ b/connectors.md @@ -28,7 +28,7 @@ | **BambooHR** | BambooHR icon | Source | airbyte/source-bamboo-hr:0.2.2 | alpha | [docs](https://docs.airbyte.com/integrations/sources/bamboo-hr) | [connectors/source/bamboo-hr](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/bamboo-hr) | [source-bamboo-hr](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-bamboo-hr) | `90916976-a132-4ce9-8bce-82a03dd58788` | | **BigCommerce** | BigCommerce icon | Source | airbyte/source-bigcommerce:0.1.10 | alpha | [docs](https://docs.airbyte.com/integrations/sources/bigcommerce) | [connectors/source/bigcommerce](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/bigcommerce) | [source-bigcommerce](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-bigcommerce) | `59c5501b-9f95-411e-9269-7143c939adbd` | | **BigQuery** | BigQuery icon | Source | airbyte/source-bigquery:0.2.3 | alpha | [docs](https://docs.airbyte.com/integrations/sources/bigquery) | [connectors/source/bigquery](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/bigquery) | [source-bigquery](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-bigquery) | `bfd1ddf8-ae8a-4620-b1d7-55597d2ba08c` | -| **Bing Ads** | Bing Ads icon | Source | airbyte/source-bing-ads:0.1.18 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/bing-ads) | [connectors/source/bing-ads](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/bing-ads) | [source-bing-ads](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-bing-ads) | `47f25999-dd5e-4636-8c39-e7cea2453331` | +| **Bing Ads** | Bing Ads icon | Source | airbyte/source-bing-ads:0.1.19 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/bing-ads) | [connectors/source/bing-ads](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/bing-ads) | [source-bing-ads](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-bing-ads) | `47f25999-dd5e-4636-8c39-e7cea2453331` | | **Braintree** | Braintree icon | Source | airbyte/source-braintree:0.1.4 | alpha | [docs](https://docs.airbyte.com/integrations/sources/braintree) | [connectors/source/braintree](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/braintree) | [source-braintree](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-braintree) | `63cea06f-1c75-458d-88fe-ad48c7cb27fd` | | **Braze** | x | Source | airbyte/source-braze:0.1.3 | alpha | [docs](https://docs.airbyte.io/integrations/sources/braze) | [connectors/source/braze](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/braze) | [source-braze](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-braze) | `68b9c98e-0747-4c84-b05b-d30b47686725` | | **Breezometer** | Breezometer icon | Source | airbyte/source-breezometer:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/breezometer) | [connectors/source/breezometer](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/breezometer) | [source-breezometer](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-breezometer) | `7c37685e-8512-4901-addf-9afbef6c0de9` | diff --git a/docs/integrations/sources/bing-ads.md b/docs/integrations/sources/bing-ads.md index f0b194357686..f045738ff787 100644 --- a/docs/integrations/sources/bing-ads.md +++ b/docs/integrations/sources/bing-ads.md @@ -102,6 +102,7 @@ The Bing Ads API limits the number of requests for all Microsoft Advertising cli ## Changelog | Version | Date | Pull Request | Subject | |:--------|:-----------|:---------------------------------------------------------------------------------------------------------------------------------|:---------------------------------------------------------------------------------------------------------------------------| +| 0.1.19 | 2023-03-08 | [23868](https://github.com/airbytehq/airbyte/pull/23868) | Add dimensional-type columns for reports. | | 0.1.18 | 2023-01-30 | [22073](https://github.com/airbytehq/airbyte/pull/22073) | Fix null values in the `Keyword` column of `keyword_performance_report` streams | | 0.1.17 | 2022-12-10 | [20005](https://github.com/airbytehq/airbyte/pull/20005) | Add `Keyword` to `keyword_performance_report` stream | | 0.1.16 | 2022-10-12 | [17873](https://github.com/airbytehq/airbyte/pull/17873) | Fix: added missing campaign types in (Audience, Shopping and DynamicSearchAds) in campaigns stream | From 3d0fb857f31e865fa6d6955d3152b7cf93d8aeee Mon Sep 17 00:00:00 2001 From: Denys Davydov Date: Fri, 14 Apr 2023 21:22:26 +0300 Subject: [PATCH 074/187] Source Facebook Marketing: fix data retention period validation (#25204) * #1678 source Facebook Marketing: fix data retention period validation * #1678 source fb marketing: add validation for the date range in the future * #1678 source fb marketing: another fix * auto-bump connector version --------- Co-authored-by: Octavia Squidington III --- .../src/main/resources/seed/oss_catalog.json | 2 +- .../resources/seed/source_definitions.yaml | 2 +- .../src/main/resources/seed/source_specs.yaml | 2 +- .../source-facebook-marketing/Dockerfile | 2 +- .../source-facebook-marketing/setup.py | 6 +--- .../source_facebook_marketing/source.py | 2 ++ .../source_facebook_marketing/utils.py | 5 ++++ .../unit_tests/test_source.py | 8 ++++++ .../unit_tests/test_utils.py | 28 +++++++++++-------- connectors.md | 2 +- .../sources/facebook-marketing.md | 1 + 11 files changed, 38 insertions(+), 22 deletions(-) diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json index 1ca63e7d4a52..e886e79407ea 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json @@ -12073,7 +12073,7 @@ "sourceDefinitionId": "e7778cfc-e97c-4458-9ecb-b4f2bba8946c", "name": "Facebook Marketing", "dockerRepository": "airbyte/source-facebook-marketing", - "dockerImageTag": "0.3.2", + "dockerImageTag": "0.3.3", "documentationUrl": "https://docs.airbyte.com/integrations/sources/facebook-marketing", "icon": "facebook.svg", "sourceType": "api", diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml index 5a7fcd2b1832..a64030f93044 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml @@ -562,7 +562,7 @@ - name: Facebook Marketing sourceDefinitionId: e7778cfc-e97c-4458-9ecb-b4f2bba8946c dockerRepository: airbyte/source-facebook-marketing - dockerImageTag: 0.3.2 + dockerImageTag: 0.3.3 documentationUrl: https://docs.airbyte.com/integrations/sources/facebook-marketing icon: facebook.svg sourceType: api diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml index ea4d56af4adc..46b1b8047c3e 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml @@ -3882,7 +3882,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-facebook-marketing:0.3.2" +- dockerImage: "airbyte/source-facebook-marketing:0.3.3" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/facebook-marketing" changelogUrl: "https://docs.airbyte.com/integrations/sources/facebook-marketing" diff --git a/airbyte-integrations/connectors/source-facebook-marketing/Dockerfile b/airbyte-integrations/connectors/source-facebook-marketing/Dockerfile index 944183f962bc..7ea538b4a6f3 100644 --- a/airbyte-integrations/connectors/source-facebook-marketing/Dockerfile +++ b/airbyte-integrations/connectors/source-facebook-marketing/Dockerfile @@ -13,5 +13,5 @@ ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=0.3.2 +LABEL io.airbyte.version=0.3.3 LABEL io.airbyte.name=airbyte/source-facebook-marketing diff --git a/airbyte-integrations/connectors/source-facebook-marketing/setup.py b/airbyte-integrations/connectors/source-facebook-marketing/setup.py index f9862fcc489d..dd1383898080 100644 --- a/airbyte-integrations/connectors/source-facebook-marketing/setup.py +++ b/airbyte-integrations/connectors/source-facebook-marketing/setup.py @@ -12,11 +12,7 @@ "pendulum>=2,<3", ] -TEST_REQUIREMENTS = [ - "pytest~=6.1", - "pytest-mock~=3.6", - "requests_mock~=1.8", -] +TEST_REQUIREMENTS = ["pytest~=6.1", "pytest-mock~=3.6", "requests_mock~=1.8", "freezegun"] setup( name="source_facebook_marketing", diff --git a/airbyte-integrations/connectors/source-facebook-marketing/source_facebook_marketing/source.py b/airbyte-integrations/connectors/source-facebook-marketing/source_facebook_marketing/source.py index 1d973e85f434..148554e7b336 100644 --- a/airbyte-integrations/connectors/source-facebook-marketing/source_facebook_marketing/source.py +++ b/airbyte-integrations/connectors/source-facebook-marketing/source_facebook_marketing/source.py @@ -59,6 +59,8 @@ def check_connection(self, logger: logging.Logger, config: Mapping[str, Any]) -> try: config = self._validate_and_transform(config) + if config.end_date > pendulum.now(): + return False, "Date range can not be in the future." if config.end_date < config.start_date: return False, "end_date must be equal or after start_date." diff --git a/airbyte-integrations/connectors/source-facebook-marketing/source_facebook_marketing/utils.py b/airbyte-integrations/connectors/source-facebook-marketing/source_facebook_marketing/utils.py index a7478ddca90f..b0a52abf4a77 100644 --- a/airbyte-integrations/connectors/source-facebook-marketing/source_facebook_marketing/utils.py +++ b/airbyte-integrations/connectors/source-facebook-marketing/source_facebook_marketing/utils.py @@ -20,6 +20,11 @@ def validate_start_date(start_date: DateTime) -> DateTime: now = pendulum.now(tz=start_date.tzinfo) today = now.replace(microsecond=0, second=0, minute=0, hour=0) retention_date = today.subtract(months=DATA_RETENTION_PERIOD) + if retention_date.day != today.day: + # `.subtract(months=37)` can be erroneous, for instance: + # 2023-03-31 - 37 month = 2020-02-29 which is incorrect, should be 2020-03-01 + # that's why we're adjusting the date to the 1st day of the next month + retention_date = retention_date.replace(month=retention_date.month + 1, day=1) if start_date > now: message = f"The start date cannot be in the future. Set start date to today's date - {today}." diff --git a/airbyte-integrations/connectors/source-facebook-marketing/unit_tests/test_source.py b/airbyte-integrations/connectors/source-facebook-marketing/unit_tests/test_source.py index 41db8154ce26..bf1ca1222718 100644 --- a/airbyte-integrations/connectors/source-facebook-marketing/unit_tests/test_source.py +++ b/airbyte-integrations/connectors/source-facebook-marketing/unit_tests/test_source.py @@ -58,6 +58,14 @@ def test_check_connection_ok(self, api, config, logger_mock): api.assert_called_once_with(account_id="123", access_token="TOKEN") logger_mock.info.assert_called_once_with(f"Select account {api.return_value.account}") + def test_check_connection_future_date_range(self, api, config, logger_mock): + config["start_date"] = "2219-10-10T00:00:00" + config["end_date"] = "2219-10-11T00:00:00" + assert SourceFacebookMarketing().check_connection(logger_mock, config=config) == ( + False, + "Date range can not be in the future.", + ) + def test_check_connection_end_date_before_start_date(self, api, config, logger_mock): config["start_date"] = "2019-10-10T00:00:00" config["end_date"] = "2019-10-09T00:00:00" diff --git a/airbyte-integrations/connectors/source-facebook-marketing/unit_tests/test_utils.py b/airbyte-integrations/connectors/source-facebook-marketing/unit_tests/test_utils.py index 76f134ce6d5d..69e82932d763 100644 --- a/airbyte-integrations/connectors/source-facebook-marketing/unit_tests/test_utils.py +++ b/airbyte-integrations/connectors/source-facebook-marketing/unit_tests/test_utils.py @@ -2,43 +2,47 @@ # Copyright (c) 2023 Airbyte, Inc., all rights reserved. # +import freezegun import pendulum import pytest from source_facebook_marketing.utils import DATA_RETENTION_PERIOD, validate_end_date, validate_start_date +TODAY = pendulum.local(2023, 3, 31) + @pytest.mark.parametrize( "field_name, date, expected_date, expected_messages", [ ( "start_date", - pendulum.today().subtract(months=DATA_RETENTION_PERIOD - 1), - pendulum.today().subtract(months=DATA_RETENTION_PERIOD - 1), + TODAY.subtract(months=DATA_RETENTION_PERIOD - 1), + TODAY.subtract(months=DATA_RETENTION_PERIOD - 1), [], ), ( "start_date", - pendulum.today().subtract(months=DATA_RETENTION_PERIOD + 1), - pendulum.today().subtract(months=DATA_RETENTION_PERIOD), + pendulum.local(2019, 1, 1), + pendulum.local(2020, 3, 1), [ f"The start date cannot be beyond 37 months from the current date. " - f"Set start date to {pendulum.today().subtract(months=DATA_RETENTION_PERIOD)}." - ], + f"Set start date to {pendulum.local(2020, 3, 1)}." + ] ), ( "start_date", - pendulum.today() + pendulum.duration(months=1), - pendulum.today(), - [f"The start date cannot be in the future. Set start date to today's date - {pendulum.today()}."], + TODAY + pendulum.duration(months=1), + TODAY, + [f"The start date cannot be in the future. Set start date to today's date - {TODAY}."], ), ( "end_date", - pendulum.today().subtract(months=DATA_RETENTION_PERIOD), - pendulum.today(), - [f"The end date must be after start date. Set end date to {pendulum.today()}."], + TODAY.subtract(months=DATA_RETENTION_PERIOD), + TODAY, + [f"The end date must be after start date. Set end date to {TODAY}."], ), ], ) +@freezegun.freeze_time("2023-03-31") def test_date_validators(caplog, field_name, date, expected_date, expected_messages): if field_name == "start_date": assert validate_start_date(date) == expected_date diff --git a/connectors.md b/connectors.md index bb2b6e9bba4b..206eb9bbc519 100644 --- a/connectors.md +++ b/connectors.md @@ -69,7 +69,7 @@ | **EmailOctopus** | EmailOctopus icon | Source | airbyte/source-emailoctopus:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/emailoctopus) | [connectors/source/emailoctopus](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/emailoctopus) | [source-emailoctopus](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-emailoctopus) | `46b25e70-c980-4590-a811-8deaf50ee09f` | | **Everhour** | Everhour icon | Source | airbyte/source-everhour:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/everhour) | [connectors/source/everhour](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/everhour) | [source-everhour](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-everhour) | `6babfc42-c734-4ef6-a817-6eca15f0f9b7` | | **Exchange Rates Api** | Exchange Rates Api icon | Source | airbyte/source-exchange-rates:1.2.8 | alpha | [docs](https://docs.airbyte.com/integrations/sources/exchangeratesapi) | [connectors/source/exchange-rates](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/exchange-rates) | [source-exchange-rates](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-exchange-rates) | `e2b40e36-aa0e-4bed-b41b-bcea6fa348b1` | -| **Facebook Marketing** | Facebook Marketing icon | Source | airbyte/source-facebook-marketing:0.3.2 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/facebook-marketing) | [connectors/source/facebook-marketing](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/facebook-marketing) | [source-facebook-marketing](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-facebook-marketing) | `e7778cfc-e97c-4458-9ecb-b4f2bba8946c` | +| **Facebook Marketing** | Facebook Marketing icon | Source | airbyte/source-facebook-marketing:0.3.3 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/facebook-marketing) | [connectors/source/facebook-marketing](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/facebook-marketing) | [source-facebook-marketing](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-facebook-marketing) | `e7778cfc-e97c-4458-9ecb-b4f2bba8946c` | | **Facebook Pages** | Facebook Pages icon | Source | airbyte/source-facebook-pages:0.2.4 | beta | [docs](https://docs.airbyte.com/integrations/sources/facebook-pages) | [connectors/source/facebook-pages](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/facebook-pages) | [source-facebook-pages](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-facebook-pages) | `010eb12f-837b-4685-892d-0a39f76a98f5` | | **Fastbill** | Fastbill icon | Source | airbyte/source-fastbill:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/fastbill) | [connectors/source/fastbill](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/fastbill) | [source-fastbill](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-fastbill) | `eb3e9c1c-0467-4eb7-a172-5265e04ccd0a` | | **Fauna** | Fauna icon | Source | airbyte/source-fauna:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/fauna) | [connectors/source/fauna](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/fauna) | [source-fauna](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-fauna) | `3825db3e-c94b-42ac-bd53-b5a9507ace2b` | diff --git a/docs/integrations/sources/facebook-marketing.md b/docs/integrations/sources/facebook-marketing.md index 69cc523dbf9a..dbfade05c295 100644 --- a/docs/integrations/sources/facebook-marketing.md +++ b/docs/integrations/sources/facebook-marketing.md @@ -136,6 +136,7 @@ Please be informed that the connector uses the `lookback_window` parameter to pe | Version | Date | Pull Request | Subject | |:--------|:-----------|:---------------------------------------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 0.3.3 | 2023-04-14 | [00000](https://github.com/airbytehq/airbyte/pull/00000) | Fix data retention period validation | | 0.3.2 | 2023-04-08 | [25003](https://github.com/airbytehq/airbyte/pull/25003) | Don't fetch `thumbnail_data_url` if it's None | | 0.3.1 | 2023-03-27 | [24600](https://github.com/airbytehq/airbyte/pull/24600) | Reduce request record limit when retrying second page or further | | 0.3.0 | 2023-03-16 | [19141](https://github.com/airbytehq/airbyte/pull/19141) | Added Level parameter to custom Ads Insights | From b59c04762f7c425b818a4ea50f01efcc5b26abd3 Mon Sep 17 00:00:00 2001 From: Tim Roes Date: Fri, 14 Apr 2023 21:00:06 +0200 Subject: [PATCH 075/187] Add OSS getting started redirect (#25213) --- docusaurus/docusaurus.config.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docusaurus/docusaurus.config.js b/docusaurus/docusaurus.config.js index 996a3fc1434a..8be741b38a7b 100644 --- a/docusaurus/docusaurus.config.js +++ b/docusaurus/docusaurus.config.js @@ -71,6 +71,10 @@ const config = { from: "/category/managing-airbyte-cloud", to: "/category/using-airbyte-cloud", }, + { + from: "/category/airbyte-open-source-quick-start", + to: "/category/getting-started" + }, { from: "/cloud/dbt-cloud-integration", to: "/cloud/managing-airbyte-cloud/dbt-cloud-integration", From 6a8b35be6743a69af96c00a8be190b3c25b43e40 Mon Sep 17 00:00:00 2001 From: Ben Church Date: Fri, 14 Apr 2023 12:08:42 -0700 Subject: [PATCH 076/187] Add is_optional flag to connector tests (#25211) --- .../ci_connector_ops/pipelines/contexts.py | 5 +++++ .../ci_connector_ops/pipelines/github.py | 13 ++++++++++--- .../pipelines/tests/java_connectors.py | 1 - 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/tools/ci_connector_ops/ci_connector_ops/pipelines/contexts.py b/tools/ci_connector_ops/ci_connector_ops/pipelines/contexts.py index 09dd70ac95b7..089a8ff31300 100644 --- a/tools/ci_connector_ops/ci_connector_ops/pipelines/contexts.py +++ b/tools/ci_connector_ops/ci_connector_ops/pipelines/contexts.py @@ -67,6 +67,7 @@ def __init__( gha_workflow_run_url: Optional[str] = None, pipeline_start_timestamp: Optional[int] = None, ci_context: Optional[str] = None, + is_ci_optional: bool = False, ): """Initialize a pipeline context. @@ -88,6 +89,7 @@ def __init__( self.created_at = datetime.utcnow() self.ci_context = ci_context self.state = ContextState.INITIALIZED + self.is_ci_optional = is_ci_optional self.logger = logging.getLogger(self.pipeline_name) self.dagger_client = None @@ -134,6 +136,7 @@ def github_commit_status(self) -> dict: "context": self.pipeline_name, "should_send": self.is_pr, "logger": self.logger, + "is_optional": self.is_ci_optional, } def get_repo_dir(self, subdir: str = ".", exclude: Optional[List[str]] = None, include: Optional[List[str]] = None) -> Directory: @@ -267,6 +270,8 @@ def __init__( gha_workflow_run_url=gha_workflow_run_url, pipeline_start_timestamp=pipeline_start_timestamp, ci_context=ci_context, + # TODO: remove this once stable and our default pipeline + is_ci_optional=True, ) @property diff --git a/tools/ci_connector_ops/ci_connector_ops/pipelines/github.py b/tools/ci_connector_ops/ci_connector_ops/pipelines/github.py index c82e7fdd8dc4..003657abb5e0 100644 --- a/tools/ci_connector_ops/ci_connector_ops/pipelines/github.py +++ b/tools/ci_connector_ops/ci_connector_ops/pipelines/github.py @@ -29,13 +29,13 @@ def safe_log(logger: Optional[Logger], message: str, level: str = "info") -> Non def update_commit_status_check( - sha: str, state: str, target_url: str, description: str, context: str, should_send=True, logger: Logger = None + sha: str, state: str, target_url: str, description: str, context: str, is_optional=False, should_send=True, logger: Logger = None ): """Call the GitHub API to create commit status check. Args: sha (str): Hash of the commit for which you want to create a status check. - state (str): The check state (success, failure, pendint) + state (str): The check state (success, failure, pending) target_url (str): The URL to attach to the commit check for details. description (str): Description of the check that is run. context (str): Name of the Check context e.g: source-pokeapi tests @@ -56,10 +56,17 @@ def update_commit_status_check( console.print(e) return + # If the check is optional, we don't want to fail the build if it fails. + # Instead, we want to mark it as a warning. + # Unfortunately, Github doesn't have a warning state, so we use success instead. + if is_optional and state == "failure": + state = "success" + description = f"[WARNING] optional check failed {context}: {description}" + airbyte_repo.get_commit(sha=sha).create_status( state=state, target_url=target_url, description=description, context=context, ) - safe_log(logger, f"Created {state} status for commit {sha} on Github in {context} context.") + safe_log(logger, f"Created {state} status for commit {sha} on Github in {context} context with desc: {description}.") diff --git a/tools/ci_connector_ops/ci_connector_ops/pipelines/tests/java_connectors.py b/tools/ci_connector_ops/ci_connector_ops/pipelines/tests/java_connectors.py index b69bbdd2576e..4c2c555eec18 100644 --- a/tools/ci_connector_ops/ci_connector_ops/pipelines/tests/java_connectors.py +++ b/tools/ci_connector_ops/ci_connector_ops/pipelines/tests/java_connectors.py @@ -161,7 +161,6 @@ def _get_gradle_command(self, extra_options: Tuple[str] = ("--no-daemon", "--sca return command async def _run(self) -> StepResult: - connector_under_test = ( environments.with_gradle( self.context, self.build_include, docker_service_name=self.docker_service_name, bind_to_docker_host=self.BIND_TO_DOCKER_HOST From ca0f96001b75be4dae3061629cb8275209026ad2 Mon Sep 17 00:00:00 2001 From: Tim Roes Date: Fri, 14 Apr 2023 22:05:10 +0200 Subject: [PATCH 077/187] Run doc deploys on docosaurus changes (#25215) Co-authored-by: Topher Lubaway --- .github/workflows/deploy-docs-site.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/deploy-docs-site.yml b/.github/workflows/deploy-docs-site.yml index 8e4d24540180..de0a86587ef2 100644 --- a/.github/workflows/deploy-docs-site.yml +++ b/.github/workflows/deploy-docs-site.yml @@ -6,6 +6,7 @@ on: - master paths: - "docs/**" + - "docusaurus/**" pull_request: types: @@ -15,6 +16,7 @@ on: - synchronize paths: - "docs/**" + - "docusaurus/**" # Allows you to run this workflow manually from the Actions tab workflow_dispatch: From 650ca35f202fd50a53f337ac987af312413def0f Mon Sep 17 00:00:00 2001 From: Alexandre Girard Date: Fri, 14 Apr 2023 14:05:22 -0700 Subject: [PATCH 078/187] Fix manifest_declarative_source + add unit tests (#25217) * Fix + unit test * Add a test with pagination * Add a test with partition router * Make sure _fetch_next_page is called with the right arguments * Automated Commit - Formatting Changes * pagination with partitions * refactor * clean up * format --------- Co-authored-by: girarda --- .../manifest_declarative_source.py | 2 +- .../test_manifest_declarative_source.py | 432 +++++++++++++++++- 2 files changed, 432 insertions(+), 2 deletions(-) diff --git a/airbyte-cdk/python/airbyte_cdk/sources/declarative/manifest_declarative_source.py b/airbyte-cdk/python/airbyte_cdk/sources/declarative/manifest_declarative_source.py index 82fbb1dfb36d..1dcaccbfa4f4 100644 --- a/airbyte-cdk/python/airbyte_cdk/sources/declarative/manifest_declarative_source.py +++ b/airbyte-cdk/python/airbyte_cdk/sources/declarative/manifest_declarative_source.py @@ -130,7 +130,7 @@ def read( yield from super().read(logger, config, catalog, state) def should_log_slice_message(self, logger: logging.Logger): - return self._emit_connector_builder_messages or super(self).should_log_slice_message(logger) + return self._emit_connector_builder_messages or super().should_log_slice_message(logger) def _configure_logger_level(self, logger: logging.Logger): """ diff --git a/airbyte-cdk/python/unit_tests/sources/declarative/test_manifest_declarative_source.py b/airbyte-cdk/python/unit_tests/sources/declarative/test_manifest_declarative_source.py index 1a87ad823535..100cf29ec4e9 100644 --- a/airbyte-cdk/python/unit_tests/sources/declarative/test_manifest_declarative_source.py +++ b/airbyte-cdk/python/unit_tests/sources/declarative/test_manifest_declarative_source.py @@ -2,15 +2,30 @@ # Copyright (c) 2023 Airbyte, Inc., all rights reserved. # +import json import logging import os import sys -from unittest.mock import patch +from typing import Any, List, Mapping +from unittest.mock import call, patch import pytest +import requests import yaml +from airbyte_cdk.models import ( + AirbyteLogMessage, + AirbyteMessage, + AirbyteStream, + ConfiguredAirbyteCatalog, + ConfiguredAirbyteStream, + DestinationSyncMode, + Level, + SyncMode, + Type, +) from airbyte_cdk.sources.declarative.declarative_stream import DeclarativeStream from airbyte_cdk.sources.declarative.manifest_declarative_source import ManifestDeclarativeSource +from airbyte_cdk.sources.streams.http import HttpStream from jsonschema.exceptions import ValidationError logger = logging.getLogger("airbyte") @@ -727,3 +742,418 @@ def test_given_debug_when_read_then_set_log_level(self, declarative_source_read) list(source.read(debug_logger, {}, {}, {})) assert debug_logger.isEnabledFor(logging.DEBUG) + + +def request_log_message(request: dict) -> AirbyteMessage: + return AirbyteMessage(type=Type.LOG, log=AirbyteLogMessage(level=Level.INFO, message=f"request:{json.dumps(request)}")) + + +def response_log_message(response: dict) -> AirbyteMessage: + return AirbyteMessage(type=Type.LOG, log=AirbyteLogMessage(level=Level.INFO, message=f"response:{json.dumps(response)}")) + + +def _create_request(): + url = "https://example.com/api" + headers = {'Content-Type': 'application/json'} + return requests.Request('POST', url, headers=headers, json={"key": "value"}).prepare() + + +def _create_response(body): + response = requests.Response() + response.status_code = 200 + response._content = bytes(json.dumps(body), "utf-8") + response.headers["Content-Type"] = "application/json" + return response + + +def _create_page(response_body): + return _create_request(), _create_response(response_body) + + +@pytest.mark.parametrize("test_name, manifest, pages, expected_records, expected_calls",[ + ("test_read_manifest_no_pagination_no_partitions", + { + "version": "0.34.2", + "type": "DeclarativeSource", + "check": { + "type": "CheckStream", + "stream_names": [ + "Rates" + ] + }, + "streams": [ + { + "type": "DeclarativeStream", + "name": "Rates", + "primary_key": [], + "schema_loader": { + "type": "InlineSchemaLoader", + "schema": { + "$schema": "http://json-schema.org/schema#", + "properties": { + "ABC": { + "type": "number" + }, + "AED": { + "type": "number" + }, + }, + "type": "object" + } + }, + "retriever": { + "type": "SimpleRetriever", + "requester": { + "type": "HttpRequester", + "url_base": "https://api.apilayer.com", + "path": "/exchangerates_data/latest", + "http_method": "GET", + "request_parameters": {}, + "request_headers": {}, + "request_body_json": {}, + "authenticator": { + "type": "ApiKeyAuthenticator", + "header": "apikey", + "api_token": "{{ config['api_key'] }}" + } + }, + "record_selector": { + "type": "RecordSelector", + "extractor": { + "type": "DpathExtractor", + "field_path": [ + "rates" + ] + } + }, + "paginator": { + "type": "NoPagination" + } + } + } + ], + "spec": { + "connection_specification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "required": [ + "api_key" + ], + "properties": { + "api_key": { + "type": "string", + "title": "API Key", + "airbyte_secret": True + } + }, + "additionalProperties": True + }, + "documentation_url": "https://example.org", + "type": "Spec" + } + }, + (_create_page({"rates": [{"ABC": 0}, {"AED": 1}],"_metadata": {"next": "next"}}), _create_page({"rates": [{"USD": 2}],"_metadata": {"next": "next"}})) * 10, + [{"ABC": 0}, {"AED": 1}], + [call({}, {}, None)]), + ("test_read_with_pagination_no_partitions", + { + "version": "0.34.2", + "type": "DeclarativeSource", + "check": { + "type": "CheckStream", + "stream_names": [ + "Rates" + ] + }, + "streams": [ + { + "type": "DeclarativeStream", + "name": "Rates", + "primary_key": [], + "schema_loader": { + "type": "InlineSchemaLoader", + "schema": { + "$schema": "http://json-schema.org/schema#", + "properties": { + "ABC": { + "type": "number" + }, + "AED": { + "type": "number" + }, + "USD": { + "type": "number" + }, + }, + "type": "object" + } + }, + "retriever": { + "type": "SimpleRetriever", + "requester": { + "type": "HttpRequester", + "url_base": "https://api.apilayer.com", + "path": "/exchangerates_data/latest", + "http_method": "GET", + "request_parameters": {}, + "request_headers": {}, + "request_body_json": {}, + "authenticator": { + "type": "ApiKeyAuthenticator", + "header": "apikey", + "api_token": "{{ config['api_key'] }}" + } + }, + "record_selector": { + "type": "RecordSelector", + "extractor": { + "type": "DpathExtractor", + "field_path": [ + "rates" + ] + } + }, + "paginator": { + "type": "DefaultPaginator", + "page_size": 2, + "page_size_option": {"inject_into": "request_parameter", "field_name": "page_size"}, + "page_token_option": {"inject_into": "path", "type": "RequestPath"}, + "pagination_strategy": {"type": "CursorPagination", "cursor_value": "{{ response._metadata.next }}", "page_size": 2}, + }, + } + } + ], + "spec": { + "connection_specification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "required": [ + "api_key" + ], + "properties": { + "api_key": { + "type": "string", + "title": "API Key", + "airbyte_secret": True + } + }, + "additionalProperties": True + }, + "documentation_url": "https://example.org", + "type": "Spec" + } + }, + (_create_page({"rates": [{"ABC": 0}, {"AED": 1}],"_metadata": {"next": "next"}}), _create_page({"rates": [{"USD": 2}],"_metadata": {}})) * 10, + [{"ABC": 0}, {"AED": 1}, {"USD": 2}], + [call({}, {}, None), call({}, {}, {"next_page_token": "next"})]), + ( + "test_no_pagination_with_partition_router", + { + "version": "0.34.2", + "type": "DeclarativeSource", + "check": { + "type": "CheckStream", + "stream_names": [ + "Rates" + ] + }, + "streams": [ + { + "type": "DeclarativeStream", + "name": "Rates", + "primary_key": [], + "schema_loader": { + "type": "InlineSchemaLoader", + "schema": { + "$schema": "http://json-schema.org/schema#", + "properties": { + "ABC": { + "type": "number" + }, + "AED": { + "type": "number" + }, + "partition": { + "type": "number" + } + }, + "type": "object" + } + }, + "retriever": { + "type": "SimpleRetriever", + "requester": { + "type": "HttpRequester", + "url_base": "https://api.apilayer.com", + "path": "/exchangerates_data/latest", + "http_method": "GET", + "request_parameters": {}, + "request_headers": {}, + "request_body_json": {}, + "authenticator": { + "type": "ApiKeyAuthenticator", + "header": "apikey", + "api_token": "{{ config['api_key'] }}" + } + }, + "partition_router": { + "type": "ListPartitionRouter", + "values": ["0", "1"], + "cursor_field": "partition" + }, + "record_selector": { + "type": "RecordSelector", + "extractor": { + "type": "DpathExtractor", + "field_path": [ + "rates" + ] + } + }, + "paginator": { + "type": "NoPagination" + } + } + } + ], + "spec": { + "connection_specification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "required": [ + "api_key" + ], + "properties": { + "api_key": { + "type": "string", + "title": "API Key", + "airbyte_secret": True + } + }, + "additionalProperties": True + }, + "documentation_url": "https://example.org", + "type": "Spec" + } + }, + (_create_page({"rates": [{"ABC": 0, "partition": 0}, {"AED": 1, "partition": 0}], "_metadata": {"next": "next"}}), + _create_page({"rates": [{"ABC": 2, "partition": 1}], "_metadata": {"next": "next"}})), + [{"ABC": 0, "partition": 0}, {"AED": 1, "partition": 0}, {"ABC": 2, "partition": 1}], + [call({"partition": "0"}, {}, None), call({"partition": "1"}, {}, None)] + ), + ("test_with_pagination_and_partition_router", + { + "version": "0.34.2", + "type": "DeclarativeSource", + "check": { + "type": "CheckStream", + "stream_names": [ + "Rates" + ] + }, + "streams": [ + { + "type": "DeclarativeStream", + "name": "Rates", + "primary_key": [], + "schema_loader": { + "type": "InlineSchemaLoader", + "schema": { + "$schema": "http://json-schema.org/schema#", + "properties": { + "ABC": { + "type": "number" + }, + "AED": { + "type": "number" + }, + "partition": { + "type": "number" + } + }, + "type": "object" + } + }, + "retriever": { + "type": "SimpleRetriever", + "requester": { + "type": "HttpRequester", + "url_base": "https://api.apilayer.com", + "path": "/exchangerates_data/latest", + "http_method": "GET", + "request_parameters": {}, + "request_headers": {}, + "request_body_json": {}, + "authenticator": { + "type": "ApiKeyAuthenticator", + "header": "apikey", + "api_token": "{{ config['api_key'] }}" + } + }, + "partition_router": { + "type": "ListPartitionRouter", + "values": ["0", "1"], + "cursor_field": "partition" + }, + "record_selector": { + "type": "RecordSelector", + "extractor": { + "type": "DpathExtractor", + "field_path": [ + "rates" + ] + } + }, + "paginator": { + "type": "DefaultPaginator", + "page_size": 2, + "page_size_option": {"inject_into": "request_parameter", "field_name": "page_size"}, + "page_token_option": {"inject_into": "path", "type": "RequestPath"}, + "pagination_strategy": {"type": "CursorPagination", "cursor_value": "{{ response._metadata.next }}", "page_size": 2}, + }, + } + } + ], + "spec": { + "connection_specification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "required": [ + "api_key" + ], + "properties": { + "api_key": { + "type": "string", + "title": "API Key", + "airbyte_secret": True + } + }, + "additionalProperties": True + }, + "documentation_url": "https://example.org", + "type": "Spec" + } + }, + ( + _create_page({"rates": [{"ABC": 0, "partition": 0}, {"AED": 1, "partition": 0}], "_metadata": {"next": "next"}}), + _create_page({"rates": [{"USD": 3, "partition": 0}], "_metadata": {}}), + _create_page({"rates": [{"ABC": 2, "partition": 1}], "_metadata": {}}), + ), + [{"ABC": 0, "partition": 0}, {"AED": 1, "partition": 0}, {"USD": 3, "partition": 0}, {"ABC": 2, "partition": 1}], + [call({"partition": "0"}, {}, None), call({"partition": "0"}, {}, {"next_page_token": "next"}), call({"partition": "1"}, {}, None),] + ) +]) +def test_read_manifest_declarative_source(test_name, manifest, pages, expected_records, expected_calls): + _stream_name = "Rates" + with patch.object(HttpStream, "_fetch_next_page", side_effect=pages) as mock_http_stream: + output_data = [message.record.data for message in _run_read(manifest, _stream_name)] + assert expected_records == output_data + mock_http_stream.assert_has_calls(expected_calls) + + +def _run_read(manifest: Mapping[str, Any], stream_name: str) -> List[AirbyteMessage]: + source = ManifestDeclarativeSource(source_config=manifest) + catalog = ConfiguredAirbyteCatalog(streams=[ + ConfiguredAirbyteStream(stream=AirbyteStream(name=stream_name, json_schema={}, supported_sync_modes=[SyncMode.full_refresh]), sync_mode=SyncMode.full_refresh, destination_sync_mode=DestinationSyncMode.append) + ]) + return list(source.read(logger, {}, catalog, {})) From b3a25a75399c0b7bab3ce15aa42bd76b35c9c51c Mon Sep 17 00:00:00 2001 From: girarda Date: Fri, 14 Apr 2023 21:11:36 +0000 Subject: [PATCH 079/187] =?UTF-8?q?=F0=9F=A4=96=20Bump=20patch=20version?= =?UTF-8?q?=20of=20Airbyte=20CDK?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- airbyte-cdk/python/.bumpversion.cfg | 2 +- airbyte-cdk/python/CHANGELOG.md | 3 +++ airbyte-cdk/python/Dockerfile | 4 ++-- airbyte-cdk/python/setup.py | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/airbyte-cdk/python/.bumpversion.cfg b/airbyte-cdk/python/.bumpversion.cfg index 54afb9d55dba..93d79e4c4ebe 100644 --- a/airbyte-cdk/python/.bumpversion.cfg +++ b/airbyte-cdk/python/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.34.2 +current_version = 0.34.3 commit = False [bumpversion:file:setup.py] diff --git a/airbyte-cdk/python/CHANGELOG.md b/airbyte-cdk/python/CHANGELOG.md index 9ffeb23fa827..ae61f05f5477 100644 --- a/airbyte-cdk/python/CHANGELOG.md +++ b/airbyte-cdk/python/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog +## 0.34.3 +low-code: fix typo in ManifestDeclarativeSource + ## 0.34.2 Emit slice log messages when running the connector builder diff --git a/airbyte-cdk/python/Dockerfile b/airbyte-cdk/python/Dockerfile index e14beda07b01..d6ad6f60838a 100644 --- a/airbyte-cdk/python/Dockerfile +++ b/airbyte-cdk/python/Dockerfile @@ -10,7 +10,7 @@ RUN apk --no-cache upgrade \ && apk --no-cache add tzdata build-base # install airbyte-cdk -RUN pip install --prefix=/install airbyte-cdk==0.34.2 +RUN pip install --prefix=/install airbyte-cdk==0.34.3 # build a clean environment FROM base @@ -32,5 +32,5 @@ ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] # needs to be the same as CDK -LABEL io.airbyte.version=0.34.2 +LABEL io.airbyte.version=0.34.3 LABEL io.airbyte.name=airbyte/source-declarative-manifest diff --git a/airbyte-cdk/python/setup.py b/airbyte-cdk/python/setup.py index ef162934137c..44d80940c9b3 100644 --- a/airbyte-cdk/python/setup.py +++ b/airbyte-cdk/python/setup.py @@ -17,7 +17,7 @@ name="airbyte-cdk", # The version of the airbyte-cdk package is used at runtime to validate manifests. That validation must be # updated if our semver format changes such as using release candidate versions. - version="0.34.2", + version="0.34.3", description="A framework for writing Airbyte Connectors.", long_description=README, long_description_content_type="text/markdown", From e2ad907d05e68e4f279fafd5b8ceef4c83bdb404 Mon Sep 17 00:00:00 2001 From: Jimmy Ma Date: Fri, 14 Apr 2023 14:29:14 -0700 Subject: [PATCH 080/187] Document the config for docker workspace cleanup (#25210) --- docs/operator-guides/configuring-airbyte.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/operator-guides/configuring-airbyte.md b/docs/operator-guides/configuring-airbyte.md index 9e3f32439f6a..e334793323a9 100644 --- a/docs/operator-guides/configuring-airbyte.md +++ b/docs/operator-guides/configuring-airbyte.md @@ -111,6 +111,11 @@ Set to empty values, e.g. "" to disable basic auth. **Be sure to change these va 4. `MAX_DISCOVER_WORKERS` - Define the maximum number of Discover workers each Airbyte Worker container can support. Defaults to 5. 5. `SENTRY_DSN` - Define the [DSN](https://docs.sentry.io/product/sentry-basics/dsn-explainer/) of necessary Sentry instance. Defaults to empty. Integration with Sentry is explained [here](./sentry-integration.md) +#### Data Retention + +1. `TEMPORAL_HISTORY_RETENTION_IN_DAYS` - Define the retention period of the job history in Temporal, defaults to 30 days. When running in docker, + this same value is applied to the log retention. + ### Docker-Only 1. `WORKSPACE_DOCKER_MOUNT` - Defines the name of the Airbyte docker volume. From eab748f433303f90d91314bce6b729265d600b56 Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Mon, 17 Apr 2023 23:29:49 +0530 Subject: [PATCH 081/187] delete privacy streams, refactor webhooks --- .../integration_tests/configured_catalog.json | 18 --------- .../source-yotpo/source_yotpo/manifest.yaml | 39 +------------------ .../source_yotpo/schemas/privacy_data.json | 11 ------ .../source_yotpo/schemas/privacy_user.json | 14 ------- .../source_yotpo/schemas/webhooks.json | 38 +++++++----------- docs/integrations/sources/yotpo.md | 2 - 6 files changed, 16 insertions(+), 106 deletions(-) delete mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_data.json delete mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_user.json diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json index 2d7be78bcee3..6bbc5aec3ab5 100644 --- a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json @@ -1,23 +1,5 @@ { "streams": [ - { - "stream": { - "name": "privacy_data", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "privacy_user", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, { "stream": { "name": "reviews", diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml index aaa1e147f66f..f1eaf0233310 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml @@ -29,40 +29,7 @@ definitions: request_parameters: utoken: "{{ config['access_token'] }}" email: "{{ config['email'] }}" - - privacy_data_stream: - type: DeclarativeStream - retriever: - type: SimpleRetriever - record_selector: - type: RecordSelector - extractor: - type: DpathExtractor - field_path: ["response"] - paginator: - type: NoPagination - requester: - $ref: "#/definitions/privacy_stream_requester" - name: "privacy_data" - $parameters: - path: "/data/exists" - privacy_user_stream: - type: DeclarativeStream - retriever: - type: SimpleRetriever - record_selector: - type: RecordSelector - extractor: - type: DpathExtractor - field_path: ["status"] - paginator: - type: NoPagination - requester: - $ref: "#/definitions/privacy_stream_requester" - name: "privacy_user" - $parameters: - path: "/data" reviews_stream: type: DeclarativeStream @@ -138,7 +105,7 @@ definitions: type: RecordSelector extractor: type: DpathExtractor - field_path: ["response"] + field_path: ["response", "webhooks"] paginator: type: NoPagination requester: @@ -148,8 +115,6 @@ definitions: path: "/apps/{{ config['app_key'] }}/webhooks" streams: - - "#/definitions/privacy_data_stream" - - "#/definitions/privacy_user_stream" - "#/definitions/reviews_stream" - "#/definitions/reviews_bottomline_stream" - "#/definitions/top_reviews_stream" @@ -158,8 +123,6 @@ streams: check: type: CheckStream stream_names: - - "privacy_data" - - "privacy_user" - "reviews" - "reviews_bottomline" - "top_reviews" diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_data.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_data.json deleted file mode 100644 index 3d6ecf69ffac..000000000000 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_data.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Privacy Data", - "additionalProperties": true, - "type": "object", - "properties": { - "has_data": { - "type": ["null", "boolean"] - } - } -} diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_user.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_user.json deleted file mode 100644 index 3603d55f04da..000000000000 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/privacy_user.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Privacy User", - "additionalProperties": true, - "type": "object", - "properties": { - "code": { - "type": ["null", "number"] - }, - "message": { - "type": ["null", "string"] - } - } -} diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/webhooks.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/webhooks.json index e4fc677f852e..b93f4e074aea 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/webhooks.json +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/webhooks.json @@ -2,30 +2,22 @@ "$schema": "http://json-schema.org/draft-07/schema#", "title": "Webhooks Schema", "additionalProperties": true, - "type": "object", + "type": ["null", "object"], "properties": { - "webhooks": { - "type": ["null", "array"], - "items": { - "type": ["null", "object"], - "properties": { - "id": { - "type": ["null", "number"] - }, - "webhook_event_id": { - "type": ["null", "number"] - }, - "webhook_event_name": { - "type": ["null", "string"] - }, - "url": { - "type": ["null", "string"] - }, - "version": { - "type": ["null", "number"] - } - } - } + "id": { + "type": ["null", "number"] + }, + "webhook_event_id": { + "type": ["null", "number"] + }, + "webhook_event_name": { + "type": ["null", "string"] + }, + "url": { + "type": ["null", "string"] + }, + "version": { + "type": ["null", "number"] } } } diff --git a/docs/integrations/sources/yotpo.md b/docs/integrations/sources/yotpo.md index d4a6a19e42d1..21c25765ecac 100644 --- a/docs/integrations/sources/yotpo.md +++ b/docs/integrations/sources/yotpo.md @@ -49,8 +49,6 @@ The Yotpo source connector supports the following [sync modes](https://docs.airb ## Supported Streams -- privacy_data -- privacy_user - reviews - reviews_bottomline - top_reviews From 8c987073595b0315227290f857de2adbc25c9d6d Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Mon, 17 Apr 2023 23:44:52 +0530 Subject: [PATCH 082/187] add pagination --- .../source-yotpo/source_yotpo/manifest.yaml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml index f1eaf0233310..5c494f907fbb 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml @@ -41,7 +41,18 @@ definitions: type: DpathExtractor field_path: ["reviews"] paginator: - type: NoPagination + type: "DefaultPaginator" + page_size_option: + type: "RequestOption" + inject_into: "request_parameter" + field_name: "per_page" + pagination_strategy: + type: "PageIncrement" + page_size: 5 + page_token_option: + type: "RequestOption" + inject_into: "request_parameter" + field_name: "page" requester: $ref: "#/definitions/yotpo_stream_requester" incremental_sync: From e9026bf20c2d710fd0364f245d818b0cae7e33a6 Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Tue, 18 Apr 2023 15:55:34 +0530 Subject: [PATCH 083/187] add streams raw_data, email_analytics --- .../source-yotpo/acceptance-test-config.yml | 4 +- .../integration_tests/configured_catalog.json | 18 +++++ .../source-yotpo/source_yotpo/manifest.yaml | 47 +++++++++++- .../source_yotpo/schemas/email_analytics.json | 18 +++++ .../source_yotpo/schemas/raw_data.json | 71 +++++++++++++++++++ 5 files changed, 155 insertions(+), 3 deletions(-) create mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/email_analytics.json create mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/raw_data.json diff --git a/airbyte-integrations/connectors/source-yotpo/acceptance-test-config.yml b/airbyte-integrations/connectors/source-yotpo/acceptance-test-config.yml index ecfcc4f72b63..a3b095b9bde1 100644 --- a/airbyte-integrations/connectors/source-yotpo/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-yotpo/acceptance-test-config.yml @@ -18,7 +18,9 @@ acceptance_tests: tests: - config_path: "secrets/config.json" configured_catalog_path: "integration_tests/configured_catalog.json" - empty_streams: [] + empty_streams: + - name: "raw_data" + bypass_reason: "Sandbox account cannot seed the endpoint" expect_records: path: "integration_tests/expected_records.jsonl" extra_fields: no diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json index 6bbc5aec3ab5..83e04cee3701 100644 --- a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json @@ -1,5 +1,23 @@ { "streams": [ + { + "stream": { + "name": "email_analytics", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "raw_data", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, { "stream": { "name": "reviews", diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml index 5c494f907fbb..7eece70ccc58 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml @@ -29,7 +29,13 @@ definitions: request_parameters: utoken: "{{ config['access_token'] }}" email: "{{ config['email'] }}" - + + analytics_stream_requester: + type: HttpRequester + url_base: "https://api.yotpo.com/analytics/v1" + http_method: "GET" + request_parameters: + utoken: "{{ config['access_token'] }}" reviews_stream: type: DeclarativeStream @@ -73,6 +79,40 @@ definitions: $parameters: path: "/apps/{{ config['app_key'] }}/reviews" + email_analytics_stream: + type: DeclarativeStream + retriever: + type: SimpleRetriever + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: ["date_series_points"] + paginator: + type: NoPagination + requester: + $ref: "#/definitions/analytics_stream_requester" + name: "email_analytics" + $parameters: + path: "/emails/{{ config['app_key'] }}/emails_sent?token={{ config['access_token'] }}" + + raw_data_stream: + type: DeclarativeStream + retriever: + type: SimpleRetriever + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: ["records"] + paginator: + type: NoPagination + requester: + $ref: "#/definitions/analytics_stream_requester" + name: "raw_data" + $parameters: + path: "/emails/{{ config['app_key'] }}/export/raw_data?token={{ config['access_token'] }}" + reviews_bottomline_stream: type: DeclarativeStream retriever: @@ -90,7 +130,6 @@ definitions: $parameters: path: "/products/{{ config['app_key'] }}/yotpo_site_reviews/bottomline" - top_reviews_stream: type: DeclarativeStream retriever: @@ -126,6 +165,8 @@ definitions: path: "/apps/{{ config['app_key'] }}/webhooks" streams: + - "#/definitions/email_analytics_stream" + - "#/definitions/raw_data_stream" - "#/definitions/reviews_stream" - "#/definitions/reviews_bottomline_stream" - "#/definitions/top_reviews_stream" @@ -134,6 +175,8 @@ streams: check: type: CheckStream stream_names: + - "email_analytics" + - "raw_data" - "reviews" - "reviews_bottomline" - "top_reviews" diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/email_analytics.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/email_analytics.json new file mode 100644 index 000000000000..5c28d57a89a3 --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/email_analytics.json @@ -0,0 +1,18 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Email Analytics", + "additionalProperties": true, + "type": "object", + "properties": { + "since": { + "type": ["null", "string"] + }, + "until": { + "type": ["null", "string"] + }, + "values": { + "type": ["null", "object"], + "properties": {} + } + } +} diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/raw_data.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/raw_data.json new file mode 100644 index 000000000000..ff2feeac9183 --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/raw_data.json @@ -0,0 +1,71 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Raw Data Schema", + "additionalProperties": true, + "type": "object", + "properties": { + "email_address": { + "type": ["null", "string"] + }, + "order_id": { + "type": ["null", "string"] + }, + "order_timestamp": { + "type": ["null", "string"] + }, + "product_id": { + "type": ["null", "string"] + }, + "sku": { + "type": ["null", "number"] + }, + "email_type": { + "type": ["null", "string"] + }, + "reminder_num": { + "type": ["null", "number"] + }, + "trr_bundle_id": { + "type": ["null", "string"] + }, + "trr_bundle_subject": { + "type": ["null", "string"] + }, + "review_type": { + "type": ["null", "string"] + }, + "coupon_code": { + "type": ["null", "number"] + }, + "email_sent_timestamp": { + "type": ["null", "string"] + }, + "opened_timestamp": { + "type": ["null", "string"] + }, + "clicked_through_timestamp": { + "type": ["null", "string"] + }, + "content_creation_timestamp": { + "type": ["null", "string"] + }, + "platform": { + "type": ["null", "string"] + }, + "invalid_address_timestamp": { + "type": ["null", "string"] + }, + "failed_timestamp": { + "type": ["null", "string"] + }, + "unsubscribed_timestamp": { + "type": ["null", "string"] + }, + "marked_spam_timestamp": { + "type": ["null", "string"] + }, + "arrived_early_timestamp": { + "type": ["null", "string"] + } + } +} From 1fd54c23202a53bb619dcc16581fa69fdd6d02f4 Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Tue, 18 Apr 2023 16:11:31 +0530 Subject: [PATCH 084/187] add streams unsubscribers, webhook_events --- .../source-yotpo/acceptance-test-config.yml | 2 + .../integration_tests/configured_catalog.json | 18 +++++++++ .../source-yotpo/source_yotpo/manifest.yaml | 38 +++++++++++++++++++ .../source_yotpo/schemas/unsubscribers.json | 20 ++++++++++ .../source_yotpo/schemas/webhook_events.json | 14 +++++++ docs/integrations/sources/yotpo.md | 4 ++ 6 files changed, 96 insertions(+) create mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/unsubscribers.json create mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/webhook_events.json diff --git a/airbyte-integrations/connectors/source-yotpo/acceptance-test-config.yml b/airbyte-integrations/connectors/source-yotpo/acceptance-test-config.yml index a3b095b9bde1..3d6623e9ee52 100644 --- a/airbyte-integrations/connectors/source-yotpo/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-yotpo/acceptance-test-config.yml @@ -21,6 +21,8 @@ acceptance_tests: empty_streams: - name: "raw_data" bypass_reason: "Sandbox account cannot seed the endpoint" + - name: "unsubscribers" + bypass_reason: "Sandbox account cannot seed the endpoint" expect_records: path: "integration_tests/expected_records.jsonl" extra_fields: no diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json index 83e04cee3701..5daffc44a90d 100644 --- a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json @@ -45,6 +45,15 @@ "sync_mode": "full_refresh", "destination_sync_mode": "overwrite" }, + { + "stream": { + "name": "unsubscribers", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, { "stream": { "name": "webhooks", @@ -53,6 +62,15 @@ }, "sync_mode": "full_refresh", "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "webhook_events", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" } ] } diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml index 7eece70ccc58..408fb61ed8b8 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml @@ -147,6 +147,40 @@ definitions: $parameters: path: "/apps/{{ config['app_key'] }}/top_reviews" + unsubscribers_stream: + type: DeclarativeStream + retriever: + type: SimpleRetriever + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: ["response", "unsubscribers"] + paginator: + type: NoPagination + requester: + $ref: "#/definitions/yotpo_stream_plain_requester" + name: "unsubscribers" + $parameters: + path: "/apps/{{ config['app_key'] }}/unsubscribers?utoken={{ config['access_token'] }}" + + webhook_events_stream: + type: DeclarativeStream + retriever: + type: SimpleRetriever + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: ["response", "webhook_events"] + paginator: + type: NoPagination + requester: + $ref: "#/definitions/yotpo_stream_plain_requester" + name: "webhook_events" + $parameters: + path: "/webhook_events?utoken={{ config['access_token'] }}" + webhooks_stream: type: DeclarativeStream retriever: @@ -171,6 +205,8 @@ streams: - "#/definitions/reviews_bottomline_stream" - "#/definitions/top_reviews_stream" - "#/definitions/webhooks_stream" + - "#/definitions/unsubscribers_stream" + - "#/definitions/webhook_events_stream" check: type: CheckStream @@ -180,4 +216,6 @@ check: - "reviews" - "reviews_bottomline" - "top_reviews" + - "unsubscribers" - "webhooks" + - "webhook_events" diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/unsubscribers.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/unsubscribers.json new file mode 100644 index 000000000000..e3426d28a71f --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/unsubscribers.json @@ -0,0 +1,20 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Unsubscribers Schema", + "additionalProperties": true, + "type": "object", + "properties": { + "id": { + "type": ["null", "number"] + }, + "user_email": { + "type": ["null", "string"] + }, + "email_type_id": { + "type": ["null", "number"] + }, + "unsubscribed_by_name": { + "type": ["null", "string"] + } + } +} diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/webhook_events.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/webhook_events.json new file mode 100644 index 000000000000..58ff83078426 --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/webhook_events.json @@ -0,0 +1,14 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Webhook events Schema", + "additionalProperties": true, + "type": "object", + "properties": { + "name": { + "type": ["null", "string"] + }, + "description": { + "type": ["null", "string"] + } + } +} diff --git a/docs/integrations/sources/yotpo.md b/docs/integrations/sources/yotpo.md index 21c25765ecac..eb9d657b4224 100644 --- a/docs/integrations/sources/yotpo.md +++ b/docs/integrations/sources/yotpo.md @@ -49,10 +49,14 @@ The Yotpo source connector supports the following [sync modes](https://docs.airb ## Supported Streams +- email_analytics +- raw_data - reviews - reviews_bottomline - top_reviews +- unsubscribers - webhooks +- webhook_events ## API method example From 0c663b50dedc6c945d4d16387ae2a79b374f282c Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Sat, 22 Apr 2023 11:25:24 +0530 Subject: [PATCH 085/187] Fix pagination --- .../connectors/source-yotpo/source_yotpo/manifest.yaml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml index 408fb61ed8b8..f950261ad2b0 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml @@ -1,7 +1,6 @@ version: "0.29.0" definitions: - yotpo_stream_requester: type: HttpRequester url_base: "https://api.yotpo.com/v1" @@ -51,14 +50,14 @@ definitions: page_size_option: type: "RequestOption" inject_into: "request_parameter" - field_name: "per_page" + field_name: "count" pagination_strategy: - type: "PageIncrement" - page_size: 5 + type: "OffsetIncrement" + page_size: 1 page_token_option: type: "RequestOption" - inject_into: "request_parameter" field_name: "page" + inject_into: "request_parameter" requester: $ref: "#/definitions/yotpo_stream_requester" incremental_sync: From 0797e1c995368d23f9c880820d1c524d217a322a Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Sat, 22 Apr 2023 15:18:14 +0530 Subject: [PATCH 086/187] revert doc --- docs/integrations/sources/yotpo.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/integrations/sources/yotpo.md b/docs/integrations/sources/yotpo.md index eb9d657b4224..037b1c09de38 100644 --- a/docs/integrations/sources/yotpo.md +++ b/docs/integrations/sources/yotpo.md @@ -52,8 +52,6 @@ The Yotpo source connector supports the following [sync modes](https://docs.airb - email_analytics - raw_data - reviews -- reviews_bottomline -- top_reviews - unsubscribers - webhooks - webhook_events From c7f8d9675197cbb3da0718a25f26af6047b407d3 Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Sat, 22 Apr 2023 22:16:58 +0530 Subject: [PATCH 087/187] Merge branch 'yotpo' of https://github.com/btkcodedev/airbyte into yotpo --- .../integration_tests/configured_catalog.json | 18 ---- .../source-yotpo/source_yotpo/manifest.yaml | 102 ++++++------------ .../schemas/reviews_bottomline.json | 19 ---- .../source_yotpo/schemas/top_reviews.json | 27 ----- 4 files changed, 34 insertions(+), 132 deletions(-) delete mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json delete mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json index 5daffc44a90d..4f5228e40e1d 100644 --- a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json @@ -27,24 +27,6 @@ "sync_mode": "incremental", "destination_sync_mode": "append" }, - { - "stream": { - "name": "reviews_bottomline", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "top_reviews", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, { "stream": { "name": "unsubscribers", diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml index f950261ad2b0..fe8bf6b187c4 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml @@ -21,6 +21,20 @@ definitions: type: BearerAuthenticator api_token: "{{ config['access_token'] }}" + yotpo_paginator: + type: "DefaultPaginator" + page_size_option: + type: "RequestOption" + inject_into: "request_parameter" + field_name: "count" + pagination_strategy: + type: "OffsetIncrement" + page_size: 1 + page_token_option: + type: "RequestOption" + field_name: "page" + inject_into: "request_parameter" + privacy_stream_requester: type: HttpRequester url_base: "https://api.yotpo.com/privacy" @@ -46,18 +60,7 @@ definitions: type: DpathExtractor field_path: ["reviews"] paginator: - type: "DefaultPaginator" - page_size_option: - type: "RequestOption" - inject_into: "request_parameter" - field_name: "count" - pagination_strategy: - type: "OffsetIncrement" - page_size: 1 - page_token_option: - type: "RequestOption" - field_name: "page" - inject_into: "request_parameter" + $ref: "#/definitions/yotpo_paginator" requester: $ref: "#/definitions/yotpo_stream_requester" incremental_sync: @@ -79,6 +82,9 @@ definitions: path: "/apps/{{ config['app_key'] }}/reviews" email_analytics_stream: + name: "email_analytics" + $parameters: + path: "/emails/{{ config['app_key'] }}/emails_sent" type: DeclarativeStream retriever: type: SimpleRetriever @@ -91,45 +97,12 @@ definitions: type: NoPagination requester: $ref: "#/definitions/analytics_stream_requester" - name: "email_analytics" - $parameters: - path: "/emails/{{ config['app_key'] }}/emails_sent?token={{ config['access_token'] }}" + raw_data_stream: - type: DeclarativeStream - retriever: - type: SimpleRetriever - record_selector: - type: RecordSelector - extractor: - type: DpathExtractor - field_path: ["records"] - paginator: - type: NoPagination - requester: - $ref: "#/definitions/analytics_stream_requester" name: "raw_data" $parameters: - path: "/emails/{{ config['app_key'] }}/export/raw_data?token={{ config['access_token'] }}" - - reviews_bottomline_stream: - type: DeclarativeStream - retriever: - type: SimpleRetriever - record_selector: - type: RecordSelector - extractor: - type: DpathExtractor - field_path: ["response"] - paginator: - type: NoPagination - requester: - $ref: "#/definitions/yotpo_stream_plain_requester" - name: "reviews_bottomline" - $parameters: - path: "/products/{{ config['app_key'] }}/yotpo_site_reviews/bottomline" - - top_reviews_stream: + path: "/emails/{{ config['app_key'] }}/export/raw_data" type: DeclarativeStream retriever: type: SimpleRetriever @@ -137,16 +110,16 @@ definitions: type: RecordSelector extractor: type: DpathExtractor - field_path: ["reviews"] + field_path: ["records"] paginator: type: NoPagination requester: - $ref: "#/definitions/yotpo_stream_plain_requester" - name: "top_reviews" - $parameters: - path: "/apps/{{ config['app_key'] }}/top_reviews" + $ref: "#/definitions/analytics_stream_requester" unsubscribers_stream: + name: "unsubscribers" + $parameters: + path: "/apps/{{ config['app_key'] }}/unsubscribers" type: DeclarativeStream retriever: type: SimpleRetriever @@ -156,14 +129,14 @@ definitions: type: DpathExtractor field_path: ["response", "unsubscribers"] paginator: - type: NoPagination + $ref: "#/definitions/yotpo_paginator" requester: $ref: "#/definitions/yotpo_stream_plain_requester" - name: "unsubscribers" - $parameters: - path: "/apps/{{ config['app_key'] }}/unsubscribers?utoken={{ config['access_token'] }}" webhook_events_stream: + name: "webhook_events" + $parameters: + path: "/webhook_events?utoken={{ config['access_token'] }}" type: DeclarativeStream retriever: type: SimpleRetriever @@ -173,14 +146,14 @@ definitions: type: DpathExtractor field_path: ["response", "webhook_events"] paginator: - type: NoPagination + $ref: "#/definitions/yotpo_paginator" requester: $ref: "#/definitions/yotpo_stream_plain_requester" - name: "webhook_events" - $parameters: - path: "/webhook_events?utoken={{ config['access_token'] }}" webhooks_stream: + name: "webhooks" + $parameters: + path: "/apps/{{ config['app_key'] }}/webhooks" type: DeclarativeStream retriever: type: SimpleRetriever @@ -190,19 +163,14 @@ definitions: type: DpathExtractor field_path: ["response", "webhooks"] paginator: - type: NoPagination + $ref: "#/definitions/yotpo_paginator" requester: $ref: "#/definitions/yotpo_stream_plain_requester" - name: "webhooks" - $parameters: - path: "/apps/{{ config['app_key'] }}/webhooks" streams: - "#/definitions/email_analytics_stream" - "#/definitions/raw_data_stream" - "#/definitions/reviews_stream" - - "#/definitions/reviews_bottomline_stream" - - "#/definitions/top_reviews_stream" - "#/definitions/webhooks_stream" - "#/definitions/unsubscribers_stream" - "#/definitions/webhook_events_stream" @@ -213,8 +181,6 @@ check: - "email_analytics" - "raw_data" - "reviews" - - "reviews_bottomline" - - "top_reviews" - "unsubscribers" - "webhooks" - "webhook_events" diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json deleted file mode 100644 index 796cda50d838..000000000000 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Reviews Bottomline", - "additionalProperties": true, - "type": "object", - "properties": { - "bottomline": { - "type": "object", - "properties": { - "average_score": { - "type": ["null", "number"] - }, - "total_reviews": { - "type": ["null", "number"] - } - } - } - } -} diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json deleted file mode 100644 index a9048548d365..000000000000 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Top Reviews Schema", - "additionalProperties": true, - "type": "object", - "properties": { - "image_url": { - "type": ["null", "string"] - }, - "score": { - "type": ["null", "number"] - }, - "title": { - "type": ["null", "string"] - }, - "content": { - "type": ["null", "string"] - }, - "product_url": { - "type": ["null", "string"] - }, - "created_at": { - "type": ["null", "string"], - "format": "date-time" - } - } -} From b6db4d682829398efedba10d0f1da3f211220824 Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Sat, 22 Apr 2023 22:17:03 +0530 Subject: [PATCH 088/187] Revert "remove top_reviews and reviews_bottomline, Make common paginator" This reverts commit 6615288b6d2441d9fdde2d927a5eb77b5d788442. --- .../integration_tests/configured_catalog.json | 18 ++++ .../source-yotpo/source_yotpo/manifest.yaml | 102 ++++++++++++------ .../schemas/reviews_bottomline.json | 19 ++++ .../source_yotpo/schemas/top_reviews.json | 27 +++++ docs/integrations/sources/yotpo.md | 2 + 5 files changed, 134 insertions(+), 34 deletions(-) create mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json create mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json index 4f5228e40e1d..5daffc44a90d 100644 --- a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json @@ -27,6 +27,24 @@ "sync_mode": "incremental", "destination_sync_mode": "append" }, + { + "stream": { + "name": "reviews_bottomline", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "top_reviews", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, { "stream": { "name": "unsubscribers", diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml index fe8bf6b187c4..f950261ad2b0 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml @@ -21,20 +21,6 @@ definitions: type: BearerAuthenticator api_token: "{{ config['access_token'] }}" - yotpo_paginator: - type: "DefaultPaginator" - page_size_option: - type: "RequestOption" - inject_into: "request_parameter" - field_name: "count" - pagination_strategy: - type: "OffsetIncrement" - page_size: 1 - page_token_option: - type: "RequestOption" - field_name: "page" - inject_into: "request_parameter" - privacy_stream_requester: type: HttpRequester url_base: "https://api.yotpo.com/privacy" @@ -60,7 +46,18 @@ definitions: type: DpathExtractor field_path: ["reviews"] paginator: - $ref: "#/definitions/yotpo_paginator" + type: "DefaultPaginator" + page_size_option: + type: "RequestOption" + inject_into: "request_parameter" + field_name: "count" + pagination_strategy: + type: "OffsetIncrement" + page_size: 1 + page_token_option: + type: "RequestOption" + field_name: "page" + inject_into: "request_parameter" requester: $ref: "#/definitions/yotpo_stream_requester" incremental_sync: @@ -82,9 +79,6 @@ definitions: path: "/apps/{{ config['app_key'] }}/reviews" email_analytics_stream: - name: "email_analytics" - $parameters: - path: "/emails/{{ config['app_key'] }}/emails_sent" type: DeclarativeStream retriever: type: SimpleRetriever @@ -97,12 +91,11 @@ definitions: type: NoPagination requester: $ref: "#/definitions/analytics_stream_requester" - + name: "email_analytics" + $parameters: + path: "/emails/{{ config['app_key'] }}/emails_sent?token={{ config['access_token'] }}" raw_data_stream: - name: "raw_data" - $parameters: - path: "/emails/{{ config['app_key'] }}/export/raw_data" type: DeclarativeStream retriever: type: SimpleRetriever @@ -115,11 +108,45 @@ definitions: type: NoPagination requester: $ref: "#/definitions/analytics_stream_requester" + name: "raw_data" + $parameters: + path: "/emails/{{ config['app_key'] }}/export/raw_data?token={{ config['access_token'] }}" - unsubscribers_stream: - name: "unsubscribers" + reviews_bottomline_stream: + type: DeclarativeStream + retriever: + type: SimpleRetriever + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: ["response"] + paginator: + type: NoPagination + requester: + $ref: "#/definitions/yotpo_stream_plain_requester" + name: "reviews_bottomline" + $parameters: + path: "/products/{{ config['app_key'] }}/yotpo_site_reviews/bottomline" + + top_reviews_stream: + type: DeclarativeStream + retriever: + type: SimpleRetriever + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: ["reviews"] + paginator: + type: NoPagination + requester: + $ref: "#/definitions/yotpo_stream_plain_requester" + name: "top_reviews" $parameters: - path: "/apps/{{ config['app_key'] }}/unsubscribers" + path: "/apps/{{ config['app_key'] }}/top_reviews" + + unsubscribers_stream: type: DeclarativeStream retriever: type: SimpleRetriever @@ -129,14 +156,14 @@ definitions: type: DpathExtractor field_path: ["response", "unsubscribers"] paginator: - $ref: "#/definitions/yotpo_paginator" + type: NoPagination requester: $ref: "#/definitions/yotpo_stream_plain_requester" + name: "unsubscribers" + $parameters: + path: "/apps/{{ config['app_key'] }}/unsubscribers?utoken={{ config['access_token'] }}" webhook_events_stream: - name: "webhook_events" - $parameters: - path: "/webhook_events?utoken={{ config['access_token'] }}" type: DeclarativeStream retriever: type: SimpleRetriever @@ -146,14 +173,14 @@ definitions: type: DpathExtractor field_path: ["response", "webhook_events"] paginator: - $ref: "#/definitions/yotpo_paginator" + type: NoPagination requester: $ref: "#/definitions/yotpo_stream_plain_requester" + name: "webhook_events" + $parameters: + path: "/webhook_events?utoken={{ config['access_token'] }}" webhooks_stream: - name: "webhooks" - $parameters: - path: "/apps/{{ config['app_key'] }}/webhooks" type: DeclarativeStream retriever: type: SimpleRetriever @@ -163,14 +190,19 @@ definitions: type: DpathExtractor field_path: ["response", "webhooks"] paginator: - $ref: "#/definitions/yotpo_paginator" + type: NoPagination requester: $ref: "#/definitions/yotpo_stream_plain_requester" + name: "webhooks" + $parameters: + path: "/apps/{{ config['app_key'] }}/webhooks" streams: - "#/definitions/email_analytics_stream" - "#/definitions/raw_data_stream" - "#/definitions/reviews_stream" + - "#/definitions/reviews_bottomline_stream" + - "#/definitions/top_reviews_stream" - "#/definitions/webhooks_stream" - "#/definitions/unsubscribers_stream" - "#/definitions/webhook_events_stream" @@ -181,6 +213,8 @@ check: - "email_analytics" - "raw_data" - "reviews" + - "reviews_bottomline" + - "top_reviews" - "unsubscribers" - "webhooks" - "webhook_events" diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json new file mode 100644 index 000000000000..796cda50d838 --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json @@ -0,0 +1,19 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Reviews Bottomline", + "additionalProperties": true, + "type": "object", + "properties": { + "bottomline": { + "type": "object", + "properties": { + "average_score": { + "type": ["null", "number"] + }, + "total_reviews": { + "type": ["null", "number"] + } + } + } + } +} diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json new file mode 100644 index 000000000000..a9048548d365 --- /dev/null +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json @@ -0,0 +1,27 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Top Reviews Schema", + "additionalProperties": true, + "type": "object", + "properties": { + "image_url": { + "type": ["null", "string"] + }, + "score": { + "type": ["null", "number"] + }, + "title": { + "type": ["null", "string"] + }, + "content": { + "type": ["null", "string"] + }, + "product_url": { + "type": ["null", "string"] + }, + "created_at": { + "type": ["null", "string"], + "format": "date-time" + } + } +} diff --git a/docs/integrations/sources/yotpo.md b/docs/integrations/sources/yotpo.md index 037b1c09de38..eb9d657b4224 100644 --- a/docs/integrations/sources/yotpo.md +++ b/docs/integrations/sources/yotpo.md @@ -52,6 +52,8 @@ The Yotpo source connector supports the following [sync modes](https://docs.airb - email_analytics - raw_data - reviews +- reviews_bottomline +- top_reviews - unsubscribers - webhooks - webhook_events From a737e7dde8c0cc497b6055dee654c09f16893e0f Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Sun, 23 Apr 2023 01:26:28 +0530 Subject: [PATCH 089/187] remove streams top_reviews, reviews_bottomline --- .../integration_tests/configured_catalog.json | 18 --------- .../source-yotpo/source_yotpo/manifest.yaml | 38 ------------------- docs/integrations/sources/yotpo.md | 2 - 3 files changed, 58 deletions(-) diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json index 5daffc44a90d..4f5228e40e1d 100644 --- a/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/configured_catalog.json @@ -27,24 +27,6 @@ "sync_mode": "incremental", "destination_sync_mode": "append" }, - { - "stream": { - "name": "reviews_bottomline", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "top_reviews", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, { "stream": { "name": "unsubscribers", diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml index f950261ad2b0..bd4393f0f51a 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml @@ -112,40 +112,6 @@ definitions: $parameters: path: "/emails/{{ config['app_key'] }}/export/raw_data?token={{ config['access_token'] }}" - reviews_bottomline_stream: - type: DeclarativeStream - retriever: - type: SimpleRetriever - record_selector: - type: RecordSelector - extractor: - type: DpathExtractor - field_path: ["response"] - paginator: - type: NoPagination - requester: - $ref: "#/definitions/yotpo_stream_plain_requester" - name: "reviews_bottomline" - $parameters: - path: "/products/{{ config['app_key'] }}/yotpo_site_reviews/bottomline" - - top_reviews_stream: - type: DeclarativeStream - retriever: - type: SimpleRetriever - record_selector: - type: RecordSelector - extractor: - type: DpathExtractor - field_path: ["reviews"] - paginator: - type: NoPagination - requester: - $ref: "#/definitions/yotpo_stream_plain_requester" - name: "top_reviews" - $parameters: - path: "/apps/{{ config['app_key'] }}/top_reviews" - unsubscribers_stream: type: DeclarativeStream retriever: @@ -201,8 +167,6 @@ streams: - "#/definitions/email_analytics_stream" - "#/definitions/raw_data_stream" - "#/definitions/reviews_stream" - - "#/definitions/reviews_bottomline_stream" - - "#/definitions/top_reviews_stream" - "#/definitions/webhooks_stream" - "#/definitions/unsubscribers_stream" - "#/definitions/webhook_events_stream" @@ -213,8 +177,6 @@ check: - "email_analytics" - "raw_data" - "reviews" - - "reviews_bottomline" - - "top_reviews" - "unsubscribers" - "webhooks" - "webhook_events" diff --git a/docs/integrations/sources/yotpo.md b/docs/integrations/sources/yotpo.md index eb9d657b4224..037b1c09de38 100644 --- a/docs/integrations/sources/yotpo.md +++ b/docs/integrations/sources/yotpo.md @@ -52,8 +52,6 @@ The Yotpo source connector supports the following [sync modes](https://docs.airb - email_analytics - raw_data - reviews -- reviews_bottomline -- top_reviews - unsubscribers - webhooks - webhook_events From 479504e17c8d3124951adb9884c4093b9c7baff9 Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Sun, 23 Apr 2023 09:33:16 +0530 Subject: [PATCH 090/187] make common base and extractor --- .../source-yotpo/source_yotpo/manifest.yaml | 39 ++++++++++++------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml index bd4393f0f51a..edaca95b3326 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml @@ -1,6 +1,10 @@ version: "0.29.0" definitions: + yotpo_extractor: + type: DpathExtractor + field_path: ["reviews"] + yotpo_stream_requester: type: HttpRequester url_base: "https://api.yotpo.com/v1" @@ -36,30 +40,35 @@ definitions: request_parameters: utoken: "{{ config['access_token'] }}" - reviews_stream: + yotpo_paginator: + type: "DefaultPaginator" + page_size_option: + type: "RequestOption" + inject_into: "request_parameter" + field_name: "count" + pagination_strategy: + type: "OffsetIncrement" + page_size: 1 + page_token_option: + type: "RequestOption" + field_name: "page" + inject_into: "request_parameter" + + yotpo_base: type: DeclarativeStream retriever: type: SimpleRetriever record_selector: type: RecordSelector extractor: - type: DpathExtractor - field_path: ["reviews"] + $ref: "#/definitions/yotpo_extractor" paginator: - type: "DefaultPaginator" - page_size_option: - type: "RequestOption" - inject_into: "request_parameter" - field_name: "count" - pagination_strategy: - type: "OffsetIncrement" - page_size: 1 - page_token_option: - type: "RequestOption" - field_name: "page" - inject_into: "request_parameter" + $ref: "#/definitions/yotpo_paginator" requester: $ref: "#/definitions/yotpo_stream_requester" + + reviews_stream: + $ref: "#/definitions/yotpo_base" incremental_sync: type: DatetimeBasedCursor cursor_field: "updated_at" From b8a0e49b624d878e0f88c43fff366e579192d657 Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Sun, 23 Apr 2023 12:25:50 +0530 Subject: [PATCH 091/187] refactor, Checkpoint for full test passed --- .../integration_tests/abnormal_state.json | 2 +- .../integration_tests/expected_records.jsonl | 2 +- .../integration_tests/sample_state.json | 2 +- .../source-yotpo/source_yotpo/manifest.yaml | 34 +++++++++---------- .../schemas/reviews_bottomline.json | 19 ----------- .../source_yotpo/schemas/top_reviews.json | 27 --------------- 6 files changed, 19 insertions(+), 67 deletions(-) delete mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json delete mode 100644 airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/abnormal_state.json b/airbyte-integrations/connectors/source-yotpo/integration_tests/abnormal_state.json index d79c484ff6b4..c044edae2326 100644 --- a/airbyte-integrations/connectors/source-yotpo/integration_tests/abnormal_state.json +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/abnormal_state.json @@ -2,7 +2,7 @@ { "type": "STREAM", "stream": { - "stream_state": { "updated_at": "2099-04-12T18:13:36.000Z" }, + "stream_state": { "created_at": "2099-04-12T18:13:36.000Z" }, "stream_descriptor": { "name": "reviews" } } } diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-yotpo/integration_tests/expected_records.jsonl index b4a93e4c2d9f..b1a5d4649bc6 100644 --- a/airbyte-integrations/connectors/source-yotpo/integration_tests/expected_records.jsonl +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/expected_records.jsonl @@ -1 +1 @@ -{"stream": "reviews", "data":{"id":460312221,"title":"Great Phone","content":"It’s really good","score":5,"votes_up":0,"votes_down":0,"created_at":"2023-04-12T18:13:47.000Z","updated_at":"2023-04-17T17:10:34.000Z","sentiment":0.960069,"sku":"13","name":"John S.","email":"john@shop.com","reviewer_type":"anonymous_user","deleted":false,"archived":false,"escalated":false,"is_incentivized":false}, "emitted_at": 1679051186833} +{"stream": "reviews", "data":{"id":463555946,"title":"Great Phone","content":"It’s really good","score":5,"votes_up":0,"votes_down":0,"created_at":"2023-04-23T06:14:19.000Z","updated_at":"2023-04-23T06:16:57.000Z","sentiment":0.960069,"sku":"23","name":"John S.","email":"moles57397@snowlash.com","reviewer_type":"verified_reviewer","deleted":false,"archived":false,"escalated":false,"is_incentivized":false}, "emitted_at": 1679051186823} diff --git a/airbyte-integrations/connectors/source-yotpo/integration_tests/sample_state.json b/airbyte-integrations/connectors/source-yotpo/integration_tests/sample_state.json index e572e343696f..0c018bd01cfc 100644 --- a/airbyte-integrations/connectors/source-yotpo/integration_tests/sample_state.json +++ b/airbyte-integrations/connectors/source-yotpo/integration_tests/sample_state.json @@ -2,7 +2,7 @@ { "type": "STREAM", "stream": { - "stream_state": { "updated_at": "2023-04-12T18:13:36.000Z" }, + "stream_state": { "created_at": "2023-04-12T18:13:36.000Z" }, "stream_descriptor": { "name": "reviews" } } } diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml index edaca95b3326..92bfe6504ccc 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml @@ -3,7 +3,7 @@ version: "0.29.0" definitions: yotpo_extractor: type: DpathExtractor - field_path: ["reviews"] + field_path: ["{{ parameters['extractorPath'] }}"] yotpo_stream_requester: type: HttpRequester @@ -25,14 +25,6 @@ definitions: type: BearerAuthenticator api_token: "{{ config['access_token'] }}" - privacy_stream_requester: - type: HttpRequester - url_base: "https://api.yotpo.com/privacy" - http_method: "GET" - request_parameters: - utoken: "{{ config['access_token'] }}" - email: "{{ config['email'] }}" - analytics_stream_requester: type: HttpRequester url_base: "https://api.yotpo.com/analytics/v1" @@ -68,10 +60,14 @@ definitions: $ref: "#/definitions/yotpo_stream_requester" reviews_stream: + $parameters: + extractorPath: "reviews" + paginatorAvailability: "true" + path: "/apps/{{ config['app_key'] }}/reviews" $ref: "#/definitions/yotpo_base" incremental_sync: type: DatetimeBasedCursor - cursor_field: "updated_at" + cursor_field: "created_at" datetime_format: "%Y-%m-%dT%H:%M:%S.%f%z" cursor_granularity: "PT0.000001S" lookback_window: "P31D" @@ -84,10 +80,12 @@ definitions: step: "P1M" name: "reviews" primary_key: "id" - $parameters: - path: "/apps/{{ config['app_key'] }}/reviews" email_analytics_stream: + $parameters: + extractorPath: "date_series_points" + paginatorAvailability: "false" + path: "/emails/{{ config['app_key'] }}/emails_sent" type: DeclarativeStream retriever: type: SimpleRetriever @@ -101,10 +99,12 @@ definitions: requester: $ref: "#/definitions/analytics_stream_requester" name: "email_analytics" - $parameters: - path: "/emails/{{ config['app_key'] }}/emails_sent?token={{ config['access_token'] }}" raw_data_stream: + $parameters: + extractorPath: "records" + paginatorAvailability: "false" + path: "/emails/{{ config['app_key'] }}/export/raw_data" type: DeclarativeStream retriever: type: SimpleRetriever @@ -118,8 +118,6 @@ definitions: requester: $ref: "#/definitions/analytics_stream_requester" name: "raw_data" - $parameters: - path: "/emails/{{ config['app_key'] }}/export/raw_data?token={{ config['access_token'] }}" unsubscribers_stream: type: DeclarativeStream @@ -136,7 +134,7 @@ definitions: $ref: "#/definitions/yotpo_stream_plain_requester" name: "unsubscribers" $parameters: - path: "/apps/{{ config['app_key'] }}/unsubscribers?utoken={{ config['access_token'] }}" + path: "/apps/{{ config['app_key'] }}/unsubscribers" webhook_events_stream: type: DeclarativeStream @@ -153,7 +151,7 @@ definitions: $ref: "#/definitions/yotpo_stream_plain_requester" name: "webhook_events" $parameters: - path: "/webhook_events?utoken={{ config['access_token'] }}" + path: "/webhook_events" webhooks_stream: type: DeclarativeStream diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json deleted file mode 100644 index 796cda50d838..000000000000 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/reviews_bottomline.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Reviews Bottomline", - "additionalProperties": true, - "type": "object", - "properties": { - "bottomline": { - "type": "object", - "properties": { - "average_score": { - "type": ["null", "number"] - }, - "total_reviews": { - "type": ["null", "number"] - } - } - } - } -} diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json b/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json deleted file mode 100644 index a9048548d365..000000000000 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/schemas/top_reviews.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Top Reviews Schema", - "additionalProperties": true, - "type": "object", - "properties": { - "image_url": { - "type": ["null", "string"] - }, - "score": { - "type": ["null", "number"] - }, - "title": { - "type": ["null", "string"] - }, - "content": { - "type": ["null", "string"] - }, - "product_url": { - "type": ["null", "string"] - }, - "created_at": { - "type": ["null", "string"], - "format": "date-time" - } - } -} From 65ad3b1317dbe51d65ec1d409975b2c531b7c3fe Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Mon, 24 Apr 2023 00:06:30 +0530 Subject: [PATCH 092/187] refactor base, requester, paginator --- .../source-yotpo/acceptance-test-config.yml | 4 + .../source-yotpo/source_yotpo/manifest.yaml | 121 ++++++------------ 2 files changed, 41 insertions(+), 84 deletions(-) diff --git a/airbyte-integrations/connectors/source-yotpo/acceptance-test-config.yml b/airbyte-integrations/connectors/source-yotpo/acceptance-test-config.yml index 3d6623e9ee52..1d6d15b88725 100644 --- a/airbyte-integrations/connectors/source-yotpo/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-yotpo/acceptance-test-config.yml @@ -23,6 +23,10 @@ acceptance_tests: bypass_reason: "Sandbox account cannot seed the endpoint" - name: "unsubscribers" bypass_reason: "Sandbox account cannot seed the endpoint" + - name: "webhooks" + bypass_reason: "Sandbox account cannot seed the endpoint" + - name: "webhook_events" + bypass_reason: "Sandbox account cannot seed the endpoint" expect_records: path: "integration_tests/expected_records.jsonl" extra_fields: no diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml index 92bfe6504ccc..64fdf9e9e908 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml @@ -7,27 +7,7 @@ definitions: yotpo_stream_requester: type: HttpRequester - url_base: "https://api.yotpo.com/v1" - http_method: "GET" - request_parameters: - utoken: "{{ config['access_token'] }}" - authenticator: - type: BearerAuthenticator - api_token: "{{ config['access_token'] }}" - - yotpo_stream_plain_requester: - type: HttpRequester - url_base: "https://api.yotpo.com" - http_method: "GET" - request_parameters: - utoken: "{{ config['access_token'] }}" - authenticator: - type: BearerAuthenticator - api_token: "{{ config['access_token'] }}" - - analytics_stream_requester: - type: HttpRequester - url_base: "https://api.yotpo.com/analytics/v1" + url_base: "{{ parameters['requesterUrl'] }}" http_method: "GET" request_parameters: utoken: "{{ config['access_token'] }}" @@ -59,11 +39,25 @@ definitions: requester: $ref: "#/definitions/yotpo_stream_requester" + yotpo_base_without_pagination: + type: DeclarativeStream + retriever: + type: SimpleRetriever + record_selector: + type: RecordSelector + extractor: + $ref: "#/definitions/yotpo_extractor" + paginator: + type: NoPagination + requester: + $ref: "#/definitions/yotpo_stream_requester" + reviews_stream: $parameters: extractorPath: "reviews" paginatorAvailability: "true" path: "/apps/{{ config['app_key'] }}/reviews" + requesterUrl: "https://api.yotpo.com/v1" $ref: "#/definitions/yotpo_base" incremental_sync: type: DatetimeBasedCursor @@ -86,18 +80,8 @@ definitions: extractorPath: "date_series_points" paginatorAvailability: "false" path: "/emails/{{ config['app_key'] }}/emails_sent" - type: DeclarativeStream - retriever: - type: SimpleRetriever - record_selector: - type: RecordSelector - extractor: - type: DpathExtractor - field_path: ["date_series_points"] - paginator: - type: NoPagination - requester: - $ref: "#/definitions/analytics_stream_requester" + requesterUrl: "https://api.yotpo.com/analytics/v1" + $ref: "#/definitions/yotpo_base_without_pagination" name: "email_analytics" raw_data_stream: @@ -105,70 +89,39 @@ definitions: extractorPath: "records" paginatorAvailability: "false" path: "/emails/{{ config['app_key'] }}/export/raw_data" - type: DeclarativeStream - retriever: - type: SimpleRetriever - record_selector: - type: RecordSelector - extractor: - type: DpathExtractor - field_path: ["records"] - paginator: - type: NoPagination - requester: - $ref: "#/definitions/analytics_stream_requester" + requesterUrl: "https://api.yotpo.com/analytics/v1" + $ref: "#/definitions/yotpo_base_without_pagination" name: "raw_data" unsubscribers_stream: - type: DeclarativeStream - retriever: - type: SimpleRetriever - record_selector: - type: RecordSelector - extractor: - type: DpathExtractor - field_path: ["response", "unsubscribers"] - paginator: - type: NoPagination - requester: - $ref: "#/definitions/yotpo_stream_plain_requester" - name: "unsubscribers" $parameters: + extractorPath: | + "response", "unsubscribers" + paginatorAvailability: "true" + requesterUrl: "https://api.yotpo.com" path: "/apps/{{ config['app_key'] }}/unsubscribers" + $ref: "#/definitions/yotpo_base" + name: "unsubscribers" webhook_events_stream: - type: DeclarativeStream - retriever: - type: SimpleRetriever - record_selector: - type: RecordSelector - extractor: - type: DpathExtractor - field_path: ["response", "webhook_events"] - paginator: - type: NoPagination - requester: - $ref: "#/definitions/yotpo_stream_plain_requester" - name: "webhook_events" $parameters: + extractorPath: | + "response", "webhook_events" + paginatorAvailability: "false" + requesterUrl: "https://api.yotpo.com" path: "/webhook_events" + $ref: "#/definitions/yotpo_base_without_pagination" + name: "webhook_events" webhooks_stream: - type: DeclarativeStream - retriever: - type: SimpleRetriever - record_selector: - type: RecordSelector - extractor: - type: DpathExtractor - field_path: ["response", "webhooks"] - paginator: - type: NoPagination - requester: - $ref: "#/definitions/yotpo_stream_plain_requester" - name: "webhooks" $parameters: + extractorPath: | + "response", "webhooks" + paginatorAvailability: "false" + requesterUrl: "https://api.yotpo.com" path: "/apps/{{ config['app_key'] }}/webhooks" + $ref: "#/definitions/yotpo_base_without_pagination" + name: "webhooks" streams: - "#/definitions/email_analytics_stream" From 57a681cd15ca7433411002212aaa4b3a5ab72f9a Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Mon, 24 Apr 2023 00:07:33 +0530 Subject: [PATCH 093/187] remove extra paginator property --- .../connectors/source-yotpo/source_yotpo/manifest.yaml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml index 64fdf9e9e908..518ebaf4bbca 100644 --- a/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml +++ b/airbyte-integrations/connectors/source-yotpo/source_yotpo/manifest.yaml @@ -55,7 +55,6 @@ definitions: reviews_stream: $parameters: extractorPath: "reviews" - paginatorAvailability: "true" path: "/apps/{{ config['app_key'] }}/reviews" requesterUrl: "https://api.yotpo.com/v1" $ref: "#/definitions/yotpo_base" @@ -78,7 +77,6 @@ definitions: email_analytics_stream: $parameters: extractorPath: "date_series_points" - paginatorAvailability: "false" path: "/emails/{{ config['app_key'] }}/emails_sent" requesterUrl: "https://api.yotpo.com/analytics/v1" $ref: "#/definitions/yotpo_base_without_pagination" @@ -87,7 +85,6 @@ definitions: raw_data_stream: $parameters: extractorPath: "records" - paginatorAvailability: "false" path: "/emails/{{ config['app_key'] }}/export/raw_data" requesterUrl: "https://api.yotpo.com/analytics/v1" $ref: "#/definitions/yotpo_base_without_pagination" @@ -97,7 +94,6 @@ definitions: $parameters: extractorPath: | "response", "unsubscribers" - paginatorAvailability: "true" requesterUrl: "https://api.yotpo.com" path: "/apps/{{ config['app_key'] }}/unsubscribers" $ref: "#/definitions/yotpo_base" @@ -107,7 +103,6 @@ definitions: $parameters: extractorPath: | "response", "webhook_events" - paginatorAvailability: "false" requesterUrl: "https://api.yotpo.com" path: "/webhook_events" $ref: "#/definitions/yotpo_base_without_pagination" @@ -117,7 +112,6 @@ definitions: $parameters: extractorPath: | "response", "webhooks" - paginatorAvailability: "false" requesterUrl: "https://api.yotpo.com" path: "/apps/{{ config['app_key'] }}/webhooks" $ref: "#/definitions/yotpo_base_without_pagination" From 9f05a279a35c382c9f5a2461772308772e829b40 Mon Sep 17 00:00:00 2001 From: Akash Kulkarni <113392464+akashkulk@users.noreply.github.com> Date: Sun, 16 Apr 2023 15:38:10 -0700 Subject: [PATCH 094/187] Cleanup some logging in connectors (#25227) --- .../integrations/source/jdbc/AbstractJdbcSource.java | 2 +- .../integrations/source/postgres/PostgresSource.java | 4 ++-- .../source/relationaldb/state/CursorManager.java | 7 +++++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/airbyte-integrations/connectors/source-jdbc/src/main/java/io/airbyte/integrations/source/jdbc/AbstractJdbcSource.java b/airbyte-integrations/connectors/source-jdbc/src/main/java/io/airbyte/integrations/source/jdbc/AbstractJdbcSource.java index a6fbd6c721f1..54c90053a960 100644 --- a/airbyte-integrations/connectors/source-jdbc/src/main/java/io/airbyte/integrations/source/jdbc/AbstractJdbcSource.java +++ b/airbyte-integrations/connectors/source-jdbc/src/main/java/io/airbyte/integrations/source/jdbc/AbstractJdbcSource.java @@ -179,7 +179,7 @@ protected List>> discoverInternal(final JdbcData .map(f -> { final Datatype datatype = sourceOperations.getDatabaseFieldType(f); final JsonSchemaType jsonType = getAirbyteType(datatype); - LOGGER.info("Table {} column {} (type {}[{}], nullable {}) -> {}", + LOGGER.debug("Table {} column {} (type {}[{}], nullable {}) -> {}", fields.get(0).get(INTERNAL_TABLE_NAME).asText(), f.get(INTERNAL_COLUMN_NAME).asText(), f.get(INTERNAL_COLUMN_TYPE_NAME).asText(), diff --git a/airbyte-integrations/connectors/source-postgres/src/main/java/io/airbyte/integrations/source/postgres/PostgresSource.java b/airbyte-integrations/connectors/source-postgres/src/main/java/io/airbyte/integrations/source/postgres/PostgresSource.java index 0cd24929addd..964f286a20b0 100644 --- a/airbyte-integrations/connectors/source-postgres/src/main/java/io/airbyte/integrations/source/postgres/PostgresSource.java +++ b/airbyte-integrations/connectors/source-postgres/src/main/java/io/airbyte/integrations/source/postgres/PostgresSource.java @@ -240,11 +240,11 @@ public List>> discoverRawTables(final JdbcDa // process explicitly selected (from UI) schemas final List>> internals = new ArrayList<>(); for (final String schema : schemas) { - LOGGER.info("Checking schema: {}", schema); + LOGGER.debug("Checking schema: {}", schema); final List>> tables = super.discoverInternal(database, schema); internals.addAll(tables); for (final TableInfo> table : tables) { - LOGGER.info("Found table: {}.{}", table.getNameSpace(), table.getName()); + LOGGER.debug("Found table: {}.{}", table.getNameSpace(), table.getName()); } } return internals; diff --git a/airbyte-integrations/connectors/source-relational-db/src/main/java/io/airbyte/integrations/source/relationaldb/state/CursorManager.java b/airbyte-integrations/connectors/source-relational-db/src/main/java/io/airbyte/integrations/source/relationaldb/state/CursorManager.java index 9abad55dd46c..158c8f6f62d5 100644 --- a/airbyte-integrations/connectors/source-relational-db/src/main/java/io/airbyte/integrations/source/relationaldb/state/CursorManager.java +++ b/airbyte-integrations/connectors/source-relational-db/src/main/java/io/airbyte/integrations/source/relationaldb/state/CursorManager.java @@ -163,8 +163,11 @@ protected CursorInfo createCursorInfoForStream(final AirbyteStreamNameNamespaceP if (stateOptional.map(cursorFieldFunction).equals(streamOptional.map(ConfiguredAirbyteStream::getCursorField))) { cursor = stateOptional.map(cursorFunction).orElse(null); cursorRecordCount = stateOptional.map(cursorRecordCountFunction).orElse(0L); - LOGGER.info("Found matching cursor in state. Stream: {}. Cursor Field: {} Value: {} Count: {}", - pair, cursorField, cursor, cursorRecordCount); + // If a matching cursor is found in the state, and it's value is null - this indicates a CDC stream and we shouldn't log anything. + if (cursor != null) { + LOGGER.info("Found matching cursor in state. Stream: {}. Cursor Field: {} Value: {} Count: {}", + pair, cursorField, cursor, cursorRecordCount); + } // if cursor field in catalog and state are different. } else { cursor = null; From 7fc4bd8ad78eaffe615292816f61b7373b65b6a1 Mon Sep 17 00:00:00 2001 From: Ivica Taseski Date: Mon, 17 Apr 2023 17:44:51 +0200 Subject: [PATCH 095/187] =?UTF-8?q?=F0=9F=8E=89=20New=20Source:=20Teradata?= =?UTF-8?q?=20(#24221)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add teradata template * add teradata environment client * add teradata source connector * add docs * fix lowercase letter * fix compilation error & config test * fix timestamp * generate seed --------- Co-authored-by: Prateek Mukhedkar <123108018+prateekmukhedkar@users.noreply.github.com> --- .../resources/seed/source_definitions.yaml | 11 + .../src/main/resources/seed/source_specs.yaml | 174 ++++++++++++++++ airbyte-integrations/builds.md | 27 +-- .../jdbc/test/JdbcSourceAcceptanceTest.java | 27 ++- .../connectors/source-teradata/Dockerfile | 21 ++ .../connectors/source-teradata/README.md | 69 +++++++ .../acceptance-test-config.yml | 8 + .../source-teradata/acceptance-test-docker.sh | 15 ++ .../connectors/source-teradata/build.gradle | 30 +++ .../integration_tests/acceptance.py | 16 ++ .../source/teradata/TeradataSource.java | 176 ++++++++++++++++ .../teradata/TeradataSourceOperations.java | 114 +++++++++++ .../source/teradata/envclient/Headers.java | 18 ++ .../envclient/TeradataHttpClient.java | 137 +++++++++++++ .../dto/CreateEnvironmentRequest.java | 13 ++ .../dto/DeleteEnvironmentRequest.java | 8 + .../envclient/dto/EnvironmentResponse.java | 55 +++++ .../envclient/dto/GetEnvironmentRequest.java | 8 + .../source/teradata/envclient/dto/Region.java | 33 +++ .../envclient/exception/BaseException.java | 36 ++++ .../exception/Error4xxException.java | 13 ++ .../exception/Error5xxException.java | 13 ++ .../src/main/resources/spec.json | 192 +++++++++++++++++ .../TeradataSourceAcceptanceTest.java | 170 +++++++++++++++ .../resources/dummy_config.json | 5 + .../resources/expected_spec.json | 193 ++++++++++++++++++ .../TeradataJdbcSourceAcceptanceTest.java | 147 +++++++++++++ docs/integrations/sources/teradata.md | 66 ++++++ 28 files changed, 1776 insertions(+), 19 deletions(-) create mode 100644 airbyte-integrations/connectors/source-teradata/Dockerfile create mode 100644 airbyte-integrations/connectors/source-teradata/README.md create mode 100644 airbyte-integrations/connectors/source-teradata/acceptance-test-config.yml create mode 100644 airbyte-integrations/connectors/source-teradata/acceptance-test-docker.sh create mode 100644 airbyte-integrations/connectors/source-teradata/build.gradle create mode 100644 airbyte-integrations/connectors/source-teradata/integration_tests/acceptance.py create mode 100644 airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/TeradataSource.java create mode 100644 airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/TeradataSourceOperations.java create mode 100644 airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/Headers.java create mode 100644 airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/TeradataHttpClient.java create mode 100644 airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/dto/CreateEnvironmentRequest.java create mode 100644 airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/dto/DeleteEnvironmentRequest.java create mode 100644 airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/dto/EnvironmentResponse.java create mode 100644 airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/dto/GetEnvironmentRequest.java create mode 100644 airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/dto/Region.java create mode 100644 airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/exception/BaseException.java create mode 100644 airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/exception/Error4xxException.java create mode 100644 airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/exception/Error5xxException.java create mode 100644 airbyte-integrations/connectors/source-teradata/src/main/resources/spec.json create mode 100644 airbyte-integrations/connectors/source-teradata/src/test-integration/java/io/airbyte/integrations/source/teradata/TeradataSourceAcceptanceTest.java create mode 100644 airbyte-integrations/connectors/source-teradata/src/test-integration/resources/dummy_config.json create mode 100644 airbyte-integrations/connectors/source-teradata/src/test-integration/resources/expected_spec.json create mode 100644 airbyte-integrations/connectors/source-teradata/src/test/java/io/airbyte/integrations/source/teradata/TeradataJdbcSourceAcceptanceTest.java create mode 100644 docs/integrations/sources/teradata.md diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml index a64030f93044..844cdde8aa7c 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml @@ -2061,6 +2061,17 @@ allowedHosts: hosts: - api.tempo.io +- name: Teradata + sourceDefinitionId: aa8ba6fd-4875-d94e-fc8d-4e1e09aa2503 + dockerRepository: airbyte/source-teradata + dockerImageTag: 0.1.0 + documentationUrl: https://docs.airbyte.com/integrations/sources/teradata + icon: teradata.svg + sourceType: database + releaseStage: alpha + allowedHosts: + hosts: + - "${host}" - name: TiDB sourceDefinitionId: 0dad1a35-ccf8-4d03-b73e-6788c00b13ae dockerRepository: airbyte/source-tidb diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml index 46b1b8047c3e..0424a3217e76 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml @@ -15429,6 +15429,180 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] +- dockerImage: "airbyte/source-teradata:0.1.0" + spec: + documentationUrl: "https://docs.airbyte.com/integrations/sources/teradata" + connectionSpecification: + $schema: "http://json-schema.org/draft-07/schema#" + title: "Teradata Source Spec" + type: "object" + required: + - "host" + - "database" + - "username" + properties: + host: + title: "Host" + description: "Hostname of the database." + type: "string" + order: 0 + port: + title: "Port" + description: "Port of the database." + type: "integer" + minimum: 0 + maximum: 65536 + default: 3306 + examples: + - "3306" + order: 1 + database: + title: "Database" + description: "Name of the database." + type: "string" + order: 2 + username: + title: "Username" + description: "Username to use to access the database." + type: "string" + order: 3 + password: + title: "Password" + description: "Password associated with the username." + type: "string" + airbyte_secret: true + order: 4 + jdbc_url_params: + title: "JDBC URL params" + description: "Additional properties to pass to the JDBC URL string when\ + \ connecting to the database formatted as 'key=value' pairs separated\ + \ by the symbol '&'. (example: key1=value1&key2=value2&key3=value3)" + type: "string" + order: 5 + replication_method: + title: "Replication method" + description: "Replication method to use for extracting data from the database.\ + \ STANDARD replication requires no setup on the DB side but will not be\ + \ able to represent deletions incrementally. CDC uses the Binlog to detect\ + \ inserts, updates, and deletes. This needs to be configured on the source\ + \ database itself." + type: "string" + order: 6 + default: "STANDARD" + enum: + - "STANDARD" + - "CDC" + ssl: + title: "SSL Connection" + description: "Encrypt data using SSL. When activating SSL, please select\ + \ one of the connection modes." + type: "boolean" + default: false + order: 7 + ssl_mode: + title: "SSL Modes" + description: "SSL connection modes. \n disable - Chose this mode\ + \ to disable encryption of communication between Airbyte and destination\ + \ database\n allow - Chose this mode to enable encryption only\ + \ when required by the destination database\n prefer - Chose this\ + \ mode to allow unencrypted connection only if the destination database\ + \ does not support encryption\n require - Chose this mode to always\ + \ require encryption. If the destination database server does not support\ + \ encryption, connection will fail\n verify-ca - Chose this mode\ + \ to always require encryption and to verify that the destination database\ + \ server has a valid SSL certificate\n verify-full - This is the\ + \ most secure mode. Chose this mode to always require encryption and to\ + \ verify the identity of the destination database server\n See more information\ + \ - in the docs." + type: "object" + order: 8 + oneOf: + - title: "disable" + additionalProperties: true + description: "Disable SSL." + required: + - "mode" + properties: + mode: + type: "string" + const: "disable" + order: 0 + - title: "allow" + additionalProperties: true + description: "Allow SSL mode." + required: + - "mode" + properties: + mode: + type: "string" + const: "allow" + order: 0 + - title: "prefer" + additionalProperties: true + description: "Prefer SSL mode." + required: + - "mode" + properties: + mode: + type: "string" + const: "prefer" + order: 0 + - title: "require" + additionalProperties: true + description: "Require SSL mode." + required: + - "mode" + properties: + mode: + type: "string" + const: "require" + order: 0 + - title: "verify-ca" + additionalProperties: true + description: "Verify-ca SSL mode." + required: + - "mode" + - "ssl_ca_certificate" + properties: + mode: + type: "string" + const: "verify-ca" + order: 0 + ssl_ca_certificate: + type: "string" + title: "CA certificate" + description: "Specifies the file name of a PEM file that contains\ + \ Certificate Authority (CA) certificates for use with SSLMODE=verify-ca.\n\ + \ See more information - in the docs." + airbyte_secret: true + multiline: true + order: 1 + - title: "verify-full" + additionalProperties: true + description: "Verify-full SSL mode." + required: + - "mode" + - "ssl_ca_certificate" + properties: + mode: + type: "string" + const: "verify-full" + order: 0 + ssl_ca_certificate: + type: "string" + title: "CA certificate" + description: "Specifies the file name of a PEM file that contains\ + \ Certificate Authority (CA) certificates for use with SSLMODE=verify-full.\n\ + \ See more information - in the docs." + airbyte_secret: true + multiline: true + order: 1 + supportsNormalization: false + supportsDBT: false + supported_destination_sync_modes: [] - dockerImage: "airbyte/source-tidb:0.2.4" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/tidb" diff --git a/airbyte-integrations/builds.md b/airbyte-integrations/builds.md index 1a1d75ef7d90..647584fd328d 100644 --- a/airbyte-integrations/builds.md +++ b/airbyte-integrations/builds.md @@ -3,8 +3,8 @@ # Sources -| name | status | -|:-------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| name | status | +|:-------------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 3PL Central | [![source-amazon-seller-partner](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-tplcentral%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-tplcentral) | | Adjust | [![source-adjust](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-adjust%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-adjust) | | Airtable | [![source-airtable](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-airtable%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-airtable) | @@ -12,7 +12,7 @@ | Amazon Seller Partner | [![source-amazon-seller-partner](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-amazon-seller-partner%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-amazon-seller-partner) | | Amplitude | [![source-amplitude](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-amplitude%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-amplitude) | | Apify Dataset | [![source-amplitude](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-apify-dataset%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-apify-dataset) | -| AppsFlyer | [![source-appsflyer](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-appsflyer%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-appsflyer-singer) | +| AppsFlyer | [![source-appsflyer](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-appsflyer%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-appsflyer-singer) | | App Store | [![source-appstore-singer](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-appstore-singer%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-appstore-singer) | | Asana | [![source-asana](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-asana%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-asana) | | Ashby | [![source-ashby](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-ashby%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-ashby) | @@ -61,7 +61,7 @@ | IBM Db2 | [![source-db2](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-db2%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-db2) | | Insightly | [![source-insightly](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-insightly%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-insightly) | | Instagram | [![source-instagram](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-instagram%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-instagram) | -| Intercom | [![source-intercom](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-intercom%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-intercom) | +| Intercom | [![source-intercom](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-intercom%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-intercom) | | Iterable | [![source-iterable](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-iterable%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-iterable) | | Jira | [![source-jira](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-jira%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-jira) | | LinkedIn Ads | [![source-linkedin-ads](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-linkedin-ads%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-linkedin-ads) | @@ -103,7 +103,7 @@ | Posthog | [![source-posthog](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-posthog%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-posthog) | | PrestaShop | [![source-prestashop](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-prestashop%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-prestashop) | | Primetric | [![source-primetric](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-primetric%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-primetric) | -| PyPI | [![source-public-apis](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fsource-pypi%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-pypi) | +| PyPI | [![source-public-apis](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fsource-pypi%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-pypi) | | Public APIs | [![source-public-apis](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-public-apis%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-public-apis) | | CockroachDb | [![source-cockroachdb](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-cockroachdb%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-cockroachdb) | | Confluence | [![source-confluence](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-confluence%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-confluence) | @@ -139,9 +139,9 @@ | US Census | [![source-us-census](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-us-census%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-us-census) | | Vitally | [![source-vitally](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-vitally%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-vitally) | | Visma e-conomics | [![source-visma-economic](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-visma-economic%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-us-census) | -| Waiteraid | [![source-waiteraid](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-waiteraid%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-waiteraid) | +| Waiteraid | [![source-waiteraid](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-waiteraid%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-waiteraid) | | Whisky Hunter | [![source-whisky-hunter](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-whisky-hunter%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-whisky-hunter) | -| Workramp | [![source-workramp](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-workramp%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-workramp) | +| Workramp | [![source-workramp](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-workramp%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-workramp) | | Wrike | [![source-wrike](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-wrike%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-wrike) | | YouTube Analytics | [![source-youtube-analytics](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-youtube-analytics%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-youtube-analytics) | | Weatherstack | [![source-weatherstack](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-weatherstack%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-weatherstack) | @@ -152,11 +152,12 @@ | Zendesk Talk | [![source-zendesk-talk](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-zendesk-talk%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-zendesk-talk) | | Zoom | [![source-zoom-singer](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-zoom-singer%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-zoom-singer) | | Zuora | [![source-zuora](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fsource-zuora%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/source-zuora) | +| Teradata | (Not Setup) | # Destinations -| name | status | -|:---------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| name | status | +|:---------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | Azure Blob Storage | [![destination-azure-blob-storage](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-azure-blob-storage%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-azure-blob-storage) | | BigQuery | [![destination-bigquery](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-bigquery%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-bigquery) | | BigQuery Denormalized | [![destination-bigquery-denormalized](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-bigquery-denormalized%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-bigquery-denormalized) | @@ -164,13 +165,13 @@ | Cassandra | [![destination-cassandra](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-cassandra%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-cassandra) | | Databricks | [![destination-databricks](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-databricks%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-databricks) | | Dev Null | [![destination-dev-null](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-dev-null%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-dev-null) | -| Elasticsearch | [![destination-elasticsearch](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-elasticsearch%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-elasticsearch) | +| Elasticsearch | [![destination-elasticsearch](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-elasticsearch%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-elasticsearch) | | End-to-End Testing | [![destination-e2e-test](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-e2e-test%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-e2e-test) | | Exasol | [![destination-exasol](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-exasol%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-exasol) | | Google Cloud Storage (GCS) | [![destination-gcs](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-gcs%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-gcs) | | Google Firestore | [![destination-firestore](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-firestore%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-firestore) | | Google PubSub | [![destination-pubsub](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-pubsub%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-pubsub) | -| Google Sheets | [![destination-google-sheets](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-google-sheets%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-google-sheets) | | +| Google Sheets | [![destination-google-sheets](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-google-sheets%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-google-sheets) | | Apache Iceberg | [![destination-iceberg](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-iceberg%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-iceberg) | | Kafka | [![destination-kafka](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-kafka%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-kafka) | | Keen (Chargify) | [![destination-keen](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-keen%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-keen) | @@ -184,7 +185,7 @@ | Oracle | [![destination-oracle](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-oracle%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-oracle) | | Postgres | [![destination-postgres](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-postgres%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-postgres) | | Pulsar | [![destination-pulsar](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-pulsar%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-pulsar) | -| R2 | [![destination-r2](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-r2%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-r2) | +| R2 | [![destination-r2](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-r2%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-r2) | | Redshift | [![destination-redshift](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-redshift%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-redshift) | | Rockset | [![destination-rockset](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-rockset%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-rockset) | | S3 | [![destination-s3](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-s3%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-s3) | @@ -192,4 +193,4 @@ | SFTP-JSON | [![destination-sftp-json](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-sftp-json%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-sftp-json) | | Snowflake | [![destination-snowflake](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-snowflake%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-snowflake) | | Teradata | [![destination-teradata](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-teradata%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-teradata) | -| TiDB | [![destination-tidb](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-tidb%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-tidb) | \ No newline at end of file +| TiDB | [![destination-tidb](https://img.shields.io/endpoint?url=https%3A%2F%2Fdnsgjos7lj2fu.cloudfront.net%2Ftests%2Fsummary%2Fconnectors%2Fdestination-tidb%2Fbadge.json)](https://dnsgjos7lj2fu.cloudfront.net/tests/summary/connectors/destination-tidb) | diff --git a/airbyte-integrations/connectors/source-jdbc/src/testFixtures/java/io/airbyte/integrations/source/jdbc/test/JdbcSourceAcceptanceTest.java b/airbyte-integrations/connectors/source-jdbc/src/testFixtures/java/io/airbyte/integrations/source/jdbc/test/JdbcSourceAcceptanceTest.java index f922d27b1db2..bba9eca3db41 100644 --- a/airbyte-integrations/connectors/source-jdbc/src/testFixtures/java/io/airbyte/integrations/source/jdbc/test/JdbcSourceAcceptanceTest.java +++ b/airbyte-integrations/connectors/source-jdbc/src/testFixtures/java/io/airbyte/integrations/source/jdbc/test/JdbcSourceAcceptanceTest.java @@ -389,7 +389,8 @@ protected AirbyteCatalog filterOutOtherSchemas(final AirbyteCatalog catalog) { @Test void testDiscoverWithMultipleSchemas() throws Exception { // clickhouse and mysql do not have a concept of schemas, so this test does not make sense for them. - if (getDriverClass().toLowerCase().contains("mysql") || getDriverClass().toLowerCase().contains("clickhouse")) { + String driverClass = getDriverClass().toLowerCase(); + if (driverClass.contains("mysql") || driverClass.contains("clickhouse") || driverClass.contains("teradata")) { return; } @@ -836,10 +837,11 @@ protected void incrementalCursorCheck( // See https://github.com/airbytehq/airbyte/issues/14732 for rationale and details. @Test - void testIncrementalWithConcurrentInsertion() throws Exception { + public void testIncrementalWithConcurrentInsertion() throws Exception { + final String driverName = getDriverClass().toLowerCase(); final String namespace = getDefaultNamespace(); final String fullyQualifiedTableName = getFullyQualifiedTableName(TABLE_NAME_AND_TIMESTAMP); - final String columnDefinition = String.format("name VARCHAR(200) NOT NULL, timestamp %s NOT NULL", COL_TIMESTAMP_TYPE); + final String columnDefinition = String.format("name VARCHAR(200) NOT NULL, %s %s NOT NULL", COL_TIMESTAMP, COL_TIMESTAMP_TYPE); // 1st sync database.execute(ctx -> { @@ -877,7 +879,12 @@ void testIncrementalWithConcurrentInsertion() throws Exception { .filter(r -> r.getType() == Type.RECORD) .map(r -> r.getRecord().getData().get(COL_NAME).asText()) .toList(); - assertEquals(List.of("a", "b"), firstSyncNames); + // teradata doesn't make insertion order guarantee when equal ordering value + if (driverName.contains("teradata")) { + assertThat(List.of("a", "b"), Matchers.containsInAnyOrder(firstSyncNames.toArray())); + } else { + assertEquals(List.of("a", "b"), firstSyncNames); + } // 2nd sync database.execute(ctx -> { @@ -927,7 +934,14 @@ void testIncrementalWithConcurrentInsertion() throws Exception { .filter(r -> r.getType() == Type.RECORD) .map(r -> r.getRecord().getData().get(COL_NAME).asText()) .toList(); - assertEquals(List.of("c", "d", "e", "f"), thirdSyncExpectedNames); + + // teradata doesn't make insertion order guarantee when equal ordering value + if (driverName.contains("teradata")) { + assertThat(List.of("c", "d", "e", "f"), Matchers.containsInAnyOrder(thirdSyncExpectedNames.toArray())); + } else { + assertEquals(List.of("c", "d", "e", "f"), thirdSyncExpectedNames); + } + } private JsonNode getStateData(final AirbyteMessage airbyteMessage, final String streamName) { @@ -1158,7 +1172,8 @@ private String getDefaultSchemaName() { protected String getDefaultNamespace() { // mysql does not support schemas. it namespaces using database names instead. - if (getDriverClass().toLowerCase().contains("mysql") || getDriverClass().toLowerCase().contains("clickhouse")) { + if (getDriverClass().toLowerCase().contains("mysql") || getDriverClass().toLowerCase().contains("clickhouse") || + getDriverClass().toLowerCase().contains("teradata")) { return config.get(JdbcUtils.DATABASE_KEY).asText(); } else { return SCHEMA_NAME; diff --git a/airbyte-integrations/connectors/source-teradata/Dockerfile b/airbyte-integrations/connectors/source-teradata/Dockerfile new file mode 100644 index 000000000000..eec3a3ac0810 --- /dev/null +++ b/airbyte-integrations/connectors/source-teradata/Dockerfile @@ -0,0 +1,21 @@ +FROM airbyte/integration-base-java:dev AS build + +WORKDIR /airbyte + +ENV APPLICATION source-teradata + +COPY build/distributions/${APPLICATION}*.tar ${APPLICATION}.tar + +RUN tar xf ${APPLICATION}.tar --strip-components=1 && rm -rf ${APPLICATION}.tar + +FROM airbyte/integration-base-java:dev + +WORKDIR /airbyte + +ENV APPLICATION source-teradata + +COPY --from=build /airbyte /airbyte + +# Airbyte's build system uses these labels to know what to name and tag the docker images produced by this Dockerfile. +LABEL io.airbyte.version=0.1.0 +LABEL io.airbyte.name=airbyte/source-teradata diff --git a/airbyte-integrations/connectors/source-teradata/README.md b/airbyte-integrations/connectors/source-teradata/README.md new file mode 100644 index 000000000000..ad9a67489aa1 --- /dev/null +++ b/airbyte-integrations/connectors/source-teradata/README.md @@ -0,0 +1,69 @@ +# Source Teradata + +This is the repository for the Teradata source connector in Java. +For information about how to use this connector within Airbyte, see [the User Documentation](https://docs.airbyte.com/integrations/sources/teradata). + +## Local development + +#### Building via Gradle +From the Airbyte repository root, run: +``` +./gradlew :airbyte-integrations:connectors:source-teradata:build +``` + +#### Create credentials +**If you are a community contributor**, generate the necessary credentials and place them in `secrets/config.json` conforming to the spec file in `src/main/resources/spec.json`. +Note that the `secrets` directory is git-ignored by default, so there is no danger of accidentally checking in sensitive information. + +**If you are an Airbyte core member**, follow the [instructions](https://docs.airbyte.com/connector-development#using-credentials-in-ci) to set up the credentials. + +### Locally running the connector docker image + +#### Build +Build the connector image via Gradle: +``` +./gradlew :airbyte-integrations:connectors:source-teradata:airbyteDocker +``` +When building via Gradle, the docker image name and tag, respectively, are the values of the `io.airbyte.name` and `io.airbyte.version` `LABEL`s in +the Dockerfile. + +#### Run +Then run any of the connector commands as follows: +``` +docker run --rm airbyte/source-teradata:dev spec +docker run --rm -v $(pwd)/secrets:/secrets airbyte/source-teradata:dev check --config /secrets/config.json +docker run --rm -v $(pwd)/secrets:/secrets airbyte/source-teradata:dev discover --config /secrets/config.json +docker run --rm -v $(pwd)/secrets:/secrets -v $(pwd)/integration_tests:/integration_tests airbyte/source-teradata:dev read --config /secrets/config.json --catalog /integration_tests/configured_catalog.json +``` + +## Testing +We use `JUnit` for Java tests. + +### Unit and Integration Tests +Place unit tests under `src/test/...` +Place integration tests in `src/test-integration/...` + +#### Acceptance Tests +Airbyte has a standard test suite that all source connectors must pass. Implement the `TODO`s in +`src/test-integration/java/io/airbyte/integrations/sources/TeradataSourceAcceptanceTest.java`. + +### Using gradle to run tests +All commands should be run from airbyte project root. +To run unit tests: +``` +./gradlew :airbyte-integrations:connectors:source-teradata:unitTest +``` +To run acceptance and custom integration tests: +``` +./gradlew :airbyte-integrations:connectors:source-teradata:integrationTest +``` + +## Dependency Management + +### Publishing a new version of the connector +You've checked out the repo, implemented a million dollar feature, and you're ready to share your changes with the world. Now what? +1. Make sure your changes are passing unit and integration tests. +1. Bump the connector version in `Dockerfile` -- just increment the value of the `LABEL io.airbyte.version` appropriately (we use [SemVer](https://semver.org/)). +1. Create a Pull Request. +1. Pat yourself on the back for being an awesome contributor. +1. Someone from Airbyte will take a look at your PR and iterate with you to merge it into master. diff --git a/airbyte-integrations/connectors/source-teradata/acceptance-test-config.yml b/airbyte-integrations/connectors/source-teradata/acceptance-test-config.yml new file mode 100644 index 000000000000..49f39cead0ef --- /dev/null +++ b/airbyte-integrations/connectors/source-teradata/acceptance-test-config.yml @@ -0,0 +1,8 @@ +# See [Connector Acceptance Tests](https://docs.airbyte.com/connector-development/testing-connectors/connector-acceptance-tests-reference) +# for more information about how to configure these tests +connector_image: airbyte/source-teradata:dev +acceptance_tests: + spec: + tests: + - spec_path: "src/test-integration/resources/expected_spec.json" + config_path: "secrets/config.json" diff --git a/airbyte-integrations/connectors/source-teradata/acceptance-test-docker.sh b/airbyte-integrations/connectors/source-teradata/acceptance-test-docker.sh new file mode 100644 index 000000000000..394835b93b09 --- /dev/null +++ b/airbyte-integrations/connectors/source-teradata/acceptance-test-docker.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env sh + +# Build latest connector image +docker build . -t $(cat acceptance-test-config.yml | grep "connector_image" | head -n 1 | cut -d: -f2-) + +# Pull latest acctest image +docker pull airbyte/connector-acceptance-test:latest + +# Run +docker run --rm -it \ + -v /var/run/docker.sock:/var/run/docker.sock \ + -v /tmp:/tmp \ + -v $(pwd):/test_input \ + airbyte/connector-acceptance-test \ + --acceptance-test-config /test_input diff --git a/airbyte-integrations/connectors/source-teradata/build.gradle b/airbyte-integrations/connectors/source-teradata/build.gradle new file mode 100644 index 000000000000..47b083feee8a --- /dev/null +++ b/airbyte-integrations/connectors/source-teradata/build.gradle @@ -0,0 +1,30 @@ +plugins { + id 'application' + id 'airbyte-docker' + id 'airbyte-integration-test-java' + id 'airbyte-connector-acceptance-test' +} + +application { + mainClass = 'io.airbyte.integrations.source.teradata.TeradataSource' +} + +dependencies { + implementation project(':airbyte-db:db-lib') + implementation project(':airbyte-integrations:bases:base-java') + implementation libs.airbyte.protocol + implementation project(':airbyte-integrations:connectors:source-jdbc') + implementation project(':airbyte-integrations:connectors:source-relational-db') + + implementation 'com.teradata.jdbc:terajdbc:20.00.00.06' + + testImplementation testFixtures(project(':airbyte-integrations:connectors:source-jdbc')) + + testImplementation 'org.apache.commons:commons-lang3:3.11' + + integrationTestJavaImplementation project(':airbyte-integrations:connectors:source-teradata') + integrationTestJavaImplementation project(':airbyte-integrations:bases:standard-source-test') + + implementation files(project(':airbyte-integrations:bases:base-java').airbyteDocker.outputs) + integrationTestJavaImplementation files(project(':airbyte-integrations:bases:base-java').airbyteDocker.outputs) +} diff --git a/airbyte-integrations/connectors/source-teradata/integration_tests/acceptance.py b/airbyte-integrations/connectors/source-teradata/integration_tests/acceptance.py new file mode 100644 index 000000000000..9e6409236281 --- /dev/null +++ b/airbyte-integrations/connectors/source-teradata/integration_tests/acceptance.py @@ -0,0 +1,16 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + + +import pytest + +pytest_plugins = ("connector_acceptance_test.plugin",) + + +@pytest.fixture(scope="session", autouse=True) +def connector_setup(): + """This fixture is a placeholder for external resources that acceptance test might require.""" + # TODO: setup test dependencies if needed. otherwise remove the TODO comments + yield + # TODO: clean up test dependencies diff --git a/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/TeradataSource.java b/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/TeradataSource.java new file mode 100644 index 000000000000..a19a01509df5 --- /dev/null +++ b/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/TeradataSource.java @@ -0,0 +1,176 @@ +/* + * Copyright (c) 2023 Airbyte, Inc., all rights reserved. + */ + +package io.airbyte.integrations.source.teradata; + +import com.fasterxml.jackson.databind.JsonNode; +import com.google.common.collect.ImmutableMap; +import io.airbyte.commons.json.Jsons; +import io.airbyte.commons.map.MoreMaps; +import io.airbyte.db.factory.DataSourceFactory; +import io.airbyte.db.jdbc.JdbcDatabase; +import io.airbyte.db.jdbc.JdbcUtils; +import io.airbyte.db.jdbc.StreamingJdbcDatabase; +import io.airbyte.db.jdbc.streaming.AdaptiveStreamingQueryConfig; +import io.airbyte.integrations.base.IntegrationRunner; +import io.airbyte.integrations.base.Source; +import io.airbyte.integrations.source.jdbc.AbstractJdbcSource; +import io.airbyte.integrations.source.jdbc.JdbcDataSourceUtils; +import io.airbyte.integrations.source.relationaldb.TableInfo; +import io.airbyte.protocol.models.CommonField; +import java.io.IOException; +import java.io.PrintWriter; +import java.io.UncheckedIOException; +import java.nio.charset.StandardCharsets; +import java.sql.JDBCType; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import javax.sql.DataSource; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class TeradataSource extends AbstractJdbcSource implements Source { + + private static final Logger LOGGER = LoggerFactory.getLogger(TeradataSource.class); + + private static final int INTERMEDIATE_STATE_EMISSION_FREQUENCY = 10_000; + + static final String DRIVER_CLASS = "com.teradata.jdbc.TeraDriver"; + + public static final String PARAM_MODE = "mode"; + public static final String PARAM_SSL = "ssl"; + public static final String PARAM_SSL_MODE = "ssl_mode"; + public static final String PARAM_SSLMODE = "sslmode"; + public static final String PARAM_SSLCA = "sslca"; + public static final String REQUIRE = "require"; + + private static final String CA_CERTIFICATE = "ca.pem"; + + public TeradataSource() { + super(DRIVER_CLASS, AdaptiveStreamingQueryConfig::new, new TeradataSourceOperations()); + } + + public static void main(final String[] args) throws Exception { + final Source source = new TeradataSource(); + LOGGER.info("starting source: {}", TeradataSource.class); + new IntegrationRunner(source).run(args); + LOGGER.info("completed source: {}", TeradataSource.class); + } + + @Override + public JsonNode toDatabaseConfig(final JsonNode config) { + final String schema = config.get(JdbcUtils.DATABASE_KEY).asText(); + + final String host = config.has(JdbcUtils.PORT_KEY) ? + config.get(JdbcUtils.HOST_KEY).asText() + ":" + config.get(JdbcUtils.PORT_KEY).asInt() : + config.get(JdbcUtils.HOST_KEY).asText(); + + final String jdbcUrl = String.format("jdbc:teradata://%s/", host); + + final ImmutableMap.Builder configBuilder = ImmutableMap.builder() + .put(JdbcUtils.USERNAME_KEY, config.get(JdbcUtils.USERNAME_KEY).asText()) + .put(JdbcUtils.JDBC_URL_KEY, jdbcUrl) + .put(JdbcUtils.SCHEMA_KEY, schema); + + if (config.has(JdbcUtils.PASSWORD_KEY)) { + configBuilder.put(JdbcUtils.PASSWORD_KEY, config.get(JdbcUtils.PASSWORD_KEY).asText()); + } + + if (config.has(JdbcUtils.JDBC_URL_PARAMS_KEY)) { + configBuilder.put(JdbcUtils.JDBC_URL_PARAMS_KEY, config.get(JdbcUtils.JDBC_URL_PARAMS_KEY).asText()); + } + + return Jsons.jsonNode(configBuilder.build()); + } + + @Override + public Set getExcludedInternalNameSpaces() { + // the connector requires to have a database explicitly defined + return Set.of(""); + } + + @Override + protected int getStateEmissionFrequency() { + return INTERMEDIATE_STATE_EMISSION_FREQUENCY; + } + + @Override + public List>> discoverInternal(JdbcDatabase database) throws Exception { + return discoverInternal(database, database.getSourceConfig().has(JdbcUtils.DATABASE_KEY) ? + database.getSourceConfig().get(JdbcUtils.DATABASE_KEY).asText() : null); + } + + @Override + public JdbcDatabase createDatabase(JsonNode sourceConfig) throws SQLException { + final Map customProperties = JdbcUtils.parseJdbcParameters(sourceConfig, JdbcUtils.JDBC_URL_PARAMS_KEY); + final Map sslConnectionProperties = getSslConnectionProperties(sourceConfig); + JdbcDataSourceUtils.assertCustomParametersDontOverwriteDefaultParameters(customProperties, sslConnectionProperties); + + final JsonNode jdbcConfig = toDatabaseConfig(sourceConfig); + // Create the data source + final DataSource dataSource = DataSourceFactory.create( + jdbcConfig.has(JdbcUtils.USERNAME_KEY) ? jdbcConfig.get(JdbcUtils.USERNAME_KEY).asText() : null, + jdbcConfig.has(JdbcUtils.PASSWORD_KEY) ? jdbcConfig.get(JdbcUtils.PASSWORD_KEY).asText() : null, + driverClass, + jdbcConfig.get(JdbcUtils.JDBC_URL_KEY).asText(), + MoreMaps.merge(customProperties, sslConnectionProperties)); + // Record the data source so that it can be closed. + dataSources.add(dataSource); + + final JdbcDatabase database = new StreamingJdbcDatabase( + dataSource, + sourceOperations, + streamingQueryConfigProvider); + + quoteString = (quoteString == null ? database.getMetaData().getIdentifierQuoteString() : quoteString); + database.setSourceConfig(sourceConfig); + database.setDatabaseConfig(jdbcConfig); + return database; + } + + private Map getSslConnectionProperties(JsonNode config) { + final Map additionalParameters = new HashMap<>(); + if (config.has(PARAM_SSL) && config.get(PARAM_SSL).asBoolean()) { + LOGGER.debug("SSL Enabled"); + if (config.has(PARAM_SSL_MODE)) { + LOGGER.debug("Selected SSL Mode : {}", config.get(PARAM_SSL_MODE).get(PARAM_MODE).asText()); + additionalParameters.putAll(obtainConnectionOptions(config.get(PARAM_SSL_MODE))); + } else { + additionalParameters.put(PARAM_SSLMODE, REQUIRE); + } + } + return additionalParameters; + } + + private Map obtainConnectionOptions(final JsonNode encryption) { + final Map additionalParameters = new HashMap<>(); + if (!encryption.isNull()) { + final var method = encryption.get(PARAM_MODE).asText(); + switch (method) { + case "verify-ca", "verify-full" -> { + additionalParameters.put(PARAM_SSLMODE, method); + try { + createCertificateFile(CA_CERTIFICATE, encryption.get("ssl_ca_certificate").asText()); + } catch (final IOException ioe) { + throw new UncheckedIOException(ioe); + } + additionalParameters.put(PARAM_SSLCA, CA_CERTIFICATE); + } + default -> additionalParameters.put(PARAM_SSLMODE, method); + } + } + return additionalParameters; + } + + private static void createCertificateFile(String fileName, String fileValue) throws IOException { + try (final PrintWriter out = new PrintWriter(fileName, StandardCharsets.UTF_8)) { + out.print(fileValue); + } + } + + +} diff --git a/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/TeradataSourceOperations.java b/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/TeradataSourceOperations.java new file mode 100644 index 000000000000..b600ec25103e --- /dev/null +++ b/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/TeradataSourceOperations.java @@ -0,0 +1,114 @@ +package io.airbyte.integrations.source.teradata; + +import static io.airbyte.db.DataTypeUtils.TIMESTAMPTZ_FORMATTER; + +import com.fasterxml.jackson.databind.node.ObjectNode; +import io.airbyte.db.DataTypeUtils; +import io.airbyte.db.jdbc.DateTimeConverter; +import io.airbyte.db.jdbc.JdbcSourceOperations; +import java.sql.Date; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Time; +import java.sql.Timestamp; +import java.text.ParseException; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.OffsetDateTime; +import java.time.OffsetTime; +import java.time.ZoneOffset; +import java.time.format.DateTimeParseException; + +// Teradata only supports native java.sql types when creating prepared statements and returning from resultSet +public class TeradataSourceOperations extends JdbcSourceOperations { + + @Override + protected void putDate(ObjectNode node, String columnName, ResultSet resultSet, int index) + throws SQLException { + Object obj = resultSet.getObject(index); + node.put(columnName, DateTimeConverter.convertToDate(obj)); + } + + @Override + protected void putTime(ObjectNode node, String columnName, ResultSet resultSet, int index) + throws SQLException { + Object obj = resultSet.getObject(index); + node.put(columnName, DateTimeConverter.convertToTime(obj)); + } + + @Override + protected void putTimestamp(ObjectNode node, String columnName, ResultSet resultSet, + int index) throws SQLException { + Timestamp timestamp = (Timestamp) resultSet.getObject(index); + node.put(columnName, DataTypeUtils.toISO8601StringWithMicroseconds(timestamp.toInstant())); + } + + @Override + protected void putTimestampWithTimezone(ObjectNode node, String columnName, ResultSet resultSet, + int index) throws SQLException { + Timestamp timestamp = (Timestamp) resultSet.getObject(index); + final OffsetDateTime timestamptz = timestamp.toLocalDateTime().atOffset(ZoneOffset.UTC); + final LocalDate localDate = timestamptz.toLocalDate(); + node.put(columnName, resolveEra(localDate, timestamptz.format(TIMESTAMPTZ_FORMATTER))); + } + + + @Override + protected void setDate(PreparedStatement preparedStatement, int parameterIndex, String value) + throws SQLException { + try { + // LocalDate is unsupported by the Teradata driver if provided directly + preparedStatement.setObject(parameterIndex, Date.valueOf(LocalDate.parse(value))); + } catch (final DateTimeParseException dtpe) { + try { + final Timestamp from = Timestamp.from(DataTypeUtils.getDateFormat().parse(value).toInstant()); + preparedStatement.setDate(parameterIndex, new Date(from.getTime())); + } catch (final ParseException pe) { + throw new RuntimeException(pe); + } + } + } + + @Override + protected void setTime(PreparedStatement preparedStatement, int parameterIndex, String value) + throws SQLException { + try { + // LocalTime is unsupported by the Teradata driver if provided directly + preparedStatement.setObject(parameterIndex, Time.valueOf(LocalTime.parse(value))); + } catch (final DateTimeParseException e) { + setTimestamp(preparedStatement, parameterIndex, value); + } + } + + @Override + protected void setTimestamp(PreparedStatement preparedStatement, int parameterIndex, String value) + throws SQLException { + try { + preparedStatement.setObject(parameterIndex, Timestamp.valueOf(LocalDateTime.parse(value))); + } catch (final DateTimeParseException e) { + preparedStatement.setObject(parameterIndex, Timestamp.valueOf(OffsetDateTime.parse(value).toLocalDateTime())); + } + } + + @Override + protected void setTimeWithTimezone(PreparedStatement preparedStatement, int parameterIndex, + String value) throws SQLException { + try { + preparedStatement.setObject(parameterIndex, Time.valueOf(OffsetTime.parse(value).toLocalTime())); + } catch (final DateTimeParseException e) { + throw new RuntimeException(e); + } + } + + @Override + protected void setTimestampWithTimezone(PreparedStatement preparedStatement, int parameterIndex, + String value) throws SQLException { + try { + preparedStatement.setObject(parameterIndex, Timestamp.valueOf(OffsetDateTime.parse(value).toLocalDateTime())); + } catch (final DateTimeParseException e) { + throw new RuntimeException(e); + } + } +} diff --git a/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/Headers.java b/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/Headers.java new file mode 100644 index 000000000000..48927e0c4862 --- /dev/null +++ b/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/Headers.java @@ -0,0 +1,18 @@ +package io.airbyte.integrations.source.teradata.envclient; + +public class Headers { + + private Headers() { + + } + + public static final String CONTENT_TYPE = "Content-Type"; + + public static final String AUTHORIZATION = "Authorization"; + + public static final String APPLICATION_JSON = "application/json"; + + public static final String BEARER = "Bearer "; + + +} diff --git a/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/TeradataHttpClient.java b/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/TeradataHttpClient.java new file mode 100644 index 000000000000..e7e80163e2c4 --- /dev/null +++ b/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/TeradataHttpClient.java @@ -0,0 +1,137 @@ +package io.airbyte.integrations.source.teradata.envclient; + +import static io.airbyte.integrations.source.teradata.envclient.Headers.APPLICATION_JSON; +import static io.airbyte.integrations.source.teradata.envclient.Headers.AUTHORIZATION; +import static io.airbyte.integrations.source.teradata.envclient.Headers.BEARER; +import static io.airbyte.integrations.source.teradata.envclient.Headers.CONTENT_TYPE; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.MapperFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.json.JsonMapper; +import io.airbyte.integrations.source.teradata.envclient.dto.CreateEnvironmentRequest; +import io.airbyte.integrations.source.teradata.envclient.dto.DeleteEnvironmentRequest; +import io.airbyte.integrations.source.teradata.envclient.dto.EnvironmentResponse; +import io.airbyte.integrations.source.teradata.envclient.dto.GetEnvironmentRequest; +import io.airbyte.integrations.source.teradata.envclient.exception.BaseException; +import io.airbyte.integrations.source.teradata.envclient.exception.Error4xxException; +import io.airbyte.integrations.source.teradata.envclient.exception.Error5xxException; +import java.io.IOException; +import java.io.UncheckedIOException; +import java.net.URI; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.util.concurrent.CompletableFuture; + +public class TeradataHttpClient { + + private final String baseUrl; + + private final HttpClient httpClient; + + private final ObjectMapper objectMapper; + + public TeradataHttpClient(String baseUrl) { + this(HttpClient.newBuilder().version(HttpClient.Version.HTTP_1_1).build(), baseUrl); + } + + public TeradataHttpClient(HttpClient httpClient, String baseUrl) { + this.httpClient = httpClient; + this.baseUrl = baseUrl; + this.objectMapper = JsonMapper.builder() + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) + .configure(MapperFeature.ALLOW_FINAL_FIELDS_AS_MUTATORS, false) + .build(); + } + + // Creating an environment is a blocking operation by default, and it takes ~1.5min to finish + public CompletableFuture createEnvironment(CreateEnvironmentRequest createEnvironmentRequest, + String token) { + var requestBody = handleCheckedException(() -> objectMapper.writeValueAsString(createEnvironmentRequest)); + + var httpRequest = HttpRequest.newBuilder(URI.create(baseUrl.concat("/environments"))) + .headers( + AUTHORIZATION, BEARER + token, + CONTENT_TYPE, APPLICATION_JSON + ) + .POST(HttpRequest.BodyPublishers.ofString(requestBody)) + .build(); + + return httpClient.sendAsync(httpRequest, HttpResponse.BodyHandlers.ofString()) + .thenApply(httpResponse -> handleHttpResponse(httpResponse, new TypeReference<>() {})); + } + + // Avoids long connections and the risk of connection termination by intermediary + public CompletableFuture pollingCreateEnvironment( + CreateEnvironmentRequest createEnvironmentRequest, String token) { + throw new UnsupportedOperationException(); + } + + public EnvironmentResponse getEnvironment(GetEnvironmentRequest getEnvironmentRequest, String token) { + var httpRequest = HttpRequest.newBuilder(URI.create(baseUrl + .concat("/environments/") + .concat(getEnvironmentRequest.name()))) + .headers(AUTHORIZATION, BEARER + token) + .GET() + .build(); + + var httpResponse = + handleCheckedException(() -> httpClient.send(httpRequest, HttpResponse.BodyHandlers.ofString())); + return handleHttpResponse(httpResponse, new TypeReference<>() {}); + } + + // Deleting an environment is a blocking operation by default, and it takes ~1.5min to finish + public CompletableFuture deleteEnvironment(DeleteEnvironmentRequest deleteEnvironmentRequest, String token) { + var httpRequest = HttpRequest.newBuilder(URI.create(baseUrl + .concat("/environments/") + .concat(deleteEnvironmentRequest.name()))) + .headers(AUTHORIZATION, BEARER + token) + .DELETE() + .build(); + + return httpClient.sendAsync(httpRequest, HttpResponse.BodyHandlers.ofString()) + .thenApply(httpResponse -> handleHttpResponse(httpResponse, new TypeReference<>() {})); + } + + + private T handleHttpResponse(HttpResponse httpResponse, TypeReference typeReference) { + var body = httpResponse.body(); + if (httpResponse.statusCode() >= 200 && httpResponse.statusCode() <= 299) { + return handleCheckedException(() -> { + if (typeReference.getType().getTypeName().equals(Void.class.getTypeName())) { + return null; + } else { + return objectMapper.readValue(body, typeReference); + } + }); + } else if (httpResponse.statusCode() >= 400 && httpResponse.statusCode() <= 499) { + throw new Error4xxException(httpResponse.statusCode(), body); + } else if (httpResponse.statusCode() >= 500 && httpResponse.statusCode() <= 599) { + throw new Error5xxException(httpResponse.statusCode(), body); + } else { + throw new BaseException(httpResponse.statusCode(), body); + } + } + + private T handleCheckedException(CheckedSupplier checkedSupplier) { + try { + return checkedSupplier.get(); + } catch (IOException e) { + throw new UncheckedIOException(e); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + throw new RuntimeException(e); + } + } + + @FunctionalInterface + private interface CheckedSupplier { + + T get() throws IOException, InterruptedException; + + } + + +} diff --git a/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/dto/CreateEnvironmentRequest.java b/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/dto/CreateEnvironmentRequest.java new file mode 100644 index 000000000000..d5f329dce64f --- /dev/null +++ b/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/dto/CreateEnvironmentRequest.java @@ -0,0 +1,13 @@ +package io.airbyte.integrations.source.teradata.envclient.dto; + +public record CreateEnvironmentRequest( + + String name, + + String region, + + String password + +) { + +} diff --git a/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/dto/DeleteEnvironmentRequest.java b/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/dto/DeleteEnvironmentRequest.java new file mode 100644 index 000000000000..24546efa003b --- /dev/null +++ b/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/dto/DeleteEnvironmentRequest.java @@ -0,0 +1,8 @@ +package io.airbyte.integrations.source.teradata.envclient.dto; + +public record DeleteEnvironmentRequest( + + String name + +) { +} diff --git a/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/dto/EnvironmentResponse.java b/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/dto/EnvironmentResponse.java new file mode 100644 index 000000000000..6943567e364f --- /dev/null +++ b/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/dto/EnvironmentResponse.java @@ -0,0 +1,55 @@ +package io.airbyte.integrations.source.teradata.envclient.dto; + +import java.util.List; + +public record EnvironmentResponse( + + State state, + + String region, + + // Use for subsequent environment operations i.e GET, DELETE, etc + String name, + + // Use for connecting with JDBC driver + String ip, + + String dnsName, + + String owner, + + String type, + + List services + +) { + + record Service( + + List credentials, + + String name, + + String url + + ) { + + } + + record Credential( + + String name, + + String value + + ) { + + } + + enum State { + + INITIALIZING, RUNNING, STOPPING, TERMINATING, + + } + +} diff --git a/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/dto/GetEnvironmentRequest.java b/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/dto/GetEnvironmentRequest.java new file mode 100644 index 000000000000..7d8898f76ae1 --- /dev/null +++ b/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/dto/GetEnvironmentRequest.java @@ -0,0 +1,8 @@ +package io.airbyte.integrations.source.teradata.envclient.dto; + +public record GetEnvironmentRequest( + + String name + +) { +} diff --git a/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/dto/Region.java b/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/dto/Region.java new file mode 100644 index 000000000000..9e516ed8b843 --- /dev/null +++ b/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/dto/Region.java @@ -0,0 +1,33 @@ +package io.airbyte.integrations.source.teradata.envclient.dto; + +public enum Region { + + US_CENTRAL("us-central"), + + US_EAST("us-east"), + + US_WEST("us-west"), + + SOUTHAMERICA_EAST("southamerica-east"), + + EUROPE_WEST("europe-west"), + + ASIA_SOUTH("asia-south"), + + ASIA_NORTHEAST("asia-northeast"), + + ASIA_SOUTHEAST("asia-southeast"), + + AUSTRALIA_SOUTHEAST("australia-southeast"); + + + private final String regionName; + + Region(String regionName) { + this.regionName = regionName; + } + + public String getRegionName() { + return regionName; + } +} diff --git a/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/exception/BaseException.java b/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/exception/BaseException.java new file mode 100644 index 000000000000..6ca0aaff2d07 --- /dev/null +++ b/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/exception/BaseException.java @@ -0,0 +1,36 @@ +package io.airbyte.integrations.source.teradata.envclient.exception; + +public class BaseException extends RuntimeException { + + private final int statusCode; + + private final String body; + + private final String reason; + + public BaseException(int statusCode, String body) { + super(body); + this.statusCode = statusCode; + this.body = body; + this.reason = null; + } + + public BaseException(int statusCode, String body, String reason) { + super(body); + this.statusCode = statusCode; + this.body = body; + this.reason = reason; + } + + public int getStatusCode() { + return statusCode; + } + + public String getBody() { + return body; + } + + public String getReason() { + return reason; + } +} diff --git a/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/exception/Error4xxException.java b/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/exception/Error4xxException.java new file mode 100644 index 000000000000..1621ce3675d9 --- /dev/null +++ b/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/exception/Error4xxException.java @@ -0,0 +1,13 @@ +package io.airbyte.integrations.source.teradata.envclient.exception; + +public class Error4xxException extends BaseException { + + public Error4xxException(int statusCode, String body, String reason) { + super(statusCode, body, reason); + } + + public Error4xxException(int statusCode, String body) { + super(statusCode, body); + } + +} diff --git a/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/exception/Error5xxException.java b/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/exception/Error5xxException.java new file mode 100644 index 000000000000..4a7a6baf33c9 --- /dev/null +++ b/airbyte-integrations/connectors/source-teradata/src/main/java/io/airbyte/integrations/source/teradata/envclient/exception/Error5xxException.java @@ -0,0 +1,13 @@ +package io.airbyte.integrations.source.teradata.envclient.exception; + +public class Error5xxException extends BaseException { + + public Error5xxException(int statusCode, String body, String reason) { + super(statusCode, body, reason); + } + + public Error5xxException(int statusCode, String body) { + super(statusCode, body); + } + +} diff --git a/airbyte-integrations/connectors/source-teradata/src/main/resources/spec.json b/airbyte-integrations/connectors/source-teradata/src/main/resources/spec.json new file mode 100644 index 000000000000..25603e4e7330 --- /dev/null +++ b/airbyte-integrations/connectors/source-teradata/src/main/resources/spec.json @@ -0,0 +1,192 @@ +{ + "documentationUrl" : "https://docs.airbyte.com/integrations/sources/teradata", + "connectionSpecification" : { + "$schema" : "http://json-schema.org/draft-07/schema#", + "title" : "Teradata Source Spec", + "type" : "object", + "required" : [ + "host", + "database", + "username" + ], + "properties" : { + "host" : { + "title" : "Host", + "description" : "Hostname of the database.", + "type" : "string", + "order" : 0 + }, + "port" : { + "title" : "Port", + "description" : "Port of the database.", + "type" : "integer", + "minimum" : 0, + "maximum" : 65536, + "default" : 3306, + "examples" : [ + "3306" + ], + "order" : 1 + }, + "database" : { + "title" : "Database", + "description" : "Name of the database.", + "type" : "string", + "order" : 2 + }, + "username" : { + "title" : "Username", + "description" : "Username to use to access the database.", + "type" : "string", + "order" : 3 + }, + "password" : { + "title" : "Password", + "description" : "Password associated with the username.", + "type" : "string", + "airbyte_secret" : true, + "order" : 4 + }, + "jdbc_url_params" : { + "title" : "JDBC URL params", + "description" : "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3)", + "type" : "string", + "order" : 5 + }, + "replication_method" : { + "title" : "Replication method", + "description" : "Replication method to use for extracting data from the database. STANDARD replication requires no setup on the DB side but will not be able to represent deletions incrementally. CDC uses the Binlog to detect inserts, updates, and deletes. This needs to be configured on the source database itself.", + "type" : "string", + "order" : 6, + "default" : "STANDARD", + "enum" : [ + "STANDARD", + "CDC" + ] + }, + "ssl" : { + "title" : "SSL Connection", + "description" : "Encrypt data using SSL. When activating SSL, please select one of the connection modes.", + "type" : "boolean", + "default" : false, + "order" : 7 + }, + "ssl_mode" : { + "title" : "SSL Modes", + "description" : "SSL connection modes. \n disable - Chose this mode to disable encryption of communication between Airbyte and destination database\n allow - Chose this mode to enable encryption only when required by the destination database\n prefer - Chose this mode to allow unencrypted connection only if the destination database does not support encryption\n require - Chose this mode to always require encryption. If the destination database server does not support encryption, connection will fail\n verify-ca - Chose this mode to always require encryption and to verify that the destination database server has a valid SSL certificate\n verify-full - This is the most secure mode. Chose this mode to always require encryption and to verify the identity of the destination database server\n See more information - in the docs.", + "type" : "object", + "order" : 8, + "oneOf" : [ + { + "title" : "disable", + "additionalProperties" : true, + "description" : "Disable SSL.", + "required" : [ + "mode" + ], + "properties" : { + "mode" : { + "type" : "string", + "const" : "disable", + "order" : 0 + } + } + }, + { + "title" : "allow", + "additionalProperties" : true, + "description" : "Allow SSL mode.", + "required" : [ + "mode" + ], + "properties" : { + "mode" : { + "type" : "string", + "const" : "allow", + "order" : 0 + } + } + }, + { + "title" : "prefer", + "additionalProperties" : true, + "description" : "Prefer SSL mode.", + "required" : [ + "mode" + ], + "properties" : { + "mode" : { + "type" : "string", + "const" : "prefer", + "order" : 0 + } + } + }, + { + "title" : "require", + "additionalProperties" : true, + "description" : "Require SSL mode.", + "required" : [ + "mode" + ], + "properties" : { + "mode" : { + "type" : "string", + "const" : "require", + "order" : 0 + } + } + }, + { + "title" : "verify-ca", + "additionalProperties" : true, + "description" : "Verify-ca SSL mode.", + "required" : [ + "mode", + "ssl_ca_certificate" + ], + "properties" : { + "mode" : { + "type" : "string", + "const" : "verify-ca", + "order" : 0 + }, + "ssl_ca_certificate" : { + "type" : "string", + "title" : "CA certificate", + "description" : "Specifies the file name of a PEM file that contains Certificate Authority (CA) certificates for use with SSLMODE=verify-ca.\n See more information - in the docs.", + "airbyte_secret" : true, + "multiline" : true, + "order" : 1 + } + } + }, + { + "title" : "verify-full", + "additionalProperties" : true, + "description" : "Verify-full SSL mode.", + "required" : [ + "mode", + "ssl_ca_certificate" + ], + "properties" : { + "mode" : { + "type" : "string", + "const" : "verify-full", + "order" : 0 + }, + "ssl_ca_certificate" : { + "type" : "string", + "title" : "CA certificate", + "description" : "Specifies the file name of a PEM file that contains Certificate Authority (CA) certificates for use with SSLMODE=verify-full.\n See more information - in the docs.", + "airbyte_secret" : true, + "multiline" : true, + "order" : 1 + } + } + } + ] + } + } + } +} diff --git a/airbyte-integrations/connectors/source-teradata/src/test-integration/java/io/airbyte/integrations/source/teradata/TeradataSourceAcceptanceTest.java b/airbyte-integrations/connectors/source-teradata/src/test-integration/java/io/airbyte/integrations/source/teradata/TeradataSourceAcceptanceTest.java new file mode 100644 index 000000000000..607ce7764284 --- /dev/null +++ b/airbyte-integrations/connectors/source-teradata/src/test-integration/java/io/airbyte/integrations/source/teradata/TeradataSourceAcceptanceTest.java @@ -0,0 +1,170 @@ +/* + * Copyright (c) 2023 Airbyte, Inc., all rights reserved. + */ + +package io.airbyte.integrations.source.teradata; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ObjectNode; +import io.airbyte.commons.io.IOs; +import io.airbyte.commons.json.Jsons; +import io.airbyte.commons.resources.MoreResources; +import io.airbyte.integrations.source.teradata.envclient.TeradataHttpClient; +import io.airbyte.integrations.source.teradata.envclient.dto.CreateEnvironmentRequest; +import io.airbyte.integrations.source.teradata.envclient.dto.DeleteEnvironmentRequest; +import io.airbyte.integrations.standardtest.source.SourceAcceptanceTest; +import io.airbyte.integrations.standardtest.source.TestDestinationEnv; +import io.airbyte.protocol.models.Field; +import io.airbyte.protocol.models.JsonSchemaType; +import io.airbyte.protocol.models.v0.CatalogHelpers; +import io.airbyte.protocol.models.v0.ConfiguredAirbyteCatalog; +import io.airbyte.protocol.models.v0.ConfiguredAirbyteStream; +import io.airbyte.protocol.models.v0.ConnectorSpecification; +import io.airbyte.protocol.models.v0.DestinationSyncMode; +import io.airbyte.protocol.models.v0.SyncMode; +import java.nio.file.Path; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.HashMap; +import java.util.List; +import java.util.concurrent.ExecutionException; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.TestInstance; + +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +public class TeradataSourceAcceptanceTest extends SourceAcceptanceTest { + + private static final String CREATE_DATABASE = + "CREATE DATABASE \"database_name\" AS PERMANENT = 120e6, SPOOL = 120e6;"; + + private static final String CREATE_TABLE = """ + CREATE TABLE database_name.table_name( + id INTEGER NOT NULL, + strength VARCHAR(30) NOT NULL, + agility INTEGER NOT NULL, + updated_at TIMESTAMP(6), + PRIMARY KEY(id)) + """; + + private static final String DELETE_DATABASE = "DELETE DATABASE \"database_name\";"; + + private static final String DROP_DATABASE = "DROP DATABASE \"database_name\";"; + + private static final String INSERT = + "INSERT INTO database_name.table_name VALUES(%d, '%s', %d, CURRENT_TIMESTAMP(6))"; + + private JsonNode jsonConfig; + + @BeforeAll + void initEnvironment() throws ExecutionException, InterruptedException { + jsonConfig = Jsons.deserialize(IOs.readFile(Path.of("secrets/config.json"))); + TeradataHttpClient teradataHttpClient = new TeradataHttpClient(jsonConfig.get("env_host").asText()); + var request = new CreateEnvironmentRequest( + jsonConfig.get("env_name").asText(), + jsonConfig.get("env_region").asText(), + jsonConfig.get("env_password").asText()); + var response = teradataHttpClient.createEnvironment(request, jsonConfig.get("env_token").asText()).get(); + ((ObjectNode) jsonConfig).put("host", response.ip()); + try { + Class.forName("com.teradata.jdbc.TeraDriver"); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } + } + + @AfterAll + void cleanupEnvironment() throws ExecutionException, InterruptedException { + TeradataHttpClient teradataHttpClient = new TeradataHttpClient(jsonConfig.get("env_host").asText()); + var request = new DeleteEnvironmentRequest(jsonConfig.get("env_name").asText()); + teradataHttpClient.deleteEnvironment(request, jsonConfig.get("env_token").asText()).get(); + } + + + @Override + protected void setupEnvironment(final TestDestinationEnv testEnv) { + var config = getConfig(); + executeStatements(List.of( + statement -> statement.executeUpdate(CREATE_DATABASE), + statement -> statement.executeUpdate(CREATE_TABLE), + statement -> statement.executeUpdate(String.format(INSERT, 1, "laser power", 9)), + statement -> statement.executeUpdate(String.format(INSERT, 2, "night vision", 7)) + ), config.get("host").asText(), config.get("username").asText(), config.get("password").asText()); + + } + + @Override + protected void tearDown(final TestDestinationEnv testEnv) { + var config = getConfig(); + executeStatements(List.of( + statement -> statement.executeUpdate(DELETE_DATABASE), + statement -> statement.executeUpdate(DROP_DATABASE) + ), config.get("host").asText(), config.get("username").asText(), config.get("password").asText()); + } + + @Override + protected String getImageName() { + return "airbyte/source-teradata:dev"; + } + + @Override + protected ConnectorSpecification getSpec() throws Exception { + return Jsons.deserialize(MoreResources.readResource("spec.json"), ConnectorSpecification.class); + } + + @Override + protected JsonNode getConfig() { + return Jsons.clone(jsonConfig); + } + + @Override + protected ConfiguredAirbyteCatalog getConfiguredCatalog() { + return createConfiguredAirbyteCatalog(); + } + + @Override + protected JsonNode getState() { + return Jsons.jsonNode(new HashMap<>()); + } + + + static ConfiguredAirbyteCatalog createConfiguredAirbyteCatalog() { + return new ConfiguredAirbyteCatalog().withStreams(List.of( + new ConfiguredAirbyteStream() + .withSyncMode(SyncMode.INCREMENTAL) + .withCursorField(List.of("updated_at")) + .withPrimaryKey(List.of(List.of("id"))) + .withDestinationSyncMode(DestinationSyncMode.APPEND) + .withStream(CatalogHelpers.createAirbyteStream( + "table_name", + "database_name", + Field.of("strength", JsonSchemaType.STRING), + Field.of("agility", JsonSchemaType.INTEGER), + Field.of("updated_at", JsonSchemaType.TIMESTAMP_WITH_TIMEZONE_V1)) + .withSupportedSyncModes(List.of(SyncMode.FULL_REFRESH, SyncMode.INCREMENTAL))))); + } + + private static void executeStatements(List consumers, String host, String username, String password) { + try ( + Connection con = DriverManager.getConnection("jdbc:teradata://" + host + "/", username, password); + Statement stmt = con.createStatement(); + ) { + for (SqlConsumer consumer : consumers) { + consumer.accept(stmt); + } + } catch (SQLException sqle) { + throw new RuntimeException(sqle); + } + + } + + @FunctionalInterface + private interface SqlConsumer { + + void accept(Statement statement) throws SQLException; + + } + +} diff --git a/airbyte-integrations/connectors/source-teradata/src/test-integration/resources/dummy_config.json b/airbyte-integrations/connectors/source-teradata/src/test-integration/resources/dummy_config.json new file mode 100644 index 000000000000..ba363e290d7f --- /dev/null +++ b/airbyte-integrations/connectors/source-teradata/src/test-integration/resources/dummy_config.json @@ -0,0 +1,5 @@ +{ + "host": "127.0.0.1", + "database": "database_name", + "username": "demo_user" +} diff --git a/airbyte-integrations/connectors/source-teradata/src/test-integration/resources/expected_spec.json b/airbyte-integrations/connectors/source-teradata/src/test-integration/resources/expected_spec.json new file mode 100644 index 000000000000..774f80d71932 --- /dev/null +++ b/airbyte-integrations/connectors/source-teradata/src/test-integration/resources/expected_spec.json @@ -0,0 +1,193 @@ +{ + "documentationUrl" : "https://docs.airbyte.com/integrations/sources/teradata", + "connectionSpecification" : { + "$schema" : "http://json-schema.org/draft-07/schema#", + "title" : "Teradata Source Spec", + "type" : "object", + "required" : [ + "host", + "database", + "username" + ], + "properties" : { + "host" : { + "title" : "Host", + "description" : "Hostname of the database.", + "type" : "string", + "order" : 0 + }, + "port" : { + "title" : "Port", + "description" : "Port of the database.", + "type" : "integer", + "minimum" : 0, + "maximum" : 65536, + "default" : 3306, + "examples" : [ + "3306" + ], + "order" : 1 + }, + "database" : { + "title" : "Database", + "description" : "Name of the database.", + "type" : "string", + "order" : 2 + }, + "username" : { + "title" : "Username", + "description" : "Username to use to access the database.", + "type" : "string", + "order" : 3 + }, + "password" : { + "title" : "Password", + "description" : "Password associated with the username.", + "type" : "string", + "airbyte_secret" : true, + "order" : 4 + }, + "jdbc_url_params" : { + "title" : "JDBC URL params", + "description" : "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3)", + "type" : "string", + "order" : 5 + }, + "replication_method" : { + "title" : "Replication method", + "description" : "Replication method to use for extracting data from the database. STANDARD replication requires no setup on the DB side but will not be able to represent deletions incrementally. CDC uses the Binlog to detect inserts, updates, and deletes. This needs to be configured on the source database itself.", + "type" : "string", + "order" : 6, + "default" : "STANDARD", + "enum" : [ + "STANDARD", + "CDC" + ] + }, + "ssl" : { + "title" : "SSL Connection", + "description" : "Encrypt data using SSL. When activating SSL, please select one of the connection modes.", + "type" : "boolean", + "default" : false, + "order" : 7 + }, + "ssl_mode" : { + "title" : "SSL Modes", + "description" : "SSL connection modes. \n disable - Chose this mode to disable encryption of communication between Airbyte and destination database\n allow - Chose this mode to enable encryption only when required by the destination database\n prefer - Chose this mode to allow unencrypted connection only if the destination database does not support encryption\n require - Chose this mode to always require encryption. If the destination database server does not support encryption, connection will fail\n verify-ca - Chose this mode to always require encryption and to verify that the destination database server has a valid SSL certificate\n verify-full - This is the most secure mode. Chose this mode to always require encryption and to verify the identity of the destination database server\n See more information - in the docs.", + "type" : "object", + "order" : 8, + "oneOf" : [ + { + "title" : "disable", + "additionalProperties" : true, + "description" : "Disable SSL.", + "required" : [ + "mode" + ], + "properties" : { + "mode" : { + "type" : "string", + "const" : "disable", + "order" : 0 + } + } + }, + { + "title" : "allow", + "additionalProperties" : true, + "description" : "Allow SSL mode.", + "required" : [ + "mode" + ], + "properties" : { + "mode" : { + "type" : "string", + "const" : "allow", + "order" : 0 + } + } + }, + { + "title" : "prefer", + "additionalProperties" : true, + "description" : "Prefer SSL mode.", + "required" : [ + "mode" + ], + "properties" : { + "mode" : { + "type" : "string", + "const" : "prefer", + "order" : 0 + } + } + }, + { + "title" : "require", + "additionalProperties" : true, + "description" : "Require SSL mode.", + "required" : [ + "mode" + ], + "properties" : { + "mode" : { + "type" : "string", + "const" : "require", + "order" : 0 + } + } + }, + { + "title" : "verify-ca", + "additionalProperties" : true, + "description" : "Verify-ca SSL mode.", + "required" : [ + "mode", + "ssl_ca_certificate" + ], + "properties" : { + "mode" : { + "type" : "string", + "const" : "verify-ca", + "order" : 0 + }, + "ssl_ca_certificate" : { + "type" : "string", + "title" : "CA certificate", + "description" : "Specifies the file name of a PEM file that contains Certificate Authority (CA) certificates for use with SSLMODE=verify-ca.\n See more information - in the docs.", + "airbyte_secret" : true, + "multiline" : true, + "order" : 1 + } + } + }, + { + "title" : "verify-full", + "additionalProperties" : true, + "description" : "Verify-full SSL mode.", + "required" : [ + "mode", + "ssl_ca_certificate" + ], + "properties" : { + "mode" : { + "type" : "string", + "const" : "verify-full", + "order" : 0 + }, + "ssl_ca_certificate" : { + "type" : "string", + "title" : "CA certificate", + "description" : "Specifies the file name of a PEM file that contains Certificate Authority (CA) certificates for use with SSLMODE=verify-full.\n See more information - in the docs.", + "airbyte_secret" : true, + "multiline" : true, + "order" : 1 + } + } + } + ] + } + } + }, + "supported_destination_sync_modes" : [] +} diff --git a/airbyte-integrations/connectors/source-teradata/src/test/java/io/airbyte/integrations/source/teradata/TeradataJdbcSourceAcceptanceTest.java b/airbyte-integrations/connectors/source-teradata/src/test/java/io/airbyte/integrations/source/teradata/TeradataJdbcSourceAcceptanceTest.java new file mode 100644 index 000000000000..8acae55328bb --- /dev/null +++ b/airbyte-integrations/connectors/source-teradata/src/test/java/io/airbyte/integrations/source/teradata/TeradataJdbcSourceAcceptanceTest.java @@ -0,0 +1,147 @@ +/* + * Copyright (c) 2023 Airbyte, Inc., all rights reserved. + */ + +package io.airbyte.integrations.source.teradata; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ObjectNode; +import io.airbyte.commons.io.IOs; +import io.airbyte.commons.json.Jsons; +import io.airbyte.integrations.source.jdbc.AbstractJdbcSource; +import io.airbyte.integrations.source.jdbc.test.JdbcSourceAcceptanceTest; +import io.airbyte.integrations.source.teradata.envclient.TeradataHttpClient; +import io.airbyte.integrations.source.teradata.envclient.dto.CreateEnvironmentRequest; +import io.airbyte.integrations.source.teradata.envclient.dto.DeleteEnvironmentRequest; +import io.airbyte.integrations.source.teradata.envclient.dto.Region; +import java.nio.file.Path; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.JDBCType; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ExecutionException; +import java.util.stream.Stream; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.TestInstance; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + + +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +class TeradataJdbcSourceAcceptanceTest extends JdbcSourceAcceptanceTest { + + private static final Logger LOGGER = LoggerFactory.getLogger(TeradataJdbcSourceAcceptanceTest.class); + + private JsonNode staticConfig; + + static { + COLUMN_CLAUSE_WITH_PK = "id INTEGER NOT NULL, name VARCHAR(200) NOT NULL, updated_at DATE NOT NULL"; + + CREATE_TABLE_WITHOUT_CURSOR_TYPE_QUERY = "CREATE TABLE %s (%s ST_Geometry) NO PRIMARY INDEX;"; + INSERT_TABLE_WITHOUT_CURSOR_TYPE_QUERY = "INSERT INTO %s VALUES('POLYGON((1 1, 1 3, 6 3, 6 0, 1 1))');"; + + COL_TIMESTAMP = "tmstmp"; + INSERT_TABLE_NAME_AND_TIMESTAMP_QUERY = "INSERT INTO %s (name, tmstmp) VALUES ('%s', '%s')"; + COL_TIMESTAMP_TYPE = "TIMESTAMP(0)"; + } + + + @BeforeAll + public void initEnvironment() throws ExecutionException, InterruptedException { + staticConfig = Jsons.deserialize(IOs.readFile(Path.of("secrets/config.json"))); + TeradataHttpClient teradataHttpClient = new TeradataHttpClient(staticConfig.get("env_host").asText()); + var request = new CreateEnvironmentRequest( + staticConfig.get("env_name").asText(), + staticConfig.get("env_region").asText(), + staticConfig.get("env_password").asText()); + var response = teradataHttpClient.createEnvironment(request, staticConfig.get("env_token").asText()).get(); + ((ObjectNode) staticConfig).put("host", response.ip()); + try { + Class.forName("com.teradata.jdbc.TeraDriver"); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } + } + + @AfterAll + public void cleanupEnvironment() throws ExecutionException, InterruptedException { + TeradataHttpClient teradataHttpClient = new TeradataHttpClient(staticConfig.get("env_host").asText()); + var request = new DeleteEnvironmentRequest(staticConfig.get("env_name").asText()); + teradataHttpClient.deleteEnvironment(request, staticConfig.get("env_token").asText()).get(); + } + + @BeforeEach + public void setup() throws Exception { + executeStatements(List.of( + statement -> statement.executeUpdate("CREATE DATABASE \"database_name\" AS PERMANENT = 120e6, SPOOL = 120e6;") + ), staticConfig.get("host").asText(), staticConfig.get("username").asText(), staticConfig.get("password").asText()); + super.setup(); + } + + @AfterEach + public void tearDown() { + executeStatements(List.of( + statement -> statement.executeUpdate("DELETE DATABASE \"database_name\";"), + statement -> statement.executeUpdate("DROP DATABASE \"database_name\";") + ), staticConfig.get("host").asText(), staticConfig.get("username").asText(), staticConfig.get("password").asText()); + } + + @Override + public AbstractJdbcSource getSource() { + return new TeradataSource(); + } + + @Override + public boolean supportsSchemas() { + // TODO check if your db supports it and update method accordingly + return false; + } + + @Override + public JsonNode getConfig() { + return Jsons.clone(staticConfig); + } + + @Override + public String getDriverClass() { + return TeradataSource.DRIVER_CLASS; + } + + @Override + public AbstractJdbcSource getJdbcSource() { + return new TeradataSource(); + } + + @Override + public String getFullyQualifiedTableName(String tableName) { + return "database_name." + tableName; + } + + private static void executeStatements(List consumers, String host, String username, String password) { + try ( + Connection con = DriverManager.getConnection("jdbc:teradata://" + host + "/", username, password); + Statement stmt = con.createStatement(); + ) { + for (SqlConsumer consumer : consumers) { + consumer.accept(stmt); + } + } catch (SQLException sqle) { + throw new RuntimeException(sqle); + } + + } + + @FunctionalInterface + private interface SqlConsumer { + + void accept(Statement statement) throws SQLException; + + } + +} diff --git a/docs/integrations/sources/teradata.md b/docs/integrations/sources/teradata.md new file mode 100644 index 000000000000..a8c83ab16789 --- /dev/null +++ b/docs/integrations/sources/teradata.md @@ -0,0 +1,66 @@ +# Teradata + +This page guides you through the process of setting up the Teradata source connector. + +## Prerequisites + +To use the Teradata source connector, you'll need: + +* Access to a Teradata Vantage instance + + **Note:** If you need a new instance of Vantage, you can install a free version called Vantage Express in the cloud on [Google Cloud](https://quickstarts.teradata.com/vantage.express.gcp.html), [Azure](https://quickstarts.teradata.com/run-vantage-express-on-microsoft-azure.html), and [AWS](https://quickstarts.teradata.com/run-vantage-express-on-aws.html). You can also run Vantage Express on your local machine using [VMware](https://quickstarts.teradata.com/getting.started.vmware.html), [VirtualBox](https://quickstarts.teradata.com/getting.started.vbox.html), or [UTM](https://quickstarts.teradata.com/getting.started.utm.html). + +You'll need the following information to configure the Teradata source: + +* **Host** - The host name of the Teradata Vantage instance. +* **Username** +* **Password** +* **Database** - Specify the database (equivalent to schema in some databases i.e. **database_name.table_name** when performing queries). +* **JDBC URL Params** (optional) +* **SSL Connection** (optional) +* **SSL Modes** (optional) + +[Refer to this guide for more details](https://downloads.teradata.com/doc/connectivity/jdbc/reference/current/jdbcug_chapter_2.html#BGBHDDGB) + +## Supported sync modes + +The Teradata source connector supports the following [sync modes](https://docs.airbyte.com/cloud/core-concepts#connection-sync-modes): + +| Feature | Supported? | +|:-----------------------------------------------|:-----------------------------------------------------------| +| Full Refresh Sync | Yes | +| Incremental Sync | Yes | +| Replicate Incremental Deletes | No | +| Replicate Multiple Streams \(distinct tables\) | Yes | +| Namespaces | No (separate connection is needed for different databases) | + +### Performance considerations + +## Getting started + +### Requirements + +You need a Teradata user which has read permissions on the database + +### Setup guide + +#### Set up the Teradata Source connector + +1. Log into your Airbyte Open Source account. +2. Click **Sources** and then click **+ New source**. +3. On the Set up the source page, select **Teradata** from the **Source type** dropdown. +4. Enter the **Name** for the Teradata connector. +5. For **Host**, enter the host domain of the Teradata instance +6. For **Database**, enter the database name (equivalent to schema in some other databases). +7. For **User** and **Password**, enter the database username and password. +8. To customize the JDBC connection beyond common options, specify additional supported [JDBC URL parameters](https://downloads.teradata.com/doc/connectivity/jdbc/reference/current/jdbcug_chapter_2.html#BGBHDDGB) as key-value pairs separated by the symbol & in the **JDBC URL Params** field. + + Example: key1=value1&key2=value2&key3=value3 + + These parameters will be added at the end of the JDBC URL that the AirByte will use to connect to your Teradata database. + +## CHANGELOG + +| Version | Date | Pull Request | Subject | +|:--------|:-----------|:------------------------------------------------|:----------------------------| +| 0.1.0 | 2022-03-27 | https://github.com/airbytehq/airbyte/pull/24221 | New Source Teradata Vantage | \ No newline at end of file From e20d844dca33cfe3d71bdd5b7fc6bb687ff6f72a Mon Sep 17 00:00:00 2001 From: Ben Church Date: Mon, 17 Apr 2023 09:05:19 -0700 Subject: [PATCH 096/187] Add metadata gcs sensor to Dagster (#25055) * Add solution skeleton * Add metadata blob resource * Wire up sensor * Fix report * Materialize metadata definitions from folder * Move metadata to own file * Run black * Add PR comments * Remove dockerhub from action --- .../actions/run-dagger-pipeline/action.yml | 5 --- .../lib/metadata_service/constants.py | 2 + .../lib/metadata_service/gcs_upload.py | 20 ++++++++- .../orchestrator/orchestrator/__init__.py | 24 ++++++---- .../orchestrator/assets/catalog_report.py | 29 ++++++------ .../orchestrator/orchestrator/assets/dev.py | 9 ++++ .../orchestrator/assets/metadata.py | 18 ++++++++ .../orchestrator/orchestrator/config.py | 1 + .../orchestrator/orchestrator/jobs/catalog.py | 1 + .../orchestrator/resources/gcp.py | 34 +++++++++++--- .../orchestrator/sensors/catalog.py | 9 ++-- .../orchestrator/sensors/metadata.py | 44 +++++++++++++++++++ .../orchestrator/utils/dagster_helpers.py | 30 ++++++++++++- .../orchestrator/tests/test_debug.py | 6 +-- 14 files changed, 188 insertions(+), 44 deletions(-) create mode 100644 airbyte-ci/connectors/metadata_service/lib/metadata_service/constants.py create mode 100644 airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/sensors/metadata.py diff --git a/.github/actions/run-dagger-pipeline/action.yml b/.github/actions/run-dagger-pipeline/action.yml index 58aed6f62d66..dca73bbb168e 100644 --- a/.github/actions/run-dagger-pipeline/action.yml +++ b/.github/actions/run-dagger-pipeline/action.yml @@ -17,11 +17,6 @@ runs: id: get-start-timestamp run: echo "::set-output name=start-timestamp::$(date +%s)" shell: bash - - name: Login to DockerHub - run: "docker login -u ${DOCKER_HUB_USERNAME} -p ${DOCKER_HUB_PASSWORD}" - env: - DOCKER_HUB_USERNAME: ${{ secrets.DOCKER_HUB_USERNAME }} - DOCKER_HUB_PASSWORD: ${{ secrets.DOCKER_HUB_PASSWORD }} - name: Checkout Airbyte uses: actions/checkout@v3 with: diff --git a/airbyte-ci/connectors/metadata_service/lib/metadata_service/constants.py b/airbyte-ci/connectors/metadata_service/lib/metadata_service/constants.py new file mode 100644 index 000000000000..db6198a64ae6 --- /dev/null +++ b/airbyte-ci/connectors/metadata_service/lib/metadata_service/constants.py @@ -0,0 +1,2 @@ +METADATA_FILE_NAME = "metadata.yaml" +METADATA_FOLDER = "metadata" diff --git a/airbyte-ci/connectors/metadata_service/lib/metadata_service/gcs_upload.py b/airbyte-ci/connectors/metadata_service/lib/metadata_service/gcs_upload.py index 909ccd28f0cb..e99e110490ff 100644 --- a/airbyte-ci/connectors/metadata_service/lib/metadata_service/gcs_upload.py +++ b/airbyte-ci/connectors/metadata_service/lib/metadata_service/gcs_upload.py @@ -8,6 +8,19 @@ from google.cloud import storage from google.oauth2 import service_account from metadata_service.models.generated.ConnectorMetadataDefinitionV1 import ConnectorMetadataDefinitionV1 +from metadata_service.constants import METADATA_FILE_NAME, METADATA_FOLDER + + +def get_metadata_file_path(dockerRepository: str, version: str) -> str: + """Get the path to the metadata file for a specific version of a connector. + + Args: + dockerRepository (str): Name of the connector docker image. + version (str): Version of the connector. + Returns: + str: Path to the metadata file. + """ + return f"{METADATA_FOLDER}/{dockerRepository}/{version}/{METADATA_FILE_NAME}" def upload_metadata_to_gcs(bucket_name: str, metadata_file_path: Path, service_account_file_path: Path) -> Tuple[bool, str]: @@ -31,8 +44,11 @@ def upload_metadata_to_gcs(bucket_name: str, metadata_file_path: Path, service_a storage_client = storage.Client(credentials=credentials) bucket = storage_client.bucket(bucket_name) - version_blob = bucket.blob(f"metadata/{metadata.data.dockerRepository}/{metadata.data.dockerImageTag}/metadata.yaml") - latest_blob = bucket.blob(f"metadata/{metadata.data.dockerRepository}/latest/metadata.yaml") + version_path = get_metadata_file_path(metadata.data.dockerRepository, metadata.data.dockerImageTag) + latest_path = get_metadata_file_path(metadata.data.dockerRepository, "latest") + + version_blob = bucket.blob(version_path) + latest_blob = bucket.blob(latest_path) if not version_blob.exists(): version_blob.upload_from_filename(str(metadata_file_path)) uploaded = True diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/__init__.py b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/__init__.py index 8f09c641a2da..5ad53a573bd0 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/__init__.py +++ b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/__init__.py @@ -1,6 +1,6 @@ from dagster import Definitions -from orchestrator.resources.gcp import gcp_gcs_client, gcs_bucket_manager, gcs_file_manager, gcs_file_blob +from orchestrator.resources.gcp import gcp_gcs_client, gcs_bucket_manager, gcs_file_manager, gcs_file_blob, gcs_directory_blobs from orchestrator.resources.github import github_client, github_connector_repo, github_connectors_directory from orchestrator.resources.local import simple_local_file_manager @@ -25,6 +25,7 @@ from orchestrator.assets.metadata import ( catalog_derived_metadata_definitions, valid_metadata_report_dataframe, + metadata_definitions, ) from orchestrator.assets.dev import ( @@ -34,12 +35,15 @@ cloud_catalog_diff, cloud_catalog_diff_dataframe, oss_catalog_diff_dataframe, + metadata_directory_report, ) -from orchestrator.jobs.catalog import generate_catalog_markdown, generate_local_metadata_files +from orchestrator.jobs.catalog import generate_catalog_markdown, generate_local_metadata_files, generate_catalog from orchestrator.sensors.catalog import catalog_updated_sensor +from orchestrator.sensors.metadata import metadata_updated_sensor from orchestrator.config import REPORT_FOLDER, CATALOG_FOLDER, CONNECTORS_PATH, CONNECTOR_REPO_NAME +from metadata_service.constants import METADATA_FILE_NAME, METADATA_FOLDER ASSETS = [ oss_destinations_dataframe, @@ -64,6 +68,8 @@ cloud_catalog_from_metadata, cloud_catalog_diff_dataframe, oss_catalog_diff_dataframe, + metadata_directory_report, + metadata_definitions, ] RESOURCES = { @@ -77,14 +83,16 @@ } ), "gcs_bucket_manager": gcs_bucket_manager.configured({"gcs_bucket": {"env": "METADATA_BUCKET"}}), - "catalog_report_directory_manager": gcs_file_manager.configured( - {"gcs_bucket": {"env": "METADATA_BUCKET"}, "gcs_prefix": REPORT_FOLDER} - ), - "latest_oss_catalog_gcs_file": gcs_file_blob.configured({"gcs_prefix": CATALOG_FOLDER, "gcs_filename": "oss_catalog.json"}), - "latest_cloud_catalog_gcs_file": gcs_file_blob.configured({"gcs_prefix": CATALOG_FOLDER, "gcs_filename": "cloud_catalog.json"}), + "catalog_report_directory_manager": gcs_file_manager.configured({"gcs_bucket": {"env": "METADATA_BUCKET"}, "prefix": REPORT_FOLDER}), + "metadata_file_blobs": gcs_directory_blobs.configured({"prefix": METADATA_FOLDER, "suffix": METADATA_FILE_NAME}), + "latest_oss_catalog_gcs_file": gcs_file_blob.configured({"prefix": CATALOG_FOLDER, "gcs_filename": "oss_catalog.json"}), + "latest_cloud_catalog_gcs_file": gcs_file_blob.configured({"prefix": CATALOG_FOLDER, "gcs_filename": "cloud_catalog.json"}), } -SENSORS = [catalog_updated_sensor(job=generate_catalog_markdown, resources_def=RESOURCES)] +SENSORS = [ + catalog_updated_sensor(job=generate_catalog_markdown, resources_def=RESOURCES), + metadata_updated_sensor(job=generate_catalog, resources_def=RESOURCES), +] SCHEDULES = [] diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/catalog_report.py b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/catalog_report.py index 4621734e4e54..2d5357679e62 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/catalog_report.py +++ b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/catalog_report.py @@ -132,18 +132,18 @@ def connector_catalog_location_markdown(context, all_destinations_dataframe, all @asset(group_name=GROUP_NAME) -def all_destinations_dataframe( - cloud_destinations_dataframe, oss_destinations_dataframe, github_connector_folders, valid_metadata_report_dataframe, cached_specs +def all_sources_dataframe( + cloud_sources_dataframe, oss_sources_dataframe, github_connector_folders, valid_metadata_report_dataframe, cached_specs ) -> pd.DataFrame: """ - Merge the cloud and oss destinations catalogs into a single dataframe. + Merge the cloud and oss sources catalogs into a single dataframe. """ return augment_and_normalize_connector_dataframes( - cloud_df=cloud_destinations_dataframe, - oss_df=oss_destinations_dataframe, - primaryKey="destinationDefinitionId", - connector_type="destination", + cloud_df=cloud_sources_dataframe, + oss_df=oss_sources_dataframe, + primaryKey="sourceDefinitionId", + connector_type="source", valid_metadata_report_dataframe=valid_metadata_report_dataframe, github_connector_folders=github_connector_folders, cached_specs=cached_specs, @@ -151,17 +151,18 @@ def all_destinations_dataframe( @asset(group_name=GROUP_NAME) -def all_sources_dataframe( - cloud_sources_dataframe, oss_sources_dataframe, github_connector_folders, valid_metadata_report_dataframe, cached_specs +def all_destinations_dataframe( + cloud_destinations_dataframe, oss_destinations_dataframe, github_connector_folders, valid_metadata_report_dataframe, cached_specs ) -> pd.DataFrame: """ - Merge the cloud and oss source catalogs into a single dataframe. + Merge the cloud and oss destinations catalogs into a single dataframe. """ + return augment_and_normalize_connector_dataframes( - cloud_df=cloud_sources_dataframe, - oss_df=oss_sources_dataframe, - primaryKey="sourceDefinitionId", - connector_type="source", + cloud_df=cloud_destinations_dataframe, + oss_df=oss_destinations_dataframe, + primaryKey="destinationDefinitionId", + connector_type="destination", valid_metadata_report_dataframe=valid_metadata_report_dataframe, github_connector_folders=github_connector_folders, cached_specs=cached_specs, diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/dev.py b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/dev.py index 69c314a420e8..7a0e7387db7b 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/dev.py +++ b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/dev.py @@ -253,3 +253,12 @@ def cloud_catalog_diff_dataframe(cloud_catalog_diff: dict) -> OutputDataFrame: def oss_catalog_diff_dataframe(oss_catalog_diff: dict) -> OutputDataFrame: diff_df = pd.DataFrame.from_dict(oss_catalog_diff) return output_dataframe(diff_df) + + +@asset(required_resource_keys={"metadata_file_blobs"}, group_name=GROUP_NAME) +def metadata_directory_report(context): + metadata_file_blobs = context.resources.metadata_file_blobs + blobs = [blob.name for blob in metadata_file_blobs if blob.name.endswith("metadata.yaml")] + blobs_df = pd.DataFrame(blobs) + + return output_dataframe(blobs_df) diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/metadata.py b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/metadata.py index 788610b122bc..7715c18308fd 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/metadata.py +++ b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/metadata.py @@ -2,8 +2,10 @@ import numpy as np from typing import List from dagster import Output, asset +import yaml from metadata_service.models.generated.ConnectorMetadataDefinitionV1 import ConnectorMetadataDefinitionV1 + from orchestrator.utils.object_helpers import are_values_equal, merge_values from orchestrator.utils.dagster_helpers import OutputDataFrame, output_dataframe from orchestrator.models.metadata import PartialMetadataDefinition @@ -206,3 +208,19 @@ def catalog_derived_metadata_definitions( ) all_definitions = sources_metadata_list + destinations_metadata_list return Output(all_definitions, metadata={"count": len(all_definitions)}) + + +@asset(required_resource_keys={"metadata_file_blobs"}, group_name=GROUP_NAME) +def metadata_definitions(context): + metadata_file_blobs = context.resources.metadata_file_blobs + + metadata_definitions = [] + for blob in metadata_file_blobs: + yaml_string = blob.download_as_string().decode("utf-8") + metadata_dict = yaml.safe_load(yaml_string) + metadata_def = ConnectorMetadataDefinitionV1.parse_obj(metadata_dict) + metadata_definitions.append(metadata_def) + + metadata_definitions_df = pd.DataFrame(metadata_definitions) + + return output_dataframe(metadata_definitions_df) diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/config.py b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/config.py index 6a6ed666cefd..36e3722a47f8 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/config.py +++ b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/config.py @@ -1,4 +1,5 @@ CATALOG_FOLDER = "catalogs" REPORT_FOLDER = "generated_reports" + CONNECTOR_REPO_NAME = "airbytehq/airbyte" CONNECTORS_PATH = "airbyte-integrations/connectors" diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/jobs/catalog.py b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/jobs/catalog.py index 0fec33085f55..8148d48c8bda 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/jobs/catalog.py +++ b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/jobs/catalog.py @@ -1,6 +1,7 @@ from dagster import define_asset_job +generate_catalog = define_asset_job(name="generate_catalog", selection=["metadata_directory_report", "metadata_definitions"]) generate_catalog_markdown = define_asset_job( name="generate_catalog_markdown", selection=["connector_catalog_location_html", "connector_catalog_location_markdown"] ) diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/resources/gcp.py b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/resources/gcp.py index b8e3fb34bc52..3cc0bb62e531 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/resources/gcp.py +++ b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/resources/gcp.py @@ -39,7 +39,7 @@ def gcs_bucket_manager(resource_context: InitResourceContext) -> storage.Bucket: required_resource_keys={"gcp_gcs_client"}, config_schema={ "gcs_bucket": StringSource, - "gcs_prefix": StringSource, + "prefix": StringSource, }, ) def gcs_file_manager(resource_context) -> GCSFileManager: @@ -53,14 +53,14 @@ def gcs_file_manager(resource_context) -> GCSFileManager: return GCSFileManager( client=storage_client, gcs_bucket=resource_context.resource_config["gcs_bucket"], - gcs_base_key=resource_context.resource_config["gcs_prefix"], + gcs_base_key=resource_context.resource_config["prefix"], ) @resource( required_resource_keys={"gcs_bucket_manager"}, config_schema={ - "gcs_prefix": StringSource, + "prefix": StringSource, "gcs_filename": StringSource, }, ) @@ -73,9 +73,9 @@ def gcs_file_blob(resource_context: InitResourceContext) -> storage.Blob: """ bucket = resource_context.resources.gcs_bucket_manager - gcs_prefix = resource_context.resource_config["gcs_prefix"] + prefix = resource_context.resource_config["prefix"] gcs_filename = resource_context.resource_config["gcs_filename"] - gcs_file_path = f"{gcs_prefix}/{gcs_filename}" + gcs_file_path = f"{prefix}/{gcs_filename}" resource_context.log.info(f"retrieving gcs file blob for {gcs_file_path}") @@ -84,3 +84,27 @@ def gcs_file_blob(resource_context: InitResourceContext) -> storage.Blob: raise Exception(f"File does not exist at path: {gcs_file_path}") return gcs_file_blob + + +@resource( + required_resource_keys={"gcs_bucket_manager"}, + config_schema={ + "prefix": StringSource, + "suffix": StringSource, + }, +) +def gcs_directory_blobs(resource_context: InitResourceContext) -> storage.Blob: + """ + List all blobs in a bucket that match the prefix. + """ + bucket = resource_context.resources.gcs_bucket_manager + prefix = resource_context.resource_config["prefix"] + suffix = resource_context.resource_config["suffix"] + + resource_context.log.info(f"retrieving gcs file blobs for prefix: {prefix}, suffix: {suffix}") + + gcs_file_blobs = bucket.list_blobs(prefix=prefix) + if suffix: + gcs_file_blobs = [blob for blob in gcs_file_blobs if blob.name.endswith(suffix)] + + return gcs_file_blobs diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/sensors/catalog.py b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/sensors/catalog.py index bb2e40307110..e968bb0e7b20 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/sensors/catalog.py +++ b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/sensors/catalog.py @@ -1,9 +1,6 @@ -from typing import List from dagster import sensor, RunRequest, SkipReason, SensorDefinition, SensorEvaluationContext, build_resources, DefaultSensorStatus - -def generate_composite_etag_cursor(etags: List[str]): - return ":".join(etags) +from orchestrator.utils.dagster_helpers import serialize_composite_etags_cursor def catalog_updated_sensor(job, resources_def) -> SensorDefinition: @@ -27,7 +24,7 @@ def catalog_updated_sensor_definition(context: SensorEvaluationContext): etag_cursor = context.cursor or None context.log.info(f"Old etag cursor: {etag_cursor}") - new_etag_cursor = generate_composite_etag_cursor( + new_etag_cursor = serialize_composite_etags_cursor( [resources.latest_oss_catalog_gcs_file.etag, resources.latest_cloud_catalog_gcs_file.etag] ) context.log.info(f"New etag cursor: {new_etag_cursor}") @@ -38,7 +35,7 @@ def catalog_updated_sensor_definition(context: SensorEvaluationContext): context.log.info("No new catalogs in GCS bucket") return SkipReason("No new catalogs in GCS bucket") - context.update_cursor(new_etag_cursor) # Question: what happens if the run fails? is the cursor still updated? + context.update_cursor(new_etag_cursor) context.log.info("New catalogs in GCS bucket") return RunRequest(run_key="updated_catalogs") diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/sensors/metadata.py b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/sensors/metadata.py new file mode 100644 index 000000000000..52c5e2044dcf --- /dev/null +++ b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/sensors/metadata.py @@ -0,0 +1,44 @@ +from dagster import sensor, RunRequest, SkipReason, SensorDefinition, SensorEvaluationContext, build_resources, DefaultSensorStatus +from orchestrator.utils.dagster_helpers import deserialize_composite_etags_cursor, serialize_composite_etags_cursor + + +def metadata_updated_sensor(job, resources_def) -> SensorDefinition: + """ + This sensor is responsible for polling the metadata folder in GCS for new or updated metadata files. + If it notices that the etags have changed, it will trigger the given job. + """ + + @sensor( + name=f"{job.name}_on_metadata_updated", + job=job, + minimum_interval_seconds=30, + default_status=DefaultSensorStatus.STOPPED, + ) + def metadata_updated_sensor_definition(context: SensorEvaluationContext): + context.log.info("Starting gcs_metadata_updated_sensor") + + with build_resources(resources_def) as resources: + context.log.info("Got resources for gcs_metadata_updated_sensor") + + etags_cursor_raw = context.cursor or None + etags_cursor = deserialize_composite_etags_cursor(etags_cursor_raw) + etags_cursor_set = set(etags_cursor) + + context.log.info(f"Old etag cursor: {etags_cursor}") + + metadata_file_blobs = resources.metadata_file_blobs + new_etags_cursor_set = {blob.etag for blob in metadata_file_blobs} + context.log.info(f"New etag cursor: {new_etags_cursor_set}") + + # Note: ETAGs are GCS's way of providing a version number for a file + # Another option would be to use the last modified date or MD5 hash + if etags_cursor_set == new_etags_cursor_set: + context.log.info("No new updated_metadata_files in GCS bucket") + return SkipReason("No new updated_metadata_files in GCS bucket") + + serialized_new_etags_cursor = serialize_composite_etags_cursor(list(new_etags_cursor_set)) + context.update_cursor(serialized_new_etags_cursor) + context.log.info("New updated_metadata_files in GCS bucket") + return RunRequest(run_key="updated_metadata_files") + + return metadata_updated_sensor_definition diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/utils/dagster_helpers.py b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/utils/dagster_helpers.py index b17c0fef16d8..6870bd31388b 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/utils/dagster_helpers.py +++ b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/utils/dagster_helpers.py @@ -1,8 +1,9 @@ from dagster import MetadataValue, Output import pandas as pd -from typing import NewType +from typing import Optional, List OutputDataFrame = Output[pd.DataFrame] +CURSOR_SEPARATOR = ":" def output_dataframe(result_df: pd.DataFrame) -> Output[pd.DataFrame]: @@ -10,3 +11,30 @@ def output_dataframe(result_df: pd.DataFrame) -> Output[pd.DataFrame]: Returns a Dagster Output object with a dataframe as the result and a markdown preview. """ return Output(result_df, metadata={"count": len(result_df), "preview": MetadataValue.md(result_df.to_markdown())}) + + +def deserialize_composite_etags_cursor(etag_cursors: Optional[str]) -> List[str]: + """Deserialize a cursor string into a list of etags. + + Args: + etag_cursors (Optional[str]): A cursor string + + Returns: + List[str]: A list of etags + """ + return etag_cursors.split(CURSOR_SEPARATOR) if etag_cursors else [] + + +def serialize_composite_etags_cursor(etags: List[str]) -> str: + """Serialize a list of etags into a cursor string. + + Dagster cursors are strings, so we need to serialize the list of etags into a string. + https://docs.dagster.io/concepts/partitions-schedules-sensors/sensors#idempotence-and-cursors + + Args: + etags (List[str]): unique etag ids from GCS + + Returns: + str: A cursor string + """ + return CURSOR_SEPARATOR.join(etags) diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/tests/test_debug.py b/airbyte-ci/connectors/metadata_service/orchestrator/tests/test_debug.py index d02e61252f03..9a25e7455e18 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/tests/test_debug.py +++ b/airbyte-ci/connectors/metadata_service/orchestrator/tests/test_debug.py @@ -39,10 +39,10 @@ def debug_catalog_projection(): ), "gcs_bucket_manager": gcs_bucket_manager.configured({"gcs_bucket": {"env": "METADATA_BUCKET"}}), "catalog_report_directory_manager": gcs_file_manager.configured( - {"gcs_bucket": {"env": "METADATA_BUCKET"}, "gcs_prefix": REPORT_FOLDER} + {"gcs_bucket": {"env": "METADATA_BUCKET"}, "prefix": REPORT_FOLDER} ), - "latest_oss_catalog_gcs_file": gcs_file_blob.configured({"gcs_prefix": CATALOG_FOLDER, "gcs_filename": "oss_catalog.json"}), - "latest_cloud_catalog_gcs_file": gcs_file_blob.configured({"gcs_prefix": CATALOG_FOLDER, "gcs_filename": "cloud_catalog.json"}), + "latest_oss_catalog_gcs_file": gcs_file_blob.configured({"prefix": CATALOG_FOLDER, "gcs_filename": "oss_catalog.json"}), + "latest_cloud_catalog_gcs_file": gcs_file_blob.configured({"prefix": CATALOG_FOLDER, "gcs_filename": "cloud_catalog.json"}), } context = build_op_context(resources=resources) From 85da76c0fba945251b3cd0141b00553451934daf Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Mon, 17 Apr 2023 22:07:00 +0530 Subject: [PATCH 097/187] =?UTF-8?q?=F0=9F=8E=89Source=20Stripe:=20New=20St?= =?UTF-8?q?ream=20-=20Subscription=20Schedule=20(#23624)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * bump connector version * Source stripe: New Stream Subscription Schedule * fix: schema fixes, updated docs, updated versionTag * fix: test * Update stripe.md * fix: Add empty stream * schema fix, version bump, source update * unwanted line fix * Resolve comments * fix schemas * add expected records and update schema * 🎉Source Twilio: New Stream Conversation Messages (#22875) * bump connector version * Source Twilio: New Stream Conversation Messages * fix: Adding correction to syntax * fix: schema errors, incremental stream fix * fix: schema, updated docs, dockerVersion, removed unwanted files * Update twilio.md * fix schema, add expected records and update stream * remove extar empty line * format files * fix schema for conversation messages * fix conversation participants schema * remove conversation participants from incr ctg * remove unused logging * update schema * Update source_definitions.yaml * Update jira.md * Update expected_records.jsonl * Update twilio.md * Update twilio.md * Update twilio.md * auto-bump connector version --------- Co-authored-by: marcosmarxm Co-authored-by: Marcos Marx Co-authored-by: Octavia Squidington III * remove json schema from integration test * add schema json * Update jira.md * Update stripe.md * Update source_definitions.yaml * auto-bump connector version --------- Co-authored-by: marcosmarxm Co-authored-by: Marcos Marx Co-authored-by: Octavia Squidington III --- .../src/main/resources/seed/oss_catalog.json | 2 +- .../resources/seed/source_definitions.yaml | 2 +- .../src/main/resources/seed/source_specs.yaml | 2 +- .../connectors/source-stripe/Dockerfile | 2 +- .../integration_tests/abnormal_state.json | 7 + .../integration_tests/configured_catalog.json | 14 + .../connected_account_configured_catalog.json | 14 + .../integration_tests/expected_records.jsonl | 1 + .../sample_files/configured_catalog.json | 13 + .../source-stripe/sample_files/state.json | 1 + .../schemas/subscription_schedule.json | 254 ++++++++++++++++++ .../source-stripe/source_stripe/source.py | 2 + .../source-stripe/source_stripe/streams.py | 12 + .../source-stripe/unit_tests/test_source.py | 2 +- .../source-stripe/unit_tests/test_streams.py | 2 + connectors.md | 2 +- docs/integrations/sources/stripe.md | 4 +- 17 files changed, 329 insertions(+), 7 deletions(-) create mode 100644 airbyte-integrations/connectors/source-stripe/source_stripe/schemas/subscription_schedule.json diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json index e886e79407ea..9e4803726962 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json @@ -24442,7 +24442,7 @@ "sourceDefinitionId": "e094cb9a-26de-4645-8761-65c0c425d1de", "name": "Stripe", "dockerRepository": "airbyte/source-stripe", - "dockerImageTag": "3.1.0", + "dockerImageTag": "3.2.0", "documentationUrl": "https://docs.airbyte.com/integrations/sources/stripe", "icon": "stripe.svg", "sourceType": "api", diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml index 844cdde8aa7c..c141a300a89b 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml @@ -2007,7 +2007,7 @@ - name: Stripe sourceDefinitionId: e094cb9a-26de-4645-8761-65c0c425d1de dockerRepository: airbyte/source-stripe - dockerImageTag: 3.1.0 + dockerImageTag: 3.2.0 documentationUrl: https://docs.airbyte.com/integrations/sources/stripe icon: stripe.svg sourceType: api diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml index 0424a3217e76..322e51fc6eeb 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml @@ -15075,7 +15075,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-stripe:3.1.0" +- dockerImage: "airbyte/source-stripe:3.2.0" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/stripe" connectionSpecification: diff --git a/airbyte-integrations/connectors/source-stripe/Dockerfile b/airbyte-integrations/connectors/source-stripe/Dockerfile index e40ccfaa4ac4..8c924afbf3db 100644 --- a/airbyte-integrations/connectors/source-stripe/Dockerfile +++ b/airbyte-integrations/connectors/source-stripe/Dockerfile @@ -13,5 +13,5 @@ ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=3.1.0 +LABEL io.airbyte.version=3.2.0 LABEL io.airbyte.name=airbyte/source-stripe diff --git a/airbyte-integrations/connectors/source-stripe/integration_tests/abnormal_state.json b/airbyte-integrations/connectors/source-stripe/integration_tests/abnormal_state.json index ddcbbd1019c6..85d9eb516fe2 100644 --- a/airbyte-integrations/connectors/source-stripe/integration_tests/abnormal_state.json +++ b/airbyte-integrations/connectors/source-stripe/integration_tests/abnormal_state.json @@ -62,6 +62,13 @@ "stream_descriptor": { "name": "subscriptions" } } }, + { + "type": "STREAM", + "stream": { + "stream_state": { "created": 10000000000 }, + "stream_descriptor": { "name": "subscription_schedule" } + } + }, { "type": "STREAM", "stream": { diff --git a/airbyte-integrations/connectors/source-stripe/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-stripe/integration_tests/configured_catalog.json index 1a5bb1842f92..1c16a853a4ae 100644 --- a/airbyte-integrations/connectors/source-stripe/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-stripe/integration_tests/configured_catalog.json @@ -293,6 +293,20 @@ "cursor_field": ["created"], "primary_key": [["id"]] }, + { + "stream": { + "name": "subscription_schedule", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": ["created"], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "incremental", + "destination_sync_mode": "overwrite", + "cursor_field": ["created"], + "primary_key": [["id"]] + }, { "stream": { "name": "transfers", diff --git a/airbyte-integrations/connectors/source-stripe/integration_tests/connected_account_configured_catalog.json b/airbyte-integrations/connectors/source-stripe/integration_tests/connected_account_configured_catalog.json index 9305587c765f..0d3366b5b60b 100644 --- a/airbyte-integrations/connectors/source-stripe/integration_tests/connected_account_configured_catalog.json +++ b/airbyte-integrations/connectors/source-stripe/integration_tests/connected_account_configured_catalog.json @@ -41,6 +41,20 @@ "destination_sync_mode": "append", "cursor_field": ["created"], "primary_key": [["id"]] + }, + { + "stream": { + "name": "subscription_schedule", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": ["created"], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "incremental", + "destination_sync_mode": "overwrite", + "cursor_field": ["created"], + "primary_key": [["id"]] } ] } diff --git a/airbyte-integrations/connectors/source-stripe/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-stripe/integration_tests/expected_records.jsonl index f358530e560f..f38ea0bd7b4e 100644 --- a/airbyte-integrations/connectors/source-stripe/integration_tests/expected_records.jsonl +++ b/airbyte-integrations/connectors/source-stripe/integration_tests/expected_records.jsonl @@ -52,3 +52,4 @@ {"stream": "refunds", "data": {"id": "re_3MVuZyEcXtiJtvvh0A6rSbeJ", "object": "refund", "amount": 200000, "balance_transaction": "txn_3MVuZyEcXtiJtvvh0v0QyAMx", "charge": "ch_3MVuZyEcXtiJtvvh0tiVC7DI", "created": 1675074488, "currency": "usd", "metadata": {}, "payment_intent": "pi_3MVuZyEcXtiJtvvh07Ehi4cx", "reason": "fraudulent", "receipt_number": null, "source_transfer_reversal": null, "status": "succeeded", "transfer_reversal": null}, "emitted_at": 1677521348001} {"stream": "subscription_items", "data": {"id": "si_NCgxk9rCSy1tBn", "object": "subscription_item", "billing_thresholds": null, "created": 1674209530, "metadata": {}, "plan": {"id": "price_1MSHZoEcXtiJtvvh6O8TYD8T", "object": "plan", "active": true, "aggregate_usage": null, "amount": 600, "amount_decimal": "600", "billing_scheme": "per_unit", "created": 1674209524, "currency": "usd", "interval": "month", "interval_count": 1, "livemode": false, "metadata": {}, "nickname": null, "product": "prod_NCgx1XP2IFQyKF", "tiers_mode": null, "transform_usage": null, "trial_period_days": null, "usage_type": "licensed"}, "price": {"id": "price_1MSHZoEcXtiJtvvh6O8TYD8T", "object": "price", "active": true, "billing_scheme": "per_unit", "created": 1674209524, "currency": "usd", "custom_unit_amount": null, "livemode": false, "lookup_key": null, "metadata": {}, "nickname": null, "product": "prod_NCgx1XP2IFQyKF", "recurring": {"aggregate_usage": null, "interval": "month", "interval_count": 1, "trial_period_days": null, "usage_type": "licensed"}, "tax_behavior": "exclusive", "tiers_mode": null, "transform_quantity": null, "type": "recurring", "unit_amount": 600, "unit_amount_decimal": "600"}, "quantity": 1, "subscription": "sub_1MSHZuEcXtiJtvvhlENV0Lhh", "tax_rates": []}, "emitted_at": 1677521351196} {"stream": "subscriptions", "data": {"id": "sub_1MSHZuEcXtiJtvvhlENV0Lhh", "object": "subscription", "application": null, "application_fee_percent": null, "automatic_tax": {"enabled": false}, "billing_cycle_anchor": 1674209529, "billing_thresholds": null, "cancel_at": null, "cancel_at_period_end": false, "canceled_at": null, "cancellation_details": {"comment": null, "feedback": null, "reason": null}, "collection_method": "charge_automatically", "created": 1674209529, "currency": "usd", "current_period_end": 1681985529, "current_period_start": 1679307129, "customer": "cus_LIiHR6omh14Xdg", "days_until_due": null, "default_payment_method": null, "default_source": null, "default_tax_rates": [], "description": null, "discount": {"id": "di_1MSHZuEcXtiJtvvh3FMkcwwb", "object": "discount", "checkout_session": null, "coupon": {"id": "iJ6qlwM5", "object": "coupon", "amount_off": null, "created": 1674208993, "currency": null, "duration": "forever", "duration_in_months": null, "livemode": false, "max_redemptions": null, "metadata": {}, "name": "\u0415\u0443\u0456\u0435", "percent_off": 10.0, "redeem_by": null, "times_redeemed": 3, "valid": true}, "customer": "cus_LIiHR6omh14Xdg", "end": null, "invoice": null, "invoice_item": null, "promotion_code": null, "start": 1674209529, "subscription": "sub_1MSHZuEcXtiJtvvhlENV0Lhh"}, "ended_at": null, "items": {"object": "list", "data": [{"id": "si_NCgxk9rCSy1tBn", "object": "subscription_item", "billing_thresholds": null, "created": 1674209530, "metadata": {}, "plan": {"id": "price_1MSHZoEcXtiJtvvh6O8TYD8T", "object": "plan", "active": true, "aggregate_usage": null, "amount": 600, "amount_decimal": "600", "billing_scheme": "per_unit", "created": 1674209524, "currency": "usd", "interval": "month", "interval_count": 1, "livemode": false, "metadata": {}, "nickname": null, "product": "prod_NCgx1XP2IFQyKF", "tiers_mode": null, "transform_usage": null, "trial_period_days": null, "usage_type": "licensed"}, "price": {"id": "price_1MSHZoEcXtiJtvvh6O8TYD8T", "object": "price", "active": true, "billing_scheme": "per_unit", "created": 1674209524, "currency": "usd", "custom_unit_amount": null, "livemode": false, "lookup_key": null, "metadata": {}, "nickname": null, "product": "prod_NCgx1XP2IFQyKF", "recurring": {"aggregate_usage": null, "interval": "month", "interval_count": 1, "trial_period_days": null, "usage_type": "licensed"}, "tax_behavior": "exclusive", "tiers_mode": null, "transform_quantity": null, "type": "recurring", "unit_amount": 600, "unit_amount_decimal": "600"}, "quantity": 1, "subscription": "sub_1MSHZuEcXtiJtvvhlENV0Lhh", "tax_rates": []}], "has_more": false, "total_count": 1, "url": "/v1/subscription_items?subscription=sub_1MSHZuEcXtiJtvvhlENV0Lhh"}, "latest_invoice": "in_1MnfheEcXtiJtvvh9vdKiRvx", "livemode": false, "metadata": {}, "next_pending_invoice_item_invoice": null, "on_behalf_of": null, "pause_collection": null, "payment_settings": {"payment_method_options": null, "payment_method_types": null, "save_default_payment_method": "off"}, "pending_invoice_item_interval": null, "pending_setup_intent": null, "pending_update": null, "plan": {"id": "price_1MSHZoEcXtiJtvvh6O8TYD8T", "object": "plan", "active": true, "aggregate_usage": null, "amount": 600, "amount_decimal": "600", "billing_scheme": "per_unit", "created": 1674209524, "currency": "usd", "interval": "month", "interval_count": 1, "livemode": false, "metadata": {}, "nickname": null, "product": "prod_NCgx1XP2IFQyKF", "tiers_mode": null, "transform_usage": null, "trial_period_days": null, "usage_type": "licensed"}, "quantity": 1, "schedule": null, "start_date": 1674209529, "status": "active", "test_clock": null, "transfer_data": null, "trial_end": null, "trial_settings": {"end_behavior": {"missing_payment_method": "create_invoice"}}, "trial_start": null}, "emitted_at": 1679394516304} +{"stream": "subscription_schedule", "data": {"id": "sub_sched_1MvgI8EcXtiJtvvh7sfEXZHU", "object": "subscription_schedule", "application": null, "canceled_at": null, "completed_at": null, "created": 1681216040, "current_phase": null, "customer": "cus_Kou8knsO3qQOwU", "default_settings": {"application_fee_percent": null, "automatic_tax": {"enabled": false}, "billing_cycle_anchor": "automatic", "billing_thresholds": null, "collection_method": "charge_automatically", "default_payment_method": null, "default_source": null, "description": null, "invoice_settings": null, "on_behalf_of": null, "transfer_data": null}, "end_behavior": "release", "livemode": false, "metadata": {}, "phases": [{"add_invoice_items": [], "application_fee_percent": null, "billing_cycle_anchor": null, "billing_thresholds": null, "collection_method": null, "coupon": null, "currency": "usd", "default_payment_method": null, "default_tax_rates": [], "description": null, "end_date": 1713440895, "invoice_settings": null, "items": [{"billing_thresholds": null, "metadata": {}, "plan": "price_1MSHZoEcXtiJtvvh6O8TYD8T", "price": "price_1MSHZoEcXtiJtvvh6O8TYD8T", "quantity": 1, "tax_rates": []}], "metadata": {}, "on_behalf_of": null, "proration_behavior": "create_prorations", "start_date": 1681818495, "transfer_data": null, "trial_end": null}], "released_at": null, "released_subscription": null, "renewal_interval": null, "status": "not_started", "subscription": null, "test_clock": null}, "emitted_at": 1681227521921} diff --git a/airbyte-integrations/connectors/source-stripe/sample_files/configured_catalog.json b/airbyte-integrations/connectors/source-stripe/sample_files/configured_catalog.json index 9baf946f2719..a8fe9d284f60 100644 --- a/airbyte-integrations/connectors/source-stripe/sample_files/configured_catalog.json +++ b/airbyte-integrations/connectors/source-stripe/sample_files/configured_catalog.json @@ -3834,6 +3834,19 @@ "sync_mode": "full_refresh", "destination_sync_mode": "overwrite" }, + { + "stream": { + "name": "subscription_schedule", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": ["created"], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "incremental", + "destination_sync_mode": "overwrite", + "cursor_field": ["created"] + }, { "stream": { "name": "refunds", diff --git a/airbyte-integrations/connectors/source-stripe/sample_files/state.json b/airbyte-integrations/connectors/source-stripe/sample_files/state.json index e8faff8311da..a863efe6e7d3 100644 --- a/airbyte-integrations/connectors/source-stripe/sample_files/state.json +++ b/airbyte-integrations/connectors/source-stripe/sample_files/state.json @@ -7,6 +7,7 @@ "invoice_items": { "date": 1594946981 }, "transfers": { "created": 1610995824 }, "subscriptions": { "created": 1599686873 }, + "subscription_schedule": { "created": 1678454575 }, "balance_transactions": { "created": 1617067556 }, "payouts": { "created": 1617067556 }, "disputes": { "created": 1610996305 }, diff --git a/airbyte-integrations/connectors/source-stripe/source_stripe/schemas/subscription_schedule.json b/airbyte-integrations/connectors/source-stripe/source_stripe/schemas/subscription_schedule.json new file mode 100644 index 000000000000..6a437bff024f --- /dev/null +++ b/airbyte-integrations/connectors/source-stripe/source_stripe/schemas/subscription_schedule.json @@ -0,0 +1,254 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "id": { + "type": ["null", "string"] + }, + "object": { + "type": ["null", "string"] + }, + "application": { + "type": ["null", "string"] + }, + "canceled_at": { + "type": ["null", "string"] + }, + "completed_at": { + "type": ["null", "string"] + }, + "created": { + "type": ["null", "integer"] + }, + "current_phase": { + "type": ["null", "string"] + }, + "customer": { + "type": ["null", "string"] + }, + "default_settings": { + "type": ["null", "object"], + "properties": { + "application_fee_percent": { + "type": ["null", "string"] + }, + "automatic_tax": { + "type": ["null", "object"], + "properties": { + "enabled": { + "type": ["null", "boolean"] + } + } + }, + "billing_cycle_anchor": { + "type": ["null", "string"] + }, + "billing_thresholds": { + "type": ["null", "string"] + }, + "collection_method": { + "type": ["null", "string"] + }, + "default_payment_method": { + "type": ["null", "string"] + }, + "description": { + "type": ["null", "string"] + }, + "invoice_settings": { + "type": ["null", "string"] + }, + "on_behalf_of": { + "type": ["null", "string"] + }, + "transfer_data": { + "type": ["null", "string"] + } + } + }, + "end_behavior": { + "type": ["null", "string"] + }, + "livemode": { + "type": ["null", "boolean"] + }, + "metadata": { + "type": ["null", "object"] + }, + "phases": { + "type": ["null", "array"], + "items": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "add_invoice_items": { + "type": ["null", "array"], + "items": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "price": { + "type": ["null", "string"] + }, + "quantity": { + "type": ["null", "string"] + }, + "tax_rates": { + "type": ["null", "array"], + "items": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "id": { + "type": ["null", "string"] + }, + "object": { + "type": ["null", "string"] + }, + "active": { + "type": ["null", "boolean"] + }, + "country": { + "type": ["null", "string"] + }, + "created": { + "type": ["null", "string"], + "format": "datetime" + }, + "display_name": { + "type": ["null", "string"] + }, + "inclusive": { + "type": ["null", "boolean"] + }, + "jurisdiction": { + "type": ["null", "string"] + }, + "livemode": { + "type": ["null", "boolean"] + }, + "metadata": { + "type": ["null", "object"], + "additionalProperties": true + }, + "percentage": { + "type": ["null", "number"] + }, + "state": { + "type": ["null", "string"] + }, + "tax_type": { + "type": ["null", "string"] + } + } + } + } + } + } + }, + "application_fee_percent": { + "type": ["null", "string"] + }, + "billing_cycle_anchor": { + "type": ["null", "string"] + }, + "billing_thresholds": { + "type": ["null", "string"] + }, + "collection_method": { + "type": ["null", "string"] + }, + "coupon": { + "type": ["null", "string"] + }, + "currency": { + "type": ["null", "string"] + }, + "default_payment_method": { + "type": ["null", "string"] + }, + "default_tax_rates": { + "type": ["null", "array"], + "items": { + "type": ["null", "object"], + "additionalProperties": true + } + }, + "description": { + "type": ["null", "string"] + }, + "end_date": { + "type": ["null", "integer"] + }, + "invoice_settings": { + "type": ["null", "string"] + }, + "items": { + "type": ["null", "array"], + "items": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "billing_thresholds": { + "type": ["null", "string"] + }, + "metadata": { + "type": ["null", "object"], + "additionalProperties": true + }, + "price": { + "type": ["null", "string"] + }, + "quantity": { + "type": ["null", "integer"] + }, + "tax_rates": { + "type": ["null", "array"], + "items": { + "type": ["null", "object"], + "additionalProperties": true + } + } + } + } + }, + "metadata": { + "type": ["null", "object"], + "additionalProperties": true + }, + "on_behalf_of": { + "type": ["null", "string"] + }, + "proration_behavior": { + "type": ["null", "string"] + }, + "start_date": { + "type": ["null", "integer"] + }, + "transfer_data": { + "type": ["null", "string"] + }, + "trial_end": { + "type": ["null", "string"] + } + } + } + }, + "released_at": { + "type": ["null", "string"] + }, + "released_subscription": { + "type": ["null", "string"] + }, + "status": { + "type": ["null", "string"] + }, + "subscription": { + "type": ["null", "string"] + }, + "test_clock": { + "type": ["null", "string"] + } + } +} diff --git a/airbyte-integrations/connectors/source-stripe/source_stripe/source.py b/airbyte-integrations/connectors/source-stripe/source_stripe/source.py index 51559a03957f..34480243f051 100644 --- a/airbyte-integrations/connectors/source-stripe/source_stripe/source.py +++ b/airbyte-integrations/connectors/source-stripe/source_stripe/source.py @@ -35,6 +35,7 @@ Refunds, SubscriptionItems, Subscriptions, + SubscriptionSchedule, Transfers, ) @@ -80,6 +81,7 @@ def streams(self, config: Mapping[str, Any]) -> List[Stream]: Refunds(**incremental_args), SubscriptionItems(**args), Subscriptions(**incremental_args), + SubscriptionSchedule(**incremental_args), Transfers(**incremental_args), ExternalAccountBankAccounts(**args), ExternalAccountCards(**args), diff --git a/airbyte-integrations/connectors/source-stripe/source_stripe/streams.py b/airbyte-integrations/connectors/source-stripe/source_stripe/streams.py index 21209a0b15b4..f724a534dc47 100644 --- a/airbyte-integrations/connectors/source-stripe/source_stripe/streams.py +++ b/airbyte-integrations/connectors/source-stripe/source_stripe/streams.py @@ -427,6 +427,7 @@ def request_params(self, stream_slice: Mapping[str, Any] = None, **kwargs): params["expand[]"] = ["data.tiers"] return params + class Products(IncrementalStripeStream): """ API docs: https://stripe.com/docs/api/products/list @@ -476,6 +477,17 @@ def request_params(self, stream_slice: Mapping[str, Any] = None, **kwargs): return params +class SubscriptionSchedule(IncrementalStripeStream): + """ + API docs: https://stripe.com/docs/api/subscription_schedules + """ + + cursor_field = "created" + + def path(self, **kwargs): + return "subscription_schedules" + + class Transfers(IncrementalStripeStream): """ API docs: https://stripe.com/docs/api/transfers/list diff --git a/airbyte-integrations/connectors/source-stripe/unit_tests/test_source.py b/airbyte-integrations/connectors/source-stripe/unit_tests/test_source.py index 51beefa35250..86d7b2891bfc 100644 --- a/airbyte-integrations/connectors/source-stripe/unit_tests/test_source.py +++ b/airbyte-integrations/connectors/source-stripe/unit_tests/test_source.py @@ -36,7 +36,7 @@ def test_source_streams(): with open("sample_files/config.json") as f: config = json.load(f) streams = SourceStripe().streams(config=config) - assert len(streams) == 24 + assert len(streams) == 25 @pytest.fixture(name="config") diff --git a/airbyte-integrations/connectors/source-stripe/unit_tests/test_streams.py b/airbyte-integrations/connectors/source-stripe/unit_tests/test_streams.py index 418e053cbe98..5e6c96cc2440 100644 --- a/airbyte-integrations/connectors/source-stripe/unit_tests/test_streams.py +++ b/airbyte-integrations/connectors/source-stripe/unit_tests/test_streams.py @@ -30,6 +30,7 @@ Refunds, SubscriptionItems, Subscriptions, + SubscriptionSchedule, Transfers, ) @@ -168,6 +169,7 @@ def config_fixture(): (Products, {}, "products"), (Subscriptions, {}, "subscriptions"), (SubscriptionItems, {}, "subscription_items"), + (SubscriptionSchedule, {}, "subscription_schedules"), (Transfers, {}, "transfers"), (Refunds, {}, "refunds"), (PaymentIntents, {}, "payment_intents"), diff --git a/connectors.md b/connectors.md index 206eb9bbc519..6e7e80d438cc 100644 --- a/connectors.md +++ b/connectors.md @@ -229,7 +229,7 @@ | **Square** | Square icon | Source | airbyte/source-square:0.2.2 | beta | [docs](https://docs.airbyte.com/integrations/sources/square) | [connectors/source/square](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/square) | [source-square](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-square) | `77225a51-cd15-4a13-af02-65816bd0ecf4` | | **Statuspage** | Statuspage icon | Source | airbyte/source-statuspage:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/statuspage) | [connectors/source/statuspage](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/statuspage) | [source-statuspage](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-statuspage) | `74cbd708-46c3-4512-9c93-abd5c3e9a94d` | | **Strava** | Strava icon | Source | airbyte/source-strava:0.1.4 | beta | [docs](https://docs.airbyte.com/integrations/sources/strava) | [connectors/source/strava](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/strava) | [source-strava](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-strava) | `7a4327c4-315a-11ec-8d3d-0242ac130003` | -| **Stripe** | Stripe icon | Source | airbyte/source-stripe:3.1.0 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/stripe) | [connectors/source/stripe](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/stripe) | [source-stripe](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-stripe) | `e094cb9a-26de-4645-8761-65c0c425d1de` | +| **Stripe** | Stripe icon | Source | airbyte/source-stripe:3.2.0 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/stripe) | [connectors/source/stripe](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/stripe) | [source-stripe](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-stripe) | `e094cb9a-26de-4645-8761-65c0c425d1de` | | **SurveyCTO** | SurveyCTO icon | Source | airbyte/source-surveycto:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/surveycto) | [connectors/source/surveycto](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/surveycto) | [source-surveycto](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-surveycto) | `dd4632f4-15e0-4649-9b71-41719fb1fdee` | | **SurveyMonkey** | SurveyMonkey icon | Source | airbyte/source-surveymonkey:0.1.16 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/surveymonkey) | [connectors/source/surveymonkey](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/surveymonkey) | [source-surveymonkey](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-surveymonkey) | `badc5925-0485-42be-8caa-b34096cb71b5` | | **SurveySparrow** | SurveySparrow icon | Source | airbyte/source-survey-sparrow:0.2.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/survey-sparrow) | [connectors/source/survey-sparrow](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/survey-sparrow) | [source-survey-sparrow](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-survey-sparrow) | `4a4d887b-0f2d-4b33-ab7f-9b01b9072804` | diff --git a/docs/integrations/sources/stripe.md b/docs/integrations/sources/stripe.md index 1c742210ac87..dbaf05602b75 100644 --- a/docs/integrations/sources/stripe.md +++ b/docs/integrations/sources/stripe.md @@ -67,6 +67,7 @@ The Stripe source connector supports the following streams: - [Products](https://stripe.com/docs/api/products/list) \(Incremental\) - [Refunds](https://stripe.com/docs/api/refunds/list) \(Incremental\) - [Subscription Items](https://stripe.com/docs/api/subscription_items/list) +- [Subscription Schedule](https://stripe.com/docs/api/subscription_schedules) \(Incremental\) - [Subscriptions](https://stripe.com/docs/api/subscriptions/list) \(Incremental\) - [Transfers](https://stripe.com/docs/api/transfers/list) \(Incremental\) @@ -81,7 +82,8 @@ The Stripe connector should not run into Stripe API limitations under normal usa ## Changelog | Version | Date | Pull Request | Subject | -| :------ | :--------- | :------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------- | +|:--------|:-----------|:---------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------| +| 3.2.0 | 2023-04-10 | [23624](https://github.com/airbytehq/airbyte/pull/23624) | Add new stream `Subscription Schedule` | | 3.1.0 | 2023-03-10 | [19906](https://github.com/airbytehq/airbyte/pull/19906) | Expand `tiers` when syncing `Plans` streams | | 3.0.5 | 2023-03-25 | [22866](https://github.com/airbytehq/airbyte/pull/22866) | Specified date formatting in specification | | 3.0.4 | 2023-03-24 | [24471](https://github.com/airbytehq/airbyte/pull/24471) | Fix stream slices for single sliced streams | From 0d9a79e4402854392efe9d8b6e9751a8d2c4d077 Mon Sep 17 00:00:00 2001 From: Alexandre Girard Date: Mon, 17 Apr 2023 11:07:33 -0700 Subject: [PATCH 098/187] Add compatibility guide to sidebar (#25224) --- docusaurus/sidebars.js | 1 + 1 file changed, 1 insertion(+) diff --git a/docusaurus/sidebars.js b/docusaurus/sidebars.js index 05e0391fea35..49ebb05c7a85 100644 --- a/docusaurus/sidebars.js +++ b/docusaurus/sidebars.js @@ -43,6 +43,7 @@ const buildAConnector = { label: 'Low-code connector development', items: [ 'connector-development/config-based/connector-builder-ui', + 'connector-development/config-based/connector-builder-compatibility', { label: 'Low-code CDK Intro', type: 'doc', From 69fa45873fb0dc8b9683071e348c8ec444fd669d Mon Sep 17 00:00:00 2001 From: Ryan Fu Date: Mon, 17 Apr 2023 12:29:03 -0700 Subject: [PATCH 099/187] Shuffled `destination-jdbc` into `bases` folder (#25120) * Testing changes for reshuffle * Resolves dependency/race-condition with base classes and docker creation * Removes dockerfile * Updates java connectors gradle dependencies --- .github/CODEOWNERS | 2 +- .../bases-destination-jdbc}/build.gradle | 0 .../bases-destination-jdbc}/readme.md | 0 .../jdbc/AbstractJdbcDestination.java | 0 .../destination/jdbc/DataAdapter.java | 0 .../jdbc/JdbcBufferedConsumerFactory.java | 24 ++++++++++++------- .../destination/jdbc/JdbcSqlOperations.java | 0 .../destination/jdbc/SqlOperations.java | 0 .../destination/jdbc/SqlOperationsUtils.java | 0 .../jdbc/StagingFilenameGenerator.java | 0 .../destination/jdbc/WriteConfig.java | 0 .../constants/GlobalDataSizeConstants.java | 0 .../jdbc/copy/CopyConsumerFactory.java | 0 .../jdbc/copy/CopyDestination.java | 0 .../destination/jdbc/copy/StreamCopier.java | 0 .../jdbc/copy/StreamCopierFactory.java | 0 .../jdbc/copy/SwitchingDestination.java | 0 .../copy/azure/AzureBlobStorageConfig.java | 0 .../azure/AzureBlobStorageStreamCopier.java | 0 .../AzureBlobStorageStreamCopierFactory.java | 0 .../destination/jdbc/copy/gcs/GcsConfig.java | 0 .../jdbc/copy/gcs/GcsStreamCopier.java | 0 .../jdbc/copy/gcs/GcsStreamCopierFactory.java | 0 .../jdbc/copy/s3/S3CopyConfig.java | 0 .../jdbc/copy/s3/S3StreamCopier.java | 0 .../jdbc/copy/s3/S3StreamCopierFactory.java | 0 .../staging/StagingConsumerFactory.java | 0 .../staging/StagingOperations.java | 0 .../src/main/resources/spec.json | 0 .../jdbc/AbstractJdbcDestinationTest.java | 0 .../destination/jdbc/DataAdapterTest.java | 0 .../jdbc/TestJdbcSqlOperations.java | 0 .../jdbc/copy/SwitchingDestinationTest.java | 0 .../jdbc/copy/s3/S3CopyConfigTest.java | 0 .../jdbc/copy/s3/S3StreamCopierTest.java | 0 .../staging/StagingConsumerFactoryTest.java | 0 .../build.gradle | 2 +- .../build.gradle | 2 +- .../destination-clickhouse/build.gradle | 2 +- .../destination-databricks/build.gradle | 2 +- .../destination-dynamodb/build.gradle | 2 +- .../destination-exasol/build.gradle | 2 +- .../connectors/destination-gcs/build.gradle | 2 +- .../connectors/destination-jdbc/.dockerignore | 3 --- .../connectors/destination-jdbc/Dockerfile | 20 ---------------- .../build.gradle | 2 +- .../build.gradle | 2 +- .../connectors/destination-mssql/build.gradle | 2 +- .../build.gradle | 2 +- .../connectors/destination-mysql/build.gradle | 2 +- .../build.gradle | 2 +- .../destination-oracle/build.gradle | 2 +- .../build.gradle | 2 +- .../destination-postgres/build.gradle | 2 +- .../destination-redshift/build.gradle | 2 +- .../destination-rockset/build.gradle | 2 +- .../destination-snowflake/build.gradle | 2 +- .../destination-teradata/build.gradle | 2 +- .../connectors/destination-tidb/build.gradle | 2 +- .../destination-yugabytedb/build.gradle | 2 +- settings.gradle | 2 +- tools/bin/ci_check_dependency.py | 2 +- .../pipelines/tests/java_connectors.py | 2 +- 63 files changed, 42 insertions(+), 57 deletions(-) rename airbyte-integrations/{connectors/destination-jdbc => bases/bases-destination-jdbc}/build.gradle (100%) rename airbyte-integrations/{connectors/destination-jdbc => bases/bases-destination-jdbc}/readme.md (100%) rename airbyte-integrations/{connectors/destination-jdbc => bases/bases-destination-jdbc}/src/main/java/io/airbyte/integrations/destination/jdbc/AbstractJdbcDestination.java (100%) rename airbyte-integrations/{connectors/destination-jdbc => bases/bases-destination-jdbc}/src/main/java/io/airbyte/integrations/destination/jdbc/DataAdapter.java (100%) rename airbyte-integrations/{connectors/destination-jdbc => bases/bases-destination-jdbc}/src/main/java/io/airbyte/integrations/destination/jdbc/JdbcBufferedConsumerFactory.java (95%) rename airbyte-integrations/{connectors/destination-jdbc => bases/bases-destination-jdbc}/src/main/java/io/airbyte/integrations/destination/jdbc/JdbcSqlOperations.java (100%) rename airbyte-integrations/{connectors/destination-jdbc => bases/bases-destination-jdbc}/src/main/java/io/airbyte/integrations/destination/jdbc/SqlOperations.java (100%) rename airbyte-integrations/{connectors/destination-jdbc => bases/bases-destination-jdbc}/src/main/java/io/airbyte/integrations/destination/jdbc/SqlOperationsUtils.java (100%) rename airbyte-integrations/{connectors/destination-jdbc => bases/bases-destination-jdbc}/src/main/java/io/airbyte/integrations/destination/jdbc/StagingFilenameGenerator.java (100%) rename airbyte-integrations/{connectors/destination-jdbc => bases/bases-destination-jdbc}/src/main/java/io/airbyte/integrations/destination/jdbc/WriteConfig.java (100%) rename airbyte-integrations/{connectors/destination-jdbc => bases/bases-destination-jdbc}/src/main/java/io/airbyte/integrations/destination/jdbc/constants/GlobalDataSizeConstants.java (100%) rename airbyte-integrations/{connectors/destination-jdbc => bases/bases-destination-jdbc}/src/main/java/io/airbyte/integrations/destination/jdbc/copy/CopyConsumerFactory.java (100%) rename airbyte-integrations/{connectors/destination-jdbc => bases/bases-destination-jdbc}/src/main/java/io/airbyte/integrations/destination/jdbc/copy/CopyDestination.java (100%) rename airbyte-integrations/{connectors/destination-jdbc => bases/bases-destination-jdbc}/src/main/java/io/airbyte/integrations/destination/jdbc/copy/StreamCopier.java (100%) rename airbyte-integrations/{connectors/destination-jdbc => bases/bases-destination-jdbc}/src/main/java/io/airbyte/integrations/destination/jdbc/copy/StreamCopierFactory.java (100%) rename airbyte-integrations/{connectors/destination-jdbc => bases/bases-destination-jdbc}/src/main/java/io/airbyte/integrations/destination/jdbc/copy/SwitchingDestination.java (100%) rename airbyte-integrations/{connectors/destination-jdbc => bases/bases-destination-jdbc}/src/main/java/io/airbyte/integrations/destination/jdbc/copy/azure/AzureBlobStorageConfig.java (100%) rename airbyte-integrations/{connectors/destination-jdbc => bases/bases-destination-jdbc}/src/main/java/io/airbyte/integrations/destination/jdbc/copy/azure/AzureBlobStorageStreamCopier.java (100%) rename airbyte-integrations/{connectors/destination-jdbc => bases/bases-destination-jdbc}/src/main/java/io/airbyte/integrations/destination/jdbc/copy/azure/AzureBlobStorageStreamCopierFactory.java (100%) rename airbyte-integrations/{connectors/destination-jdbc => bases/bases-destination-jdbc}/src/main/java/io/airbyte/integrations/destination/jdbc/copy/gcs/GcsConfig.java (100%) rename airbyte-integrations/{connectors/destination-jdbc => bases/bases-destination-jdbc}/src/main/java/io/airbyte/integrations/destination/jdbc/copy/gcs/GcsStreamCopier.java (100%) rename airbyte-integrations/{connectors/destination-jdbc => bases/bases-destination-jdbc}/src/main/java/io/airbyte/integrations/destination/jdbc/copy/gcs/GcsStreamCopierFactory.java (100%) rename airbyte-integrations/{connectors/destination-jdbc => bases/bases-destination-jdbc}/src/main/java/io/airbyte/integrations/destination/jdbc/copy/s3/S3CopyConfig.java (100%) rename airbyte-integrations/{connectors/destination-jdbc => bases/bases-destination-jdbc}/src/main/java/io/airbyte/integrations/destination/jdbc/copy/s3/S3StreamCopier.java (100%) rename airbyte-integrations/{connectors/destination-jdbc => bases/bases-destination-jdbc}/src/main/java/io/airbyte/integrations/destination/jdbc/copy/s3/S3StreamCopierFactory.java (100%) rename airbyte-integrations/{connectors/destination-jdbc => bases/bases-destination-jdbc}/src/main/java/io/airbyte/integrations/destination/staging/StagingConsumerFactory.java (100%) rename airbyte-integrations/{connectors/destination-jdbc => bases/bases-destination-jdbc}/src/main/java/io/airbyte/integrations/destination/staging/StagingOperations.java (100%) rename airbyte-integrations/{connectors/destination-jdbc => bases/bases-destination-jdbc}/src/main/resources/spec.json (100%) rename airbyte-integrations/{connectors/destination-jdbc => bases/bases-destination-jdbc}/src/test/java/io/airbyte/integrations/destination/jdbc/AbstractJdbcDestinationTest.java (100%) rename airbyte-integrations/{connectors/destination-jdbc => bases/bases-destination-jdbc}/src/test/java/io/airbyte/integrations/destination/jdbc/DataAdapterTest.java (100%) rename airbyte-integrations/{connectors/destination-jdbc => bases/bases-destination-jdbc}/src/test/java/io/airbyte/integrations/destination/jdbc/TestJdbcSqlOperations.java (100%) rename airbyte-integrations/{connectors/destination-jdbc => bases/bases-destination-jdbc}/src/test/java/io/airbyte/integrations/destination/jdbc/copy/SwitchingDestinationTest.java (100%) rename airbyte-integrations/{connectors/destination-jdbc => bases/bases-destination-jdbc}/src/test/java/io/airbyte/integrations/destination/jdbc/copy/s3/S3CopyConfigTest.java (100%) rename airbyte-integrations/{connectors/destination-jdbc => bases/bases-destination-jdbc}/src/test/java/io/airbyte/integrations/destination/jdbc/copy/s3/S3StreamCopierTest.java (100%) rename airbyte-integrations/{connectors/destination-jdbc => bases/bases-destination-jdbc}/src/test/java/io/airbyte/integrations/destination/staging/StagingConsumerFactoryTest.java (100%) delete mode 100644 airbyte-integrations/connectors/destination-jdbc/.dockerignore delete mode 100644 airbyte-integrations/connectors/destination-jdbc/Dockerfile diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 63930bf5ac3e..55e90bfc08bf 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -32,7 +32,7 @@ # Java-based destination connectors /airbyte-integrations/bases/standard-destination-test/ @airbytehq/destinations /airbyte-integrations/bases/base-java-s3/ @airbytehq/destinations -/airbyte-integrations/connectors/destination-jdbc/ @airbytehq/destinations +/airbyte-integrations/bases/bases-destination-jdbc/ @airbytehq/destinations /airbyte-integrations/connectors/destination-bigquery/ @airbytehq/destinations /airbyte-integrations/connectors/destination-bigquery-denormalized/ @airbytehq/destinations /airbyte-integrations/connectors/destination-azure-blob-storage/ @airbytehq/destinations diff --git a/airbyte-integrations/connectors/destination-jdbc/build.gradle b/airbyte-integrations/bases/bases-destination-jdbc/build.gradle similarity index 100% rename from airbyte-integrations/connectors/destination-jdbc/build.gradle rename to airbyte-integrations/bases/bases-destination-jdbc/build.gradle diff --git a/airbyte-integrations/connectors/destination-jdbc/readme.md b/airbyte-integrations/bases/bases-destination-jdbc/readme.md similarity index 100% rename from airbyte-integrations/connectors/destination-jdbc/readme.md rename to airbyte-integrations/bases/bases-destination-jdbc/readme.md diff --git a/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/AbstractJdbcDestination.java b/airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/AbstractJdbcDestination.java similarity index 100% rename from airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/AbstractJdbcDestination.java rename to airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/AbstractJdbcDestination.java diff --git a/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/DataAdapter.java b/airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/DataAdapter.java similarity index 100% rename from airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/DataAdapter.java rename to airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/DataAdapter.java diff --git a/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/JdbcBufferedConsumerFactory.java b/airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/JdbcBufferedConsumerFactory.java similarity index 95% rename from airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/JdbcBufferedConsumerFactory.java rename to airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/JdbcBufferedConsumerFactory.java index b6555f9d8db2..70d53fd806a4 100644 --- a/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/JdbcBufferedConsumerFactory.java +++ b/airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/JdbcBufferedConsumerFactory.java @@ -35,13 +35,18 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -/**Strategy: - *

    1. Create a final table for each stream - *

    2. Accumulate records in a buffer. One buffer per stream - *

    3. As records accumulate write them in batch to the database. We set a minimum numbers of records +/** + * Strategy: + *

    + * 1. Create a final table for each stream + *

    + * 2. Accumulate records in a buffer. One buffer per stream + *

    + * 3. As records accumulate write them in batch to the database. We set a minimum numbers of records * before writing to avoid wasteful record-wise writes. In the case with slow syncs this will be * superseded with a periodic record flush from {@link BufferedStreamConsumer#periodicBufferFlush()} - *

    4. Once all records have been written to buffer, flush the buffer and write any remaining records + *

    + * 4. Once all records have been written to buffer, flush the buffer and write any remaining records * to the database (regardless of how few are left) */ public class JdbcBufferedConsumerFactory { @@ -118,9 +123,12 @@ private static String getOutputSchema(final AirbyteStream stream, /** * Sets up destination storage through: - *

    1. Creates Schema (if not exists) - *

    2. Creates airybte_raw table (if not exists) - *

    3. Truncates table if sync mode is in OVERWRITE + *

    + * 1. Creates Schema (if not exists) + *

    + * 2. Creates airybte_raw table (if not exists) + *

    + * 3. Truncates table if sync mode is in OVERWRITE * * @param database JDBC database to connect to * @param sqlOperations interface for execution SQL queries diff --git a/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/JdbcSqlOperations.java b/airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/JdbcSqlOperations.java similarity index 100% rename from airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/JdbcSqlOperations.java rename to airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/JdbcSqlOperations.java diff --git a/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/SqlOperations.java b/airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/SqlOperations.java similarity index 100% rename from airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/SqlOperations.java rename to airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/SqlOperations.java diff --git a/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/SqlOperationsUtils.java b/airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/SqlOperationsUtils.java similarity index 100% rename from airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/SqlOperationsUtils.java rename to airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/SqlOperationsUtils.java diff --git a/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/StagingFilenameGenerator.java b/airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/StagingFilenameGenerator.java similarity index 100% rename from airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/StagingFilenameGenerator.java rename to airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/StagingFilenameGenerator.java diff --git a/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/WriteConfig.java b/airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/WriteConfig.java similarity index 100% rename from airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/WriteConfig.java rename to airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/WriteConfig.java diff --git a/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/constants/GlobalDataSizeConstants.java b/airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/constants/GlobalDataSizeConstants.java similarity index 100% rename from airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/constants/GlobalDataSizeConstants.java rename to airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/constants/GlobalDataSizeConstants.java diff --git a/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/CopyConsumerFactory.java b/airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/CopyConsumerFactory.java similarity index 100% rename from airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/CopyConsumerFactory.java rename to airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/CopyConsumerFactory.java diff --git a/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/CopyDestination.java b/airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/CopyDestination.java similarity index 100% rename from airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/CopyDestination.java rename to airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/CopyDestination.java diff --git a/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/StreamCopier.java b/airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/StreamCopier.java similarity index 100% rename from airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/StreamCopier.java rename to airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/StreamCopier.java diff --git a/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/StreamCopierFactory.java b/airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/StreamCopierFactory.java similarity index 100% rename from airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/StreamCopierFactory.java rename to airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/StreamCopierFactory.java diff --git a/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/SwitchingDestination.java b/airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/SwitchingDestination.java similarity index 100% rename from airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/SwitchingDestination.java rename to airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/SwitchingDestination.java diff --git a/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/azure/AzureBlobStorageConfig.java b/airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/azure/AzureBlobStorageConfig.java similarity index 100% rename from airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/azure/AzureBlobStorageConfig.java rename to airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/azure/AzureBlobStorageConfig.java diff --git a/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/azure/AzureBlobStorageStreamCopier.java b/airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/azure/AzureBlobStorageStreamCopier.java similarity index 100% rename from airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/azure/AzureBlobStorageStreamCopier.java rename to airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/azure/AzureBlobStorageStreamCopier.java diff --git a/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/azure/AzureBlobStorageStreamCopierFactory.java b/airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/azure/AzureBlobStorageStreamCopierFactory.java similarity index 100% rename from airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/azure/AzureBlobStorageStreamCopierFactory.java rename to airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/azure/AzureBlobStorageStreamCopierFactory.java diff --git a/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/gcs/GcsConfig.java b/airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/gcs/GcsConfig.java similarity index 100% rename from airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/gcs/GcsConfig.java rename to airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/gcs/GcsConfig.java diff --git a/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/gcs/GcsStreamCopier.java b/airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/gcs/GcsStreamCopier.java similarity index 100% rename from airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/gcs/GcsStreamCopier.java rename to airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/gcs/GcsStreamCopier.java diff --git a/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/gcs/GcsStreamCopierFactory.java b/airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/gcs/GcsStreamCopierFactory.java similarity index 100% rename from airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/gcs/GcsStreamCopierFactory.java rename to airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/gcs/GcsStreamCopierFactory.java diff --git a/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/s3/S3CopyConfig.java b/airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/s3/S3CopyConfig.java similarity index 100% rename from airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/s3/S3CopyConfig.java rename to airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/s3/S3CopyConfig.java diff --git a/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/s3/S3StreamCopier.java b/airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/s3/S3StreamCopier.java similarity index 100% rename from airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/s3/S3StreamCopier.java rename to airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/s3/S3StreamCopier.java diff --git a/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/s3/S3StreamCopierFactory.java b/airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/s3/S3StreamCopierFactory.java similarity index 100% rename from airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/s3/S3StreamCopierFactory.java rename to airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/s3/S3StreamCopierFactory.java diff --git a/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/staging/StagingConsumerFactory.java b/airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/staging/StagingConsumerFactory.java similarity index 100% rename from airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/staging/StagingConsumerFactory.java rename to airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/staging/StagingConsumerFactory.java diff --git a/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/staging/StagingOperations.java b/airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/staging/StagingOperations.java similarity index 100% rename from airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/staging/StagingOperations.java rename to airbyte-integrations/bases/bases-destination-jdbc/src/main/java/io/airbyte/integrations/destination/staging/StagingOperations.java diff --git a/airbyte-integrations/connectors/destination-jdbc/src/main/resources/spec.json b/airbyte-integrations/bases/bases-destination-jdbc/src/main/resources/spec.json similarity index 100% rename from airbyte-integrations/connectors/destination-jdbc/src/main/resources/spec.json rename to airbyte-integrations/bases/bases-destination-jdbc/src/main/resources/spec.json diff --git a/airbyte-integrations/connectors/destination-jdbc/src/test/java/io/airbyte/integrations/destination/jdbc/AbstractJdbcDestinationTest.java b/airbyte-integrations/bases/bases-destination-jdbc/src/test/java/io/airbyte/integrations/destination/jdbc/AbstractJdbcDestinationTest.java similarity index 100% rename from airbyte-integrations/connectors/destination-jdbc/src/test/java/io/airbyte/integrations/destination/jdbc/AbstractJdbcDestinationTest.java rename to airbyte-integrations/bases/bases-destination-jdbc/src/test/java/io/airbyte/integrations/destination/jdbc/AbstractJdbcDestinationTest.java diff --git a/airbyte-integrations/connectors/destination-jdbc/src/test/java/io/airbyte/integrations/destination/jdbc/DataAdapterTest.java b/airbyte-integrations/bases/bases-destination-jdbc/src/test/java/io/airbyte/integrations/destination/jdbc/DataAdapterTest.java similarity index 100% rename from airbyte-integrations/connectors/destination-jdbc/src/test/java/io/airbyte/integrations/destination/jdbc/DataAdapterTest.java rename to airbyte-integrations/bases/bases-destination-jdbc/src/test/java/io/airbyte/integrations/destination/jdbc/DataAdapterTest.java diff --git a/airbyte-integrations/connectors/destination-jdbc/src/test/java/io/airbyte/integrations/destination/jdbc/TestJdbcSqlOperations.java b/airbyte-integrations/bases/bases-destination-jdbc/src/test/java/io/airbyte/integrations/destination/jdbc/TestJdbcSqlOperations.java similarity index 100% rename from airbyte-integrations/connectors/destination-jdbc/src/test/java/io/airbyte/integrations/destination/jdbc/TestJdbcSqlOperations.java rename to airbyte-integrations/bases/bases-destination-jdbc/src/test/java/io/airbyte/integrations/destination/jdbc/TestJdbcSqlOperations.java diff --git a/airbyte-integrations/connectors/destination-jdbc/src/test/java/io/airbyte/integrations/destination/jdbc/copy/SwitchingDestinationTest.java b/airbyte-integrations/bases/bases-destination-jdbc/src/test/java/io/airbyte/integrations/destination/jdbc/copy/SwitchingDestinationTest.java similarity index 100% rename from airbyte-integrations/connectors/destination-jdbc/src/test/java/io/airbyte/integrations/destination/jdbc/copy/SwitchingDestinationTest.java rename to airbyte-integrations/bases/bases-destination-jdbc/src/test/java/io/airbyte/integrations/destination/jdbc/copy/SwitchingDestinationTest.java diff --git a/airbyte-integrations/connectors/destination-jdbc/src/test/java/io/airbyte/integrations/destination/jdbc/copy/s3/S3CopyConfigTest.java b/airbyte-integrations/bases/bases-destination-jdbc/src/test/java/io/airbyte/integrations/destination/jdbc/copy/s3/S3CopyConfigTest.java similarity index 100% rename from airbyte-integrations/connectors/destination-jdbc/src/test/java/io/airbyte/integrations/destination/jdbc/copy/s3/S3CopyConfigTest.java rename to airbyte-integrations/bases/bases-destination-jdbc/src/test/java/io/airbyte/integrations/destination/jdbc/copy/s3/S3CopyConfigTest.java diff --git a/airbyte-integrations/connectors/destination-jdbc/src/test/java/io/airbyte/integrations/destination/jdbc/copy/s3/S3StreamCopierTest.java b/airbyte-integrations/bases/bases-destination-jdbc/src/test/java/io/airbyte/integrations/destination/jdbc/copy/s3/S3StreamCopierTest.java similarity index 100% rename from airbyte-integrations/connectors/destination-jdbc/src/test/java/io/airbyte/integrations/destination/jdbc/copy/s3/S3StreamCopierTest.java rename to airbyte-integrations/bases/bases-destination-jdbc/src/test/java/io/airbyte/integrations/destination/jdbc/copy/s3/S3StreamCopierTest.java diff --git a/airbyte-integrations/connectors/destination-jdbc/src/test/java/io/airbyte/integrations/destination/staging/StagingConsumerFactoryTest.java b/airbyte-integrations/bases/bases-destination-jdbc/src/test/java/io/airbyte/integrations/destination/staging/StagingConsumerFactoryTest.java similarity index 100% rename from airbyte-integrations/connectors/destination-jdbc/src/test/java/io/airbyte/integrations/destination/staging/StagingConsumerFactoryTest.java rename to airbyte-integrations/bases/bases-destination-jdbc/src/test/java/io/airbyte/integrations/destination/staging/StagingConsumerFactoryTest.java diff --git a/airbyte-integrations/connectors/destination-azure-blob-storage/build.gradle b/airbyte-integrations/connectors/destination-azure-blob-storage/build.gradle index 637ac0508cc3..f42e9b1f456e 100644 --- a/airbyte-integrations/connectors/destination-azure-blob-storage/build.gradle +++ b/airbyte-integrations/connectors/destination-azure-blob-storage/build.gradle @@ -13,7 +13,7 @@ dependencies { implementation project(':airbyte-config-oss:config-models-oss') implementation libs.airbyte.protocol implementation project(':airbyte-integrations:bases:base-java') - implementation project(':airbyte-integrations:connectors:destination-jdbc') + implementation project(':airbyte-integrations:bases:bases-destination-jdbc') implementation files(project(':airbyte-integrations:bases:base-java').airbyteDocker.outputs) implementation 'com.azure:azure-storage-blob:12.20.2' diff --git a/airbyte-integrations/connectors/destination-clickhouse-strict-encrypt/build.gradle b/airbyte-integrations/connectors/destination-clickhouse-strict-encrypt/build.gradle index 2535c3b4a5fe..4115757b1510 100644 --- a/airbyte-integrations/connectors/destination-clickhouse-strict-encrypt/build.gradle +++ b/airbyte-integrations/connectors/destination-clickhouse-strict-encrypt/build.gradle @@ -13,7 +13,7 @@ dependencies { implementation project(':airbyte-db:db-lib') implementation project(':airbyte-integrations:bases:base-java') implementation libs.airbyte.protocol - implementation project(':airbyte-integrations:connectors:destination-jdbc') + implementation project(':airbyte-integrations:bases:bases-destination-jdbc') implementation project(':airbyte-integrations:connectors:destination-clickhouse') implementation files(project(':airbyte-integrations:bases:base-java').airbyteDocker.outputs) diff --git a/airbyte-integrations/connectors/destination-clickhouse/build.gradle b/airbyte-integrations/connectors/destination-clickhouse/build.gradle index 9f52ec631f9f..046db83deb8a 100644 --- a/airbyte-integrations/connectors/destination-clickhouse/build.gradle +++ b/airbyte-integrations/connectors/destination-clickhouse/build.gradle @@ -14,7 +14,7 @@ dependencies { implementation project(':airbyte-config-oss:config-models-oss') implementation libs.airbyte.protocol implementation project(':airbyte-integrations:bases:base-java') - implementation project(':airbyte-integrations:connectors:destination-jdbc') + implementation project(':airbyte-integrations:bases:bases-destination-jdbc') implementation files(project(':airbyte-integrations:bases:base-java').airbyteDocker.outputs) implementation 'com.clickhouse:clickhouse-jdbc:0.3.2-patch10:all' diff --git a/airbyte-integrations/connectors/destination-databricks/build.gradle b/airbyte-integrations/connectors/destination-databricks/build.gradle index 2e438db6ca81..139a62525516 100644 --- a/airbyte-integrations/connectors/destination-databricks/build.gradle +++ b/airbyte-integrations/connectors/destination-databricks/build.gradle @@ -31,7 +31,7 @@ dependencies { implementation project(':airbyte-integrations:bases:base-java') implementation project(':airbyte-integrations:bases:base-java-s3') implementation files(project(':airbyte-integrations:bases:base-java').airbyteDocker.outputs) - implementation project(':airbyte-integrations:connectors:destination-jdbc') + implementation project(':airbyte-integrations:bases:bases-destination-jdbc') implementation project(':airbyte-integrations:connectors:destination-s3') implementation project(':airbyte-integrations:connectors:destination-azure-blob-storage') implementation group: 'com.databricks', name: 'databricks-jdbc', version: '2.6.25' diff --git a/airbyte-integrations/connectors/destination-dynamodb/build.gradle b/airbyte-integrations/connectors/destination-dynamodb/build.gradle index dc5cc2a1f1ad..a2388073580e 100644 --- a/airbyte-integrations/connectors/destination-dynamodb/build.gradle +++ b/airbyte-integrations/connectors/destination-dynamodb/build.gradle @@ -13,7 +13,7 @@ dependencies { implementation project(':airbyte-config-oss:config-models-oss') implementation libs.airbyte.protocol implementation project(':airbyte-integrations:bases:base-java') - implementation project(':airbyte-integrations:connectors:destination-jdbc') + implementation project(':airbyte-integrations:bases:bases-destination-jdbc') implementation files(project(':airbyte-integrations:bases:base-java').airbyteDocker.outputs) implementation 'com.amazonaws:aws-java-sdk-dynamodb:1.12.47' diff --git a/airbyte-integrations/connectors/destination-exasol/build.gradle b/airbyte-integrations/connectors/destination-exasol/build.gradle index 369d38031acc..73b46b771573 100644 --- a/airbyte-integrations/connectors/destination-exasol/build.gradle +++ b/airbyte-integrations/connectors/destination-exasol/build.gradle @@ -13,7 +13,7 @@ dependencies { implementation project(':airbyte-integrations:bases:base-java') implementation libs.airbyte.protocol implementation files(project(':airbyte-integrations:bases:base-java').airbyteDocker.outputs) - implementation project(':airbyte-integrations:connectors:destination-jdbc') + implementation project(':airbyte-integrations:bases:bases-destination-jdbc') implementation 'com.exasol:exasol-jdbc:7.1.17' diff --git a/airbyte-integrations/connectors/destination-gcs/build.gradle b/airbyte-integrations/connectors/destination-gcs/build.gradle index 79fae6d7c3d9..3aa35bf0f4e1 100644 --- a/airbyte-integrations/connectors/destination-gcs/build.gradle +++ b/airbyte-integrations/connectors/destination-gcs/build.gradle @@ -14,7 +14,7 @@ dependencies { implementation libs.airbyte.protocol implementation project(':airbyte-integrations:bases:base-java') implementation project(':airbyte-integrations:bases:base-java-s3') - implementation project(':airbyte-integrations:connectors:destination-jdbc') + implementation project(':airbyte-integrations:bases:bases-destination-jdbc') implementation files(project(':airbyte-integrations:bases:base-java').airbyteDocker.outputs) implementation platform('com.amazonaws:aws-java-sdk-bom:1.12.14') diff --git a/airbyte-integrations/connectors/destination-jdbc/.dockerignore b/airbyte-integrations/connectors/destination-jdbc/.dockerignore deleted file mode 100644 index 65c7d0ad3e73..000000000000 --- a/airbyte-integrations/connectors/destination-jdbc/.dockerignore +++ /dev/null @@ -1,3 +0,0 @@ -* -!Dockerfile -!build diff --git a/airbyte-integrations/connectors/destination-jdbc/Dockerfile b/airbyte-integrations/connectors/destination-jdbc/Dockerfile deleted file mode 100644 index a35e7fb7b3f2..000000000000 --- a/airbyte-integrations/connectors/destination-jdbc/Dockerfile +++ /dev/null @@ -1,20 +0,0 @@ -FROM airbyte/integration-base-java:dev AS build - -WORKDIR /airbyte - -ENV APPLICATION destination-jdbc - -COPY build/distributions/${APPLICATION}*.tar ${APPLICATION}.tar - -RUN tar xf ${APPLICATION}.tar --strip-components=1 && rm -rf ${APPLICATION}.tar - -FROM airbyte/integration-base-java:dev - -WORKDIR /airbyte - -ENV APPLICATION destination-jdbc - -COPY --from=build /airbyte /airbyte - -LABEL io.airbyte.version=0.3.14 -LABEL io.airbyte.name=airbyte/destination-jdbc diff --git a/airbyte-integrations/connectors/destination-mariadb-columnstore/build.gradle b/airbyte-integrations/connectors/destination-mariadb-columnstore/build.gradle index 692406ca5f08..765322c42935 100644 --- a/airbyte-integrations/connectors/destination-mariadb-columnstore/build.gradle +++ b/airbyte-integrations/connectors/destination-mariadb-columnstore/build.gradle @@ -14,7 +14,7 @@ dependencies { implementation project(':airbyte-config-oss:config-models-oss') implementation libs.airbyte.protocol implementation project(':airbyte-integrations:bases:base-java') - implementation project(':airbyte-integrations:connectors:destination-jdbc') + implementation project(':airbyte-integrations:bases:bases-destination-jdbc') implementation files(project(':airbyte-integrations:bases:base-java').airbyteDocker.outputs) implementation 'org.mariadb.jdbc:mariadb-java-client:2.7.4' diff --git a/airbyte-integrations/connectors/destination-mssql-strict-encrypt/build.gradle b/airbyte-integrations/connectors/destination-mssql-strict-encrypt/build.gradle index 7f2c92f39706..6c18e69206a1 100644 --- a/airbyte-integrations/connectors/destination-mssql-strict-encrypt/build.gradle +++ b/airbyte-integrations/connectors/destination-mssql-strict-encrypt/build.gradle @@ -13,8 +13,8 @@ dependencies { implementation project(':airbyte-config-oss:config-models-oss') implementation project(':airbyte-db:db-lib') implementation project(':airbyte-integrations:bases:base-java') + implementation project(':airbyte-integrations:bases:bases-destination-jdbc') implementation libs.airbyte.protocol - implementation project(':airbyte-integrations:connectors:destination-jdbc') implementation project(':airbyte-integrations:connectors:destination-mssql') implementation project(':airbyte-test-utils') diff --git a/airbyte-integrations/connectors/destination-mssql/build.gradle b/airbyte-integrations/connectors/destination-mssql/build.gradle index b496d19b93c2..fa8d153e1b62 100644 --- a/airbyte-integrations/connectors/destination-mssql/build.gradle +++ b/airbyte-integrations/connectors/destination-mssql/build.gradle @@ -13,7 +13,7 @@ dependencies { implementation project(':airbyte-db:db-lib') implementation project(':airbyte-integrations:bases:base-java') implementation libs.airbyte.protocol - implementation project(':airbyte-integrations:connectors:destination-jdbc') + implementation project(':airbyte-integrations:bases:bases-destination-jdbc') implementation project(':airbyte-test-utils') implementation 'com.microsoft.sqlserver:mssql-jdbc:8.4.1.jre14' diff --git a/airbyte-integrations/connectors/destination-mysql-strict-encrypt/build.gradle b/airbyte-integrations/connectors/destination-mysql-strict-encrypt/build.gradle index dbdb228986b9..489ad43d03b4 100644 --- a/airbyte-integrations/connectors/destination-mysql-strict-encrypt/build.gradle +++ b/airbyte-integrations/connectors/destination-mysql-strict-encrypt/build.gradle @@ -13,7 +13,7 @@ dependencies { implementation project(':airbyte-db:db-lib') implementation project(':airbyte-integrations:bases:base-java') implementation libs.airbyte.protocol - implementation project(':airbyte-integrations:connectors:destination-jdbc') + implementation project(':airbyte-integrations:bases:bases-destination-jdbc') implementation project(':airbyte-integrations:connectors:destination-mysql') implementation 'mysql:mysql-connector-java:8.0.22' diff --git a/airbyte-integrations/connectors/destination-mysql/build.gradle b/airbyte-integrations/connectors/destination-mysql/build.gradle index 5c27cc30ff09..ff67bf5575cb 100644 --- a/airbyte-integrations/connectors/destination-mysql/build.gradle +++ b/airbyte-integrations/connectors/destination-mysql/build.gradle @@ -13,7 +13,7 @@ dependencies { implementation project(':airbyte-db:db-lib') implementation project(':airbyte-integrations:bases:base-java') implementation libs.airbyte.protocol - implementation project(':airbyte-integrations:connectors:destination-jdbc') + implementation project(':airbyte-integrations:bases:bases-destination-jdbc') implementation 'mysql:mysql-connector-java:8.0.22' diff --git a/airbyte-integrations/connectors/destination-oracle-strict-encrypt/build.gradle b/airbyte-integrations/connectors/destination-oracle-strict-encrypt/build.gradle index 5e92820dc4c5..9292f9d99ca8 100644 --- a/airbyte-integrations/connectors/destination-oracle-strict-encrypt/build.gradle +++ b/airbyte-integrations/connectors/destination-oracle-strict-encrypt/build.gradle @@ -17,7 +17,7 @@ dependencies { implementation project(':airbyte-db:db-lib') implementation project(':airbyte-integrations:bases:base-java') implementation libs.airbyte.protocol - implementation project(':airbyte-integrations:connectors:destination-jdbc') + implementation project(':airbyte-integrations:bases:bases-destination-jdbc') implementation project(':airbyte-integrations:connectors:destination-oracle') implementation "com.oracle.database.jdbc:ojdbc8-production:19.7.0.0" diff --git a/airbyte-integrations/connectors/destination-oracle/build.gradle b/airbyte-integrations/connectors/destination-oracle/build.gradle index 40fb19846581..f4676000e966 100644 --- a/airbyte-integrations/connectors/destination-oracle/build.gradle +++ b/airbyte-integrations/connectors/destination-oracle/build.gradle @@ -17,7 +17,7 @@ dependencies { implementation project(':airbyte-db:db-lib') implementation project(':airbyte-integrations:bases:base-java') implementation libs.airbyte.protocol - implementation project(':airbyte-integrations:connectors:destination-jdbc') + implementation project(':airbyte-integrations:bases:bases-destination-jdbc') implementation "com.oracle.database.jdbc:ojdbc8-production:19.7.0.0" diff --git a/airbyte-integrations/connectors/destination-postgres-strict-encrypt/build.gradle b/airbyte-integrations/connectors/destination-postgres-strict-encrypt/build.gradle index fe18cfd1f6e1..006fb163a269 100644 --- a/airbyte-integrations/connectors/destination-postgres-strict-encrypt/build.gradle +++ b/airbyte-integrations/connectors/destination-postgres-strict-encrypt/build.gradle @@ -13,7 +13,7 @@ dependencies { implementation project(':airbyte-db:db-lib') implementation project(':airbyte-integrations:bases:base-java') implementation libs.airbyte.protocol - implementation project(':airbyte-integrations:connectors:destination-jdbc') + implementation project(':airbyte-integrations:bases:bases-destination-jdbc') implementation project(':airbyte-integrations:connectors:destination-postgres') integrationTestJavaImplementation project(':airbyte-integrations:bases:standard-destination-test') diff --git a/airbyte-integrations/connectors/destination-postgres/build.gradle b/airbyte-integrations/connectors/destination-postgres/build.gradle index cd2b73246fe5..bbf2ab1b1cef 100644 --- a/airbyte-integrations/connectors/destination-postgres/build.gradle +++ b/airbyte-integrations/connectors/destination-postgres/build.gradle @@ -13,7 +13,7 @@ dependencies { implementation project(':airbyte-db:db-lib') implementation project(':airbyte-integrations:bases:base-java') implementation libs.airbyte.protocol - implementation project(':airbyte-integrations:connectors:destination-jdbc') + implementation project(':airbyte-integrations:bases:bases-destination-jdbc') testImplementation project(':airbyte-test-utils') diff --git a/airbyte-integrations/connectors/destination-redshift/build.gradle b/airbyte-integrations/connectors/destination-redshift/build.gradle index 8cc09fee330f..9ad612955a73 100644 --- a/airbyte-integrations/connectors/destination-redshift/build.gradle +++ b/airbyte-integrations/connectors/destination-redshift/build.gradle @@ -19,7 +19,7 @@ dependencies { implementation project(':airbyte-db:db-lib') implementation project(':airbyte-integrations:bases:base-java') implementation libs.airbyte.protocol - implementation project(':airbyte-integrations:connectors:destination-jdbc') + implementation project(':airbyte-integrations:bases:bases-destination-jdbc') implementation project(':airbyte-integrations:bases:base-java-s3') implementation files(project(':airbyte-integrations:bases:base-java').airbyteDocker.outputs) diff --git a/airbyte-integrations/connectors/destination-rockset/build.gradle b/airbyte-integrations/connectors/destination-rockset/build.gradle index 3ff0db971554..0618e24c9599 100644 --- a/airbyte-integrations/connectors/destination-rockset/build.gradle +++ b/airbyte-integrations/connectors/destination-rockset/build.gradle @@ -19,7 +19,7 @@ dependencies { implementation libs.airbyte.protocol implementation project(':airbyte-integrations:bases:base-java') implementation files(project(':airbyte-integrations:bases:base-java').airbyteDocker.outputs) - implementation project(':airbyte-integrations:connectors:destination-jdbc') + implementation project(':airbyte-integrations:bases:bases-destination-jdbc') implementation group: 'com.rockset', name: 'rockset-java', version: '0.9.0' implementation group: 'org.awaitility', name: 'awaitility', version: '4.1.1' diff --git a/airbyte-integrations/connectors/destination-snowflake/build.gradle b/airbyte-integrations/connectors/destination-snowflake/build.gradle index d04efd0989ad..6ed4b2d14a10 100644 --- a/airbyte-integrations/connectors/destination-snowflake/build.gradle +++ b/airbyte-integrations/connectors/destination-snowflake/build.gradle @@ -39,7 +39,7 @@ dependencies { implementation project(':airbyte-config-oss:config-models-oss') implementation project(':airbyte-db:db-lib') implementation project(':airbyte-integrations:bases:base-java') - implementation project(':airbyte-integrations:connectors:destination-jdbc') + implementation project(':airbyte-integrations:bases:bases-destination-jdbc') implementation project(':airbyte-integrations:connectors:destination-gcs') implementation project(':airbyte-integrations:bases:base-java-s3') implementation libs.airbyte.protocol diff --git a/airbyte-integrations/connectors/destination-teradata/build.gradle b/airbyte-integrations/connectors/destination-teradata/build.gradle index d74e10bc8b87..13fab2b59424 100644 --- a/airbyte-integrations/connectors/destination-teradata/build.gradle +++ b/airbyte-integrations/connectors/destination-teradata/build.gradle @@ -17,7 +17,7 @@ dependencies { implementation project(':airbyte-db:db-lib') implementation project(':airbyte-integrations:bases:base-java') implementation libs.airbyte.protocol - implementation project(':airbyte-integrations:connectors:destination-jdbc') + implementation project(':airbyte-integrations:bases:bases-destination-jdbc') implementation 'com.teradata.jdbc:terajdbc4:17.20.00.12' integrationTestJavaImplementation project(':airbyte-integrations:bases:standard-destination-test') diff --git a/airbyte-integrations/connectors/destination-tidb/build.gradle b/airbyte-integrations/connectors/destination-tidb/build.gradle index bfe578b3dfc2..c2e1b7a55719 100644 --- a/airbyte-integrations/connectors/destination-tidb/build.gradle +++ b/airbyte-integrations/connectors/destination-tidb/build.gradle @@ -12,7 +12,7 @@ dependencies { implementation project(':airbyte-db:db-lib') implementation project(':airbyte-integrations:bases:base-java') implementation libs.airbyte.protocol - implementation project(':airbyte-integrations:connectors:destination-jdbc') + implementation project(':airbyte-integrations:bases:bases-destination-jdbc') implementation files(project(':airbyte-integrations:bases:base-java').airbyteDocker.outputs) implementation 'mysql:mysql-connector-java:8.0.30' diff --git a/airbyte-integrations/connectors/destination-yugabytedb/build.gradle b/airbyte-integrations/connectors/destination-yugabytedb/build.gradle index ee572f72848c..79d17bb0b387 100644 --- a/airbyte-integrations/connectors/destination-yugabytedb/build.gradle +++ b/airbyte-integrations/connectors/destination-yugabytedb/build.gradle @@ -13,7 +13,7 @@ dependencies { implementation libs.airbyte.protocol implementation project(':airbyte-integrations:bases:base-java') implementation files(project(':airbyte-integrations:bases:base-java').airbyteDocker.outputs) - implementation project(':airbyte-integrations:connectors:destination-jdbc') + implementation project(':airbyte-integrations:bases:bases-destination-jdbc') implementation project(':airbyte-db:db-lib') implementation 'com.yugabyte:jdbc-yugabytedb:42.3.5-yb-1' diff --git a/settings.gradle b/settings.gradle index b2076114aa9b..543a9bd03ced 100644 --- a/settings.gradle +++ b/settings.gradle @@ -105,6 +105,7 @@ if (!System.getenv().containsKey("SUB_BUILD") || System.getenv().get("SUB_BUILD" include ':airbyte-integrations:bases:base-java' include ':airbyte-integrations:bases:base-java-s3' include ':airbyte-integrations:bases:base-normalization' + include ':airbyte-integrations:bases:bases-destination-jdbc' // needs to be lexicographically after base-java and base-normalization to avoid race condition include ':airbyte-integrations:bases:base-standard-source-test-file' include ':airbyte-integrations:bases:connector-acceptance-test' include ':airbyte-integrations:bases:standard-destination-test' @@ -115,7 +116,6 @@ if (!System.getenv().containsKey("SUB_BUILD") || System.getenv().get("SUB_BUILD" // Needed by normalization integration tests include ':airbyte-integrations:connectors:destination-bigquery' - include ':airbyte-integrations:connectors:destination-jdbc' include ':airbyte-integrations:connectors:destination-mysql' include ':airbyte-integrations:connectors:destination-postgres' include ':airbyte-integrations:connectors:destination-redshift' diff --git a/tools/bin/ci_check_dependency.py b/tools/bin/ci_check_dependency.py index 753bb90ec721..4546b164ae89 100644 --- a/tools/bin/ci_check_dependency.py +++ b/tools/bin/ci_check_dependency.py @@ -31,7 +31,7 @@ re.compile(".*-strict-encrypt$"), re.compile("^destination-dev-null$"), re.compile("^destination-scaffold-destination-python$"), - re.compile("^destination-jdbc$") + re.compile("^bases-destination-jdbc$") ] COMMENT_TEMPLATE_PATH = ".github/comment_templates/connector_dependency_template.md" diff --git a/tools/ci_connector_ops/ci_connector_ops/pipelines/tests/java_connectors.py b/tools/ci_connector_ops/ci_connector_ops/pipelines/tests/java_connectors.py index 4c2c555eec18..af7437995244 100644 --- a/tools/ci_connector_ops/ci_connector_ops/pipelines/tests/java_connectors.py +++ b/tools/ci_connector_ops/ci_connector_ops/pipelines/tests/java_connectors.py @@ -101,7 +101,7 @@ class GradleTask(Step, ABC): ] DESTINATION_BUILD_INCLUDE = [ - "airbyte-integrations/connectors/destination-jdbc", + "airbyte-integrations/bases/bases-destination-jdbc", # destination-bigquery uses utils from destination gcs "airbyte-integrations/connectors/destination-gcs", ] From 8757e4f551db2f02c3704b52d68b237889f29810 Mon Sep 17 00:00:00 2001 From: Ben Church Date: Mon, 17 Apr 2023 13:03:59 -0700 Subject: [PATCH 100/187] Run ./gradlew :airbyte-config:init:processResources (#25250) --- .../src/main/resources/seed/oss_catalog.json | 180 ++++++++++++++++++ connectors.md | 1 + 2 files changed, 181 insertions(+) diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json index 9e4803726962..aa84e10c3357 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json @@ -24875,6 +24875,186 @@ "allowedHosts": { "hosts": [ "api.tempo.io" ] } + }, { + "sourceDefinitionId": "aa8ba6fd-4875-d94e-fc8d-4e1e09aa2503", + "name": "Teradata", + "dockerRepository": "airbyte/source-teradata", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/teradata", + "icon": "teradata.svg", + "sourceType": "database", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/teradata", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Teradata Source Spec", + "type": "object", + "required": [ "host", "database", "username" ], + "properties": { + "host": { + "title": "Host", + "description": "Hostname of the database.", + "type": "string", + "order": 0 + }, + "port": { + "title": "Port", + "description": "Port of the database.", + "type": "integer", + "minimum": 0, + "maximum": 65536, + "default": 3306, + "examples": [ "3306" ], + "order": 1 + }, + "database": { + "title": "Database", + "description": "Name of the database.", + "type": "string", + "order": 2 + }, + "username": { + "title": "Username", + "description": "Username to use to access the database.", + "type": "string", + "order": 3 + }, + "password": { + "title": "Password", + "description": "Password associated with the username.", + "type": "string", + "airbyte_secret": true, + "order": 4 + }, + "jdbc_url_params": { + "title": "JDBC URL params", + "description": "Additional properties to pass to the JDBC URL string when connecting to the database formatted as 'key=value' pairs separated by the symbol '&'. (example: key1=value1&key2=value2&key3=value3)", + "type": "string", + "order": 5 + }, + "replication_method": { + "title": "Replication method", + "description": "Replication method to use for extracting data from the database. STANDARD replication requires no setup on the DB side but will not be able to represent deletions incrementally. CDC uses the Binlog to detect inserts, updates, and deletes. This needs to be configured on the source database itself.", + "type": "string", + "order": 6, + "default": "STANDARD", + "enum": [ "STANDARD", "CDC" ] + }, + "ssl": { + "title": "SSL Connection", + "description": "Encrypt data using SSL. When activating SSL, please select one of the connection modes.", + "type": "boolean", + "default": false, + "order": 7 + }, + "ssl_mode": { + "title": "SSL Modes", + "description": "SSL connection modes. \n disable - Chose this mode to disable encryption of communication between Airbyte and destination database\n allow - Chose this mode to enable encryption only when required by the destination database\n prefer - Chose this mode to allow unencrypted connection only if the destination database does not support encryption\n require - Chose this mode to always require encryption. If the destination database server does not support encryption, connection will fail\n verify-ca - Chose this mode to always require encryption and to verify that the destination database server has a valid SSL certificate\n verify-full - This is the most secure mode. Chose this mode to always require encryption and to verify the identity of the destination database server\n See more information - in the docs.", + "type": "object", + "order": 8, + "oneOf": [ { + "title": "disable", + "additionalProperties": true, + "description": "Disable SSL.", + "required": [ "mode" ], + "properties": { + "mode": { + "type": "string", + "const": "disable", + "order": 0 + } + } + }, { + "title": "allow", + "additionalProperties": true, + "description": "Allow SSL mode.", + "required": [ "mode" ], + "properties": { + "mode": { + "type": "string", + "const": "allow", + "order": 0 + } + } + }, { + "title": "prefer", + "additionalProperties": true, + "description": "Prefer SSL mode.", + "required": [ "mode" ], + "properties": { + "mode": { + "type": "string", + "const": "prefer", + "order": 0 + } + } + }, { + "title": "require", + "additionalProperties": true, + "description": "Require SSL mode.", + "required": [ "mode" ], + "properties": { + "mode": { + "type": "string", + "const": "require", + "order": 0 + } + } + }, { + "title": "verify-ca", + "additionalProperties": true, + "description": "Verify-ca SSL mode.", + "required": [ "mode", "ssl_ca_certificate" ], + "properties": { + "mode": { + "type": "string", + "const": "verify-ca", + "order": 0 + }, + "ssl_ca_certificate": { + "type": "string", + "title": "CA certificate", + "description": "Specifies the file name of a PEM file that contains Certificate Authority (CA) certificates for use with SSLMODE=verify-ca.\n See more information - in the docs.", + "airbyte_secret": true, + "multiline": true, + "order": 1 + } + } + }, { + "title": "verify-full", + "additionalProperties": true, + "description": "Verify-full SSL mode.", + "required": [ "mode", "ssl_ca_certificate" ], + "properties": { + "mode": { + "type": "string", + "const": "verify-full", + "order": 0 + }, + "ssl_ca_certificate": { + "type": "string", + "title": "CA certificate", + "description": "Specifies the file name of a PEM file that contains Certificate Authority (CA) certificates for use with SSLMODE=verify-full.\n See more information - in the docs.", + "airbyte_secret": true, + "multiline": true, + "order": 1 + } + } + } ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha", + "allowedHosts": { + "hosts": [ "${host}" ] + } }, { "sourceDefinitionId": "0dad1a35-ccf8-4d03-b73e-6788c00b13ae", "name": "TiDB", diff --git a/connectors.md b/connectors.md index 6e7e80d438cc..c9e2c3933619 100644 --- a/connectors.md +++ b/connectors.md @@ -238,6 +238,7 @@ | **TVMaze Schedule** | TVMaze Schedule icon | Source | airbyte/source-tvmaze-schedule:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/tvmaze-schedule) | [connectors/source/tvmaze-schedule](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/tvmaze-schedule) | [source-tvmaze-schedule](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-tvmaze-schedule) | `bd14b08f-9f43-400f-b2b6-7248b5c72561` | | **TalkDesk Explore** | TalkDesk Explore icon | Source | airbyte/source-talkdesk-explore:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/talkdesk-explore) | [connectors/source/talkdesk-explore](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/talkdesk-explore) | [source-talkdesk-explore](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-talkdesk-explore) | `f00d2cf4-3c28-499a-ba93-b50b6f26359e` | | **Tempo** | Tempo icon | Source | airbyte/source-tempo:0.3.1 | beta | [docs](https://docs.airbyte.com/integrations/sources/tempo) | [connectors/source/tempo](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/tempo) | [source-tempo](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-tempo) | `d1aa448b-7c54-498e-ad95-263cbebcd2db` | +| **Teradata** | Teradata icon | Source | airbyte/source-teradata:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/teradata) | [connectors/source/teradata](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/teradata) | [source-teradata](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-teradata) | `aa8ba6fd-4875-d94e-fc8d-4e1e09aa2503` | | **The Guardian API** | The Guardian API icon | Source | airbyte/source-the-guardian-api:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/the-guardian-api) | [connectors/source/the-guardian-api](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/the-guardian-api) | [source-the-guardian-api](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-the-guardian-api) | `d42bd69f-6bf0-4d0b-9209-16231af07a92` | | **TiDB** | TiDB icon | Source | airbyte/source-tidb:0.2.4 | alpha | [docs](https://docs.airbyte.com/integrations/sources/tidb) | [connectors/source/tidb](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/tidb) | [source-tidb](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-tidb) | `0dad1a35-ccf8-4d03-b73e-6788c00b13ae` | | **TikTok Marketing** | TikTok Marketing icon | Source | airbyte/source-tiktok-marketing:3.0.1 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/tiktok-marketing) | [connectors/source/tiktok-marketing](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/tiktok-marketing) | [source-tiktok-marketing](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-tiktok-marketing) | `4bfac00d-ce15-44ff-95b9-9e3c3e8fbd35` | From 9f533f8a369075d6fef7de8bc80e8b41ae50047b Mon Sep 17 00:00:00 2001 From: sh4sh <6833405+sh4sh@users.noreply.github.com> Date: Mon, 17 Apr 2023 14:43:50 -0600 Subject: [PATCH 101/187] add note on security self-check to security.md (#25235) --- docs/operator-guides/security.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/operator-guides/security.md b/docs/operator-guides/security.md index c7dcd31147c7..6df3cb702841 100644 --- a/docs/operator-guides/security.md +++ b/docs/operator-guides/security.md @@ -27,6 +27,8 @@ For more information, see [Airbyte’s Privacy Policy](https://airbyte.com/priva ## Securing Airbyte Open Source :::note +In version 0.44.0, Airbyte Open Source runs a security self-check during setup to help users secure their Airbyte instance. The security self-check verifies whether the instance is accessible from the internet and if strong authentication is configured. + Our security and reliability commitments are only applicable to Airbyte Cloud. Airbyte Open Source security and reliability depend on your development and production setups. ::: From 004def7a93e5276d969e42015b73a7a368fed027 Mon Sep 17 00:00:00 2001 From: richardlam-quotapath <113922446+richardlam-quotapath@users.noreply.github.com> Date: Mon, 17 Apr 2023 17:08:50 -0400 Subject: [PATCH 102/187] Source Copper: Add opportunities to streams (#24824) * Add opportunities to copper streams * Fix version * update schema * update versions and fix schema formatting * auto-bump connector version --------- Co-authored-by: Mal Hancock Co-authored-by: Octavia Squidington III --- .../src/main/resources/seed/oss_catalog.json | 2 +- .../resources/seed/source_definitions.yaml | 2 +- .../src/main/resources/seed/source_specs.yaml | 2 +- .../connectors/source-copper/Dockerfile | 2 +- .../source_copper/schemas/opportunities.json | 65 +++++++++++++++++++ .../source-copper/source_copper/source.py | 11 +++- .../source-copper/unit_tests/test_source.py | 2 +- connectors.md | 2 +- docs/integrations/sources/copper.md | 3 +- 9 files changed, 83 insertions(+), 8 deletions(-) create mode 100644 airbyte-integrations/connectors/source-copper/source_copper/schemas/opportunities.json diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json index aa84e10c3357..1bdc7c551625 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json @@ -11059,7 +11059,7 @@ "sourceDefinitionId": "44f3002f-2df9-4f6d-b21c-02cd3b47d0dc", "name": "Copper", "dockerRepository": "airbyte/source-copper", - "dockerImageTag": "0.1.0", + "dockerImageTag": "0.2.0", "documentationUrl": "https://docs.airbyte.com/integrations/sources/copper", "icon": "copper.svg", "sourceType": "api", diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml index c141a300a89b..3dead2b5c99d 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml @@ -405,7 +405,7 @@ - name: Copper sourceDefinitionId: 44f3002f-2df9-4f6d-b21c-02cd3b47d0dc dockerRepository: airbyte/source-copper - dockerImageTag: 0.1.0 + dockerImageTag: 0.2.0 documentationUrl: https://docs.airbyte.com/integrations/sources/copper icon: copper.svg sourceType: api diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml index 322e51fc6eeb..1a2da732b50c 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml @@ -3072,7 +3072,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-copper:0.1.0" +- dockerImage: "airbyte/source-copper:0.2.0" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/copper" connectionSpecification: diff --git a/airbyte-integrations/connectors/source-copper/Dockerfile b/airbyte-integrations/connectors/source-copper/Dockerfile index 77aa36b577a0..10473861984a 100644 --- a/airbyte-integrations/connectors/source-copper/Dockerfile +++ b/airbyte-integrations/connectors/source-copper/Dockerfile @@ -34,5 +34,5 @@ COPY source_copper ./source_copper ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=0.1.0 +LABEL io.airbyte.version=0.2.0 LABEL io.airbyte.name=airbyte/source-copper diff --git a/airbyte-integrations/connectors/source-copper/source_copper/schemas/opportunities.json b/airbyte-integrations/connectors/source-copper/source_copper/schemas/opportunities.json new file mode 100644 index 000000000000..18091aec45b7 --- /dev/null +++ b/airbyte-integrations/connectors/source-copper/source_copper/schemas/opportunities.json @@ -0,0 +1,65 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "additionalProperties": true, + "properties": { + "id": { + "type": ["null", "integer"] + }, + "name": { + "type": ["null", "string"] + }, + "assignee_id": { + "type": ["null", "number"] + }, + "close_date": { + "type": ["null", "string"] + }, + "company_id" : { + "type" : ["null", "string"] + }, + "company_name" : { + "type" : ["null", "string"] + }, + "customer_source_id" : { + "type" : ["null", "string"] + }, + "details" : { + "type" : ["null", "string"] + }, + "loss_reason_id" : { + "type" : ["null", "string"] + }, + "monetary_value" : { + "type" : ["null", "integer"] + }, + "pipeline_id" : { + "type" : ["null", "string"] + }, + "primary_contact_id" : { + "type" : ["null", "string"] + }, + "priority" : { + "type" : ["null", "string"] + }, + "pipeline_stage_id" : { + "type" : ["null", "string"] + }, + "status" : { + "type" : ["null", "string"] + }, + "tags": { + "type": ["null", "array"], + "items": {} + }, + "win_probability" : { + "type" : ["null", "number"] + }, + "date_created": { + "type": ["null", "integer"] + }, + "date_modified": { + "type": ["null", "integer"] + } + } +} diff --git a/airbyte-integrations/connectors/source-copper/source_copper/source.py b/airbyte-integrations/connectors/source-copper/source_copper/source.py index ef3850227877..a7cd15a28739 100644 --- a/airbyte-integrations/connectors/source-copper/source_copper/source.py +++ b/airbyte-integrations/connectors/source-copper/source_copper/source.py @@ -91,6 +91,15 @@ def path( return "companies/search" +class Opportunities(CopperStream): + primary_key = "id" + + def path( + self, stream_state: Mapping[str, Any] = None, stream_slice: Mapping[str, Any] = None, next_page_token: Mapping[str, Any] = None + ) -> str: + return "opportunities/search" + + # Source class SourceCopper(AbstractSource): def check_connection(self, logger, config) -> Tuple[bool, any]: @@ -102,4 +111,4 @@ def check_connection(self, logger, config) -> Tuple[bool, any]: return False, f"Unable to connect to Copper API with the provided credentials - {repr(error)}" def streams(self, config: Mapping[str, Any]) -> List[Stream]: - return [People(**config), Companies(**config), Projects(**config)] + return [People(**config), Companies(**config), Projects(**config), Opportunities(**config)] diff --git a/airbyte-integrations/connectors/source-copper/unit_tests/test_source.py b/airbyte-integrations/connectors/source-copper/unit_tests/test_source.py index f5d5029c5a01..178f99562f88 100644 --- a/airbyte-integrations/connectors/source-copper/unit_tests/test_source.py +++ b/airbyte-integrations/connectors/source-copper/unit_tests/test_source.py @@ -22,5 +22,5 @@ def test_streams(mocker): config_mock = MagicMock() streams = source.streams(config_mock) # TODO: replace this with your streams number - expected_streams_number = 3 + expected_streams_number = 4 assert len(streams) == expected_streams_number diff --git a/connectors.md b/connectors.md index c9e2c3933619..e3121bc0f328 100644 --- a/connectors.md +++ b/connectors.md @@ -52,7 +52,7 @@ | **Confluence** | Confluence icon | Source | airbyte/source-confluence:0.1.3 | beta | [docs](https://docs.airbyte.com/integrations/sources/confluence) | [connectors/source/confluence](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/confluence) | [source-confluence](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-confluence) | `cf40a7f8-71f8-45ce-a7fa-fca053e4028c` | | **ConvertKit** | ConvertKit icon | Source | airbyte/source-convertkit:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/convertkit) | [connectors/source/convertkit](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/convertkit) | [source-convertkit](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-convertkit) | `be9ee02f-6efe-4970-979b-95f797a37188` | | **Convex** | Convex icon | Source | airbyte/source-convex:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/convex) | [connectors/source/convex](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/convex) | [source-convex](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-convex) | `c332628c-f55c-4017-8222-378cfafda9b2` | -| **Copper** | Copper icon | Source | airbyte/source-copper:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/copper) | [connectors/source/copper](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/copper) | [source-copper](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-copper) | `44f3002f-2df9-4f6d-b21c-02cd3b47d0dc` | +| **Copper** | Copper icon | Source | airbyte/source-copper:0.2.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/copper) | [connectors/source/copper](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/copper) | [source-copper](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-copper) | `44f3002f-2df9-4f6d-b21c-02cd3b47d0dc` | | **Courier** | Courier icon | Source | airbyte/source-courier:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/courier) | [connectors/source/courier](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/courier) | [source-courier](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-courier) | `0541b2cd-2367-4986-b5f1-b79ff55439e4` | | **Customer.io** | Customer.io icon | Source | farosai/airbyte-customer-io-source:0.1.23 | alpha | [docs](https://docs.airbyte.com/integrations/sources/customer-io) | [connectors/destination/airbyte-customer-io-source](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/airbyte-customer-io-source) | [airbyte-customer-io-source](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/airbyte-customer-io-source) | `c47d6804-8b98-449f-970a-5ddb5cb5d7aa` | | **DV 360** | DV 360 icon | Source | airbyte/source-dv-360:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/dv-360) | [connectors/source/dv-360](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/dv-360) | [source-dv-360](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-dv-360) | `1356e1d9-977f-4057-ad4b-65f25329cf61` | diff --git a/docs/integrations/sources/copper.md b/docs/integrations/sources/copper.md index 939670690390..f87eba5d6f1a 100644 --- a/docs/integrations/sources/copper.md +++ b/docs/integrations/sources/copper.md @@ -40,4 +40,5 @@ The Copper source connector supports the following [sync modes](https://docs.air | Version | Date | Pull Request | Subject | | :------ | :--------- | :-------------------------------------------------------- | :--------------------------------- | -| 0.1.0 | 2022-11-17 | [#18848](https://github.com/airbytehq/airbyte/pull/18848) | 🎉 New Source: Copper [python cdk] | +| 0.2.0 | 2023-04-17 | [24824](https://github.com/airbytehq/airbyte/pull/24824) | Add `opportunities` stream | +| 0.1.0 | 2022-11-17 | [18848](https://github.com/airbytehq/airbyte/pull/18848) | 🎉 New Source: Copper [python cdk] | From 76e90d76aa8a4c18f241ef3c7ab164f1399100f1 Mon Sep 17 00:00:00 2001 From: Alexandre Girard Date: Mon, 17 Apr 2023 14:42:49 -0700 Subject: [PATCH 103/187] low-code: Clean up SessionTokenAuthenticator interface (#25086) * Username and session token are optional fields * update * Add titles, descriptions, and examples * Automated Commit - Formatting Changes * fix a small typo --------- Co-authored-by: girarda --- .../declarative_component_schema.yaml | 39 ++++++++++++--- .../models/declarative_component_schema.py | 50 ++++++++++++++++--- .../parsers/model_to_component_factory.py | 12 +++-- .../test_model_to_component_factory.py | 39 ++++++++++++++- .../source_metabase/manifest.yaml | 1 - .../testing-connectors/README.md | 2 +- 6 files changed, 122 insertions(+), 21 deletions(-) diff --git a/airbyte-cdk/python/airbyte_cdk/sources/declarative/declarative_component_schema.yaml b/airbyte-cdk/python/airbyte_cdk/sources/declarative/declarative_component_schema.yaml index f05447f0c0a6..c305a306fdfe 100644 --- a/airbyte-cdk/python/airbyte_cdk/sources/declarative/declarative_component_schema.yaml +++ b/airbyte-cdk/python/airbyte_cdk/sources/declarative/declarative_component_schema.yaml @@ -1013,38 +1013,63 @@ definitions: type: object additionalProperties: true SessionTokenAuthenticator: + title: Session Token Authenticator description: Authenticator for requests based on session tokens. A session token is a random value generated by a server to identify a specific user for the duration of one interaction session type: object required: - type - - api_url - header - login_url - - session_token - session_token_response_key - - username - validate_session_url properties: type: type: string enum: [SessionTokenAuthenticator] - api_url: - type: string header: + title: Session Request Header + description: The name of the session token header that will be injected in the request type: string + examples: + - "X-Session" login_url: + title: Login Path + description: Path of the login URL (do not include the base URL) type: string + examples: + - session session_token: + title: Session Token + description: Session token to use if using a pre-defined token. Not needed if authenticating with username + password pair type: string + example: + - "{{ config['session_token'] }}" session_token_response_key: + title: Response Token Response Key + description: Name of the key of the session token to be extracted from the response type: string + examples: + - id username: + title: Username + description: Username used to authenticate and obtain a session token type: string - validate_session_url: - type: string + examples: + - " {{ config['username'] }}" password: + title: Password + description: Password used to authenticate and obtain a session token type: string default: "" + examples: + - "{{ config['password'] }}" + - "" + validate_session_url: + title: Validate Session Path + description: Path of the URL to use to validate that the session token is valid (do not include the base URL) + type: string + examples: + - "user/current" $parameters: type: object additionalProperties: true diff --git a/airbyte-cdk/python/airbyte_cdk/sources/declarative/models/declarative_component_schema.py b/airbyte-cdk/python/airbyte_cdk/sources/declarative/models/declarative_component_schema.py index 4027abc15305..e6f0279bd664 100644 --- a/airbyte-cdk/python/airbyte_cdk/sources/declarative/models/declarative_component_schema.py +++ b/airbyte-cdk/python/airbyte_cdk/sources/declarative/models/declarative_component_schema.py @@ -318,14 +318,48 @@ class Config: class SessionTokenAuthenticator(BaseModel): type: Literal["SessionTokenAuthenticator"] - api_url: str - header: str - login_url: str - session_token: str - session_token_response_key: str - username: str - validate_session_url: str - password: Optional[str] = "" + header: str = Field( + ..., + description="The name of the session token header that will be injected in the request", + examples=["X-Session"], + title="Session Request Header", + ) + login_url: str = Field( + ..., + description="Path of the login URL (do not include the base URL)", + examples=["session"], + title="Login Path", + ) + session_token: Optional[str] = Field( + None, + description="Session token to use if using a pre-defined token. Not needed if authenticating with username + password pair", + example=["{{ config['session_token'] }}"], + title="Session Token", + ) + session_token_response_key: str = Field( + ..., + description="Name of the key of the session token to be extracted from the response", + examples=["id"], + title="Response Token Response Key", + ) + username: Optional[str] = Field( + None, + description="Username used to authenticate and obtain a session token", + examples=[" {{ config['username'] }}"], + title="Username", + ) + password: Optional[str] = Field( + "", + description="Password used to authenticate and obtain a session token", + examples=["{{ config['password'] }}", ""], + title="Password", + ) + validate_session_url: str = Field( + ..., + description="Path of the URL to use to validate that the session token is valid (do not include the base URL)", + examples=["user/current"], + title="Validate Session Path", + ) parameters: Optional[Dict[str, Any]] = Field(None, alias="$parameters") diff --git a/airbyte-cdk/python/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py b/airbyte-cdk/python/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py index c86a848b129c..8ab9fe802b27 100644 --- a/airbyte-cdk/python/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py +++ b/airbyte-cdk/python/airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py @@ -554,7 +554,11 @@ def create_exponential_backoff_strategy(model: ExponentialBackoffStrategyModel, return ExponentialBackoffStrategy(factor=model.factor, parameters=model.parameters, config=config) def create_http_requester(self, model: HttpRequesterModel, config: Config, *, name: str) -> HttpRequester: - authenticator = self._create_component_from_model(model=model.authenticator, config=config) if model.authenticator else None + authenticator = ( + self._create_component_from_model(model=model.authenticator, config=config, url_base=model.url_base) + if model.authenticator + else None + ) error_handler = ( self._create_component_from_model(model=model.error_handler, config=config) if model.error_handler @@ -730,9 +734,11 @@ def create_remove_fields(model: RemoveFieldsModel, config: Config, **kwargs) -> return RemoveFields(field_pointers=model.field_pointers, parameters={}) @staticmethod - def create_session_token_authenticator(model: SessionTokenAuthenticatorModel, config: Config, **kwargs) -> SessionTokenAuthenticator: + def create_session_token_authenticator( + model: SessionTokenAuthenticatorModel, config: Config, *, url_base: str, **kwargs + ) -> SessionTokenAuthenticator: return SessionTokenAuthenticator( - api_url=model.api_url, + api_url=url_base, header=model.header, login_url=model.login_url, password=model.password, diff --git a/airbyte-cdk/python/unit_tests/sources/declarative/parsers/test_model_to_component_factory.py b/airbyte-cdk/python/unit_tests/sources/declarative/parsers/test_model_to_component_factory.py index 615d484c724c..88da142e8e76 100644 --- a/airbyte-cdk/python/unit_tests/sources/declarative/parsers/test_model_to_component_factory.py +++ b/airbyte-cdk/python/unit_tests/sources/declarative/parsers/test_model_to_component_factory.py @@ -6,7 +6,7 @@ import pytest from airbyte_cdk.sources.declarative.auth import DeclarativeOauth2Authenticator -from airbyte_cdk.sources.declarative.auth.token import BasicHttpAuthenticator, BearerAuthenticator +from airbyte_cdk.sources.declarative.auth.token import BasicHttpAuthenticator, BearerAuthenticator, SessionTokenAuthenticator from airbyte_cdk.sources.declarative.checks import CheckStream from airbyte_cdk.sources.declarative.datetime import MinMaxDatetime from airbyte_cdk.sources.declarative.declarative_stream import DeclarativeStream @@ -689,6 +689,43 @@ def test_create_requester(test_name, error_handler, expected_backoff_strategy_ty assert selector._request_options_provider._headers_interpolator._interpolator.mapping["header"] == "header_value" +def test_create_request_with_session_authenticator(): + content = """ +requester: + type: HttpRequester + path: "/v3/marketing/lists" + $parameters: + name: 'lists' + url_base: "https://api.sendgrid.com" + authenticator: + type: "SessionTokenAuthenticator" + username: "{{ parameters.name}}" + password: "{{ config.apikey }}" + login_url: "login" + header: "token" + session_token_response_key: "session" + validate_session_url: validate + request_parameters: + a_parameter: "something_here" + request_headers: + header: header_value + """ + name = "name" + parsed_manifest = YamlDeclarativeSource._parse(content) + resolved_manifest = resolver.preprocess_manifest(parsed_manifest) + requester_manifest = transformer.propagate_types_and_parameters("", resolved_manifest["requester"], {}) + + selector = factory.create_component( + model_type=HttpRequesterModel, component_definition=requester_manifest, config=input_config, name=name + ) + + assert isinstance(selector, HttpRequester) + assert isinstance(selector.authenticator, SessionTokenAuthenticator) + assert selector.authenticator._username.eval(input_config) == "lists" + assert selector.authenticator._password.eval(input_config) == "verysecrettoken" + assert selector.authenticator._api_url.eval(input_config) == "https://api.sendgrid.com" + + def test_create_composite_error_handler(): content = """ error_handler: diff --git a/airbyte-integrations/connectors/source-metabase/source_metabase/manifest.yaml b/airbyte-integrations/connectors/source-metabase/source_metabase/manifest.yaml index 7cbc83eb291a..878f47fd7005 100644 --- a/airbyte-integrations/connectors/source-metabase/source_metabase/manifest.yaml +++ b/airbyte-integrations/connectors/source-metabase/source_metabase/manifest.yaml @@ -16,7 +16,6 @@ definitions: type: "SessionTokenAuthenticator" username: "{{ config['username'] }}" password: "{{ config['password'] }}" - api_url: "{{ config['instance_api_url'] }}" header: "X-Metabase-Session" session_token: "{{ config['session_token'] }}" session_token_response_key: "id" diff --git a/docs/connector-development/testing-connectors/README.md b/docs/connector-development/testing-connectors/README.md index a78d039c0bf6..64b7ab789ed5 100644 --- a/docs/connector-development/testing-connectors/README.md +++ b/docs/connector-development/testing-connectors/README.md @@ -45,7 +45,7 @@ Here are some example commands: 3. `/test connector=connectors/source-sendgrid` - Runs integration tests for a single connector on the latest PR commit. 4. `/test connector=source-sendgrid ref=master` - Runs integration tests for a single connector on a different branch. 5. `/test connector=source-sendgrid ref=d5c53102` - Runs integration tests for a single connector on a specific commit. -5. `/test connector=source-sendgrid local_cdk=1` - Runs integration tests for a single connector on the latest PR commit, against any CDK changes on that commit. +6. `/test connector=source-sendgrid local_cdk=1` - Runs integration tests for a single connector on the latest PR commit, against any CDK changes on that commit. A command dispatcher GitHub workflow will launch on comment submission. This dispatcher will add an :eyes: reaction to the comment when it starts processing. If there is an error dispatching your request, an error will be appended to your comment. If it launches the test run successfully, a :rocket: reaction will appear on your comment. From 045c3c948818519601ef29cd137e8fd668d64697 Mon Sep 17 00:00:00 2001 From: girarda Date: Mon, 17 Apr 2023 21:49:21 +0000 Subject: [PATCH 104/187] =?UTF-8?q?=F0=9F=A4=96=20Bump=20minor=20version?= =?UTF-8?q?=20of=20Airbyte=20CDK?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- airbyte-cdk/python/.bumpversion.cfg | 2 +- airbyte-cdk/python/CHANGELOG.md | 3 +++ airbyte-cdk/python/Dockerfile | 4 ++-- airbyte-cdk/python/setup.py | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/airbyte-cdk/python/.bumpversion.cfg b/airbyte-cdk/python/.bumpversion.cfg index 93d79e4c4ebe..28aafb5e34f2 100644 --- a/airbyte-cdk/python/.bumpversion.cfg +++ b/airbyte-cdk/python/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.34.3 +current_version = 0.35.0 commit = False [bumpversion:file:setup.py] diff --git a/airbyte-cdk/python/CHANGELOG.md b/airbyte-cdk/python/CHANGELOG.md index ae61f05f5477..806ea5ea7999 100644 --- a/airbyte-cdk/python/CHANGELOG.md +++ b/airbyte-cdk/python/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog +## 0.35.0 +low-code: simplify session token authenticator interface + ## 0.34.3 low-code: fix typo in ManifestDeclarativeSource diff --git a/airbyte-cdk/python/Dockerfile b/airbyte-cdk/python/Dockerfile index d6ad6f60838a..e8828d63ed7a 100644 --- a/airbyte-cdk/python/Dockerfile +++ b/airbyte-cdk/python/Dockerfile @@ -10,7 +10,7 @@ RUN apk --no-cache upgrade \ && apk --no-cache add tzdata build-base # install airbyte-cdk -RUN pip install --prefix=/install airbyte-cdk==0.34.3 +RUN pip install --prefix=/install airbyte-cdk==0.35.0 # build a clean environment FROM base @@ -32,5 +32,5 @@ ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] # needs to be the same as CDK -LABEL io.airbyte.version=0.34.3 +LABEL io.airbyte.version=0.35.0 LABEL io.airbyte.name=airbyte/source-declarative-manifest diff --git a/airbyte-cdk/python/setup.py b/airbyte-cdk/python/setup.py index 44d80940c9b3..27aacf113940 100644 --- a/airbyte-cdk/python/setup.py +++ b/airbyte-cdk/python/setup.py @@ -17,7 +17,7 @@ name="airbyte-cdk", # The version of the airbyte-cdk package is used at runtime to validate manifests. That validation must be # updated if our semver format changes such as using release candidate versions. - version="0.34.3", + version="0.35.0", description="A framework for writing Airbyte Connectors.", long_description=README, long_description_content_type="text/markdown", From 141a6fd7481ad2f4f450d95163312d75a575c5ca Mon Sep 17 00:00:00 2001 From: Akash Kulkarni <113392464+akashkulk@users.noreply.github.com> Date: Mon, 17 Apr 2023 15:39:04 -0700 Subject: [PATCH 105/187] Add logging functionality to understand Xmin wraparound (#25220) * Add logging functionality - Add logging for DB version (all JDBC sources) - Add logging for Xmin values * Automated Change * Renaming + comments * More comments * Bump docker version + docs * auto-bump connector version * Update failed source_specs.yaml --------- Co-authored-by: akashkulk Co-authored-by: Octavia Squidington III --- .../src/main/resources/seed/oss_catalog.json | 8 +-- .../resources/seed/source_definitions.yaml | 8 +-- .../src/main/resources/seed/source_specs.yaml | 8 +-- .../source-alloydb-strict-encrypt/Dockerfile | 2 +- .../connectors/source-alloydb/Dockerfile | 2 +- .../source/jdbc/AbstractJdbcSource.java | 14 ++++ .../source-mssql-strict-encrypt/Dockerfile | 2 +- .../connectors/source-mssql/Dockerfile | 2 +- .../source-mysql-strict-encrypt/Dockerfile | 2 +- .../connectors/source-mysql/Dockerfile | 2 +- .../source-postgres-strict-encrypt/Dockerfile | 2 +- .../connectors/source-postgres/Dockerfile | 2 +- .../source/postgres/PostgresQueryUtils.java | 42 ++++++++++++ .../source/postgres/PostgresSource.java | 7 ++ .../source/relationaldb/AbstractDbSource.java | 11 +++ connectors.md | 8 +-- docs/integrations/sources/alloydb.md | 67 ++++++++++--------- docs/integrations/sources/mssql.md | 1 + docs/integrations/sources/mysql.md | 1 + docs/integrations/sources/postgres.md | 3 +- 20 files changed, 136 insertions(+), 58 deletions(-) diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json index 1bdc7c551625..5cc9f899aff0 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json @@ -8008,7 +8008,7 @@ "sourceDefinitionId": "1fa90628-2b9e-11ed-a261-0242ac120002", "name": "AlloyDB for PostgreSQL", "dockerRepository": "airbyte/source-alloydb", - "dockerImageTag": "2.0.21", + "dockerImageTag": "2.0.22", "documentationUrl": "https://docs.airbyte.com/integrations/sources/alloydb", "icon": "alloydb.svg", "sourceType": "database", @@ -17202,7 +17202,7 @@ "sourceDefinitionId": "b5ea17b1-f170-46dc-bc31-cc744ca984c1", "name": "Microsoft SQL Server (MSSQL)", "dockerRepository": "airbyte/source-mssql", - "dockerImageTag": "1.0.11", + "dockerImageTag": "1.0.12", "documentationUrl": "https://docs.airbyte.com/integrations/sources/mssql", "icon": "mssql.svg", "sourceType": "database", @@ -18170,7 +18170,7 @@ "sourceDefinitionId": "435bb9a5-7887-4809-aa58-28c27df0d7ad", "name": "MySQL", "dockerRepository": "airbyte/source-mysql", - "dockerImageTag": "2.0.15", + "dockerImageTag": "2.0.16", "documentationUrl": "https://docs.airbyte.com/integrations/sources/mysql", "icon": "mysql.svg", "sourceType": "database", @@ -20896,7 +20896,7 @@ "sourceDefinitionId": "decd338e-5647-4c0b-adf4-da0e75f5a750", "name": "Postgres", "dockerRepository": "airbyte/source-postgres", - "dockerImageTag": "2.0.21", + "dockerImageTag": "2.0.22", "documentationUrl": "https://docs.airbyte.com/integrations/sources/postgres", "icon": "postgresql.svg", "sourceType": "database", diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml index 3dead2b5c99d..9a9b843b17b3 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml @@ -45,7 +45,7 @@ - name: AlloyDB for PostgreSQL sourceDefinitionId: 1fa90628-2b9e-11ed-a261-0242ac120002 dockerRepository: airbyte/source-alloydb - dockerImageTag: 2.0.21 + dockerImageTag: 2.0.22 documentationUrl: https://docs.airbyte.com/integrations/sources/alloydb icon: alloydb.svg sourceType: database @@ -1215,7 +1215,7 @@ - name: Microsoft SQL Server (MSSQL) sourceDefinitionId: b5ea17b1-f170-46dc-bc31-cc744ca984c1 dockerRepository: airbyte/source-mssql - dockerImageTag: 1.0.11 + dockerImageTag: 1.0.12 documentationUrl: https://docs.airbyte.com/integrations/sources/mssql icon: mssql.svg sourceType: database @@ -1282,7 +1282,7 @@ - name: MySQL sourceDefinitionId: 435bb9a5-7887-4809-aa58-28c27df0d7ad dockerRepository: airbyte/source-mysql - dockerImageTag: 2.0.15 + dockerImageTag: 2.0.16 documentationUrl: https://docs.airbyte.com/integrations/sources/mysql icon: mysql.svg sourceType: database @@ -1602,7 +1602,7 @@ - name: Postgres sourceDefinitionId: decd338e-5647-4c0b-adf4-da0e75f5a750 dockerRepository: airbyte/source-postgres - dockerImageTag: 2.0.21 + dockerImageTag: 2.0.22 documentationUrl: https://docs.airbyte.com/integrations/sources/postgres icon: postgresql.svg sourceType: database diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml index 1a2da732b50c..cc04dd6501e8 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml @@ -370,7 +370,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-alloydb:2.0.21" +- dockerImage: "airbyte/source-alloydb:2.0.22" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/postgres" connectionSpecification: @@ -8582,7 +8582,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-mssql:1.0.11" +- dockerImage: "airbyte/source-mssql:1.0.12" spec: documentationUrl: "https://docs.airbyte.com/integrations/destinations/mssql" connectionSpecification: @@ -9459,7 +9459,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-mysql:2.0.15" +- dockerImage: "airbyte/source-mysql:2.0.16" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/mysql" connectionSpecification: @@ -12057,7 +12057,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-postgres:2.0.21" +- dockerImage: "airbyte/source-postgres:2.0.22" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/postgres" connectionSpecification: diff --git a/airbyte-integrations/connectors/source-alloydb-strict-encrypt/Dockerfile b/airbyte-integrations/connectors/source-alloydb-strict-encrypt/Dockerfile index 70f949eeb1f0..8f2101327242 100644 --- a/airbyte-integrations/connectors/source-alloydb-strict-encrypt/Dockerfile +++ b/airbyte-integrations/connectors/source-alloydb-strict-encrypt/Dockerfile @@ -16,5 +16,5 @@ ENV APPLICATION source-alloydb-strict-encrypt COPY --from=build /airbyte /airbyte -LABEL io.airbyte.version=2.0.21 +LABEL io.airbyte.version=2.0.22 LABEL io.airbyte.name=airbyte/source-alloydb-strict-encrypt diff --git a/airbyte-integrations/connectors/source-alloydb/Dockerfile b/airbyte-integrations/connectors/source-alloydb/Dockerfile index 788008352479..411a2914d3a3 100644 --- a/airbyte-integrations/connectors/source-alloydb/Dockerfile +++ b/airbyte-integrations/connectors/source-alloydb/Dockerfile @@ -16,5 +16,5 @@ ENV APPLICATION source-alloydb COPY --from=build /airbyte /airbyte -LABEL io.airbyte.version=2.0.21 +LABEL io.airbyte.version=2.0.22 LABEL io.airbyte.name=airbyte/source-alloydb diff --git a/airbyte-integrations/connectors/source-jdbc/src/main/java/io/airbyte/integrations/source/jdbc/AbstractJdbcSource.java b/airbyte-integrations/connectors/source-jdbc/src/main/java/io/airbyte/integrations/source/jdbc/AbstractJdbcSource.java index 54c90053a960..9f495cf00b7c 100644 --- a/airbyte-integrations/connectors/source-jdbc/src/main/java/io/airbyte/integrations/source/jdbc/AbstractJdbcSource.java +++ b/airbyte-integrations/connectors/source-jdbc/src/main/java/io/airbyte/integrations/source/jdbc/AbstractJdbcSource.java @@ -426,6 +426,20 @@ public JdbcDatabase createDatabase(final JsonNode sourceConfig) throws SQLExcept return database; } + /** + * {@inheritDoc} + * @param database database instance + * @param catalog schema of the incoming messages. + * @throws SQLException + */ + @Override + protected void logPreSyncDebugData(final JdbcDatabase database, final ConfiguredAirbyteCatalog catalog) + throws SQLException { + LOGGER.info("Data source product recognized as {}:{}", + database.getMetaData().getDatabaseProductName(), + database.getMetaData().getDatabaseProductVersion()); + } + @Override public void close() { dataSources.forEach(d -> { diff --git a/airbyte-integrations/connectors/source-mssql-strict-encrypt/Dockerfile b/airbyte-integrations/connectors/source-mssql-strict-encrypt/Dockerfile index 62d27b8cd20b..69bd27ea6f68 100644 --- a/airbyte-integrations/connectors/source-mssql-strict-encrypt/Dockerfile +++ b/airbyte-integrations/connectors/source-mssql-strict-encrypt/Dockerfile @@ -16,5 +16,5 @@ ENV APPLICATION source-mssql-strict-encrypt COPY --from=build /airbyte /airbyte -LABEL io.airbyte.version=1.0.11 +LABEL io.airbyte.version=1.0.12 LABEL io.airbyte.name=airbyte/source-mssql-strict-encrypt diff --git a/airbyte-integrations/connectors/source-mssql/Dockerfile b/airbyte-integrations/connectors/source-mssql/Dockerfile index d03280a99f27..0173ea96eb1b 100644 --- a/airbyte-integrations/connectors/source-mssql/Dockerfile +++ b/airbyte-integrations/connectors/source-mssql/Dockerfile @@ -16,5 +16,5 @@ ENV APPLICATION source-mssql COPY --from=build /airbyte /airbyte -LABEL io.airbyte.version=1.0.11 +LABEL io.airbyte.version=1.0.12 LABEL io.airbyte.name=airbyte/source-mssql diff --git a/airbyte-integrations/connectors/source-mysql-strict-encrypt/Dockerfile b/airbyte-integrations/connectors/source-mysql-strict-encrypt/Dockerfile index 07a1591da61b..d5ae34b51864 100644 --- a/airbyte-integrations/connectors/source-mysql-strict-encrypt/Dockerfile +++ b/airbyte-integrations/connectors/source-mysql-strict-encrypt/Dockerfile @@ -16,6 +16,6 @@ ENV APPLICATION source-mysql-strict-encrypt COPY --from=build /airbyte /airbyte -LABEL io.airbyte.version=2.0.15 +LABEL io.airbyte.version=2.0.16 LABEL io.airbyte.name=airbyte/source-mysql-strict-encrypt diff --git a/airbyte-integrations/connectors/source-mysql/Dockerfile b/airbyte-integrations/connectors/source-mysql/Dockerfile index e90365b5ede8..45b64ff3db17 100644 --- a/airbyte-integrations/connectors/source-mysql/Dockerfile +++ b/airbyte-integrations/connectors/source-mysql/Dockerfile @@ -16,6 +16,6 @@ ENV APPLICATION source-mysql COPY --from=build /airbyte /airbyte -LABEL io.airbyte.version=2.0.15 +LABEL io.airbyte.version=2.0.16 LABEL io.airbyte.name=airbyte/source-mysql diff --git a/airbyte-integrations/connectors/source-postgres-strict-encrypt/Dockerfile b/airbyte-integrations/connectors/source-postgres-strict-encrypt/Dockerfile index 41ba6476feee..107749f086e9 100644 --- a/airbyte-integrations/connectors/source-postgres-strict-encrypt/Dockerfile +++ b/airbyte-integrations/connectors/source-postgres-strict-encrypt/Dockerfile @@ -16,5 +16,5 @@ ENV APPLICATION source-postgres-strict-encrypt COPY --from=build /airbyte /airbyte -LABEL io.airbyte.version=2.0.21 +LABEL io.airbyte.version=2.0.22 LABEL io.airbyte.name=airbyte/source-postgres-strict-encrypt diff --git a/airbyte-integrations/connectors/source-postgres/Dockerfile b/airbyte-integrations/connectors/source-postgres/Dockerfile index 687c8beb22a1..212f0e8615e4 100644 --- a/airbyte-integrations/connectors/source-postgres/Dockerfile +++ b/airbyte-integrations/connectors/source-postgres/Dockerfile @@ -16,5 +16,5 @@ ENV APPLICATION source-postgres COPY --from=build /airbyte /airbyte -LABEL io.airbyte.version=2.0.21 +LABEL io.airbyte.version=2.0.22 LABEL io.airbyte.name=airbyte/source-postgres diff --git a/airbyte-integrations/connectors/source-postgres/src/main/java/io/airbyte/integrations/source/postgres/PostgresQueryUtils.java b/airbyte-integrations/connectors/source-postgres/src/main/java/io/airbyte/integrations/source/postgres/PostgresQueryUtils.java index e80f74b8b0a6..f853fd050319 100644 --- a/airbyte-integrations/connectors/source-postgres/src/main/java/io/airbyte/integrations/source/postgres/PostgresQueryUtils.java +++ b/airbyte-integrations/connectors/source-postgres/src/main/java/io/airbyte/integrations/source/postgres/PostgresQueryUtils.java @@ -4,11 +4,22 @@ package io.airbyte.integrations.source.postgres; +import com.fasterxml.jackson.databind.JsonNode; +import com.google.common.base.Preconditions; +import io.airbyte.db.jdbc.JdbcDatabase; +import io.airbyte.db.jdbc.JdbcUtils; +import java.sql.SQLException; +import java.util.List; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * Utility class to define constants related to querying postgres */ public class PostgresQueryUtils { + private static final Logger LOGGER = LoggerFactory.getLogger(PostgresQueryUtils.class); + public static final String NULL_CURSOR_VALUE_WITH_SCHEMA_QUERY = """ SELECT @@ -30,8 +41,39 @@ public class PostgresQueryUtils { pg_relation_size('%s') AS %s; """; + /** + * Creates query to understand the Xmin status. + */ + public static final String XMIN_STATUS_QUERY = + """ + select (txid_snapshot_xmin(txid_current_snapshot()) >> 32) AS num_wraparound, + (txid_snapshot_xmin(txid_current_snapshot()) % (2^32)::bigint) AS xmin_xid_value, + txid_snapshot_xmin(txid_current_snapshot()) AS xmin_raw_value; + """; + + public static final String NUM_WRAPAROUND_COL = "num_wraparound"; + + public static final String XMIN_XID_VALUE_COL = "xmin_xid_value"; + + public static final String XMIN_RAW_VALUE_COL = "xmin_raw_value"; + public static final String ROW_COUNT_RESULT_COL = "rowcount"; public static final String TOTAL_BYTES_RESULT_COL = "totalbytes"; + /** + * Logs the current xmin status : + * 1. The number of wraparounds the source DB has undergone. (These are the epoch bits in the xmin snapshot). + * 2. The 32-bit xmin value associated with the xmin snapshot. This is the value that is ultimately written and recorded on every row. + * 3. The raw value of the xmin snapshot (which is a combination of 1 and 2). If no wraparound has occurred, this should be the same as 2. + */ + public static void logXminStatus(final JdbcDatabase database) throws SQLException { + LOGGER.debug("xmin status query: {}", XMIN_STATUS_QUERY ); + final List jsonNodes = database.bufferedResultSetQuery(conn -> conn.prepareStatement(XMIN_STATUS_QUERY).executeQuery(), + resultSet -> JdbcUtils.getDefaultSourceOperations().rowToJson(resultSet)); + Preconditions.checkState(jsonNodes.size() == 1); + final JsonNode result = jsonNodes.get(0); + LOGGER.info(String.format("Xmin Status : {Number of wraparounds: %s, Xmin Transaction Value: %s, Xmin Raw Value: %s", + result.get(NUM_WRAPAROUND_COL), result.get(XMIN_XID_VALUE_COL), result.get(XMIN_RAW_VALUE_COL))); + } } diff --git a/airbyte-integrations/connectors/source-postgres/src/main/java/io/airbyte/integrations/source/postgres/PostgresSource.java b/airbyte-integrations/connectors/source-postgres/src/main/java/io/airbyte/integrations/source/postgres/PostgresSource.java index 964f286a20b0..fa4fb975e1e2 100644 --- a/airbyte-integrations/connectors/source-postgres/src/main/java/io/airbyte/integrations/source/postgres/PostgresSource.java +++ b/airbyte-integrations/connectors/source-postgres/src/main/java/io/airbyte/integrations/source/postgres/PostgresSource.java @@ -202,6 +202,13 @@ protected Set getExcludedViews() { return Set.of("pg_stat_statements", "pg_stat_statements_info"); } + @Override + protected void logPreSyncDebugData(final JdbcDatabase database, final ConfiguredAirbyteCatalog catalog) + throws SQLException { + super.logPreSyncDebugData(database, catalog); + PostgresQueryUtils.logXminStatus(database); + } + @Override @Trace(operationName = DISCOVER_TRACE_OPERATION_NAME) public AirbyteCatalog discover(final JsonNode config) throws Exception { diff --git a/airbyte-integrations/connectors/source-relational-db/src/main/java/io/airbyte/integrations/source/relationaldb/AbstractDbSource.java b/airbyte-integrations/connectors/source-relational-db/src/main/java/io/airbyte/integrations/source/relationaldb/AbstractDbSource.java index 43e981d6f6b0..c72f77fcbdf5 100644 --- a/airbyte-integrations/connectors/source-relational-db/src/main/java/io/airbyte/integrations/source/relationaldb/AbstractDbSource.java +++ b/airbyte-integrations/connectors/source-relational-db/src/main/java/io/airbyte/integrations/source/relationaldb/AbstractDbSource.java @@ -143,6 +143,8 @@ public AutoCloseableIterator read(final JsonNode config, final Database database = createDatabase(config); + logPreSyncDebugData(database, catalog); + final Map>> fullyQualifiedTableNameToInfo = discoverWithoutSystemTables(database) .stream() @@ -547,6 +549,15 @@ protected Set getPrivilegesTableForCurrentUser(final JdbcDatabase databas @Trace(operationName = DISCOVER_TRACE_OPERATION_NAME) protected abstract Database createDatabase(JsonNode config) throws Exception; + /** + * Gets and logs relevant and useful database metadata such as DB product/version, index names and definition. Called before syncing data. + * Any logged information should be scoped to the configured catalog and database. + * + * @param database given database instance. + * @param catalog configured catalog. + */ + protected void logPreSyncDebugData(final Database database, final ConfiguredAirbyteCatalog catalog) throws Exception {} + /** * Configures a list of operations that can be used to check the connection to the source. * diff --git a/connectors.md b/connectors.md index e3121bc0f328..38e53b98adcd 100644 --- a/connectors.md +++ b/connectors.md @@ -9,7 +9,7 @@ | **Adjust** | Adjust icon | Source | airbyte/source-adjust:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/adjust) | [connectors/source/adjust](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/adjust) | [source-adjust](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-adjust) | `d3b7fa46-111b-419a-998a-d7f046f6d66d` | | **Aha** | Aha icon | Source | airbyte/source-aha:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/aha) | [connectors/source/aha](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/aha) | [source-aha](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-aha) | `81ca39dc-4534-4dd2-b848-b0cfd2c11fce` | | **Airtable** | Airtable icon | Source | airbyte/source-airtable:3.0.0 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/airtable) | [connectors/source/airtable](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/airtable) | [source-airtable](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-airtable) | `14c6e7ea-97ed-4f5e-a7b5-25e9a80b8212` | -| **AlloyDB for PostgreSQL** | AlloyDB for PostgreSQL icon | Source | airbyte/source-alloydb:2.0.21 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/alloydb) | [connectors/source/alloydb](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/alloydb) | [source-alloydb](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-alloydb) | `1fa90628-2b9e-11ed-a261-0242ac120002` | +| **AlloyDB for PostgreSQL** | AlloyDB for PostgreSQL icon | Source | airbyte/source-alloydb:2.0.22 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/alloydb) | [connectors/source/alloydb](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/alloydb) | [source-alloydb](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-alloydb) | `1fa90628-2b9e-11ed-a261-0242ac120002` | | **Alpha Vantage** | Alpha Vantage icon | Source | airbyte/source-alpha-vantage:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/alpha-vantage) | [connectors/source/alpha-vantage](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/alpha-vantage) | [source-alpha-vantage](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-alpha-vantage) | `db385323-9333-4fec-bec3-9e0ca9326c90` | | **Amazon Ads** | Amazon Ads icon | Source | airbyte/source-amazon-ads:1.0.3 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/amazon-ads) | [connectors/source/amazon-ads](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/amazon-ads) | [source-amazon-ads](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-amazon-ads) | `c6b0a29e-1da9-4512-9002-7bfd0cba2246` | | **Amazon SQS** | Amazon SQS icon | Source | airbyte/source-amazon-sqs:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/amazon-sqs) | [connectors/source/amazon-sqs](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/amazon-sqs) | [source-amazon-sqs](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-amazon-sqs) | `983fd355-6bf3-4709-91b5-37afa391eeb6` | @@ -140,13 +140,13 @@ | **Marketo** | Marketo icon | Source | airbyte/source-marketo:1.0.3 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/marketo) | [connectors/source/marketo](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/marketo) | [source-marketo](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-marketo) | `9e0556f4-69df-4522-a3fb-03264d36b348` | | **Metabase** | Metabase icon | Source | airbyte/source-metabase:0.3.1 | beta | [docs](https://docs.airbyte.com/integrations/sources/metabase) | [connectors/source/metabase](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/metabase) | [source-metabase](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-metabase) | `c7cb421b-942e-4468-99ee-e369bcabaec5` | | **Microsoft Dataverse** | Microsoft Dataverse icon | Source | airbyte/source-microsoft-dataverse:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/microsoft-dataverse) | [connectors/source/microsoft-dataverse](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/microsoft-dataverse) | [source-microsoft-dataverse](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-microsoft-dataverse) | `9220e3de-3b60-4bb2-a46f-046d59ea235a` | -| **Microsoft SQL Server (MSSQL)** | Microsoft SQL Server (MSSQL) icon | Source | airbyte/source-mssql:1.0.11 | alpha | [docs](https://docs.airbyte.com/integrations/sources/mssql) | [connectors/source/mssql](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/mssql) | [source-mssql](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-mssql) | `b5ea17b1-f170-46dc-bc31-cc744ca984c1` | +| **Microsoft SQL Server (MSSQL)** | Microsoft SQL Server (MSSQL) icon | Source | airbyte/source-mssql:1.0.12 | alpha | [docs](https://docs.airbyte.com/integrations/sources/mssql) | [connectors/source/mssql](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/mssql) | [source-mssql](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-mssql) | `b5ea17b1-f170-46dc-bc31-cc744ca984c1` | | **Microsoft teams** | Microsoft teams icon | Source | airbyte/source-microsoft-teams:0.2.5 | alpha | [docs](https://docs.airbyte.com/integrations/sources/microsoft-teams) | [connectors/source/microsoft-teams](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/microsoft-teams) | [source-microsoft-teams](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-microsoft-teams) | `eaf50f04-21dd-4620-913b-2a83f5635227` | | **Mixpanel** | Mixpanel icon | Source | airbyte/source-mixpanel:0.1.31 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/mixpanel) | [connectors/source/mixpanel](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/mixpanel) | [source-mixpanel](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-mixpanel) | `12928b32-bf0a-4f1e-964f-07e12e37153a` | | **Monday** | Monday icon | Source | airbyte/source-monday:0.2.3 | beta | [docs](https://docs.airbyte.com/integrations/sources/monday) | [connectors/source/monday](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/monday) | [source-monday](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-monday) | `80a54ea2-9959-4040-aac1-eee42423ec9b` | | **MongoDb** | MongoDb icon | Source | airbyte/source-mongodb-v2:0.1.19 | alpha | [docs](https://docs.airbyte.com/integrations/sources/mongodb-v2) | [connectors/source/mongodb-v2](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/mongodb-v2) | [source-mongodb-v2](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-mongodb-v2) | `b2e713cd-cc36-4c0a-b5bd-b47cb8a0561e` | | **My Hours** | My Hours icon | Source | airbyte/source-my-hours:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/my-hours) | [connectors/source/my-hours](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/my-hours) | [source-my-hours](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-my-hours) | `722ba4bf-06ec-45a4-8dd5-72e4a5cf3903` | -| **MySQL** | MySQL icon | Source | airbyte/source-mysql:2.0.15 | beta | [docs](https://docs.airbyte.com/integrations/sources/mysql) | [connectors/source/mysql](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/mysql) | [source-mysql](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-mysql) | `435bb9a5-7887-4809-aa58-28c27df0d7ad` | +| **MySQL** | MySQL icon | Source | airbyte/source-mysql:2.0.16 | beta | [docs](https://docs.airbyte.com/integrations/sources/mysql) | [connectors/source/mysql](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/mysql) | [source-mysql](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-mysql) | `435bb9a5-7887-4809-aa58-28c27df0d7ad` | | **NASA** | NASA icon | Source | airbyte/source-nasa:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/nasa) | [connectors/source/nasa](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/nasa) | [source-nasa](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-nasa) | `1a8667d7-7978-43cd-ba4d-d32cbd478971` | | **Netsuite** | Netsuite icon | Source | airbyte/source-netsuite:0.1.3 | alpha | [docs](https://docs.airbyte.com/integrations/sources/netsuite) | [connectors/source/netsuite](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/netsuite) | [source-netsuite](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-netsuite) | `4f2f093d-ce44-4121-8118-9d13b7bfccd0` | | **New York Times** | New York Times icon | Source | airbyte/source-nytimes:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/nytimes) | [connectors/source/nytimes](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/nytimes) | [source-nytimes](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-nytimes) | `0fae6a9a-04eb-44d4-96e1-e02d3dbc1d83` | @@ -181,7 +181,7 @@ | **PokeAPI** | PokeAPI icon | Source | airbyte/source-pokeapi:0.1.5 | alpha | [docs](https://docs.airbyte.com/integrations/sources/pokeapi) | [connectors/source/pokeapi](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/pokeapi) | [source-pokeapi](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-pokeapi) | `6371b14b-bc68-4236-bfbd-468e8df8e968` | | **Polygon Stock API** | Polygon Stock API icon | Source | airbyte/source-polygon-stock-api:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/polygon-stock-api) | [connectors/source/polygon-stock-api](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/polygon-stock-api) | [source-polygon-stock-api](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-polygon-stock-api) | `5807d72f-0abc-49f9-8fa5-ae820007032b` | | **PostHog** | PostHog icon | Source | airbyte/source-posthog:0.1.9 | beta | [docs](https://docs.airbyte.com/integrations/sources/posthog) | [connectors/source/posthog](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/posthog) | [source-posthog](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-posthog) | `af6d50ee-dddf-4126-a8ee-7faee990774f` | -| **Postgres** | Postgres icon | Source | airbyte/source-postgres:2.0.21 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/postgres) | [connectors/source/postgres](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/postgres) | [source-postgres](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-postgres) | `decd338e-5647-4c0b-adf4-da0e75f5a750` | +| **Postgres** | Postgres icon | Source | airbyte/source-postgres:2.0.22 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/postgres) | [connectors/source/postgres](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/postgres) | [source-postgres](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-postgres) | `decd338e-5647-4c0b-adf4-da0e75f5a750` | | **Postmark App** | Postmark App icon | Source | airbyte/source-postmarkapp:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/postmarkapp) | [connectors/source/postmarkapp](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/postmarkapp) | [source-postmarkapp](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-postmarkapp) | `cde75ca1-1e28-4a0f-85bb-90c546de9f1f` | | **PrestaShop** | PrestaShop icon | Source | airbyte/source-prestashop:0.3.1 | beta | [docs](https://docs.airbyte.com/integrations/sources/prestashop) | [connectors/source/prestashop](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/prestashop) | [source-prestashop](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-prestashop) | `d60a46d4-709f-4092-a6b7-2457f7d455f5` | | **Primetric** | Primetric icon | Source | airbyte/source-primetric:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/primetric) | [connectors/source/primetric](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/primetric) | [source-primetric](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-primetric) | `f636c3c6-4077-45ac-b109-19fc62a283c1` | diff --git a/docs/integrations/sources/alloydb.md b/docs/integrations/sources/alloydb.md index 46fad5b4ad33..d2f838c2f054 100644 --- a/docs/integrations/sources/alloydb.md +++ b/docs/integrations/sources/alloydb.md @@ -319,36 +319,37 @@ According to Postgres [documentation](https://www.postgresql.org/docs/14/datatyp ## Changelog -| Version | Date | Pull Request | Subject | -|:--------|:-----------|:-----------------------------------------------------------|:------------------------------------------------------------------------------------------------------------------------------------------| -| 2.0.21 | 2022-04-12 | [25131](https://github.com/airbytehq/airbyte/pull/25131) | Make Client Certificate and Client Key always show | -| 2.0.19 | 2022-04-11 | [24656](https://github.com/airbytehq/airbyte/pull/24656) | CDC minor refactor | -| 2.0.17 | 2022-04-05 | [24622](https://github.com/airbytehq/airbyte/pull/24622) | Allow streams not in CDC publication to be synced in Full-refresh mode | -| 2.0.15 | 2022-04-04 | [24833](https://github.com/airbytehq/airbyte/pull/24833) | Disallow the "disable" SSL Modes; fix Debezium retry policy configuration | -| 2.0.13 | 2022-03-28 | [24166](https://github.com/airbytehq/airbyte/pull/24166) | Fix InterruptedException bug during Debezium shutdown | -| 2.0.11 | 2022-03-27 | [24529](https://github.com/airbytehq/airbyte/pull/24373) | Preparing the connector for CDC checkpointing | -| 2.0.10 | 2022-03-24 | [24529](https://github.com/airbytehq/airbyte/pull/24529) | Set SSL Mode to required on strict-encrypt variant | -| 2.0.9 | 2023-03-22 | [20760](https://github.com/airbytehq/airbyte/pull/20760) | Removed redundant date-time datatypes formatting | -| 2.0.6 | 2022-03-21 | [24271](https://github.com/airbytehq/airbyte/pull/24271) | Fix NPE in CDC mode | -| 2.0.3 | 2023-03-21 | [24147](https://github.com/airbytehq/airbyte/pull/24275) | Fix error with CDC checkpointing | -| 2.0.2 | 2022-03-13 | [23112](https://github.com/airbytehq/airbyte/pull/21727) | Add state checkpointing for CDC sync. | -| 2.0.1 | 2023-03-08 | [23596](https://github.com/airbytehq/airbyte/pull/23596) | For network isolation, source connector accepts a list of hosts it is allowed to connect | -| 2.0.0 | 2023-03-06 | [23112](https://github.com/airbytehq/airbyte/pull/23112) | Upgrade Debezium version to 2.1.2 | -| 1.0.51 | 2023-03-02 | [23642](https://github.com/airbytehq/airbyte/pull/23642) | Revert : Support JSONB datatype for Standard sync mode | -| 1.0.49 | 2023-02-27 | [21695](https://github.com/airbytehq/airbyte/pull/21695) | Support JSONB datatype for Standard sync mode | -| 1.0.48 | 2023-02-24 | [23383](https://github.com/airbytehq/airbyte/pull/23383) | Fixed bug with non readable double-quoted values within a database name or column name | -| 1.0.47 | 2023-02-22 | [22221](https://github.com/airbytehq/airbyte/pull/23138) | Fix previous versions which doesn't verify privileges correctly, preventing CDC syncs to run. | -| 1.0.46 | 2023-02-21 | [23105](https://github.com/airbytehq/airbyte/pull/23105) | Include log levels and location information (class, method and line number) with source connector logs published to Airbyte Platform. | -| 1.0.45 | 2023-02-09 | [22221](https://github.com/airbytehq/airbyte/pull/22371) | Ensures that user has required privileges for CDC syncs. | -| | 2023-02-15 | [23028](https://github.com/airbytehq/airbyte/pull/23028) | | -| 1.0.44 | 2023-02-06 | [22221](https://github.com/airbytehq/airbyte/pull/22221) | Exclude new set of system tables when using `pg_stat_statements` extension. | -| 1.0.43 | 2023-02-06 | [21634](https://github.com/airbytehq/airbyte/pull/21634) | Improve Standard sync performance by caching objects. | -| 1.0.36 | 2023-01-24 | [21825](https://github.com/airbytehq/airbyte/pull/21825) | Put back the original change that will cause an incremental sync to error if table contains a NULL value in cursor column. | -| 1.0.35 | 2022-12-14 | [20436](https://github.com/airbytehq/airbyte/pull/20346) | Consolidate date/time values mapping for JDBC sources | -| 1.0.34 | 2022-12-13 | [20378](https://github.com/airbytehq/airbyte/pull/20378) | Improve descriptions | -| 1.0.17 | 2022-10-31 | [18538](https://github.com/airbytehq/airbyte/pull/18538) | Encode database name | -| 1.0.16 | 2022-10-25 | [18256](https://github.com/airbytehq/airbyte/pull/18256) | Disable allow and prefer ssl modes in CDC mode | -| | 2022-10-13 | [15535](https://github.com/airbytehq/airbyte/pull/16238) | Update incremental query to avoid data missing when new data is inserted at the same time as a sync starts under non-CDC incremental mode | -| 1.0.15 | 2022-10-11 | [17782](https://github.com/airbytehq/airbyte/pull/17782) | Align with Postgres source v.1.0.15 | -| 1.0.0 | 2022-09-15 | [16776](https://github.com/airbytehq/airbyte/pull/16776) | Align with strict-encrypt version | -| 0.1.0 | 2022-09-05 | [16323](https://github.com/airbytehq/airbyte/pull/16323) | Initial commit. Based on source-postgres v.1.0.7 | +| Version | Date | Pull Request | Subject | +|:--------|:-----------|:-----------------------------------------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 2.0.22 | 2022-04-17 | [25220](https://github.com/airbytehq/airbyte/pull/25220) | Logging changes : Log additional metadata & clean up noisy logs | +| 2.0.21 | 2022-04-12 | [25131](https://github.com/airbytehq/airbyte/pull/25131) | Make Client Certificate and Client Key always show | +| 2.0.19 | 2022-04-11 | [24656](https://github.com/airbytehq/airbyte/pull/24656) | CDC minor refactor | +| 2.0.17 | 2022-04-05 | [24622](https://github.com/airbytehq/airbyte/pull/24622) | Allow streams not in CDC publication to be synced in Full-refresh mode | +| 2.0.15 | 2022-04-04 | [24833](https://github.com/airbytehq/airbyte/pull/24833) | Disallow the "disable" SSL Modes; fix Debezium retry policy configuration | +| 2.0.13 | 2022-03-28 | [24166](https://github.com/airbytehq/airbyte/pull/24166) | Fix InterruptedException bug during Debezium shutdown | +| 2.0.11 | 2022-03-27 | [24529](https://github.com/airbytehq/airbyte/pull/24373) | Preparing the connector for CDC checkpointing | +| 2.0.10 | 2022-03-24 | [24529](https://github.com/airbytehq/airbyte/pull/24529) | Set SSL Mode to required on strict-encrypt variant | +| 2.0.9 | 2023-03-22 | [20760](https://github.com/airbytehq/airbyte/pull/20760) | Removed redundant date-time datatypes formatting | +| 2.0.6 | 2022-03-21 | [24271](https://github.com/airbytehq/airbyte/pull/24271) | Fix NPE in CDC mode | +| 2.0.3 | 2023-03-21 | [24147](https://github.com/airbytehq/airbyte/pull/24275) | Fix error with CDC checkpointing | +| 2.0.2 | 2022-03-13 | [23112](https://github.com/airbytehq/airbyte/pull/21727) | Add state checkpointing for CDC sync. | +| 2.0.1 | 2023-03-08 | [23596](https://github.com/airbytehq/airbyte/pull/23596) | For network isolation, source connector accepts a list of hosts it is allowed to connect | +| 2.0.0 | 2023-03-06 | [23112](https://github.com/airbytehq/airbyte/pull/23112) | Upgrade Debezium version to 2.1.2 | +| 1.0.51 | 2023-03-02 | [23642](https://github.com/airbytehq/airbyte/pull/23642) | Revert : Support JSONB datatype for Standard sync mode | +| 1.0.49 | 2023-02-27 | [21695](https://github.com/airbytehq/airbyte/pull/21695) | Support JSONB datatype for Standard sync mode | +| 1.0.48 | 2023-02-24 | [23383](https://github.com/airbytehq/airbyte/pull/23383) | Fixed bug with non readable double-quoted values within a database name or column name | +| 1.0.47 | 2023-02-22 | [22221](https://github.com/airbytehq/airbyte/pull/23138) | Fix previous versions which doesn't verify privileges correctly, preventing CDC syncs to run. | +| 1.0.46 | 2023-02-21 | [23105](https://github.com/airbytehq/airbyte/pull/23105) | Include log levels and location information (class, method and line number) with source connector logs published to Airbyte Platform. | +| 1.0.45 | 2023-02-09 | [22221](https://github.com/airbytehq/airbyte/pull/22371) | Ensures that user has required privileges for CDC syncs. | +| | 2023-02-15 | [23028](https://github.com/airbytehq/airbyte/pull/23028) | | +| 1.0.44 | 2023-02-06 | [22221](https://github.com/airbytehq/airbyte/pull/22221) | Exclude new set of system tables when using `pg_stat_statements` extension. | +| 1.0.43 | 2023-02-06 | [21634](https://github.com/airbytehq/airbyte/pull/21634) | Improve Standard sync performance by caching objects. | +| 1.0.36 | 2023-01-24 | [21825](https://github.com/airbytehq/airbyte/pull/21825) | Put back the original change that will cause an incremental sync to error if table contains a NULL value in cursor column. | +| 1.0.35 | 2022-12-14 | [20436](https://github.com/airbytehq/airbyte/pull/20346) | Consolidate date/time values mapping for JDBC sources | +| 1.0.34 | 2022-12-13 | [20378](https://github.com/airbytehq/airbyte/pull/20378) | Improve descriptions | +| 1.0.17 | 2022-10-31 | [18538](https://github.com/airbytehq/airbyte/pull/18538) | Encode database name | +| 1.0.16 | 2022-10-25 | [18256](https://github.com/airbytehq/airbyte/pull/18256) | Disable allow and prefer ssl modes in CDC mode | +| | 2022-10-13 | [15535](https://github.com/airbytehq/airbyte/pull/16238) | Update incremental query to avoid data missing when new data is inserted at the same time as a sync starts under non-CDC incremental mode | +| 1.0.15 | 2022-10-11 | [17782](https://github.com/airbytehq/airbyte/pull/17782) | Align with Postgres source v.1.0.15 | +| 1.0.0 | 2022-09-15 | [16776](https://github.com/airbytehq/airbyte/pull/16776) | Align with strict-encrypt version | +| 0.1.0 | 2022-09-05 | [16323](https://github.com/airbytehq/airbyte/pull/16323) | Initial commit. Based on source-postgres v.1.0.7 | diff --git a/docs/integrations/sources/mssql.md b/docs/integrations/sources/mssql.md index 68dee3c91597..dfd78f40eebb 100644 --- a/docs/integrations/sources/mssql.md +++ b/docs/integrations/sources/mssql.md @@ -341,6 +341,7 @@ WHERE actor_definition_id ='b5ea17b1-f170-46dc-bc31-cc744ca984c1' AND (configura | Version | Date | Pull Request | Subject | |:--------|:-----------|:------------------------------------------------------------------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 1.0.12 | 2022-04-17 | [25220](https://github.com/airbytehq/airbyte/pull/25220) | Logging changes : Log additional metadata & clean up noisy logs | | 1.0.11 | 2022-04-11 | [24656](https://github.com/airbytehq/airbyte/pull/24656) | CDC minor refactor | | 1.0.10 | 2022-04-06 | [24820](https://github.com/airbytehq/airbyte/pull/24820) | Fix data loss bug during an initial failed non-CDC incremental sync | | 1.0.9 | 2022-04-04 | [24833](https://github.com/airbytehq/airbyte/pull/24833) | Fix Debezium retry policy configuration | diff --git a/docs/integrations/sources/mysql.md b/docs/integrations/sources/mysql.md index a4a4e29027b0..d94911d5b2d2 100644 --- a/docs/integrations/sources/mysql.md +++ b/docs/integrations/sources/mysql.md @@ -261,6 +261,7 @@ WHERE actor_definition_id ='435bb9a5-7887-4809-aa58-28c27df0d7ad' AND (configura | Version | Date | Pull Request | Subject | |:--------|:-----------|:-----------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 2.0.16 | 2022-04-17 | [25220](https://github.com/airbytehq/airbyte/pull/25220) | Logging changes : Log additional metadata & clean up noisy logs | | 2.0.15 | 2022-04-12 | [25131](https://github.com/airbytehq/airbyte/pull/25131) | Make Client Certificate and Client Key always show | | 2.0.14 | 2022-04-11 | [24656](https://github.com/airbytehq/airbyte/pull/24656) | CDC minor refactor | | 2.0.13 | 2022-04-06 | [24820](https://github.com/airbytehq/airbyte/pull/24820) | Fix data loss bug during an initial failed non-CDC incremental sync | diff --git a/docs/integrations/sources/postgres.md b/docs/integrations/sources/postgres.md index 3be583679390..8e093c0bbedf 100644 --- a/docs/integrations/sources/postgres.md +++ b/docs/integrations/sources/postgres.md @@ -384,7 +384,7 @@ Normally under the CDC mode, the Postgres source will first run a full refresh s > Saved offset is before Replication slot's confirmed_flush_lsn, Airbyte will trigger sync from scratch The root causes is that the WALs needed for the incremental sync has been removed by Postgres. This can occur under the following scenarios: - + - When there are lots of database updates resulting in more WAL files than allowed in the `pg_wal` directory, Postgres will purge or archive the WAL files. This scenario is preventable. Possible solutions include: - Sync the data source more frequently. The downside is that more computation resources will be consumed, leading to a higher Airbyte bill. - Set a higher `wal_keep_size`. If no unit is provided, it is in megabytes, and the default is `0`. See detailed documentation [here](https://www.postgresql.org/docs/current/runtime-config-replication.html#GUC-WAL-KEEP-SIZE). The downside of this approach is that more disk space will be needed. @@ -394,6 +394,7 @@ The root causes is that the WALs needed for the incremental sync has been remove | Version | Date | Pull Request | Subject | |:--------|:-----------|:---------------------------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 2.0.22 | 2022-04-17 | [25220](https://github.com/airbytehq/airbyte/pull/25220) | Logging changes : Log additional metadata & clean up noisy logs | | 2.0.21 | 2022-04-12 | [25131](https://github.com/airbytehq/airbyte/pull/25131) | Make Client Certificate and Client Key always show | | 2.0.20 | 2022-04-11 | [24859](https://github.com/airbytehq/airbyte/pull/24859) | Removed SSL toggle and rely on SSL mode dropdown to enable/disable SSL | | 2.0.19 | 2022-04-11 | [24656](https://github.com/airbytehq/airbyte/pull/24656) | CDC minor refactor | From a372f70983cb568f03422c2f01a0d6f5bb04fe0f Mon Sep 17 00:00:00 2001 From: Augustin Date: Tue, 18 Apr 2023 08:38:45 +0200 Subject: [PATCH 106/187] metadata: create specs secret mask (#25201) --- .../lib/metadata_service/spec_cache.py | 15 +++- .../orchestrator/orchestrator/__init__.py | 60 ++++++++-------- .../orchestrator/assets/catalog.py | 56 ++++++++++++--- .../orchestrator/assets/specs_secrets_mask.py | 70 +++++++++++++++++++ .../orchestrator/orchestrator/jobs/catalog.py | 5 +- .../metadata_service/orchestrator/poetry.lock | 18 ++++- .../orchestrator/pyproject.toml | 1 + .../tests/test_specs_secrets_mask.py | 62 ++++++++++++++++ 8 files changed, 241 insertions(+), 46 deletions(-) create mode 100644 airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/specs_secrets_mask.py create mode 100644 airbyte-ci/connectors/metadata_service/orchestrator/tests/test_specs_secrets_mask.py diff --git a/airbyte-ci/connectors/metadata_service/lib/metadata_service/spec_cache.py b/airbyte-ci/connectors/metadata_service/lib/metadata_service/spec_cache.py index ad776405cf8f..14bf36609956 100644 --- a/airbyte-ci/connectors/metadata_service/lib/metadata_service/spec_cache.py +++ b/airbyte-ci/connectors/metadata_service/lib/metadata_service/spec_cache.py @@ -1,6 +1,11 @@ -from google.cloud import storage -from typing import List +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# +import json from dataclasses import dataclass +from typing import List + +from google.cloud import storage SPEC_CACHE_BUCKET_NAME = "io-airbyte-cloud-spec-cache" CACHE_FOLDER = "specs" @@ -56,3 +61,9 @@ def list_cached_specs() -> List[CachedSpec]: blobs = bucket.list_blobs(prefix=CACHE_FOLDER) return [get_docker_info_from_spec_cache_path(blob.name) for blob in blobs] + + +def get_cached_spec(spec_cache_path: str) -> dict: + client = storage.Client.create_anonymous_client() + bucket = client.bucket(SPEC_CACHE_BUCKET_NAME) + return json.loads(bucket.blob(spec_cache_path).download_as_string()) diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/__init__.py b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/__init__.py index 5ad53a573bd0..873b0c98afff 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/__init__.py +++ b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/__init__.py @@ -1,50 +1,45 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# from dagster import Definitions - -from orchestrator.resources.gcp import gcp_gcs_client, gcs_bucket_manager, gcs_file_manager, gcs_file_blob, gcs_directory_blobs -from orchestrator.resources.github import github_client, github_connector_repo, github_connectors_directory -from orchestrator.resources.local import simple_local_file_manager - -from orchestrator.assets.github import github_connector_folders -from orchestrator.assets.spec_cache import cached_specs -from orchestrator.assets.catalog_report import ( - all_sources_dataframe, - all_destinations_dataframe, - connector_catalog_location_markdown, - connector_catalog_location_html, -) +from metadata_service.constants import METADATA_FILE_NAME, METADATA_FOLDER from orchestrator.assets.catalog import ( - oss_destinations_dataframe, + cloud_catalog_from_metadata, cloud_destinations_dataframe, - oss_sources_dataframe, cloud_sources_dataframe, - latest_oss_catalog_dict, latest_cloud_catalog_dict, + latest_oss_catalog_dict, oss_catalog_from_metadata, - cloud_catalog_from_metadata, + oss_destinations_dataframe, + oss_sources_dataframe, ) -from orchestrator.assets.metadata import ( - catalog_derived_metadata_definitions, - valid_metadata_report_dataframe, - metadata_definitions, +from orchestrator.assets.catalog_report import ( + all_destinations_dataframe, + all_sources_dataframe, + connector_catalog_location_html, + connector_catalog_location_markdown, ) - from orchestrator.assets.dev import ( - persist_metadata_definitions, - overrode_metadata_definitions, - oss_catalog_diff, cloud_catalog_diff, cloud_catalog_diff_dataframe, - oss_catalog_diff_dataframe, metadata_directory_report, + oss_catalog_diff, + oss_catalog_diff_dataframe, + overrode_metadata_definitions, + persist_metadata_definitions, ) - -from orchestrator.jobs.catalog import generate_catalog_markdown, generate_local_metadata_files, generate_catalog +from orchestrator.assets.github import github_connector_folders +from orchestrator.assets.metadata import catalog_derived_metadata_definitions, metadata_definitions, valid_metadata_report_dataframe +from orchestrator.assets.spec_cache import cached_specs +from orchestrator.assets.specs_secrets_mask import all_specs_secrets, specs_secrets_mask_yaml +from orchestrator.config import CATALOG_FOLDER, CONNECTOR_REPO_NAME, CONNECTORS_PATH, REPORT_FOLDER +from orchestrator.jobs.catalog import generate_catalog, generate_catalog_markdown, generate_local_metadata_files +from orchestrator.resources.gcp import gcp_gcs_client, gcs_bucket_manager, gcs_directory_blobs, gcs_file_blob, gcs_file_manager +from orchestrator.resources.github import github_client, github_connector_repo, github_connectors_directory +from orchestrator.resources.local import simple_local_file_manager from orchestrator.sensors.catalog import catalog_updated_sensor from orchestrator.sensors.metadata import metadata_updated_sensor -from orchestrator.config import REPORT_FOLDER, CATALOG_FOLDER, CONNECTORS_PATH, CONNECTOR_REPO_NAME -from metadata_service.constants import METADATA_FILE_NAME, METADATA_FOLDER - ASSETS = [ oss_destinations_dataframe, cloud_destinations_dataframe, @@ -68,6 +63,8 @@ cloud_catalog_from_metadata, cloud_catalog_diff_dataframe, oss_catalog_diff_dataframe, + all_specs_secrets, + specs_secrets_mask_yaml, metadata_directory_report, metadata_definitions, ] @@ -83,6 +80,7 @@ } ), "gcs_bucket_manager": gcs_bucket_manager.configured({"gcs_bucket": {"env": "METADATA_BUCKET"}}), + "catalog_directory_manager": gcs_file_manager.configured({"gcs_bucket": {"env": "METADATA_BUCKET"}, "prefix": CATALOG_FOLDER}), "catalog_report_directory_manager": gcs_file_manager.configured({"gcs_bucket": {"env": "METADATA_BUCKET"}, "prefix": REPORT_FOLDER}), "metadata_file_blobs": gcs_directory_blobs.configured({"prefix": METADATA_FOLDER, "suffix": METADATA_FILE_NAME}), "latest_oss_catalog_gcs_file": gcs_file_blob.configured({"prefix": CATALOG_FOLDER, "gcs_filename": "oss_catalog.json"}), diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/catalog.py b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/catalog.py index ab4bfb53eadf..88428c645039 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/catalog.py +++ b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/catalog.py @@ -1,16 +1,26 @@ -import pandas as pd +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# +import copy import json from typing import List -from dagster import asset, OpExecutionContext - +import pandas as pd +from dagster import OpExecutionContext, asset +from metadata_service.spec_cache import get_cached_spec +from orchestrator.models.metadata import PartialMetadataDefinition from orchestrator.utils.dagster_helpers import OutputDataFrame, output_dataframe from orchestrator.utils.object_helpers import deep_copy_params -from orchestrator.models.metadata import PartialMetadataDefinition - GROUP_NAME = "catalog" +# ERRORS + + +class MissingCachedSpecError(Exception): + pass + + # HELPERS @@ -116,27 +126,55 @@ def construct_catalog_from_metadata(catalog_derived_metadata_definitions: List[P return catalog +def construct_registry_with_spec_from_registry(registry: dict, cached_specs: OutputDataFrame) -> dict: + entries = [("source", entry) for entry in registry["sources"]] + [("destinations", entry) for entry in registry["destinations"]] + + cached_connector_version = { + (cached_spec["docker_repository"], cached_spec["docker_image_tag"]): cached_spec["spec_cache_path"] + for cached_spec in cached_specs.to_dict(orient="records") + } + registry_with_specs = {"sources": [], "destinations": []} + for connector_type, entry in entries: + try: + spec_path = cached_connector_version[(entry["dockerRepository"], entry["dockerImageTag"])] + entry_with_spec = copy.deepcopy(entry) + entry_with_spec["spec"] = get_cached_spec(spec_path) + if connector_type == "source": + registry_with_specs["sources"].append(entry_with_spec) + else: + registry_with_specs["destinations"].append(entry_with_spec) + except KeyError: + raise MissingCachedSpecError(f"No cached spec found for {entry['dockerRegistry']:{entry['dockerImageTag']}}") + return registry_with_specs + + # ASSETS @asset(group_name=GROUP_NAME) -def cloud_catalog_from_metadata(catalog_derived_metadata_definitions: List[PartialMetadataDefinition]) -> dict: +def cloud_catalog_from_metadata( + catalog_derived_metadata_definitions: List[PartialMetadataDefinition], cached_specs: OutputDataFrame +) -> dict: """ This asset is used to generate the cloud catalog from the metadata definitions. TODO (ben): This asset should be updated to use the GCS metadata definitions once available. """ - return construct_catalog_from_metadata(catalog_derived_metadata_definitions, "cloud") + from_metadata = construct_catalog_from_metadata(catalog_derived_metadata_definitions, "cloud") + from_metadata_and_spec = construct_registry_with_spec_from_registry(from_metadata, cached_specs) + return from_metadata_and_spec @asset(group_name=GROUP_NAME) -def oss_catalog_from_metadata(catalog_derived_metadata_definitions: List[PartialMetadataDefinition]) -> dict: +def oss_catalog_from_metadata(catalog_derived_metadata_definitions: List[PartialMetadataDefinition], cached_specs: OutputDataFrame) -> dict: """ This asset is used to generate the oss catalog from the metadata definitions. TODO (ben): This asset should be updated to use the GCS metadata definitions once available. """ - return construct_catalog_from_metadata(catalog_derived_metadata_definitions, "oss") + from_metadata = construct_catalog_from_metadata(catalog_derived_metadata_definitions, "oss") + from_metadata_and_spec = construct_registry_with_spec_from_registry(from_metadata, cached_specs) + return from_metadata_and_spec @asset(group_name=GROUP_NAME) diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/specs_secrets_mask.py b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/specs_secrets_mask.py new file mode 100644 index 000000000000..c574c505e484 --- /dev/null +++ b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/specs_secrets_mask.py @@ -0,0 +1,70 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# +from typing import List, Set + +import dpath.util +import yaml +from dagster import MetadataValue, Output, asset + +GROUP_NAME = "specs_secrets_mask" + +# HELPERS + + +def get_secrets_properties_from_registry_entry(registry_entry: dict) -> List[str]: + """Traverse a registry entry to spot properties in a spec that have the "airbyte_secret" field set to true. + + This function assumes all the properties have a "type" field that we can use to find all the nested properties in a spec. + + + Args: + registry_entry (dict): An entry in the registry with a spec field. + + Returns: + List[str]: List of property names marked as airbyte_secret. + """ + secret_properties = [] + spec_properties = registry_entry["spec"]["connectionSpecification"].get("properties") + if spec_properties is None: + return [] + for type_path, _ in dpath.util.search(spec_properties, "**/type", yielded=True): + absolute_path = f"/{type_path}" + if "/" in type_path: + property_path, _ = absolute_path.rsplit(sep="/", maxsplit=1) + else: + property_path = absolute_path + property_definition = dpath.util.get(spec_properties, property_path) + marked_as_secret = property_definition.get("airbyte_secret", False) + if marked_as_secret: + secret_properties.append(property_path.split("/")[-1]) + return secret_properties + + +# ASSETS + + +@asset(group_name=GROUP_NAME) +def all_specs_secrets(oss_catalog_from_metadata: dict, cloud_catalog_from_metadata: dict) -> Set[str]: + all_secret_properties = [] + all_entries = ( + oss_catalog_from_metadata["sources"] + + cloud_catalog_from_metadata["sources"] + + oss_catalog_from_metadata["destinations"] + + cloud_catalog_from_metadata["destinations"] + ) + for registry_entry in all_entries: + all_secret_properties += get_secrets_properties_from_registry_entry(registry_entry) + return set(all_secret_properties) + + +@asset(required_resource_keys={"catalog_directory_manager"}, group_name=GROUP_NAME) +def specs_secrets_mask_yaml(context, all_specs_secrets: Set[str]) -> Output: + yaml_string = yaml.dump({"properties": list(all_specs_secrets)}) + catalog_directory_manager = context.resources.catalog_directory_manager + file_handle = catalog_directory_manager.write_data(yaml_string.encode(), ext="yaml", key="specs_secrets_mask") + metadata = { + "preview": yaml_string, + "gcs_path": MetadataValue.url(file_handle.gcs_path), + } + return Output(metadata=metadata, value=file_handle) diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/jobs/catalog.py b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/jobs/catalog.py index 8148d48c8bda..c36803183a37 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/jobs/catalog.py +++ b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/jobs/catalog.py @@ -1,8 +1,11 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# from dagster import define_asset_job - generate_catalog = define_asset_job(name="generate_catalog", selection=["metadata_directory_report", "metadata_definitions"]) generate_catalog_markdown = define_asset_job( name="generate_catalog_markdown", selection=["connector_catalog_location_html", "connector_catalog_location_markdown"] ) generate_local_metadata_files = define_asset_job(name="generate_local_metadata_files", selection=["persist_metadata_definitions"]) +generate_specs_secrets_mask_file = define_asset_job(name="generate_specs_secrets_mask_file", selection=["persist_specs_secrets_mask"]) diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/poetry.lock b/airbyte-ci/connectors/metadata_service/orchestrator/poetry.lock index d0ea210ccf64..aa50e7f6cc33 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/poetry.lock +++ b/airbyte-ci/connectors/metadata_service/orchestrator/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry and should not be changed by hand. +# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand. [[package]] name = "alembic" @@ -605,6 +605,18 @@ files = [ {file = "docstring_parser-0.15.tar.gz", hash = "sha256:48ddc093e8b1865899956fcc03b03e66bb7240c310fac5af81814580c55bf682"}, ] +[[package]] +name = "dpath" +version = "2.1.5" +description = "Filesystem-like pathing and searching for dictionaries" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "dpath-2.1.5-py3-none-any.whl", hash = "sha256:559edcbfc806ca2f9ad9e63566f22e5d41c000e4215bbce9dbf1ca4c859f5e0b"}, + {file = "dpath-2.1.5.tar.gz", hash = "sha256:ccd964db839baad4aa820612b4b8731b09f40a245d401b723156ce4ef45b22b7"}, +] + [[package]] name = "exceptiongroup" version = "1.1.1" @@ -2438,7 +2450,7 @@ files = [ ] [package.dependencies] -greenlet = {version = "!=0.4.17", markers = "python_version >= \"3\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")"} +greenlet = {version = "!=0.4.17", markers = "python_version >= \"3\" and platform_machine == \"aarch64\" or python_version >= \"3\" and platform_machine == \"ppc64le\" or python_version >= \"3\" and platform_machine == \"x86_64\" or python_version >= \"3\" and platform_machine == \"amd64\" or python_version >= \"3\" and platform_machine == \"AMD64\" or python_version >= \"3\" and platform_machine == \"win32\" or python_version >= \"3\" and platform_machine == \"WIN32\""} [package.extras] aiomysql = ["aiomysql", "greenlet (!=0.4.17)"] @@ -3013,4 +3025,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "265438c2827e34f5c0631f393ea33874381efb716e30e27b4a1bee3f2232fa05" +content-hash = "c39d19c4c03712b3f0e3dfd1784d497998878da48c5d9cba92ccff22349d38f6" diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/pyproject.toml b/airbyte-ci/connectors/metadata_service/orchestrator/pyproject.toml index 5dd1194f3d79..8f95412425d1 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/pyproject.toml +++ b/airbyte-ci/connectors/metadata_service/orchestrator/pyproject.toml @@ -19,6 +19,7 @@ metadata-service = {path = "../lib", develop = true} deepdiff = "^6.3.0" mergedeep = "^1.3.4" pydash = "^6.0.2" +dpath = "^2.1.5" [tool.poetry.group.dev.dependencies] diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/tests/test_specs_secrets_mask.py b/airbyte-ci/connectors/metadata_service/orchestrator/tests/test_specs_secrets_mask.py new file mode 100644 index 000000000000..6c5529cb5098 --- /dev/null +++ b/airbyte-ci/connectors/metadata_service/orchestrator/tests/test_specs_secrets_mask.py @@ -0,0 +1,62 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# +import pytest +from orchestrator.assets.specs_secrets_mask import get_secrets_properties_from_registry_entry + + +@pytest.mark.parametrize( + "registry_entry, expected_secrets", + [ + pytest.param( + { + "spec": { + "connectionSpecification": { + "properties": { + "azure_blob_storage_endpoint_domain_name": {"title": "Endpoint Domain Name", "type": "string"}, + "azure_blob_storage_account_key": { + "title": "Azure Blob Storage account key", + "airbyte_secret": True, + "type": "string", + }, + "azure_blob_storage_account_name": { + "title": "Azure Blob Storage account name", + "airbyte_secret": False, + "type": "string", + }, + } + } + } + }, + ["azure_blob_storage_account_key"], + id="Not nested properties with one secret", + ), + pytest.param( + { + "spec": { + "connectionSpecification": { + "properties": { + "azure_blob_storage_account_key": { + "title": "Azure Blob Storage account key", + "airbyte_secret": True, + "type": "string", + }, + "nested_settings": { + "airbyte_secret": False, + "type": "object", + "properties": { + "secret_nested_prop": {"airbyte_secret": True, "type": "string"}, + "not_secret_nested_prop": {"airbyte_secret": False, "type": "string"}, + }, + }, + } + } + } + }, + ["azure_blob_storage_account_key", "secret_nested_prop"], + id="Not nested properties with one secret", + ), + ], +) +def test_get_secrets_properties_from_registry_entry(registry_entry, expected_secrets): + assert get_secrets_properties_from_registry_entry(registry_entry) == expected_secrets From 0a83e622aef03aea4d58299d4c56e24b07d3aab3 Mon Sep 17 00:00:00 2001 From: Joe Reuter Date: Tue, 18 Apr 2023 10:58:42 +0200 Subject: [PATCH 107/187] Connector builder: Authentication documentation (#25112) * authentication documentation * some fixes * fix broken link * remove session token auth * review comments * first version of tutorial * Revert "first version of tutorial" This reverts commit bbdeb997f2a75240ee3d6f4fd62189e2b5269e3c. * review comments * review comments * Connector builder: Partitioning documentation (#25209) * partitioning documentation * review comments --- .../connector-builder-ui/authentication.md | 145 ++++++++++++++++++ .../connector-builder-ui/partitioning.md | 116 ++++++++++++++ 2 files changed, 261 insertions(+) create mode 100644 docs/connector-development/connector-builder-ui/authentication.md create mode 100644 docs/connector-development/connector-builder-ui/partitioning.md diff --git a/docs/connector-development/connector-builder-ui/authentication.md b/docs/connector-development/connector-builder-ui/authentication.md new file mode 100644 index 000000000000..953b6c3477e9 --- /dev/null +++ b/docs/connector-development/connector-builder-ui/authentication.md @@ -0,0 +1,145 @@ +# Authentication + +Authentication allows the connector to check whether it has sufficient permission to fetch data and communicate its identity to the API. The authentication feature provides a secure way to configure authentication using a variety of methods. + +The credentials itself (e.g. username and password) are _not_ specified as part of the connector, instead they are part of the configuration that is specified by the end user when setting up a source based on the connector. During development, it's possible to provide testing credentials in the "Testing values" menu, but those are not saved along with the connector. Credentials that are part of the source configuration are stored in a secure way in your Airbyte instance while the connector configuration is saved in the regular database. + +In the "Authentication" section on the "Global Configuration" page in the connector builder, the authentication method can be specified. This configuration is shared for all streams - it's not possible to use different authentication methods for different streams in the same connector. In case your API uses multiple or custom authentication methods, you can use the [low-code CDK](/connector-development/config-based/low-code-cdk-overview) or [Python CDK](/connector-development/cdk-python/). + +If your API doesn't need authentication, leave it set at "No auth". This means the connector will be able to make requests to the API without providing any credentials which might be the case for some public open APIs or private APIs only available in local networks. + +## Authentication methods + +Check the documentation of the API you want to integrate for the used authentication method. The following ones are supported in the connector builder: +* [Basic HTTP](#basic-http) +* [Bearer Token](#bearer-token) +* [API Key](#api-key) +* [OAuth](#oauth) + +Select the matching authentication method for your API and check the sections below for more information about individual methods. + +### Basic HTTP + +If requests are authenticated using the Basic HTTP authentication method, the documentation page will likely contain one of the following keywords: +- "Basic Auth" +- "Basic HTTP" +- "Authorization: Basic" +- "Base64" + +The Basic HTTP authentication method is a standard and doesn't require any further configuration. Username and password are set via "Testing values" in the connector builder and by the end user when configuring this connector as a Source. + +#### Example + +The [Greenhouse API](https://developers.greenhouse.io/harvest.html#authentication) is an API using basic authentication. + +Sometimes, only a username and no password is required, like for the [Chargebee API](https://apidocs.chargebee.com/docs/api/auth?prod_cat_ver=2) - in these cases simply leave the password input empty. + +In the basic authentication scheme, the supplied username and password are concatenated with a colon `:` and encoded using the base64 algorithm. For username `user` and password `passwd`, the base64-encoding of `user:passwd` is `dXNlcjpwYXNzd2Q=`. + +When fetching records, this string is sent as part of the `Authorization` header: +``` +curl -X GET \ + -H "Authorization: Basic dXNlcjpwYXNzd2Q=" \ + https://harvest.greenhouse.io/v1/ +``` + +### Bearer Token + +If requests are authenticated using Bearer authentication, the documentation will probably mention "bearer token" or "token authentication". In this scheme, the `Authorization` header of the HTTP request is set to `Bearer `. + +Like the Basic HTTP authentication it does not require further configuration. The bearer token can be set via "Testing values" in the connector builder and by the end user when configuring this connector as a Source. + +#### Example + +The [Sendgrid API](https://docs.sendgrid.com/api-reference/how-to-use-the-sendgrid-v3-api/authentication) and the [Square API](https://developer.squareup.com/docs/build-basics/access-tokens) are supporting Bearer authentication. + +When fetching records, the token is sent along as the `Authorization` header: +``` +curl -X GET \ + -H "Authorization: Bearer " \ + https://api.sendgrid.com/ +``` + +### API Key + +The API key authentication method is similar to the Bearer authentication but allows to configure as which HTTP header the API key is sent as part of the request. The http header name is part of the connector definition while the API key itself can be set via "Testing values" in the connector builder as well as when configuring this connector as a Source. + +This form of authentication is often called "(custom) header authentication". It only supports setting the token to an HTTP header, for other cases, see the ["Other authentication methods" section](#access-token-as-query-or-body-parameter) + +#### Example + +The [CoinAPI.io API](https://docs.coinapi.io/market-data/rest-api#authorization) is using API key authentication via the `X-CoinAPI-Key` header. + +When fetching records, the api token is included in the request using the configured header: +``` +curl -X GET \ + -H "X-CoinAPI-Key: " \ + https://rest.coinapi.io/v1/ +``` + +### OAuth + +The OAuth authentication method implements authentication using an [OAuth2.0 flow with a refresh token grant type](https://oauth.net/2/grant-types/refresh-token/). + +In this scheme, the OAuth endpoint of an API is called with a long-lived refresh token that's provided by the end user when configuring this connector as a Source. The refresh token is used to obtain a short-lived access token that's used to make requests actually extracting records. If the access token expires, the connection will automatically request a new one. + +The connector needs to be configured with the endpoint to call to obtain access tokens with the refresh token. OAuth client id/secret and the refresh token are provided via "Testing values" in the connector builder as well as when configuring this connector as a Source. + +Depending on how the refresh endpoint is implemented exactly, additional configuration might be necessary to specify how to request an access token with the right permissions (configuring OAuth scopes and grant type) and how to extract the access token and the expiry date out of the response (configuring expiry date format and property name as well as the access key property name): +* **Scopes** - the [OAuth scopes](https://oauth.net/2/scope/) the access token will have access to. if not specified, no scopes are sent along with the refresh token request +* **Token expiry property name** - the name of the property in the response that contains token expiry information. If not specified, it's set to `expires_in` +* **Token expire property date format** - if not specified, the expiry property is interpreted as the number of seconds the access token will be valid +* **Access token property name** - the name of the property in the response that contains the access token to do requests. If not specified, it's set to `access_token` + +If the API uses a short-lived refresh token that expires after a short amount of time and needs to be refreshed as well or if other grant types like PKCE are required, it's not possible to use the connector builder with OAuth authentication - check out the [compatibility guide](/connector-development/config-based/connector-builder-compatibility#oauth) for more information. + +Keep in mind that the OAuth authentication method does not implement a single-click authentication experience for the end user configuring the connector - it will still be necessary to obtain client id, client secret and refresh token from the API and manually enter them into the configuration form. + +#### Example + +The [Square API](https://developer.squareup.com/docs/build-basics/access-tokens#get-an-oauth-access-token) supports OAuth. + +In this case, the authentication method has to be configured like this: +* "Token refresh endpoint" is `https://connect.squareup.com/oauth2/token` +* "Token expiry property name" is `expires_at` + +When running a sync, the connector is first sending client id, client secret and refresh token to the token refresh endpoint: +``` + +curl -X POST \ + -H "Content-Type: application/json" \ + -d '{"client_id": "", "client_secret": "", "refresh_token": "", "grant_type": "refresh_token" }' \ + +``` + +The response is a JSON object containing an `access_token` property and an `expires_at` property: +``` + {"access_token":"", "expires_at": "2023-12-12T00:00:00"} +``` + +The `expires_at` date tells the connector how long the access token can be used - if this point in time is passed, a new access token is requested automatically. + +When fetching records, the access token is sent along as part of the `Authorization` header: +``` +curl -X GET \ + -H "Authorization: Bearer " \ + https://connect.squareup.com/v2/ +``` + +### Other authentication methods + +If your API is not using one of the natively supported authentication methods, it's still possible to build an Airbyte connector as described below. + +#### Access token as query or body parameter + +Some APIs require to include the access token in different parts of the request (for example as a request parameter). For example, the [Breezometer API](https://docs.breezometer.com/api-documentation/introduction/#authentication) is using this kind of authentication. In these cases it's also possible to configure authentication manually: +* Add a user input as secret field on the "User inputs" page (e.g. named `api_key`) +* On the stream page, add a new "Request parameter" +* As key, configure the name of the query parameter the API requires (e.g. named `key`) +* As value, configure a placeholder for the created user input (e.g. `{{ config['api_key'] }}`) + +The same approach can be used to add the token to the request body. + +#### Custom authentication methods + +Some APIs require complex custom authentication schemes involving signing requests or doing multiple requests to authenticate. In these cases, it's required to use the [low-code CDK](/connector-development/config-based/low-code-cdk-overview) or [Python CDK](/connector-development/cdk-python/). diff --git a/docs/connector-development/connector-builder-ui/partitioning.md b/docs/connector-development/connector-builder-ui/partitioning.md new file mode 100644 index 000000000000..b0a1f6624149 --- /dev/null +++ b/docs/connector-development/connector-builder-ui/partitioning.md @@ -0,0 +1,116 @@ +# Partitioning + +Partitioning is required if the records of a stream are grouped into buckets based on an attribute or parent resources that need to be queried separately to extract the records. + +Sometimes records belonging to a single stream are partitioned into subsets that need to be fetched separately. In most cases, these partitions are a parent resource type of the resource type targeted by the connector. The partitioning feature can be used to configure your connector to iterate through all partitions. In API documentation, this concept can show up as mandatory parameters that need to be set on the path, query parameters or request body of the request. + +Common API structures look like this: +* The [SurveySparrow API](https://developers.surveysparrow.com/rest-apis/response#getV3Responses) allows to fetch a list of responses to surveys. For the `/responses` endpoint, the id of the survey to fetch responses for needs to be specified via the query parameter `survey_id`. The API does not allow to fetch responses for all available surveys in a single request, there needs to be a separate request per survey. The surveys represent the partitions of the responses stream. +* The [Woocommerce API](https://woocommerce.github.io/woocommerce-rest-api-docs/#order-notes) includes an endpoint to fetch notes of webshop orders via the `/orders//notes` endpoint. The `` placeholder needs to be set to the id of the order to fetch the notes for. The orders represent the partitions of the notes stream. + +There are some cases that require multiple requests to fetch all records as well, but partitioning is not the right tool to configure these in the connector builder: +* If your records are spread out across multiple pages that need to be requested individually if there are too many records, use the Pagination feature. +* If your records are spread out over time and multiple requests are necessary to fetch all data (for example one request per day), use the Incremental sync feature. + +## Dynamic and static partition routing + +There are three possible sources for the partitions that need to be queried - the connector itself, supplied by the end user when configuring a Source based on the connector, or the API provides the list of partitions on another endpoint (for example the Woocommerce API also includes an `/orders` endpoint that returns all orders). + +The first two options are a "static" form of partition routing (because the partitions won't change as long as the Airbyte configuration isn't changed). The API providing the partitions via one or multiple separate requests is a "dynamic" form of partition routing because the partitions can change any time. + +### List partition router + +To configure static partitioning, choose the "List" method for the partition router. The following fields have to be configured: +* The "partition values" can either be set to a list of strings, making the partitions part of the connector itself or delegated to a user input so the end user configuring a Source based on the connector can control which partitions to fetch. +* The "Current partition value identifier" can be freely choosen and is the identifier of the variable holding the current partition value. It can for example be used in the path of the stream using the `{{ stream_slice. }}` syntax. +* The "Inject partition value into outgoing HTTP request" option allows you to configure how to add the current partition value to the requests + +#### Example + +To enable static partition routing for the [SurveySparrow API](https://developers.surveysparrow.com/rest-apis/response#getV3Responses) responses, the list partition router needs to be configured as following: +* "Partition values" are set to the list of survey ids to fetch +* "Current partition value identifier" is set to `survey` (this is not used for this example) +* "Inject partition value into outgoing HTTP request" is set to `request_parameter` for the field name `survey_id` + +When partition values were set to `123`, `456` and `789`, the following requests will be executed: +``` +curl -X GET https://api.surveysparrow.com/v3/responses?survey_id=123 +curl -X GET https://api.surveysparrow.com/v3/responses?survey_id=456 +curl -X GET https://api.surveysparrow.com/v3/responses?survey_id=789 +``` + +To enable static partitions for the [Woocommerce API](https://woocommerce.github.io/woocommerce-rest-api-docs/#order-notes) order notes, the configuration would look like this: +* "Partition values" are set to the list of order ids to fetch +* "Current partition value identifier" is set to `order` +* "Inject partition value into outgoing HTTP request" is disabled, because the order id needs to be injected into the path +* In the general section of the stream configuration, the "Path URL" is set to `/orders/{{ stream_slice.order }}/notes` + + +When partition values were set to `123`, `456` and `789`, the following requests will be executed: +``` +curl -X GET https://example.com/wp-json/wc/v3/orders/123/notes +curl -X GET https://example.com/wp-json/wc/v3/orders/456/notes +curl -X GET https://example.com/wp-json/wc/v3/orders/789/notes +``` + +### Substream partition router + +To fetch the list of partitions (in this example surveys or orders) from the API itself, the "Substream" partition router has to be used. It allows you to select another stream of the same connector to serve as the source for partitions to fetch. Each record of the parent stream is used as a partition for the current stream. + +The following fields have to be configured to use the substream partition router: +* The "Parent stream" defines the records of which stream should be used as partitions +* The "Parent key" is the property on the parent stream record that should become the partition value (in most cases this is some form of id) +* The "Current partition value identifier" can be freely choosen and is the identifier of the variable holding the current partition value. It can for example be used in the path of the stream using the `{{ stream_slice. }}` interpolation placeholder. + +#### Example + +To enable dynamic partition routing for the [Woocommerce API](https://woocommerce.github.io/woocommerce-rest-api-docs/#order-notes) order notes, first an "orders" stream needs to be configured for the `/orders` endpoint to fetch a list of orders. Once this is done, the partition router for responses has be configured like this: +* "Parent key" is set to `id` +* "Current partition value identifier" is set to `order` +* In the general section of the stream configuration, the "Path URL" is set to `/orders/{{ stream_slice.order }}/notes` + +When triggering a sync, the connector will first fetch all records of the orders stream. The records will look like this: +``` +{ "id": 123, "currency": "EUR", "shipping_total": "12.23", ... } +{ "id": 456, "currency": "EUR", "shipping_total": "45.56", ... } +{ "id": 789, "currency": "EUR", "shipping_total": "78.89", ... } +``` + +To turn a record into a partition value, the "parent key" is extracted, resulting in the partition values `123`, `456` and `789`. In turn, this results in the following requests to fetch the records of the notes stream: +``` +curl -X GET https://example.com/wp-json/wc/v3/orders/123/notes +curl -X GET https://example.com/wp-json/wc/v3/orders/456/notes +curl -X GET https://example.com/wp-json/wc/v3/orders/789/notes +``` + +## Multiple partition routers + +It is possible to configure multiple partition routers on a single stream - if this is the case, all possible combinations of partition values are requested separately. + +For example, the [Google Pagespeed API](https://developers.google.com/speed/docs/insights/v5/reference/pagespeedapi/runpagespeed) allows to specify the URL and the "strategy" to run an analysis for. To allow a user to trigger an analysis for multiple URLs and strategies at the same time, two list partition routers can be used (one injecting the partition value into the `url` parameter, one injecting it into the `strategy` parameter). + +If a user configures the URLs `example.com` and `example.org` and the strategies `desktop` and `mobile`, then the following requests will be triggered +``` +curl -X GET https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=example.com&strategy=desktop +curl -X GET https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=example.com&strategy=mobile +curl -X GET https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=example.org&strategy=desktop +curl -X GET https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=example.org&strategy=mobile +``` + +## Adding the partition value to the record + +Sometimes it's helpful to attach the partition a record belongs to to the record itself so it can be used during analysis in the destination. This can be done using a transformation to add a field and the `{{ stream_slice. }}` interpolation placeholder. + +For example when fetching the order notes via the [Woocommerce API](https://woocommerce.github.io/woocommerce-rest-api-docs/#order-notes), the order id itself is not included in the note record, which means it won't be possible to associate which note belongs to which order: +``` +{ "id": 999, "author": "Jon Doe", "note": "Great product!" } +``` + +However the order id can be added by taking the following steps: +* Making sure the "Current partition value identifier" is set to `order` +* Add an "Add field" transformation with "Path" `order_id` and "Value" `{{ stream_slice.order }}` + +Using this configuration, the notes record looks like this: +``` +{ "id": 999, "author": "Jon Doe", "note": "Great product!", "order_id": 123 } +``` \ No newline at end of file From 00e87dbe0d94f7141894efa2df4ac00029e43a04 Mon Sep 17 00:00:00 2001 From: Artem Inzhyyants <36314070+artem1205@users.noreply.github.com> Date: Tue, 18 Apr 2023 14:07:15 +0200 Subject: [PATCH 108/187] Source S3: Add start date filter for files (#25010) * Source S3: Add start date filter for files * Source S3: add docs * Source S3: add unittest * Source S3: add unittest * Source S3: add unittest * Source S3: Fix spec test * Source S3: bump version * Source S3: fix tests * Source S3: fix description * auto-bump connector version * Source S3: refactor start_date filtering * Source S3: update setup * Source S3: serialize state for cache * Source S3: refactor skip file filter * Source S3: bump version + update docs * auto-bump connector version --------- Co-authored-by: Octavia Squidington III --- .../src/main/resources/seed/oss_catalog.json | 11 ++- .../resources/seed/source_definitions.yaml | 2 +- .../src/main/resources/seed/source_specs.yaml | 12 ++- .../connectors/source-s3/Dockerfile | 2 +- .../integration_tests/config_minio.json | 2 +- .../source-s3/integration_tests/spec.json | 9 ++ .../connectors/source-s3/source_s3/source.py | 8 ++ .../source_s3/source_files_abstract/stream.py | 47 +++-------- .../connectors/source-s3/source_s3/stream.py | 63 ++++++++------ .../source-s3/unit_tests/test_stream.py | 84 +++++++++++++++---- connectors.md | 2 +- docs/integrations/sources/s3.md | 2 + 12 files changed, 164 insertions(+), 80 deletions(-) diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json index 5cc9f899aff0..90a046a505ff 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json @@ -22402,7 +22402,7 @@ "sourceDefinitionId": "69589781-7828-43c5-9f63-8925b1c1ccc2", "name": "S3", "dockerRepository": "airbyte/source-s3", - "dockerImageTag": "2.0.4", + "dockerImageTag": "2.1.1", "documentationUrl": "https://docs.airbyte.com/integrations/sources/s3", "icon": "s3.svg", "sourceType": "file", @@ -22640,6 +22640,15 @@ "default": "", "order": 4, "type": "string" + }, + "start_date": { + "title": "Start Date", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any file modified before this date will not be replicated.", + "examples": [ "2021-01-01T00:00:00Z" ], + "format": "date-time", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "order": 5, + "type": "string" } }, "required": [ "bucket" ], diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml index 9a9b843b17b3..1fe488123793 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml @@ -1791,7 +1791,7 @@ - name: S3 sourceDefinitionId: 69589781-7828-43c5-9f63-8925b1c1ccc2 dockerRepository: airbyte/source-s3 - dockerImageTag: 2.0.4 + dockerImageTag: 2.1.1 documentationUrl: https://docs.airbyte.com/integrations/sources/s3 icon: s3.svg sourceType: file diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml index cc04dd6501e8..63bd65b36537 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml @@ -13284,7 +13284,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-s3:2.0.4" +- dockerImage: "airbyte/source-s3:2.1.1" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/s3" changelogUrl: "https://docs.airbyte.com/integrations/sources/s3" @@ -13558,6 +13558,16 @@ default: "" order: 4 type: "string" + start_date: + title: "Start Date" + description: "UTC date and time in the format 2017-01-25T00:00:00Z.\ + \ Any file modified before this date will not be replicated." + examples: + - "2021-01-01T00:00:00Z" + format: "date-time" + pattern: "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$" + order: 5 + type: "string" required: - "bucket" order: 11 diff --git a/airbyte-integrations/connectors/source-s3/Dockerfile b/airbyte-integrations/connectors/source-s3/Dockerfile index a92039a60212..9a2d485cb205 100644 --- a/airbyte-integrations/connectors/source-s3/Dockerfile +++ b/airbyte-integrations/connectors/source-s3/Dockerfile @@ -17,5 +17,5 @@ COPY source_s3 ./source_s3 ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=2.0.4 +LABEL io.airbyte.version=2.1.1 LABEL io.airbyte.name=airbyte/source-s3 diff --git a/airbyte-integrations/connectors/source-s3/integration_tests/config_minio.json b/airbyte-integrations/connectors/source-s3/integration_tests/config_minio.json index 5e8688ed9462..9710e91a383d 100644 --- a/airbyte-integrations/connectors/source-s3/integration_tests/config_minio.json +++ b/airbyte-integrations/connectors/source-s3/integration_tests/config_minio.json @@ -6,7 +6,7 @@ "aws_access_key_id": "123456", "aws_secret_access_key": "123456key", "path_prefix": "", - "endpoint": "http://10.0.124.82:9000" + "endpoint": "http://10.0.213.165:9000" }, "format": { "filetype": "csv", diff --git a/airbyte-integrations/connectors/source-s3/integration_tests/spec.json b/airbyte-integrations/connectors/source-s3/integration_tests/spec.json index 20bc5ad0bdae..eb2b34cc93b1 100644 --- a/airbyte-integrations/connectors/source-s3/integration_tests/spec.json +++ b/airbyte-integrations/connectors/source-s3/integration_tests/spec.json @@ -244,6 +244,15 @@ "default": "", "order": 4, "type": "string" + }, + "start_date": { + "title": "Start Date", + "description": "UTC date and time in the format 2017-01-25T00:00:00Z. Any file modified before this date will not be replicated.", + "examples": ["2021-01-01T00:00:00Z"], + "format": "date-time", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + "order": 5, + "type": "string" } }, "required": ["bucket"], diff --git a/airbyte-integrations/connectors/source-s3/source_s3/source.py b/airbyte-integrations/connectors/source-s3/source_s3/source.py index 677a0b8d4de0..90ed77e775f3 100644 --- a/airbyte-integrations/connectors/source-s3/source_s3/source.py +++ b/airbyte-integrations/connectors/source-s3/source_s3/source.py @@ -48,6 +48,14 @@ class Config: ) endpoint: str = Field("", description="Endpoint to an S3 compatible service. Leave empty to use AWS.", order=4) + start_date: Optional[str] = Field( + title="Start Date", + description="UTC date and time in the format 2017-01-25T00:00:00Z. Any file modified before this date will not be replicated.", + examples=["2021-01-01T00:00:00Z"], + format="date-time", + pattern="^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$", + order=5, + ) provider: S3Provider diff --git a/airbyte-integrations/connectors/source-s3/source_s3/source_files_abstract/stream.py b/airbyte-integrations/connectors/source-s3/source_s3/source_files_abstract/stream.py index 506a1833c49d..17251e442f57 100644 --- a/airbyte-integrations/connectors/source-s3/source_s3/source_files_abstract/stream.py +++ b/airbyte-integrations/connectors/source-s3/source_s3/source_files_abstract/stream.py @@ -11,6 +11,7 @@ from traceback import format_exc from typing import Any, Dict, Iterable, Iterator, List, Mapping, MutableMapping, Optional, Union +import pendulum import pytz from airbyte_cdk.logger import AirbyteLogger from airbyte_cdk.models.airbyte_protocol import SyncMode @@ -51,7 +52,7 @@ class FileStream(Stream, ABC): # we need to support both of them for a while deprecated_datetime_format_string = "%Y-%m-%dT%H:%M:%S%z" - def __init__(self, dataset: str, provider: dict, format: dict, path_pattern: str, schema: str = None): + def __init__(self, dataset: str, provider: dict, format: dict, path_pattern: str, schema: str = None, start_date: str = None): """ :param dataset: table name for this stream :param provider: provider specific mapping as described in spec.json @@ -64,6 +65,7 @@ def __init__(self, dataset: str, provider: dict, format: dict, path_pattern: str self._provider = provider self._format = format self._user_input_schema: Dict[str, Any] = {} + self.start_date = pendulum.parse(start_date) if start_date else pendulum.from_timestamp(0) if schema: self._user_input_schema = self._parse_user_input_schema(schema) LOGGER.info(f"initialised stream with format: {format}") @@ -134,7 +136,7 @@ def storagefile_class(self) -> type: """ @abstractmethod - def filepath_iterator(self) -> Iterator[FileInfo]: + def filepath_iterator(self, stream_state: Mapping[str, Any] = None) -> Iterator[FileInfo]: """ Provider-specific method to iterate through bucket/container/etc. and yield each full filepath. This should supply the 'FileInfo' to use in StorageFile(). This is aggrigate all file properties (last_modified, key, size). @@ -155,7 +157,7 @@ def pattern_matched_filepath_iterator(self, file_infos: Iterable[FileInfo]) -> I yield file_info @lru_cache(maxsize=None) - def get_time_ordered_file_infos(self) -> List[FileInfo]: + def get_time_ordered_file_infos(self, stream_state: str = None) -> List[FileInfo]: """ Iterates through pattern_matched_filepath_iterator(), acquiring FileInfo objects with last_modified property of each file to return in time ascending order. @@ -163,7 +165,11 @@ def get_time_ordered_file_infos(self) -> List[FileInfo]: :return: list in time-ascending order """ - return sorted(self.pattern_matched_filepath_iterator(self.filepath_iterator()), key=lambda file_info: file_info.last_modified) + stream_state = eval(stream_state) if stream_state else None + return sorted( + self.pattern_matched_filepath_iterator(self.filepath_iterator(stream_state=stream_state)), + key=lambda file_info: file_info.last_modified, + ) @property def _raw_schema(self) -> Mapping[str, Any]: @@ -312,11 +318,8 @@ def cursor_field(self) -> str: return self.ab_last_mod_col @staticmethod - def file_in_history(file_info: FileInfo, history: dict) -> bool: - for slot in history.values(): - if file_info.key in slot: - return file_info.key in slot - return False + def file_in_history(file_key: str, history: dict) -> bool: + return any(file_key in slot for slot in history.values()) def _get_datetime_from_stream_state(self, stream_state: Mapping[str, Any] = None) -> datetime: """ @@ -400,27 +403,6 @@ def get_updated_state(self, current_stream_state: MutableMapping[str, Any], late return self.size_history_balancer(state_dict) - def need_to_skip_file(self, stream_state, file_info): - """ - Skip this file if last_mod is earlier than our cursor value from state and already in history - or skip this file if last_mod plus delta is earlier than our cursor value - """ - file_in_history_and_last_modified_is_earlier_than_cursor_value = ( - stream_state is not None - and self.cursor_field in stream_state.keys() - and file_info.last_modified <= self._get_datetime_from_stream_state(stream_state) - and self.file_in_history(file_info, stream_state.get("history", {})) - ) - - file_is_not_in_history_and_last_modified_plus_buffer_days_is_earlier_than_cursor_value = file_info.last_modified + timedelta( - days=self.buffer_days - ) < self._get_datetime_from_stream_state(stream_state) and not self.file_in_history(file_info, stream_state.get("history", {})) - - return ( - file_in_history_and_last_modified_is_earlier_than_cursor_value - or file_is_not_in_history_and_last_modified_plus_buffer_days_is_earlier_than_cursor_value - ) - def stream_slices( self, sync_mode: SyncMode, cursor_field: List[str] = None, stream_state: Mapping[str, Any] = None ) -> Iterable[Optional[Dict[str, Any]]]: @@ -441,10 +423,7 @@ def stream_slices( # logic here is to bundle all files with exact same last modified timestamp together in each slice prev_file_last_mod: datetime = None # init variable to hold previous iterations last modified grouped_files_by_time: List[Dict[str, Any]] = [] - for file_info in self.get_time_ordered_file_infos(): - if self.need_to_skip_file(stream_state, file_info): - continue - + for file_info in self.get_time_ordered_file_infos(stream_state=str(stream_state)): # check if this file belongs in the next slice, if so yield the current slice before this file if (prev_file_last_mod is not None) and (file_info.last_modified != prev_file_last_mod): yield {"files": grouped_files_by_time} diff --git a/airbyte-integrations/connectors/source-s3/source_s3/stream.py b/airbyte-integrations/connectors/source-s3/source_s3/stream.py index 55221241dbac..980b1b866a9f 100644 --- a/airbyte-integrations/connectors/source-s3/source_s3/stream.py +++ b/airbyte-integrations/connectors/source-s3/source_s3/stream.py @@ -2,9 +2,10 @@ # Copyright (c) 2023 Airbyte, Inc., all rights reserved. # +from datetime import timedelta +from typing import Any, Iterator, Mapping -from typing import Callable, Iterator - +import pendulum from boto3 import session as boto3session from botocore import UNSIGNED from botocore.config import Config @@ -20,15 +21,18 @@ class IncrementalFileStreamS3(IncrementalFileStream): def storagefile_class(self) -> type: return S3File - def _list_bucket(self, accept_key: Callable = lambda k: True) -> Iterator[FileInfo]: + def filepath_iterator(self, stream_state: Mapping[str, Any] = None) -> Iterator[FileInfo]: """ - Wrapper for boto3's list_objects_v2 so we can handle pagination, filter by lambda func and operate with or without credentials - - :param accept_key: lambda function to allow filtering return keys, e.g. lambda k: not k.endswith('/'), defaults to lambda k: True - :yield: key (name) of each object + :yield: url filepath to use in S3File() """ - provider = self._provider + prefix = self._provider.get("path_prefix") + if prefix is None: + prefix = "" + + msg = f"Iterating S3 bucket '{self._provider['bucket']}'" + self.logger.info(msg + f" with prefix: '{prefix}' " if prefix != "" else msg) + provider = self._provider client_config = None if S3File.use_aws_account(provider): session = boto3session.Session( @@ -44,7 +48,9 @@ def _list_bucket(self, accept_key: Callable = lambda k: True) -> Iterator[FileIn # list_objects_v2 doesn't like a None value for ContinuationToken # so we don't set it if we don't have one. if ctoken: - kwargs = dict(Bucket=provider["bucket"], Prefix=provider.get("path_prefix", ""), ContinuationToken=ctoken) # type: ignore[unreachable] + kwargs = dict( + Bucket=provider["bucket"], Prefix=provider.get("path_prefix", ""), ContinuationToken=ctoken + ) # type: ignore[unreachable] else: kwargs = dict(Bucket=provider["bucket"], Prefix=provider.get("path_prefix", "")) response = client.list_objects_v2(**kwargs) @@ -53,26 +59,33 @@ def _list_bucket(self, accept_key: Callable = lambda k: True) -> Iterator[FileIn except KeyError: pass else: - for c in content: - key = c["Key"] - if accept_key(key): - yield FileInfo(key=key, last_modified=c["LastModified"], size=c["Size"]) + for file in content: + if self.is_not_folder(file) and self.filter_by_last_modified_date(file, stream_state): + yield FileInfo(key=file["Key"], last_modified=file["LastModified"], size=file["Size"]) ctoken = response.get("NextContinuationToken", None) if not ctoken: break - def filepath_iterator(self) -> Iterator[FileInfo]: - """ - See _list_bucket() for logic of interacting with S3 + @staticmethod + def is_not_folder(file) -> bool: + return not file["Key"].endswith("/") - :yield: url filepath to use in S3File() - """ - prefix = self._provider.get("path_prefix") - if prefix is None: - prefix = "" + def filter_by_last_modified_date(self, file: Mapping[str, Any] = None, stream_state: Mapping[str, Any] = None): + cursor_date = pendulum.parse(stream_state.get(self.cursor_field)) if stream_state else self.start_date - msg = f"Iterating S3 bucket '{self._provider['bucket']}'" - self.logger.info(msg + f" with prefix: '{prefix}' " if prefix != "" else msg) + file_in_history_and_last_modified_is_earlier_than_cursor_value = ( + stream_state is not None + and self.cursor_field in stream_state.keys() + and file.get("LastModified") <= self._get_datetime_from_stream_state(stream_state) + and self.file_in_history(file["Key"], stream_state.get("history", {})) + ) + + file_is_not_in_history_and_last_modified_plus_buffer_days_is_earlier_than_cursor_value = file.get("LastModified") + timedelta( + days=self.buffer_days + ) < self._get_datetime_from_stream_state(stream_state) and not self.file_in_history(file["Key"], stream_state.get("history", {})) - # filter out 'folders', we just want actual blobs - yield from self._list_bucket(accept_key=lambda k: not k.endswith("/")) + return ( + file.get("LastModified") > cursor_date + and not file_in_history_and_last_modified_is_earlier_than_cursor_value + and not file_is_not_in_history_and_last_modified_plus_buffer_days_is_earlier_than_cursor_value + ) diff --git a/airbyte-integrations/connectors/source-s3/unit_tests/test_stream.py b/airbyte-integrations/connectors/source-s3/unit_tests/test_stream.py index c8687a53b6de..589d2e0a6257 100644 --- a/airbyte-integrations/connectors/source-s3/unit_tests/test_stream.py +++ b/airbyte-integrations/connectors/source-s3/unit_tests/test_stream.py @@ -2,7 +2,7 @@ # Copyright (c) 2023 Airbyte, Inc., all rights reserved. # -from datetime import datetime +from datetime import datetime, timezone from typing import Any, Dict, List, Mapping from unittest.mock import MagicMock, patch @@ -406,7 +406,7 @@ def test_read(self): stream_instance = IncrementalFileStreamS3( dataset="dummy", provider={"bucket": "test-test"}, format={}, path_pattern="**/prefix*.csv" ) - stream_instance._list_bucket = MagicMock() + stream_instance.filepath_iterator = MagicMock() records = [] slices = stream_instance.stream_slices(sync_mode=SyncMode.full_refresh) @@ -442,10 +442,10 @@ def test_incremental_read(self): stream_instance = IncrementalFileStreamS3( dataset="dummy", provider={"bucket": "test-test"}, format={}, path_pattern="**/prefix*.csv" ) - stream_instance._list_bucket = MagicMock() + stream_instance.filepath_iterator = MagicMock() records = [] - slices = stream_instance.stream_slices(sync_mode=SyncMode.incremental) + slices = stream_instance.stream_slices(sync_mode=SyncMode.incremental, stream_state={}) for slice in slices: records.extend(list(stream_instance.read_records(stream_slice=slice, sync_mode=SyncMode.incremental))) @@ -467,17 +467,17 @@ def test_fileformatparser_map(self): [ { "Contents": [ - {"Key": "Key_A", "Size": 2048, "LastModified": datetime(2020, 2, 20, 20, 0, 2)}, - {"Key": "Key_B", "Size": 1024, "LastModified": datetime(2020, 2, 20, 20, 22, 2)}, + {"Key": "Key_A", "Size": 2048, "LastModified": datetime(2020, 2, 20, 20, 0, 2, tzinfo=timezone.utc)}, + {"Key": "Key_B", "Size": 1024, "LastModified": datetime(2020, 2, 20, 20, 22, 2, tzinfo=timezone.utc)}, ], "NextContinuationToken": "token", }, - {"Contents": [{"Key": "Key_C", "Size": 512, "LastModified": datetime(2022, 2, 2, 2, 2, 2)}]}, + {"Contents": [{"Key": "Key_C", "Size": 512, "LastModified": datetime(2022, 2, 2, 2, 2, 2, tzinfo=timezone.utc)}]}, ], [ - FileInfo(key="Key_A", size=2048, last_modified=datetime(2020, 2, 20, 20, 0, 2)), - FileInfo(key="Key_B", size=1024, last_modified=datetime(2020, 2, 20, 20, 22, 2)), - FileInfo(key="Key_C", size=512, last_modified=datetime(2022, 2, 2, 2, 2, 2)), + FileInfo(key="Key_A", size=2048, last_modified=datetime(2020, 2, 20, 20, 0, 2, tzinfo=timezone.utc)), + FileInfo(key="Key_B", size=1024, last_modified=datetime(2020, 2, 20, 20, 22, 2, tzinfo=timezone.utc)), + FileInfo(key="Key_C", size=512, last_modified=datetime(2022, 2, 2, 2, 2, 2, tzinfo=timezone.utc)), ], ), ("another_test_bucket", "/fullscreen", [{}], []), # empty response @@ -487,15 +487,15 @@ def test_fileformatparser_map(self): [ { "Contents": [ - {"Key": "file/path", "Size": 2048, "LastModified": datetime(2020, 2, 20, 20, 0, 2)}, - {"Key": "file/path/A/", "Size": 1024, "LastModified": datetime(2020, 2, 20, 20, 22, 2)}, + {"Key": "file/path", "Size": 2048, "LastModified": datetime(2020, 2, 20, 20, 0, 2, tzinfo=timezone.utc)}, + {"Key": "file/path/A/", "Size": 1024, "LastModified": datetime(2020, 2, 20, 20, 22, 2, tzinfo=timezone.utc)}, ], "NextContinuationToken": "token", }, - {"Contents": [{"Key": "file/path/B/", "Size": 512, "LastModified": datetime(2022, 2, 2, 2, 2, 2)}]}, + {"Contents": [{"Key": "file/path/B/", "Size": 512, "LastModified": datetime(2022, 2, 2, 2, 2, 2, tzinfo=timezone.utc)}]}, ], [ - FileInfo(key="file/path", size=2048, last_modified=datetime(2020, 2, 20, 20, 0, 2)), + FileInfo(key="file/path", size=2048, last_modified=datetime(2020, 2, 20, 20, 0, 2, tzinfo=timezone.utc)), ], ), ), @@ -515,6 +515,60 @@ def test_filepath_iterator(self, bucket, path_prefix, list_v2_objects, expected_ for file_info in stream_instance.filepath_iterator(): assert file_info == next(expected_info) + @pytest.mark.parametrize( + ("start_date", "bucket", "path_prefix", "list_v2_objects", "expected_files_count"), + ( + ("2021-01-01T00:00:00Z", + "test_bucket", + "/widescreen", + [ + { + "Contents": [ + {"Key": "Key_A", "Size": 2048, + "LastModified": datetime(2020, 2, 20, 20, 0, 2, tzinfo=timezone.utc)}, + {"Key": "Key_B", "Size": 1024, + "LastModified": datetime(2020, 2, 20, 20, 22, 2, tzinfo=timezone.utc)}, + ], + "NextContinuationToken": "token", + }, + {"Contents": [{"Key": "Key_C", "Size": 512, + "LastModified": datetime(2022, 2, 2, 2, 2, 2, tzinfo=timezone.utc)}]}, + ], + 1, + ), + ("2023-01-01T00:00:00Z", + "almost_real_test_bucket", + "/HD", + [ + { + "Contents": [ + {"Key": "file/path", "Size": 2048, + "LastModified": datetime(2020, 2, 20, 20, 0, 2, tzinfo=timezone.utc)}, + {"Key": "file/path/A/", "Size": 1024, + "LastModified": datetime(2020, 2, 20, 20, 22, 2, tzinfo=timezone.utc)}, + ], + "NextContinuationToken": "token", + }, + {"Contents": [{"Key": "file/path/B/", "Size": 512, + "LastModified": datetime(2022, 2, 2, 2, 2, 2, tzinfo=timezone.utc)}]}, + ], + 0, + ), + ), + ) + def test_filepath_iterator_date_filter(self, start_date, bucket, path_prefix, list_v2_objects, expected_files_count): + provider = {"aws_access_key_id": "key_id", "aws_secret_access_key": "access_key"} + s3_client_mock = MagicMock(return_value=MagicMock(list_objects_v2=MagicMock(side_effect=list_v2_objects))) + with patch("source_s3.stream.make_s3_client", s3_client_mock): + stream_instance = IncrementalFileStreamS3( + dataset="dummy", + provider={"bucket": bucket, "path_prefix": path_prefix, **provider}, + format={}, + path_pattern="**/prefix*.png", + start_date=start_date + ) + assert len(list(stream_instance.filepath_iterator())) == expected_files_count + def test_get_schema(self): stream_instance = IncrementalFileStreamS3( dataset="dummy", @@ -581,7 +635,7 @@ def test_schema_no_files(self, mocker): format={"filetype": "csv"}, path_pattern="**/prefix*.csv" ) - mocker.patch.object(stream_instance, "_list_bucket", MagicMock(return_value=[])) + mocker.patch.object(stream_instance, "filepath_iterator", MagicMock(return_value=[])) assert stream_instance.get_json_schema() == { "properties": { "_ab_additional_properties": {"type": "object"}, diff --git a/connectors.md b/connectors.md index 38e53b98adcd..8c68a8ec119a 100644 --- a/connectors.md +++ b/connectors.md @@ -203,7 +203,7 @@ | **Reply.io** | Reply.io icon | Source | airbyte/source-reply-io:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/reply-io) | [connectors/source/reply-io](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/reply-io) | [source-reply-io](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-reply-io) | `8cc6537e-f8a6-423c-b960-e927af76116e` | | **Retently** | Retently icon | Source | airbyte/source-retently:0.1.3 | alpha | [docs](https://docs.airbyte.com/integrations/sources/retently) | [connectors/source/retently](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/retently) | [source-retently](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-retently) | `db04ecd1-42e7-4115-9cec-95812905c626` | | **Rocket.chat** | Rocket.chat icon | Source | airbyte/source-rocket-chat:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/rocket-chat) | [connectors/source/rocket-chat](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/rocket-chat) | [source-rocket-chat](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-rocket-chat) | `921d9608-3915-450b-8078-0af18801ea1b` | -| **S3** | S3 icon | Source | airbyte/source-s3:2.0.4 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/s3) | [connectors/source/s3](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/s3) | [source-s3](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-s3) | `69589781-7828-43c5-9f63-8925b1c1ccc2` | +| **S3** | S3 icon | Source | airbyte/source-s3:2.1.1 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/s3) | [connectors/source/s3](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/s3) | [source-s3](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-s3) | `69589781-7828-43c5-9f63-8925b1c1ccc2` | | **SAP Fieldglass** | SAP Fieldglass icon | Source | airbyte/source-sap-fieldglass:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/sap-fieldglass) | [connectors/source/sap-fieldglass](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/sap-fieldglass) | [source-sap-fieldglass](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-sap-fieldglass) | `ec5f3102-fb31-4916-99ae-864faf8e7e25` | | **SFTP** | SFTP icon | Source | airbyte/source-sftp:0.1.2 | alpha | [docs](https://docs.airbyte.com/integrations/sources/sftp) | [connectors/source/sftp](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/sftp) | [source-sftp](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-sftp) | `a827c52e-791c-4135-a245-e233c5255199` | | **SFTP Bulk** | SFTP Bulk icon | Source | airbyte/source-sftp-bulk:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/sftp-bulk) | [connectors/source/sftp-bulk](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/sftp-bulk) | [source-sftp-bulk](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-sftp-bulk) | `31e3242f-dee7-4cdc-a4b8-8e06c5458517` | diff --git a/docs/integrations/sources/s3.md b/docs/integrations/sources/s3.md index 27de37227f21..6c000328dbf7 100644 --- a/docs/integrations/sources/s3.md +++ b/docs/integrations/sources/s3.md @@ -215,6 +215,8 @@ The Jsonl parser uses pyarrow hence,only the line-delimited JSON format is suppo | Version | Date | Pull Request | Subject | |:--------|:-----------|:----------------------------------------------------------------------------------------------------------------|:---------------------------------------------------------------------------------------------------------------------| +| 2.1.1 | 2023-04-18 | [25010](https://github.com/airbytehq/airbyte/pull/25010) | Refactor filter logic | +| 2.1.0 | 2023-04-10 | [25010](https://github.com/airbytehq/airbyte/pull/25010) | Add `start_date` field to filter files based on `LastModified` option | | 2.0.4 | 2023-03-23 | [24429](https://github.com/airbytehq/airbyte/pull/24429) | Call `check` with a little block size to save time and memory. | | 2.0.3 | 2023-03-17 | [24178](https://github.com/airbytehq/airbyte/pull/24178) | Support legacy datetime format for the period of migration, fix time-zone conversion. | | 2.0.2 | 2023-03-16 | [24157](https://github.com/airbytehq/airbyte/pull/24157) | Return empty schema if `discover` finds no files; Do not infer extra data types when user defined schema is applied. | From bca85c793d9422e5654a5c5b9bebe6351568b0fc Mon Sep 17 00:00:00 2001 From: Arsen Losenko <20901439+arsenlosenko@users.noreply.github.com> Date: Tue, 18 Apr 2023 15:43:09 +0300 Subject: [PATCH 109/187] Source Zendesk Chat: update expected records (#25271) --- .../source-zendesk-chat/integration_tests/expected_records.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airbyte-integrations/connectors/source-zendesk-chat/integration_tests/expected_records.txt b/airbyte-integrations/connectors/source-zendesk-chat/integration_tests/expected_records.txt index 9758905b3346..f30a97e9c7dd 100644 --- a/airbyte-integrations/connectors/source-zendesk-chat/integration_tests/expected_records.txt +++ b/airbyte-integrations/connectors/source-zendesk-chat/integration_tests/expected_records.txt @@ -2,7 +2,7 @@ {"stream": "agent_timeline", "data": {"agent_id": 360786799676, "engagement_count": 0, "start_time": "2022-01-17T13:20:50Z", "status": "invisible", "duration": 789.733983, "id": "360786799676|2022-01-17T13:20:50Z"}, "emitted_at": 1672828433249} {"stream": "agent_timeline", "data": {"agent_id": 360786799676, "engagement_count": 0, "start_time": "2022-06-30T17:16:55Z", "status": "invisible", "duration": 61.089883, "id": "360786799676|2022-06-30T17:16:55Z"}, "emitted_at": 1672828433249} {"stream": "agent_timeline", "data": {"agent_id": 360786799676, "engagement_count": 0, "start_time": "2022-10-28T12:43:05Z", "status": "invisible", "duration": 370.793077, "id": "360786799676|2022-10-28T12:43:05Z"}, "emitted_at": 1672828433249} -{"stream": "agents", "data": {"first_name": "Fake User number - 1", "create_date": "2021-04-23T14:33:11Z", "enabled_departments": [2148322881], "last_name": "", "role_id": 360002848976, "id": 361084605116, "departments": [2148322881], "display_name": "Fake User number - 1", "enabled": true, "skills": [1300601], "email": "fake.user-1@email.com", "last_login": null, "login_count": 0, "roles": {"administrator": false, "owner": false}}, "emitted_at": 1672828433502} +{"stream": "agents", "data": {"enabled_departments": [2148322881, 2150687801, 2150687841], "last_name": "", "enabled": true, "departments": [2148322881, 2150687801, 2150687841], "role_id": 360002848976, "skills": [1300601], "create_date": "2021-04-23T14:33:11Z", "display_name": "Fake User number - 1", "first_name": "Fake User number - 1", "email": "fake.user-1@email.com", "id": 361084605116, "last_login": null, "login_count": 0, "roles": {"administrator": false, "owner": false}}, "emitted_at": 1681819085184} {"stream": "agents", "data": {"first_name": "Fake Agent number - 1", "create_date": "2021-04-23T14:34:20Z", "enabled_departments": [2148322881], "last_name": "", "role_id": 360002848976, "id": 361089721035, "departments": [2148322881, 2148322921], "display_name": "Fake Agent number - 1", "enabled": true, "skills": [1296081, 1300641], "email": "fake.agent-1@email.com", "last_login": null, "login_count": 0, "roles": {"administrator": false, "owner": false}}, "emitted_at": 1672828433502} {"stream": "bans", "data": {"type": "visitor", "id": 75411361, "reason": "Spammer", "created_at": "2021-04-27T15:52:32Z", "visitor_name": "Visitor 47225177", "visitor_id": "10414779.13ojzHu7ISdt0SM"}, "emitted_at": 1672828433831} {"stream": "bans", "data": {"type": "visitor", "id": 75411401, "reason": "Spammer", "created_at": "2021-04-27T15:52:32Z", "visitor_name": "Visitor 62959049", "visitor_id": "10414779.13ojzHu7at4VKcG"}, "emitted_at": 1672828433831} From 8607d9df8bb2b95c4657746fe3cf17c50f8d0868 Mon Sep 17 00:00:00 2001 From: Arsen Losenko <20901439+arsenlosenko@users.noreply.github.com> Date: Tue, 18 Apr 2023 15:45:24 +0300 Subject: [PATCH 110/187] Source Sentry: update expected records (#25270) --- .../source-sentry/integration_tests/expected_records.jsonl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airbyte-integrations/connectors/source-sentry/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-sentry/integration_tests/expected_records.jsonl index 58a647a6f86b..5b857e7ba6c7 100644 --- a/airbyte-integrations/connectors/source-sentry/integration_tests/expected_records.jsonl +++ b/airbyte-integrations/connectors/source-sentry/integration_tests/expected_records.jsonl @@ -1,4 +1,4 @@ {"stream": "projects", "data": {"id": "6712547", "slug": "demo-integration", "name": "demo-integration", "isPublic": false, "isBookmarked": false, "color": "#bf833f", "dateCreated": "2022-09-02T15:01:28.946777Z", "firstEvent": "2022-09-02T15:36:50.870000Z", "firstTransactionEvent": false, "hasSessions": false, "hasProfiles": false, "hasReplays": false, "hasMonitors": false, "hasMinifiedStackTrace": false, "features": ["alert-filters", "minidump", "race-free-group-creation", "similarity-indexing", "similarity-view"], "status": "active", "platform": "javascript-react", "isInternal": false, "isMember": true, "hasAccess": true, "avatar": {"avatarType": "letter_avatar", "avatarUuid": null}, "organization": {"id": "985996", "slug": "airbyte-09", "status": {"id": "active", "name": "active"}, "name": "Airbyte", "dateCreated": "2021-09-02T07:41:55.899035Z", "isEarlyAdopter": false, "require2FA": false, "requireEmailVerification": false, "avatar": {"avatarType": "letter_avatar", "avatarUuid": null}, "features": ["performance-file-io-main-thread-detector", "performance-render-blocking-asset-span-ingest", "metrics-extraction", "onboarding-docs-with-product-selection", "transaction-name-normalize", "ondemand-budgets", "profile-file-io-main-thread-post-process-group", "profiling-sampled-format", "performance-n-plus-one-api-calls-post-process-group", "performance-file-io-main-thread-ingest", "invite-members-rate-limits", "monitors", "performance-onboarding-checklist", "mep-rollout-flag", "event-attachments", "source-maps-debug-ids", "release-health-drop-sessions", "advanced-search", "profiling", "india-promotion", "discover-events-rate-limit", "session-replay-ui", "performance-issues-all-events-tab", "performance-uncompressed-assets-post-process-group", "issue-alert-preview", "dynamic-sampling", "derive-code-mappings", "performance-slow-db-issue", "onboarding-remove-multiselect-platform", "performance-n-plus-one-db-queries-ingest", "auto-enable-codecov", "profiling-span-previews", "source-maps-cta", "performance-consecutive-db-queries-ingest", "business-to-team-promotion", "performance-render-blocking-asset-span-post-process-group", "session-replay", "track-button-click-events", "performance-m-n-plus-one-db-queries-ingest", "performance-metrics-backed-transaction-summary", "session-replay-ga", "performance-mep-bannerless-ui", "issue-alert-fallback-experiment", "performance-slow-db-query-post-process-group", "issue-alert-incompatible-rules", "performance-issues-search", "performance-file-io-main-thread-post-process-group", "alert-crash-free-metrics", "issue-list-removal-action", "integrations-deployment", "integrations-stacktrace-link", "custom-event-title", "session-replay-recording-scrubbing", "customer-domains", "performance-view", "performance-slow-db-query-ingest", "release-health-return-metrics", "am2-billing", "performance-consecutive-db-queries-post-process-group", "issue-platform", "slack-overage-notifications", "performance-new-widget-designs", "transaction-metrics-extraction", "profile-image-decode-main-thread-ingest", "performance-issues-compressed-assets-detector", "paid-to-free-promotion", "performance-n-plus-one-db-queries-post-process-group", "dynamic-sampling-transaction-name-priority", "performance-span-histogram-view", "performance-landing-page-stats-period", "minute-resolution-sessions", "performance-n-plus-one-api-calls-detector", "issue-alert-fallback-targeting", "performance-issues-m-n-plus-one-db-detector", "shared-issues", "performance-n-plus-one-api-calls-ingest", "dashboards-template", "promotion-mobperf-discount20", "performance-issues-render-blocking-assets-detector", "performance-m-n-plus-one-db-queries-post-process-group", "profile-json-decode-main-thread-ingest", "transaction-name-clusterer", "issue-alert-test-notifications", "symbol-sources", "open-membership", "metric-alert-chartcuterie", "org-subdomains", "performance-transaction-name-only-search-indexed", "promotion-be-adoption-enabled", "dashboards-rh-widget", "profiling-previews", "performance-consecutive-db-issue", "profile-image-decode-main-thread-post-process-group", "promotion-mobperf-gift50kerr", "profile-file-io-main-thread-ingest", "profile-json-decode-main-thread-post-process-group", "anr-rate", "performance-uncompressed-assets-ingest", "onboarding"], "links": {"organizationUrl": "https://airbyte-09.sentry.io", "regionUrl": "https://us.sentry.io"}, "hasAuthProvider": false}}, "emitted_at": 1681113723708} {"stream": "projects", "data": {"id": "5942472", "slug": "airbyte-09", "name": "airbyte-09", "isPublic": false, "isBookmarked": false, "color": "#803fbf", "dateCreated": "2021-09-02T07:42:22.421223Z", "firstEvent": null, "firstTransactionEvent": false, "hasSessions": false, "hasProfiles": false, "hasReplays": false, "hasMonitors": false, "hasMinifiedStackTrace": false, "features": ["alert-filters", "minidump", "race-free-group-creation", "similarity-indexing", "similarity-view", "releases"], "status": "active", "platform": "python", "isInternal": false, "isMember": true, "hasAccess": true, "avatar": {"avatarType": "letter_avatar", "avatarUuid": null}, "organization": {"id": "985996", "slug": "airbyte-09", "status": {"id": "active", "name": "active"}, "name": "Airbyte", "dateCreated": "2021-09-02T07:41:55.899035Z", "isEarlyAdopter": false, "require2FA": false, "requireEmailVerification": false, "avatar": {"avatarType": "letter_avatar", "avatarUuid": null}, "features": ["performance-file-io-main-thread-detector", "performance-render-blocking-asset-span-ingest", "metrics-extraction", "onboarding-docs-with-product-selection", "transaction-name-normalize", "ondemand-budgets", "profile-file-io-main-thread-post-process-group", "profiling-sampled-format", "performance-n-plus-one-api-calls-post-process-group", "performance-file-io-main-thread-ingest", "invite-members-rate-limits", "monitors", "performance-onboarding-checklist", "mep-rollout-flag", "event-attachments", "source-maps-debug-ids", "release-health-drop-sessions", "advanced-search", "profiling", "india-promotion", "discover-events-rate-limit", "session-replay-ui", "performance-issues-all-events-tab", "performance-uncompressed-assets-post-process-group", "issue-alert-preview", "dynamic-sampling", "derive-code-mappings", "performance-slow-db-issue", "onboarding-remove-multiselect-platform", "performance-n-plus-one-db-queries-ingest", "auto-enable-codecov", "profiling-span-previews", "source-maps-cta", "performance-consecutive-db-queries-ingest", "business-to-team-promotion", "performance-render-blocking-asset-span-post-process-group", "session-replay", "track-button-click-events", "performance-m-n-plus-one-db-queries-ingest", "performance-metrics-backed-transaction-summary", "session-replay-ga", "performance-mep-bannerless-ui", "issue-alert-fallback-experiment", "performance-slow-db-query-post-process-group", "issue-alert-incompatible-rules", "performance-issues-search", "performance-file-io-main-thread-post-process-group", "alert-crash-free-metrics", "issue-list-removal-action", "integrations-deployment", "integrations-stacktrace-link", "custom-event-title", "session-replay-recording-scrubbing", "customer-domains", "performance-view", "performance-slow-db-query-ingest", "release-health-return-metrics", "am2-billing", "performance-consecutive-db-queries-post-process-group", "issue-platform", "slack-overage-notifications", "performance-new-widget-designs", "transaction-metrics-extraction", "profile-image-decode-main-thread-ingest", "performance-issues-compressed-assets-detector", "paid-to-free-promotion", "performance-n-plus-one-db-queries-post-process-group", "dynamic-sampling-transaction-name-priority", "performance-span-histogram-view", "performance-landing-page-stats-period", "minute-resolution-sessions", "performance-n-plus-one-api-calls-detector", "issue-alert-fallback-targeting", "performance-issues-m-n-plus-one-db-detector", "shared-issues", "performance-n-plus-one-api-calls-ingest", "dashboards-template", "promotion-mobperf-discount20", "performance-issues-render-blocking-assets-detector", "performance-m-n-plus-one-db-queries-post-process-group", "profile-json-decode-main-thread-ingest", "transaction-name-clusterer", "issue-alert-test-notifications", "symbol-sources", "open-membership", "metric-alert-chartcuterie", "org-subdomains", "performance-transaction-name-only-search-indexed", "promotion-be-adoption-enabled", "dashboards-rh-widget", "profiling-previews", "performance-consecutive-db-issue", "profile-image-decode-main-thread-post-process-group", "promotion-mobperf-gift50kerr", "profile-file-io-main-thread-ingest", "profile-json-decode-main-thread-post-process-group", "anr-rate", "performance-uncompressed-assets-ingest", "onboarding"], "links": {"organizationUrl": "https://airbyte-09.sentry.io", "regionUrl": "https://us.sentry.io"}, "hasAuthProvider": false}}, "emitted_at": 1681113723708} {"stream": "releases", "data": {"id": 289364918, "version": "checkout-app@3.2", "status": "open", "shortVersion": "checkout-app@3.2", "versionInfo": {"package": "checkout-app", "version": {"raw": "3.2", "major": 3, "minor": 2, "patch": 0, "pre": null, "buildCode": null, "components": 2}, "description": "3.2", "buildHash": null}, "ref": null, "url": null, "dateReleased": null, "dateCreated": "2021-09-02T08:10:12.826000Z", "data": {}, "newGroups": 0, "owner": null, "commitCount": 0, "lastCommit": null, "deployCount": 0, "lastDeploy": null, "authors": [], "projects": [{"id": 5942472, "slug": "airbyte-09", "name": "airbyte-09", "newGroups": 0, "platform": "python", "platforms": ["python"], "hasHealthData": false}], "firstEvent": null, "lastEvent": null, "currentProjectMeta": {}, "userAgent": null}, "emitted_at": 1681113724844} -{"stream": "project_detail", "data": {"id": "5942472", "slug": "airbyte-09", "name": "airbyte-09", "isPublic": false, "isBookmarked": false, "color": "#803fbf", "dateCreated": "2021-09-02T07:42:22.421223Z", "firstEvent": null, "firstTransactionEvent": false, "hasSessions": false, "hasProfiles": false, "hasReplays": false, "hasMonitors": false, "hasMinifiedStackTrace": false, "features": ["alert-filters", "minidump", "race-free-group-creation", "similarity-indexing", "similarity-view", "releases"], "status": "active", "platform": "python", "isInternal": false, "isMember": true, "hasAccess": true, "avatar": {"avatarType": "letter_avatar", "avatarUuid": null}, "team": {"id": "1170523", "slug": "airbyte", "name": "Airbyte"}, "teams": [{"id": "1170523", "slug": "airbyte", "name": "Airbyte"}], "latestRelease": {"id": 289364918, "version": "checkout-app@3.2", "status": "open", "shortVersion": "checkout-app@3.2", "versionInfo": {"package": "checkout-app", "version": {"raw": "3.2", "major": 3, "minor": 2, "patch": 0, "pre": null, "buildCode": null, "components": 2}, "description": "3.2", "buildHash": null}, "ref": null, "url": null, "dateReleased": null, "dateCreated": "2021-09-02T08:10:12.826000Z", "data": {}, "newGroups": 0, "owner": null, "commitCount": 0, "lastCommit": null, "deployCount": 0, "lastDeploy": null, "authors": [], "projects": [{"id": 5942472, "slug": "airbyte-09", "name": "airbyte-09", "newGroups": 0, "platform": "python", "platforms": ["python"], "hasHealthData": false}], "firstEvent": null, "lastEvent": null, "currentProjectMeta": {}, "userAgent": null}, "options": {"sentry:token": "5006ad000bc111ec95cd8e5fccda0a6a", "sentry:option-epoch": 7, "sentry:csp_ignored_sources_defaults": true, "sentry:csp_ignored_sources": "", "sentry:reprocessing_active": false, "sentry:performance_issue_creation_rate": null, "sentry:performance_issue_send_to_issues_platform": null, "sentry:performance_issue_create_issue_through_plaform": null, "filters:blacklisted_ips": "", "filters:react-hydration-errors": true, "filters:releases": "", "filters:error_messages": "", "feedback:branding": true}, "digestsMinDelay": 300, "digestsMaxDelay": 1800, "subjectPrefix": "", "allowedDomains": ["*"], "resolveAge": 0, "dataScrubber": true, "dataScrubberDefaults": true, "safeFields": [], "storeCrashReports": null, "sensitiveFields": [], "subjectTemplate": "$shortID - $title", "securityToken": "5006ad000bc111ec95cd8e5fccda0a6a", "securityTokenHeader": null, "verifySSL": false, "scrubIPAddresses": false, "scrapeJavaScript": true, "groupingConfig": "newstyle:2019-10-29", "groupingEnhancements": "", "groupingEnhancementsBase": null, "secondaryGroupingExpiry": 0, "secondaryGroupingConfig": null, "groupingAutoUpdate": true, "fingerprintingRules": "", "organization": {"id": "985996", "slug": "airbyte-09", "status": {"id": "active", "name": "active"}, "name": "Airbyte", "dateCreated": "2021-09-02T07:41:55.899035Z", "isEarlyAdopter": false, "require2FA": false, "requireEmailVerification": false, "avatar": {"avatarType": "letter_avatar", "avatarUuid": null}, "features": ["profile-file-io-main-thread-ingest", "session-replay", "customer-domains", "performance-landing-page-stats-period", "performance-issues-compressed-assets-detector", "performance-mep-bannerless-ui", "mep-rollout-flag", "advanced-search", "performance-n-plus-one-api-calls-ingest", "performance-issues-m-n-plus-one-db-detector", "source-maps-debug-ids", "performance-view", "business-to-team-promotion", "release-health-drop-sessions", "monitors", "ondemand-budgets", "performance-slow-db-query-ingest", "invite-members-rate-limits", "promotion-mobperf-discount20", "source-maps-cta", "performance-metrics-backed-transaction-summary", "profile-file-io-main-thread-post-process-group", "issue-alert-incompatible-rules", "performance-new-widget-designs", "promotion-be-adoption-enabled", "profiling-span-previews", "issue-alert-fallback-experiment", "onboarding", "symbol-sources", "profiling-sampled-format", "dynamic-sampling-transaction-name-priority", "onboarding-remove-multiselect-platform", "transaction-name-normalize", "auto-enable-codecov", "issue-alert-preview", "transaction-name-clusterer", "issue-list-removal-action", "transaction-metrics-extraction", "performance-consecutive-db-issue", "profile-image-decode-main-thread-ingest", "performance-issues-all-events-tab", "event-attachments", "paid-to-free-promotion", "performance-slow-db-issue", "org-subdomains", "performance-n-plus-one-api-calls-detector", "anr-rate", "metrics-extraction", "profile-json-decode-main-thread-post-process-group", "onboarding-docs-with-product-selection", "profile-json-decode-main-thread-ingest", "performance-uncompressed-assets-post-process-group", "performance-uncompressed-assets-ingest", "performance-n-plus-one-api-calls-post-process-group", "integrations-deployment", "profiling", "session-replay-ga", "session-replay-ui", "performance-issues-search", "profile-image-decode-main-thread-post-process-group", "performance-span-histogram-view", "india-promotion", "performance-consecutive-db-queries-post-process-group", "session-replay-recording-scrubbing", "alert-crash-free-metrics", "profiling-previews", "custom-event-title", "performance-slow-db-query-post-process-group", "issue-alert-fallback-targeting", "derive-code-mappings", "am2-billing", "dashboards-template", "integrations-stacktrace-link", "promotion-mobperf-gift50kerr", "issue-platform", "track-button-click-events", "performance-m-n-plus-one-db-queries-post-process-group", "performance-transaction-name-only-search-indexed", "performance-n-plus-one-db-queries-ingest", "performance-render-blocking-asset-span-ingest", "dashboards-rh-widget", "issue-alert-test-notifications", "slack-overage-notifications", "performance-file-io-main-thread-post-process-group", "performance-m-n-plus-one-db-queries-ingest", "performance-file-io-main-thread-detector", "dynamic-sampling", "performance-consecutive-db-queries-ingest", "shared-issues", "discover-events-rate-limit", "minute-resolution-sessions", "performance-render-blocking-asset-span-post-process-group", "metric-alert-chartcuterie", "release-health-return-metrics", "performance-n-plus-one-db-queries-post-process-group", "open-membership", "performance-issues-render-blocking-assets-detector", "performance-file-io-main-thread-ingest", "performance-onboarding-checklist"], "links": {"organizationUrl": "https://airbyte-09.sentry.io", "regionUrl": "https://us.sentry.io"}, "hasAuthProvider": false}, "plugins": [{"id": "asana", "name": "Asana", "slug": "asana", "shortName": "Asana", "type": "issue-tracking", "canDisable": true, "isTestable": false, "hasConfiguration": true, "metadata": {}, "contexts": [], "status": "unknown", "assets": [], "doc": "", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.4.0.dev0", "author": {"name": "Sentry Team", "url": "https://github.com/getsentry/sentry"}, "isDeprecated": false, "isHidden": false, "description": "\nImprove your productivity by creating tasks in Asana directly\nfrom Sentry issues. This integration also allows you to link Sentry\nissues to existing tasks in Asana.\n", "features": ["issue-basic"], "featureDescriptions": [{"description": "Create and link Sentry issue groups directly to an Asana ticket in any of your\n projects, providing a quick way to jump from a Sentry bug to tracked ticket!", "featureGate": "issue-basic"}, {"description": "Link Sentry issues to existing Asana tickets.", "featureGate": "issue-basic"}], "resourceLinks": [{"title": "Report Issue", "url": "https://github.com/getsentry/sentry/issues"}, {"title": "View Source", "url": "https://github.com/getsentry/sentry/tree/master/src/sentry_plugins"}]}, {"id": "bitbucket", "name": "Bitbucket", "slug": "bitbucket", "shortName": "Bitbucket", "type": "issue-tracking", "canDisable": true, "isTestable": false, "hasConfiguration": true, "metadata": {}, "contexts": [], "status": "unknown", "assets": [], "doc": "", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.4.0.dev0", "author": {"name": "Sentry Team", "url": "https://github.com/getsentry/sentry"}, "isDeprecated": false, "isHidden": true, "description": "Integrate Bitbucket issues by linking a repository to a project.", "features": ["commits", "issue-basic"], "featureDescriptions": [{"description": "Track commits and releases (learn more\n [here](https://docs.sentry.io/learn/releases/))", "featureGate": "commits"}, {"description": "Create Bitbucket issues from Sentry", "featureGate": "issue-basic"}, {"description": "Link Sentry issues to existing Bitbucket issues", "featureGate": "issue-basic"}], "resourceLinks": [{"title": "Report Issue", "url": "https://github.com/getsentry/sentry/issues"}, {"title": "View Source", "url": "https://github.com/getsentry/sentry/tree/master/src/sentry_plugins"}]}, {"id": "github", "name": "GitHub", "slug": "github", "shortName": "GitHub", "type": "issue-tracking", "canDisable": true, "isTestable": false, "hasConfiguration": true, "metadata": {}, "contexts": [], "status": "unknown", "assets": [], "doc": "", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.4.0.dev0", "author": {"name": "Sentry Team", "url": "https://github.com/getsentry/sentry"}, "isDeprecated": false, "isHidden": true, "description": "Integrate GitHub issues by linking a repository to a project.", "features": ["commits", "issue-basic"], "featureDescriptions": [{"description": "Authorize repositories to be added to your Sentry organization to augment\n sentry issues with commit data with [deployment\n tracking](https://docs.sentry.io/learn/releases/).", "featureGate": "commits"}, {"description": "Create and link Sentry issue groups directly to a GitHub issue or pull\n request in any of your repositories, providing a quick way to jump from\n Sentry bug to tracked issue or PR!", "featureGate": "issue-basic"}], "resourceLinks": [{"title": "Report Issue", "url": "https://github.com/getsentry/sentry/issues"}, {"title": "View Source", "url": "https://github.com/getsentry/sentry/tree/master/src/sentry_plugins"}]}, {"id": "gitlab", "name": "GitLab", "slug": "gitlab", "shortName": "GitLab", "type": "issue-tracking", "canDisable": true, "isTestable": false, "hasConfiguration": true, "metadata": {}, "contexts": [], "status": "unknown", "assets": [], "doc": "", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.4.0.dev0", "author": {"name": "Sentry Team", "url": "https://github.com/getsentry/sentry"}, "isDeprecated": false, "isHidden": true, "description": "Integrate GitLab issues by linking a repository to a project", "features": ["commits", "issue-basic"], "featureDescriptions": [{"description": "Track commits and releases (learn more\n [here](https://docs.sentry.io/learn/releases/))", "featureGate": "commits"}, {"description": "Resolve Sentry issues via GitLab commits and merge requests by\n including `Fixes PROJ-ID` in the message", "featureGate": "commits"}, {"description": "Create GitLab issues from Sentry", "featureGate": "issue-basic"}, {"description": "Link Sentry issues to existing GitLab issues", "featureGate": "issue-basic"}], "resourceLinks": [{"title": "Report Issue", "url": "https://github.com/getsentry/sentry/issues"}, {"title": "View Source", "url": "https://github.com/getsentry/sentry/tree/master/src/sentry_plugins"}]}, {"id": "heroku", "name": "Heroku", "slug": "heroku", "shortName": "Heroku", "type": "release-tracking", "canDisable": true, "isTestable": false, "hasConfiguration": true, "metadata": {}, "contexts": [], "status": "unknown", "assets": [], "doc": "\n

    Add a Sentry release webhook to automatically track new releases.

    \n
    heroku webhooks:add -i api:release -l notify -u https://sentry.io/api/hooks/release/heroku/5942472/cd92fd5564e9d4a2b82dd03ad2d539a1a2b83ea13e2e205507d2f8d3c513d864/ -a YOUR_APP_NAME
    \n ", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.4.0.dev0", "author": {"name": "Sentry Team", "url": "https://github.com/getsentry"}, "isDeprecated": false, "isHidden": false, "description": "Integrate Heroku release tracking.", "features": ["deployment"], "featureDescriptions": [{"description": "Integrate Heroku release tracking.", "featureGate": "deployment"}], "resourceLinks": [{"title": "Report Issue", "url": "https://github.com/getsentry/sentry/issues"}, {"title": "View Source", "url": "https://github.com/getsentry/sentry/tree/master/src/sentry_plugins"}]}, {"id": "jira", "name": "JIRA", "slug": "jira", "shortName": "JIRA", "type": "issue-tracking", "canDisable": true, "isTestable": false, "hasConfiguration": true, "metadata": {}, "contexts": [], "status": "unknown", "assets": [], "doc": "", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.4.0.dev0", "author": {"name": "Sentry Team", "url": "https://github.com/getsentry/sentry"}, "isDeprecated": false, "isHidden": true, "description": "Integrate JIRA issues by linking a project.", "features": ["issue-basic"], "featureDescriptions": [{"description": "Create and link Sentry issue groups directly to a Jira ticket in any of your\n projects, providing a quick way to jump from a Sentry bug to tracked ticket!", "featureGate": "issue-basic"}], "resourceLinks": [{"title": "Report Issue", "url": "https://github.com/getsentry/sentry/issues"}, {"title": "View Source", "url": "https://github.com/getsentry/sentry/tree/master/src/sentry_plugins"}]}, {"id": "opsgenie", "name": "OpsGenie", "slug": "opsgenie", "shortName": "OpsGenie", "type": "notification", "canDisable": true, "isTestable": true, "hasConfiguration": true, "metadata": {}, "contexts": [], "status": "unknown", "assets": [], "doc": "", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.4.0.dev0", "author": {"name": "Sentry Team", "url": "https://github.com/getsentry"}, "isDeprecated": false, "isHidden": false, "description": "\nTrigger alerts in Opsgenie from Sentry.\n\nOpsgenie is a cloud-based service for dev & ops teams, providing reliable\nalerts, on-call schedule management and escalations. OpsGenie integrates with\nmonitoring tools & services, ensures the right people are notified. This\nplugin only supports issue alerts.\n", "features": ["incident-management", "alert-rule"], "featureDescriptions": [{"description": "Manage incidents and outages by sending Sentry notifications to OpsGenie.", "featureGate": "incident-management"}, {"description": "Configure Sentry rules to trigger notifications based on conditions you set.", "featureGate": "alert-rule"}], "resourceLinks": [{"title": "Report Issue", "url": "https://github.com/getsentry/sentry/issues"}, {"title": "View Source", "url": "https://github.com/getsentry/sentry/tree/master/src/sentry_plugins"}]}, {"id": "pagerduty", "name": "PagerDuty", "slug": "pagerduty", "shortName": "PagerDuty", "type": "notification", "canDisable": true, "isTestable": true, "hasConfiguration": true, "metadata": {}, "contexts": [], "status": "unknown", "assets": [], "doc": "", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.4.0.dev0", "author": {"name": "Sentry Team", "url": "https://github.com/getsentry/sentry"}, "isDeprecated": false, "isHidden": true, "description": "Send alerts to PagerDuty.", "features": ["incident-management", "alert-rule"], "featureDescriptions": [{"description": "Manage incidents and outages by sending Sentry notifications to PagerDuty.", "featureGate": "incident-management"}, {"description": "Configure rule based PagerDuty alerts to automatically be triggered in a specific\n service - or in multiple services!", "featureGate": "alert-rule"}], "resourceLinks": [{"title": "Report Issue", "url": "https://github.com/getsentry/sentry/issues"}, {"title": "View Source", "url": "https://github.com/getsentry/sentry/tree/master/src/sentry_plugins"}]}, {"id": "phabricator", "name": "Phabricator", "slug": "phabricator", "shortName": "Phabricator", "type": "issue-tracking", "canDisable": true, "isTestable": false, "hasConfiguration": true, "metadata": {}, "contexts": [], "status": "unknown", "assets": [], "doc": "", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.4.0.dev0", "author": {"name": "Sentry Team", "url": "https://github.com/getsentry/sentry"}, "isDeprecated": false, "isHidden": false, "description": "\nImprove your productivity by creating tickets in Phabricator directly from Sentry issues.\nThis integration also allows you to link Sentry issues to existing tickets in Phabricator.\n\nPhabricator is a set of tools for developing software. It includes applications for\ncode review, repository hosting, bug tracking, project management, and more.\n", "features": ["issue-basic"], "featureDescriptions": [{"description": "Create and link Sentry issue groups directly to a Phabricator ticket in any of your\n projects, providing a quick way to jump from a Sentry bug to tracked ticket!", "featureGate": "issue-basic"}, {"description": "Link Sentry issues to existing Phabricator tickets.", "featureGate": "issue-basic"}], "resourceLinks": [{"title": "Report Issue", "url": "https://github.com/getsentry/sentry/issues"}, {"title": "View Source", "url": "https://github.com/getsentry/sentry/tree/master/src/sentry_plugins"}]}, {"id": "pivotal", "name": "Pivotal Tracker", "slug": "pivotal", "shortName": "Pivotal Tracker", "type": "issue-tracking", "canDisable": true, "isTestable": false, "hasConfiguration": true, "metadata": {}, "contexts": [], "status": "unknown", "assets": [], "doc": "", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.4.0.dev0", "author": {"name": "Sentry Team", "url": "https://github.com/getsentry/sentry"}, "isDeprecated": false, "isHidden": false, "description": "\nImprove your productivity by creating tickets in Pivotal Tracker directly from Sentry issues.\nThis integration also allows you to link Sentry issues to existing tickets in Pivotal Tracker.\n\nPivotal Tracker is a straightforward project-planning tool that helps software development\nteams form realistic expectations about when work might be completed based on the teams\nongoing performance. Tracker visualizes your projects in the form of stories\nmoving through your workflow, encouraging you to break down projects into manageable\nchunks and have important conversations about deliverables and scope.\n", "features": ["issue-basic"], "featureDescriptions": [{"description": "Create and link Sentry issue groups directly to a Pivotal Tracker ticket in any of your\n projects, providing a quick way to jump from a Sentry bug to tracked ticket!", "featureGate": "issue-basic"}, {"description": "Link Sentry issues to existing Pivotal Tracker tickets.", "featureGate": "issue-basic"}], "resourceLinks": [{"title": "Report Issue", "url": "https://github.com/getsentry/sentry/issues"}, {"title": "View Source", "url": "https://github.com/getsentry/sentry/tree/master/src/sentry_plugins"}]}, {"id": "pushover", "name": "Pushover", "slug": "pushover", "shortName": "Pushover", "type": "notification", "canDisable": true, "isTestable": true, "hasConfiguration": true, "metadata": {}, "contexts": [], "status": "unknown", "assets": [], "doc": "", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.4.0.dev0", "author": {"name": "Sentry Team", "url": "https://github.com/getsentry/sentry"}, "isDeprecated": false, "isHidden": false, "description": "\nGet notified of Sentry alerts on any device using the Pushover integration.\n\nPushover makes it easy to get real-time notifications on your Android, iPhone, iPad, and Desktop.\n", "features": ["mobile", "alert-rule"], "featureDescriptions": [{"description": "Have Pushover notifications get sent to your mobile device with the Pushover app.", "featureGate": "mobile"}, {"description": "Configure Sentry rules to trigger notifications based on conditions you set.", "featureGate": "alert-rule"}], "resourceLinks": [{"title": "Report Issue", "url": "https://github.com/getsentry/sentry/issues"}, {"title": "View Source", "url": "https://github.com/getsentry/sentry/tree/master/src/sentry_plugins"}]}, {"id": "redmine", "name": "Redmine", "slug": "redmine", "shortName": "Redmine", "type": "issue-tracking", "canDisable": true, "isTestable": false, "hasConfiguration": true, "metadata": {}, "contexts": [], "status": "unknown", "assets": [], "doc": "", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.4.0.dev0", "author": {"name": "Sentry", "url": "https://github.com/getsentry/sentry"}, "isDeprecated": false, "isHidden": false, "description": "\nCreate issues in Redmine directly from Sentry. This integration also\nallows you to link Sentry issues to existing tickets in Redmine.\n\nRedmine is a flexible project management web application. Written using\nthe Ruby on Rails framework, it is cross-platform and cross-database.\n", "features": ["issue-basic"], "featureDescriptions": [{"description": "Create and link Sentry issue groups directly to an Redmine issue in any of your\n projects, providing a quick way to jump from a Sentry bug to tracked ticket!", "featureGate": "issue-basic"}, {"description": "Link Sentry issues to existing Redmine issue.", "featureGate": "issue-basic"}], "resourceLinks": [{"title": "Report Issue", "url": "https://github.com/getsentry/sentry/issues"}, {"title": "View Source", "url": "https://github.com/getsentry/sentry/tree/master/src/sentry_plugins"}]}, {"id": "sessionstack", "name": "SessionStack", "slug": "sessionstack", "shortName": "SessionStack", "type": "default", "canDisable": true, "isTestable": false, "hasConfiguration": true, "metadata": {}, "contexts": ["sessionstack"], "status": "unknown", "assets": [], "doc": "", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.4.0.dev0", "author": {"name": "Sentry Team", "url": "https://github.com/getsentry/sentry"}, "isDeprecated": false, "isHidden": false, "description": "Watch SessionStack recordings in Sentry.", "features": ["session-replay"], "featureDescriptions": [{"description": "Watch the SessionStack session replay of a user in a video widget embedded in the Sentry UI for an issue.", "featureGate": "session-replay"}], "resourceLinks": [{"title": "Report Issue", "url": "https://github.com/getsentry/sentry/issues"}, {"title": "View Source", "url": "https://github.com/getsentry/sentry/tree/master/src/sentry_plugins"}]}, {"id": "slack", "name": "Slack", "slug": "slack", "shortName": "Slack", "type": "notification", "canDisable": true, "isTestable": true, "hasConfiguration": true, "metadata": {}, "contexts": [], "status": "unknown", "assets": [], "doc": "", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.4.0.dev0", "author": {"name": "Sentry Team", "url": "https://github.com/getsentry/sentry"}, "isDeprecated": false, "isHidden": true, "description": "Post notifications to a Slack channel.", "features": ["alert-rule"], "featureDescriptions": [{"description": "Configure rule based Slack notifications to automatically be posted into a\n specific channel. Want any error that's happening more than 100 times a\n minute to be posted in `#critical-errors`? Setup a rule for it!", "featureGate": "alert-rule"}], "resourceLinks": [{"title": "Report Issue", "url": "https://github.com/getsentry/sentry/issues"}, {"title": "View Source", "url": "https://github.com/getsentry/sentry/tree/master/src/sentry_plugins"}]}, {"id": "trello", "name": "Trello", "slug": "trello", "shortName": "Trello", "type": "issue-tracking", "canDisable": true, "isTestable": false, "hasConfiguration": true, "metadata": {}, "contexts": [], "status": "unknown", "assets": [], "doc": "", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.4.0.dev0", "author": {"name": "Sentry Team", "url": "https://github.com/getsentry/sentry"}, "isDeprecated": false, "isHidden": false, "description": "\nCreate cards in Trello directly from Sentry. This integration also allows\nyou to link Sentry issues to existing cards in Trello.\n\nTrello is the easy, free, flexible, and visual way to manage your projects\nand organize anything, trusted by millions of people from all over the world.\n", "features": ["issue-basic"], "featureDescriptions": [{"description": "Create and link Sentry issue groups directly to an Trello card in any of your\n projects, providing a quick way to jump from a Sentry bug to tracked ticket!", "featureGate": "issue-basic"}, {"description": "Link Sentry issues to existing Trello cards", "featureGate": "issue-basic"}], "resourceLinks": [{"title": "Trello Setup Instructions", "url": "https://github.com/getsentry/sentry/blob/master/src/sentry_plugins/trello/Trello_Instructions.md"}, {"title": "Report Issue", "url": "https://github.com/getsentry/sentry/issues"}, {"title": "View Source", "url": "https://github.com/getsentry/sentry/tree/master/src/sentry_plugins"}]}, {"id": "twilio", "name": "Twilio (SMS)", "slug": "twilio", "shortName": "Twilio (SMS)", "type": "notification", "canDisable": true, "isTestable": true, "hasConfiguration": true, "metadata": {}, "contexts": [], "status": "unknown", "assets": [], "doc": "", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.4.0.dev0", "author": {"name": "Sentry Team", "url": "https://github.com/getsentry/sentry"}, "isDeprecated": false, "isHidden": false, "description": "\nGet notified of Sentry alerts via SMS.\n\nTwilio allows users to send and receive text messages globally with\nthe API that over a million developers depend on.\n", "features": ["mobile", "alert-rule"], "featureDescriptions": [{"description": "Set up SMS notifications to be sent to your mobile device via Twilio.", "featureGate": "mobile"}, {"description": "Configure Sentry rules to trigger notifications based on conditions you set.", "featureGate": "alert-rule"}], "resourceLinks": [{"title": "Documentation", "url": "https://github.com/getsentry/sentry/blob/master/src/sentry_plugins/twilio/Twilio_Instructions.md"}, {"title": "Report Issue", "url": "https://github.com/getsentry/sentry/issues"}, {"title": "View Source", "url": "https://github.com/getsentry/sentry/tree/master/src/sentry_plugins/twilio"}, {"title": "Twilio", "url": "https://www.twilio.com/"}]}, {"id": "victorops", "name": "VictorOps", "slug": "victorops", "shortName": "VictorOps", "type": "notification", "canDisable": true, "isTestable": true, "hasConfiguration": true, "metadata": {}, "contexts": [], "status": "unknown", "assets": [], "doc": "", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.4.0.dev0", "author": {"name": "Sentry Team", "url": "https://github.com/getsentry/sentry"}, "isDeprecated": false, "isHidden": false, "description": "\nTrigger alerts in VictorOps from Sentry.\n\nVictorOps is incident response software purpose-built for teams powering the\nevolution of software. With on-call basics, cross-team collaboration, and\nstreamlined visibility, we champion the engineers powering innovation and uptime.\n", "features": ["incident-management", "alert-rule"], "featureDescriptions": [{"description": "Manage incidents and outages by sending Sentry notifications to VictorOps.", "featureGate": "incident-management"}, {"description": "Configure Sentry rules to trigger notifications based on conditions you set.", "featureGate": "alert-rule"}], "resourceLinks": [{"title": "Report Issue", "url": "https://github.com/getsentry/sentry/issues"}, {"title": "View Source", "url": "https://github.com/getsentry/sentry/tree/master/src/sentry_plugins"}]}, {"id": "webhooks", "name": "WebHooks", "slug": "webhooks", "shortName": "WebHooks", "type": "notification", "canDisable": true, "isTestable": true, "hasConfiguration": true, "metadata": {}, "contexts": [], "status": "unknown", "assets": [], "doc": "", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.4.0.dev0", "author": {"name": "Sentry Team", "url": "https://github.com/getsentry/sentry"}, "isDeprecated": false, "isHidden": false, "description": "\nTrigger outgoing HTTP POST requests from Sentry.\n\nNote: To configure webhooks over multiple projects, we recommend setting up an\nInternal Integration.\n", "features": ["alert-rule"], "featureDescriptions": [{"description": "Configure rule based outgoing HTTP POST requests from Sentry.", "featureGate": "alert-rule"}], "resourceLinks": [{"title": "Report Issue", "url": "https://github.com/getsentry/sentry/issues"}, {"title": "View Source", "url": "https://github.com/getsentry/sentry/tree/master/src/sentry/plugins/sentry_webhooks"}, {"title": "Internal Integrations", "url": "https://docs.sentry.io/workflow/integrations/integration-platform/#internal-integrations"}]}], "platforms": ["python"], "processingIssues": 0, "defaultEnvironment": null, "relayPiiConfig": null, "builtinSymbolSources": ["ios", "microsoft", "android"], "dynamicSamplingBiases": [{"id": "boostEnvironments", "active": true}, {"id": "boostLatestRelease", "active": true}, {"id": "ignoreHealthChecks", "active": true}, {"id": "boostKeyTransactions", "active": true}, {"id": "boostLowVolumeTransactions", "active": true}], "performanceIssueCreationRate": 1.0, "performanceIssueSendToPlatform": true, "performanceIssueCreationThroughPlatform": null, "eventProcessing": {"symbolicationDegraded": false}, "symbolSources": "[]"}, "emitted_at": 1681113722755} +{"stream": "project_detail", "data": {"id": "5942472", "slug": "airbyte-09", "name": "airbyte-09", "platform": "python", "dateCreated": "2021-09-02T07:42:22.421223Z", "isBookmarked": false, "isPublic": false, "isMember": true, "features": ["alert-filters", "minidump", "race-free-group-creation", "similarity-indexing", "similarity-view", "releases"], "firstEvent": null, "firstTransactionEvent": false, "hasAccess": true, "hasMinifiedStackTrace": false, "hasMonitors": false, "hasProfiles": false, "hasReplays": false, "hasSessions": false, "isInternal": false, "avatar": {"avatarType": "letter_avatar", "avatarUuid": null}, "color": "#803fbf", "status": "active", "team": {"id": "1170523", "slug": "airbyte", "name": "Airbyte"}, "teams": [{"id": "1170523", "slug": "airbyte", "name": "Airbyte"}], "latestRelease": {"id": 289364918, "version": "checkout-app@3.2", "status": "open", "shortVersion": "checkout-app@3.2", "versionInfo": {"package": "checkout-app", "version": {"raw": "3.2", "major": 3, "minor": 2, "patch": 0, "pre": null, "buildCode": null, "components": 2}, "description": "3.2", "buildHash": null}, "ref": null, "url": null, "dateReleased": null, "dateCreated": "2021-09-02T08:10:12.826000Z", "data": {}, "newGroups": 0, "owner": null, "commitCount": 0, "lastCommit": null, "deployCount": 0, "lastDeploy": null, "authors": [], "projects": [{"id": 5942472, "slug": "airbyte-09", "name": "airbyte-09", "newGroups": 0, "platform": "python", "platforms": ["python"], "hasHealthData": false}], "firstEvent": null, "lastEvent": null, "currentProjectMeta": {}, "userAgent": null}, "options": {"quotas:spike-protection-disabled": false, "sentry:token": "5006ad000bc111ec95cd8e5fccda0a6a", "sentry:option-epoch": 7, "sentry:csp_ignored_sources_defaults": true, "sentry:csp_ignored_sources": "", "sentry:reprocessing_active": false, "sentry:performance_issue_creation_rate": null, "sentry:performance_issue_send_to_issues_platform": null, "sentry:performance_issue_create_issue_through_plaform": null, "filters:blacklisted_ips": "", "filters:react-hydration-errors": true, "filters:releases": "", "filters:error_messages": "", "feedback:branding": true}, "digestsMinDelay": 300, "digestsMaxDelay": 1800, "subjectPrefix": "", "allowedDomains": ["*"], "resolveAge": 0, "dataScrubber": true, "dataScrubberDefaults": true, "safeFields": [], "storeCrashReports": null, "sensitiveFields": [], "subjectTemplate": "$shortID - $title", "securityToken": "5006ad000bc111ec95cd8e5fccda0a6a", "securityTokenHeader": null, "verifySSL": false, "scrubIPAddresses": false, "scrapeJavaScript": true, "groupingConfig": "newstyle:2019-10-29", "groupingEnhancements": "", "groupingEnhancementsBase": null, "secondaryGroupingExpiry": 0, "secondaryGroupingConfig": null, "groupingAutoUpdate": true, "fingerprintingRules": "", "organization": {"id": "985996", "slug": "airbyte-09", "status": {"id": "active", "name": "active"}, "name": "Airbyte", "dateCreated": "2021-09-02T07:41:55.899035Z", "isEarlyAdopter": false, "require2FA": false, "requireEmailVerification": false, "avatar": {"avatarType": "letter_avatar", "avatarUuid": null}, "features": ["performance-metrics-backed-transaction-summary", "custom-event-title", "release-health-drop-sessions", "profile-image-decode-main-thread-post-process-group", "performance-m-n-plus-one-db-queries-ingest", "symbol-sources", "performance-issues-all-events-tab", "device-class-synthesis", "issue-alert-fallback-targeting", "device-classification", "session-replay-recording-scrubbing", "integrations-stacktrace-link", "profile-image-decode-main-thread-ingest", "performance-slow-db-query-ingest", "invite-members-rate-limits", "profiling", "promotion-mobperf-gift50kerr", "promotion-mobperf-discount20", "performance-consecutive-db-queries-post-process-group", "dynamic-sampling-transaction-name-priority", "performance-issues-search", "issue-platform", "session-replay", "performance-issues-m-n-plus-one-db-detector", "onboarding", "transaction-metrics-extraction", "am2-billing", "transaction-name-mark-scrubbed-as-sanitized", "mep-rollout-flag", "performance-uncompressed-assets-ingest", "performance-consecutive-db-issue", "profile-json-decode-main-thread-post-process-group", "performance-issues-render-blocking-assets-detector", "performance-n-plus-one-api-calls-post-process-group", "auto-enable-codecov", "performance-render-blocking-asset-span-ingest", "performance-n-plus-one-db-queries-ingest", "session-replay-ui", "profiling-sampled-format", "performance-slow-db-issue", "transaction-name-normalize", "profiling-previews", "profile-json-decode-main-thread-visible", "performance-file-io-main-thread-post-process-group", "org-subdomains", "performance-onboarding-checklist", "metric-alert-chartcuterie", "performance-transaction-name-only-search-indexed", "onboarding-docs-with-product-selection", "issue-alert-incompatible-rules", "performance-file-io-main-thread-ingest", "source-maps-debug-ids", "performance-n-plus-one-api-calls-ingest", "minute-resolution-sessions", "performance-m-n-plus-one-db-queries-post-process-group", "profile-file-io-main-thread-post-process-group", "anr-rate", "issue-alert-test-notifications", "onboarding-remove-multiselect-platform", "advanced-search", "shared-issues", "customer-domains", "business-to-team-promotion", "streamline-targeting-context", "performance-landing-page-stats-period", "paid-to-free-promotion", "dynamic-sampling", "profile-file-io-main-thread-visible", "issue-alert-preview", "dashboards-rh-widget", "performance-render-blocking-asset-span-post-process-group", "profile-image-decode-main-thread-visible", "performance-consecutive-db-queries-ingest", "performance-n-plus-one-db-queries-post-process-group", "profile-file-io-main-thread-ingest", "alert-crash-free-metrics", "discover-events-rate-limit", "performance-span-histogram-view", "slack-overage-notifications", "performance-file-io-main-thread-detector", "promotion-be-adoption-enabled", "performance-slow-db-query-post-process-group", "metrics-extraction", "derive-code-mappings", "profiling-span-previews", "dashboards-template", "performance-view", "issue-list-removal-action", "performance-new-widget-designs", "event-attachments", "track-button-click-events", "india-promotion", "performance-issues-compressed-assets-detector", "session-replay-ga", "performance-mep-bannerless-ui", "open-membership", "monitors", "integrations-deployment", "performance-n-plus-one-api-calls-detector", "performance-uncompressed-assets-post-process-group", "profile-json-decode-main-thread-ingest", "ondemand-budgets"], "links": {"organizationUrl": "https://airbyte-09.sentry.io", "regionUrl": "https://us.sentry.io"}, "hasAuthProvider": false}, "plugins": [{"id": "asana", "name": "Asana", "slug": "asana", "shortName": "Asana", "type": "issue-tracking", "canDisable": true, "isTestable": false, "hasConfiguration": true, "metadata": {}, "contexts": [], "status": "unknown", "assets": [], "doc": "", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.5.0.dev0", "author": {"name": "Sentry Team", "url": "https://github.com/getsentry/sentry"}, "isDeprecated": false, "isHidden": false, "description": "\nImprove your productivity by creating tasks in Asana directly\nfrom Sentry issues. This integration also allows you to link Sentry\nissues to existing tasks in Asana.\n", "features": ["issue-basic"], "featureDescriptions": [{"description": "Create and link Sentry issue groups directly to an Asana ticket in any of your\n projects, providing a quick way to jump from a Sentry bug to tracked ticket!", "featureGate": "issue-basic"}, {"description": "Link Sentry issues to existing Asana tickets.", "featureGate": "issue-basic"}], "resourceLinks": [{"title": "Report Issue", "url": "https://github.com/getsentry/sentry/issues"}, {"title": "View Source", "url": "https://github.com/getsentry/sentry/tree/master/src/sentry_plugins"}]}, {"id": "bitbucket", "name": "Bitbucket", "slug": "bitbucket", "shortName": "Bitbucket", "type": "issue-tracking", "canDisable": true, "isTestable": false, "hasConfiguration": true, "metadata": {}, "contexts": [], "status": "unknown", "assets": [], "doc": "", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.5.0.dev0", "author": {"name": "Sentry Team", "url": "https://github.com/getsentry/sentry"}, "isDeprecated": false, "isHidden": true, "description": "Integrate Bitbucket issues by linking a repository to a project.", "features": ["commits", "issue-basic"], "featureDescriptions": [{"description": "Track commits and releases (learn more\n [here](https://docs.sentry.io/learn/releases/))", "featureGate": "commits"}, {"description": "Create Bitbucket issues from Sentry", "featureGate": "issue-basic"}, {"description": "Link Sentry issues to existing Bitbucket issues", "featureGate": "issue-basic"}], "resourceLinks": [{"title": "Report Issue", "url": "https://github.com/getsentry/sentry/issues"}, {"title": "View Source", "url": "https://github.com/getsentry/sentry/tree/master/src/sentry_plugins"}]}, {"id": "github", "name": "GitHub", "slug": "github", "shortName": "GitHub", "type": "issue-tracking", "canDisable": true, "isTestable": false, "hasConfiguration": true, "metadata": {}, "contexts": [], "status": "unknown", "assets": [], "doc": "", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.5.0.dev0", "author": {"name": "Sentry Team", "url": "https://github.com/getsentry/sentry"}, "isDeprecated": false, "isHidden": true, "description": "Integrate GitHub issues by linking a repository to a project.", "features": ["commits", "issue-basic"], "featureDescriptions": [{"description": "Authorize repositories to be added to your Sentry organization to augment\n sentry issues with commit data with [deployment\n tracking](https://docs.sentry.io/learn/releases/).", "featureGate": "commits"}, {"description": "Create and link Sentry issue groups directly to a GitHub issue or pull\n request in any of your repositories, providing a quick way to jump from\n Sentry bug to tracked issue or PR!", "featureGate": "issue-basic"}], "resourceLinks": [{"title": "Report Issue", "url": "https://github.com/getsentry/sentry/issues"}, {"title": "View Source", "url": "https://github.com/getsentry/sentry/tree/master/src/sentry_plugins"}]}, {"id": "gitlab", "name": "GitLab", "slug": "gitlab", "shortName": "GitLab", "type": "issue-tracking", "canDisable": true, "isTestable": false, "hasConfiguration": true, "metadata": {}, "contexts": [], "status": "unknown", "assets": [], "doc": "", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.5.0.dev0", "author": {"name": "Sentry Team", "url": "https://github.com/getsentry/sentry"}, "isDeprecated": false, "isHidden": true, "description": "Integrate GitLab issues by linking a repository to a project", "features": ["commits", "issue-basic"], "featureDescriptions": [{"description": "Track commits and releases (learn more\n [here](https://docs.sentry.io/learn/releases/))", "featureGate": "commits"}, {"description": "Resolve Sentry issues via GitLab commits and merge requests by\n including `Fixes PROJ-ID` in the message", "featureGate": "commits"}, {"description": "Create GitLab issues from Sentry", "featureGate": "issue-basic"}, {"description": "Link Sentry issues to existing GitLab issues", "featureGate": "issue-basic"}], "resourceLinks": [{"title": "Report Issue", "url": "https://github.com/getsentry/sentry/issues"}, {"title": "View Source", "url": "https://github.com/getsentry/sentry/tree/master/src/sentry_plugins"}]}, {"id": "heroku", "name": "Heroku", "slug": "heroku", "shortName": "Heroku", "type": "release-tracking", "canDisable": true, "isTestable": false, "hasConfiguration": true, "metadata": {}, "contexts": [], "status": "unknown", "assets": [], "doc": "\n

    Add a Sentry release webhook to automatically track new releases.

    \n
    heroku webhooks:add -i api:release -l notify -u https://sentry.io/api/hooks/release/heroku/5942472/cd92fd5564e9d4a2b82dd03ad2d539a1a2b83ea13e2e205507d2f8d3c513d864/ -a YOUR_APP_NAME
    \n ", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.5.0.dev0", "author": {"name": "Sentry Team", "url": "https://github.com/getsentry"}, "isDeprecated": false, "isHidden": false, "description": "Integrate Heroku release tracking.", "features": ["deployment"], "featureDescriptions": [{"description": "Integrate Heroku release tracking.", "featureGate": "deployment"}], "resourceLinks": [{"title": "Report Issue", "url": "https://github.com/getsentry/sentry/issues"}, {"title": "View Source", "url": "https://github.com/getsentry/sentry/tree/master/src/sentry_plugins"}]}, {"id": "jira", "name": "JIRA", "slug": "jira", "shortName": "JIRA", "type": "issue-tracking", "canDisable": true, "isTestable": false, "hasConfiguration": true, "metadata": {}, "contexts": [], "status": "unknown", "assets": [], "doc": "", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.5.0.dev0", "author": {"name": "Sentry Team", "url": "https://github.com/getsentry/sentry"}, "isDeprecated": false, "isHidden": true, "description": "Integrate JIRA issues by linking a project.", "features": ["issue-basic"], "featureDescriptions": [{"description": "Create and link Sentry issue groups directly to a Jira ticket in any of your\n projects, providing a quick way to jump from a Sentry bug to tracked ticket!", "featureGate": "issue-basic"}], "resourceLinks": [{"title": "Report Issue", "url": "https://github.com/getsentry/sentry/issues"}, {"title": "View Source", "url": "https://github.com/getsentry/sentry/tree/master/src/sentry_plugins"}]}, {"id": "opsgenie", "name": "OpsGenie", "slug": "opsgenie", "shortName": "OpsGenie", "type": "notification", "canDisable": true, "isTestable": true, "hasConfiguration": true, "metadata": {}, "contexts": [], "status": "unknown", "assets": [], "doc": "", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.5.0.dev0", "author": {"name": "Sentry Team", "url": "https://github.com/getsentry"}, "isDeprecated": false, "isHidden": false, "description": "\nTrigger alerts in Opsgenie from Sentry.\n\nOpsgenie is a cloud-based service for dev & ops teams, providing reliable\nalerts, on-call schedule management and escalations. OpsGenie integrates with\nmonitoring tools & services, ensures the right people are notified. This\nplugin only supports issue alerts.\n", "features": ["alert-rule", "incident-management"], "featureDescriptions": [{"description": "Manage incidents and outages by sending Sentry notifications to OpsGenie.", "featureGate": "incident-management"}, {"description": "Configure Sentry rules to trigger notifications based on conditions you set.", "featureGate": "alert-rule"}], "resourceLinks": [{"title": "Report Issue", "url": "https://github.com/getsentry/sentry/issues"}, {"title": "View Source", "url": "https://github.com/getsentry/sentry/tree/master/src/sentry_plugins"}]}, {"id": "pagerduty", "name": "PagerDuty", "slug": "pagerduty", "shortName": "PagerDuty", "type": "notification", "canDisable": true, "isTestable": true, "hasConfiguration": true, "metadata": {}, "contexts": [], "status": "unknown", "assets": [], "doc": "", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.5.0.dev0", "author": {"name": "Sentry Team", "url": "https://github.com/getsentry/sentry"}, "isDeprecated": false, "isHidden": true, "description": "Send alerts to PagerDuty.", "features": ["alert-rule", "incident-management"], "featureDescriptions": [{"description": "Manage incidents and outages by sending Sentry notifications to PagerDuty.", "featureGate": "incident-management"}, {"description": "Configure rule based PagerDuty alerts to automatically be triggered in a specific\n service - or in multiple services!", "featureGate": "alert-rule"}], "resourceLinks": [{"title": "Report Issue", "url": "https://github.com/getsentry/sentry/issues"}, {"title": "View Source", "url": "https://github.com/getsentry/sentry/tree/master/src/sentry_plugins"}]}, {"id": "phabricator", "name": "Phabricator", "slug": "phabricator", "shortName": "Phabricator", "type": "issue-tracking", "canDisable": true, "isTestable": false, "hasConfiguration": true, "metadata": {}, "contexts": [], "status": "unknown", "assets": [], "doc": "", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.5.0.dev0", "author": {"name": "Sentry Team", "url": "https://github.com/getsentry/sentry"}, "isDeprecated": false, "isHidden": false, "description": "\nImprove your productivity by creating tickets in Phabricator directly from Sentry issues.\nThis integration also allows you to link Sentry issues to existing tickets in Phabricator.\n\nPhabricator is a set of tools for developing software. It includes applications for\ncode review, repository hosting, bug tracking, project management, and more.\n", "features": ["issue-basic"], "featureDescriptions": [{"description": "Create and link Sentry issue groups directly to a Phabricator ticket in any of your\n projects, providing a quick way to jump from a Sentry bug to tracked ticket!", "featureGate": "issue-basic"}, {"description": "Link Sentry issues to existing Phabricator tickets.", "featureGate": "issue-basic"}], "resourceLinks": [{"title": "Report Issue", "url": "https://github.com/getsentry/sentry/issues"}, {"title": "View Source", "url": "https://github.com/getsentry/sentry/tree/master/src/sentry_plugins"}]}, {"id": "pivotal", "name": "Pivotal Tracker", "slug": "pivotal", "shortName": "Pivotal Tracker", "type": "issue-tracking", "canDisable": true, "isTestable": false, "hasConfiguration": true, "metadata": {}, "contexts": [], "status": "unknown", "assets": [], "doc": "", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.5.0.dev0", "author": {"name": "Sentry Team", "url": "https://github.com/getsentry/sentry"}, "isDeprecated": false, "isHidden": false, "description": "\nImprove your productivity by creating tickets in Pivotal Tracker directly from Sentry issues.\nThis integration also allows you to link Sentry issues to existing tickets in Pivotal Tracker.\n\nPivotal Tracker is a straightforward project-planning tool that helps software development\nteams form realistic expectations about when work might be completed based on the teams\nongoing performance. Tracker visualizes your projects in the form of stories\nmoving through your workflow, encouraging you to break down projects into manageable\nchunks and have important conversations about deliverables and scope.\n", "features": ["issue-basic"], "featureDescriptions": [{"description": "Create and link Sentry issue groups directly to a Pivotal Tracker ticket in any of your\n projects, providing a quick way to jump from a Sentry bug to tracked ticket!", "featureGate": "issue-basic"}, {"description": "Link Sentry issues to existing Pivotal Tracker tickets.", "featureGate": "issue-basic"}], "resourceLinks": [{"title": "Report Issue", "url": "https://github.com/getsentry/sentry/issues"}, {"title": "View Source", "url": "https://github.com/getsentry/sentry/tree/master/src/sentry_plugins"}]}, {"id": "pushover", "name": "Pushover", "slug": "pushover", "shortName": "Pushover", "type": "notification", "canDisable": true, "isTestable": true, "hasConfiguration": true, "metadata": {}, "contexts": [], "status": "unknown", "assets": [], "doc": "", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.5.0.dev0", "author": {"name": "Sentry Team", "url": "https://github.com/getsentry/sentry"}, "isDeprecated": false, "isHidden": false, "description": "\nGet notified of Sentry alerts on any device using the Pushover integration.\n\nPushover makes it easy to get real-time notifications on your Android, iPhone, iPad, and Desktop.\n", "features": ["alert-rule", "mobile"], "featureDescriptions": [{"description": "Have Pushover notifications get sent to your mobile device with the Pushover app.", "featureGate": "mobile"}, {"description": "Configure Sentry rules to trigger notifications based on conditions you set.", "featureGate": "alert-rule"}], "resourceLinks": [{"title": "Report Issue", "url": "https://github.com/getsentry/sentry/issues"}, {"title": "View Source", "url": "https://github.com/getsentry/sentry/tree/master/src/sentry_plugins"}]}, {"id": "redmine", "name": "Redmine", "slug": "redmine", "shortName": "Redmine", "type": "issue-tracking", "canDisable": true, "isTestable": false, "hasConfiguration": true, "metadata": {}, "contexts": [], "status": "unknown", "assets": [], "doc": "", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.5.0.dev0", "author": {"name": "Sentry", "url": "https://github.com/getsentry/sentry"}, "isDeprecated": false, "isHidden": false, "description": "\nCreate issues in Redmine directly from Sentry. This integration also\nallows you to link Sentry issues to existing tickets in Redmine.\n\nRedmine is a flexible project management web application. Written using\nthe Ruby on Rails framework, it is cross-platform and cross-database.\n", "features": ["issue-basic"], "featureDescriptions": [{"description": "Create and link Sentry issue groups directly to an Redmine issue in any of your\n projects, providing a quick way to jump from a Sentry bug to tracked ticket!", "featureGate": "issue-basic"}, {"description": "Link Sentry issues to existing Redmine issue.", "featureGate": "issue-basic"}], "resourceLinks": [{"title": "Report Issue", "url": "https://github.com/getsentry/sentry/issues"}, {"title": "View Source", "url": "https://github.com/getsentry/sentry/tree/master/src/sentry_plugins"}]}, {"id": "sessionstack", "name": "SessionStack", "slug": "sessionstack", "shortName": "SessionStack", "type": "default", "canDisable": true, "isTestable": false, "hasConfiguration": true, "metadata": {}, "contexts": ["sessionstack"], "status": "unknown", "assets": [], "doc": "", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.5.0.dev0", "author": {"name": "Sentry Team", "url": "https://github.com/getsentry/sentry"}, "isDeprecated": false, "isHidden": false, "description": "Watch SessionStack recordings in Sentry.", "features": ["session-replay"], "featureDescriptions": [{"description": "Watch the SessionStack session replay of a user in a video widget embedded in the Sentry UI for an issue.", "featureGate": "session-replay"}], "resourceLinks": [{"title": "Report Issue", "url": "https://github.com/getsentry/sentry/issues"}, {"title": "View Source", "url": "https://github.com/getsentry/sentry/tree/master/src/sentry_plugins"}]}, {"id": "slack", "name": "Slack", "slug": "slack", "shortName": "Slack", "type": "notification", "canDisable": true, "isTestable": true, "hasConfiguration": true, "metadata": {}, "contexts": [], "status": "unknown", "assets": [], "doc": "", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.5.0.dev0", "author": {"name": "Sentry Team", "url": "https://github.com/getsentry/sentry"}, "isDeprecated": false, "isHidden": true, "description": "Post notifications to a Slack channel.", "features": ["alert-rule"], "featureDescriptions": [{"description": "Configure rule based Slack notifications to automatically be posted into a\n specific channel. Want any error that's happening more than 100 times a\n minute to be posted in `#critical-errors`? Setup a rule for it!", "featureGate": "alert-rule"}], "resourceLinks": [{"title": "Report Issue", "url": "https://github.com/getsentry/sentry/issues"}, {"title": "View Source", "url": "https://github.com/getsentry/sentry/tree/master/src/sentry_plugins"}]}, {"id": "trello", "name": "Trello", "slug": "trello", "shortName": "Trello", "type": "issue-tracking", "canDisable": true, "isTestable": false, "hasConfiguration": true, "metadata": {}, "contexts": [], "status": "unknown", "assets": [], "doc": "", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.5.0.dev0", "author": {"name": "Sentry Team", "url": "https://github.com/getsentry/sentry"}, "isDeprecated": false, "isHidden": false, "description": "\nCreate cards in Trello directly from Sentry. This integration also allows\nyou to link Sentry issues to existing cards in Trello.\n\nTrello is the easy, free, flexible, and visual way to manage your projects\nand organize anything, trusted by millions of people from all over the world.\n", "features": ["issue-basic"], "featureDescriptions": [{"description": "Create and link Sentry issue groups directly to an Trello card in any of your\n projects, providing a quick way to jump from a Sentry bug to tracked ticket!", "featureGate": "issue-basic"}, {"description": "Link Sentry issues to existing Trello cards", "featureGate": "issue-basic"}], "resourceLinks": [{"title": "Trello Setup Instructions", "url": "https://github.com/getsentry/sentry/blob/master/src/sentry_plugins/trello/Trello_Instructions.md"}, {"title": "Report Issue", "url": "https://github.com/getsentry/sentry/issues"}, {"title": "View Source", "url": "https://github.com/getsentry/sentry/tree/master/src/sentry_plugins"}]}, {"id": "twilio", "name": "Twilio (SMS)", "slug": "twilio", "shortName": "Twilio (SMS)", "type": "notification", "canDisable": true, "isTestable": true, "hasConfiguration": true, "metadata": {}, "contexts": [], "status": "unknown", "assets": [], "doc": "", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.5.0.dev0", "author": {"name": "Sentry Team", "url": "https://github.com/getsentry/sentry"}, "isDeprecated": false, "isHidden": false, "description": "\nGet notified of Sentry alerts via SMS.\n\nTwilio allows users to send and receive text messages globally with\nthe API that over a million developers depend on.\n", "features": ["alert-rule", "mobile"], "featureDescriptions": [{"description": "Set up SMS notifications to be sent to your mobile device via Twilio.", "featureGate": "mobile"}, {"description": "Configure Sentry rules to trigger notifications based on conditions you set.", "featureGate": "alert-rule"}], "resourceLinks": [{"title": "Documentation", "url": "https://github.com/getsentry/sentry/blob/master/src/sentry_plugins/twilio/Twilio_Instructions.md"}, {"title": "Report Issue", "url": "https://github.com/getsentry/sentry/issues"}, {"title": "View Source", "url": "https://github.com/getsentry/sentry/tree/master/src/sentry_plugins/twilio"}, {"title": "Twilio", "url": "https://www.twilio.com/"}]}, {"id": "victorops", "name": "VictorOps", "slug": "victorops", "shortName": "VictorOps", "type": "notification", "canDisable": true, "isTestable": true, "hasConfiguration": true, "metadata": {}, "contexts": [], "status": "unknown", "assets": [], "doc": "", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.5.0.dev0", "author": {"name": "Sentry Team", "url": "https://github.com/getsentry/sentry"}, "isDeprecated": false, "isHidden": false, "description": "\nTrigger alerts in VictorOps from Sentry.\n\nVictorOps is incident response software purpose-built for teams powering the\nevolution of software. With on-call basics, cross-team collaboration, and\nstreamlined visibility, we champion the engineers powering innovation and uptime.\n", "features": ["alert-rule", "incident-management"], "featureDescriptions": [{"description": "Manage incidents and outages by sending Sentry notifications to VictorOps.", "featureGate": "incident-management"}, {"description": "Configure Sentry rules to trigger notifications based on conditions you set.", "featureGate": "alert-rule"}], "resourceLinks": [{"title": "Report Issue", "url": "https://github.com/getsentry/sentry/issues"}, {"title": "View Source", "url": "https://github.com/getsentry/sentry/tree/master/src/sentry_plugins"}]}, {"id": "webhooks", "name": "WebHooks", "slug": "webhooks", "shortName": "WebHooks", "type": "notification", "canDisable": true, "isTestable": true, "hasConfiguration": true, "metadata": {}, "contexts": [], "status": "unknown", "assets": [], "doc": "", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.5.0.dev0", "author": {"name": "Sentry Team", "url": "https://github.com/getsentry/sentry"}, "isDeprecated": false, "isHidden": false, "description": "\nTrigger outgoing HTTP POST requests from Sentry.\n\nNote: To configure webhooks over multiple projects, we recommend setting up an\nInternal Integration.\n", "features": ["alert-rule"], "featureDescriptions": [{"description": "Configure rule based outgoing HTTP POST requests from Sentry.", "featureGate": "alert-rule"}], "resourceLinks": [{"title": "Report Issue", "url": "https://github.com/getsentry/sentry/issues"}, {"title": "View Source", "url": "https://github.com/getsentry/sentry/tree/master/src/sentry/plugins/sentry_webhooks"}, {"title": "Internal Integrations", "url": "https://docs.sentry.io/workflow/integrations/integration-platform/#internal-integrations"}]}], "platforms": ["python"], "processingIssues": 0, "defaultEnvironment": null, "relayPiiConfig": null, "builtinSymbolSources": ["ios", "microsoft", "android"], "dynamicSamplingBiases": [{"id": "boostEnvironments", "active": true}, {"id": "boostLatestRelease", "active": true}, {"id": "ignoreHealthChecks", "active": true}, {"id": "boostKeyTransactions", "active": true}, {"id": "boostLowVolumeTransactions", "active": true}], "performanceIssueCreationRate": 1.0, "performanceIssueSendToPlatform": true, "performanceIssueCreationThroughPlatform": null, "eventProcessing": {"symbolicationDegraded": false}, "symbolSources": "[]"}, "emitted_at": 1681818237543} \ No newline at end of file From 09d800551a3de1931f2113d2bc99ebebdb333d41 Mon Sep 17 00:00:00 2001 From: Artem Inzhyyants <36314070+artem1205@users.noreply.github.com> Date: Tue, 18 Apr 2023 16:08:23 +0200 Subject: [PATCH 111/187] Source S3: handle block size related errors (#25067) * Source S3: handle pyarrow block size errors * Source S3: bump version * Automated Change * Source S3: fix null field check * Revert "Automated Change" This reverts commit dc707f729db2371552f87311b048b6087751bf9c. * Automated Change * Source S3: bump version + update docs * auto-bump connector version --------- Co-authored-by: artem1205 Co-authored-by: Octavia Squidington III --- .../init-oss/src/main/resources/seed/oss_catalog.json | 2 +- .../src/main/resources/seed/source_definitions.yaml | 2 +- .../init-oss/src/main/resources/seed/source_specs.yaml | 2 +- airbyte-integrations/connectors/source-s3/Dockerfile | 2 +- .../source-s3/integration_tests/config_minio.json | 2 +- .../source_s3/source_files_abstract/formats/csv_parser.py | 6 +++++- connectors.md | 2 +- docs/integrations/sources/s3.md | 1 + 8 files changed, 12 insertions(+), 7 deletions(-) diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json index 90a046a505ff..986acdb2a503 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json @@ -22402,7 +22402,7 @@ "sourceDefinitionId": "69589781-7828-43c5-9f63-8925b1c1ccc2", "name": "S3", "dockerRepository": "airbyte/source-s3", - "dockerImageTag": "2.1.1", + "dockerImageTag": "2.1.2", "documentationUrl": "https://docs.airbyte.com/integrations/sources/s3", "icon": "s3.svg", "sourceType": "file", diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml index 1fe488123793..e13956a6a110 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml @@ -1791,7 +1791,7 @@ - name: S3 sourceDefinitionId: 69589781-7828-43c5-9f63-8925b1c1ccc2 dockerRepository: airbyte/source-s3 - dockerImageTag: 2.1.1 + dockerImageTag: 2.1.2 documentationUrl: https://docs.airbyte.com/integrations/sources/s3 icon: s3.svg sourceType: file diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml index 63bd65b36537..be7b30e750ed 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml @@ -13284,7 +13284,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-s3:2.1.1" +- dockerImage: "airbyte/source-s3:2.1.2" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/s3" changelogUrl: "https://docs.airbyte.com/integrations/sources/s3" diff --git a/airbyte-integrations/connectors/source-s3/Dockerfile b/airbyte-integrations/connectors/source-s3/Dockerfile index 9a2d485cb205..c913a5dc6410 100644 --- a/airbyte-integrations/connectors/source-s3/Dockerfile +++ b/airbyte-integrations/connectors/source-s3/Dockerfile @@ -17,5 +17,5 @@ COPY source_s3 ./source_s3 ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=2.1.1 +LABEL io.airbyte.version=2.1.2 LABEL io.airbyte.name=airbyte/source-s3 diff --git a/airbyte-integrations/connectors/source-s3/integration_tests/config_minio.json b/airbyte-integrations/connectors/source-s3/integration_tests/config_minio.json index 9710e91a383d..457c49ea53c8 100644 --- a/airbyte-integrations/connectors/source-s3/integration_tests/config_minio.json +++ b/airbyte-integrations/connectors/source-s3/integration_tests/config_minio.json @@ -6,7 +6,7 @@ "aws_access_key_id": "123456", "aws_secret_access_key": "123456key", "path_prefix": "", - "endpoint": "http://10.0.213.165:9000" + "endpoint": "http://10.0.80.203:9000" }, "format": { "filetype": "csv", diff --git a/airbyte-integrations/connectors/source-s3/source_s3/source_files_abstract/formats/csv_parser.py b/airbyte-integrations/connectors/source-s3/source_s3/source_files_abstract/formats/csv_parser.py index 97d2d7c15b8b..a46e845cd4ad 100644 --- a/airbyte-integrations/connectors/source-s3/source_s3/source_files_abstract/formats/csv_parser.py +++ b/airbyte-integrations/connectors/source-s3/source_s3/source_files_abstract/formats/csv_parser.py @@ -14,6 +14,7 @@ from airbyte_cdk.models import FailureType from airbyte_cdk.utils.traced_exception import AirbyteTracedException from pyarrow import csv as pa_csv +from pyarrow.lib import ArrowInvalid from source_s3.exceptions import S3Exception from source_s3.source_files_abstract.file_info import FileInfo from source_s3.utils import get_value_or_json_if_empty_string, run_in_external_process @@ -61,7 +62,7 @@ def _validate_field( field_value = format_.get(field_name) if not field_value and allow_empty: return - if len(field_value) != 1: + if field_value and len(field_value) != 1: return f"{field_name} should contain 1 character only" if field_value in disallow_values: return f"{field_name} can not be {field_value}" @@ -242,6 +243,9 @@ def stream_records(self, file: Union[TextIO, BinaryIO], file_info: FileInfo) -> while still_reading: try: batch = streaming_reader.read_next_batch() + except ArrowInvalid as e: + error_message = "Possibly too small block size used. Please try to increase it" + raise AirbyteTracedException(message=error_message, failure_type=FailureType.config_error) from e except StopIteration: still_reading = False else: diff --git a/connectors.md b/connectors.md index 8c68a8ec119a..84fe2dcff27a 100644 --- a/connectors.md +++ b/connectors.md @@ -203,7 +203,7 @@ | **Reply.io** | Reply.io icon | Source | airbyte/source-reply-io:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/reply-io) | [connectors/source/reply-io](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/reply-io) | [source-reply-io](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-reply-io) | `8cc6537e-f8a6-423c-b960-e927af76116e` | | **Retently** | Retently icon | Source | airbyte/source-retently:0.1.3 | alpha | [docs](https://docs.airbyte.com/integrations/sources/retently) | [connectors/source/retently](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/retently) | [source-retently](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-retently) | `db04ecd1-42e7-4115-9cec-95812905c626` | | **Rocket.chat** | Rocket.chat icon | Source | airbyte/source-rocket-chat:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/rocket-chat) | [connectors/source/rocket-chat](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/rocket-chat) | [source-rocket-chat](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-rocket-chat) | `921d9608-3915-450b-8078-0af18801ea1b` | -| **S3** | S3 icon | Source | airbyte/source-s3:2.1.1 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/s3) | [connectors/source/s3](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/s3) | [source-s3](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-s3) | `69589781-7828-43c5-9f63-8925b1c1ccc2` | +| **S3** | S3 icon | Source | airbyte/source-s3:2.1.2 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/s3) | [connectors/source/s3](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/s3) | [source-s3](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-s3) | `69589781-7828-43c5-9f63-8925b1c1ccc2` | | **SAP Fieldglass** | SAP Fieldglass icon | Source | airbyte/source-sap-fieldglass:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/sap-fieldglass) | [connectors/source/sap-fieldglass](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/sap-fieldglass) | [source-sap-fieldglass](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-sap-fieldglass) | `ec5f3102-fb31-4916-99ae-864faf8e7e25` | | **SFTP** | SFTP icon | Source | airbyte/source-sftp:0.1.2 | alpha | [docs](https://docs.airbyte.com/integrations/sources/sftp) | [connectors/source/sftp](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/sftp) | [source-sftp](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-sftp) | `a827c52e-791c-4135-a245-e233c5255199` | | **SFTP Bulk** | SFTP Bulk icon | Source | airbyte/source-sftp-bulk:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/sftp-bulk) | [connectors/source/sftp-bulk](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/sftp-bulk) | [source-sftp-bulk](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-sftp-bulk) | `31e3242f-dee7-4cdc-a4b8-8e06c5458517` | diff --git a/docs/integrations/sources/s3.md b/docs/integrations/sources/s3.md index 6c000328dbf7..3bcacc4394f8 100644 --- a/docs/integrations/sources/s3.md +++ b/docs/integrations/sources/s3.md @@ -215,6 +215,7 @@ The Jsonl parser uses pyarrow hence,only the line-delimited JSON format is suppo | Version | Date | Pull Request | Subject | |:--------|:-----------|:----------------------------------------------------------------------------------------------------------------|:---------------------------------------------------------------------------------------------------------------------| +| 2.1.2 | 2023-04-18 | [25067](https://github.com/airbytehq/airbyte/pull/25067) | Handle block size related errors; fix config validator | | 2.1.1 | 2023-04-18 | [25010](https://github.com/airbytehq/airbyte/pull/25010) | Refactor filter logic | | 2.1.0 | 2023-04-10 | [25010](https://github.com/airbytehq/airbyte/pull/25010) | Add `start_date` field to filter files based on `LastModified` option | | 2.0.4 | 2023-03-23 | [24429](https://github.com/airbytehq/airbyte/pull/24429) | Call `check` with a little block size to save time and memory. | From 615caa61100bac814f41ddd6406576287df93b96 Mon Sep 17 00:00:00 2001 From: Arsen Losenko <20901439+arsenlosenko@users.noreply.github.com> Date: Tue, 18 Apr 2023 17:43:52 +0300 Subject: [PATCH 112/187] Source Zendesk Support: update expected records (#25272) --- .../integration_tests/expected_records.jsonl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/airbyte-integrations/connectors/source-zendesk-support/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-zendesk-support/integration_tests/expected_records.jsonl index f01f6ee70b50..a601aed31f9b 100644 --- a/airbyte-integrations/connectors/source-zendesk-support/integration_tests/expected_records.jsonl +++ b/airbyte-integrations/connectors/source-zendesk-support/integration_tests/expected_records.jsonl @@ -98,5 +98,5 @@ {"stream":"users","data":{"id":5527111815439,"url":"https://d3v-airbyte.zendesk.com/api/v2/users/5527111815439.json","name":"Caller +1 (234) 601-8567","email":null,"created_at":"2022-09-19T14:53:48Z","updated_at":"2022-09-19T14:53:49Z","time_zone":"Pacific/Noumea","iana_time_zone":"Pacific/Noumea","phone":"+12346018567","shared_phone_number":false,"photo":null,"locale_id":1,"locale":"en-US","organization_id":null,"role":"end-user","verified":true,"external_id":null,"tags":[],"alias":null,"active":true,"shared":false,"shared_agent":false,"last_login_at":null,"two_factor_auth_enabled":false,"signature":null,"details":null,"notes":null,"role_type":null,"custom_role_id":null,"moderator":false,"ticket_restriction":"requested","only_private_comments":false,"restricted_agent":true,"suspended":false,"default_group_id":null,"report_csv":false,"user_fields":{}},"emitted_at":1673880717536} {"stream": "brands", "data": {"url": "https://d3v-airbyte.zendesk.com/api/v2/brands/360000358316.json", "id": 360000358316, "name": "Airbyte", "brand_url": "https://d3v-airbyte.zendesk.com", "subdomain": "d3v-airbyte", "host_mapping": null, "has_help_center": false, "help_center_state": "disabled", "active": true, "default": true, "is_deleted": false, "logo": null, "ticket_form_ids": [360000084116], "signature_template": "{{agent.signature}}", "created_at": "2020-12-11T18:34:04Z", "updated_at": "2020-12-11T18:34:09Z"}, "emitted_at": 1673881264500} {"stream": "custom_roles", "data": {"id": 360000210636, "name": "Advisor", "description": "Can automate ticket workflows, manage channels and make private comments on tickets", "role_type": 0, "created_at": "2020-12-11T18:34:36Z", "updated_at": "2020-12-11T18:34:36Z", "configuration": {"chat_access": true, "manage_business_rules": true, "manage_dynamic_content": false, "manage_extensions_and_channels": true, "manage_facebook": true, "ticket_deletion": false, "view_deleted_tickets": false, "ticket_tag_editing": true, "twitter_search_access": false, "forum_access_restricted_content": false, "end_user_list_access": "full", "ticket_access": "within-groups", "ticket_comment_access": "none", "voice_access": true, "moderate_forums": false, "light_agent": false, "side_conversation_create": true, "group_access": false, "organization_editing": false, "organization_notes_editing": false, "assign_tickets_to_any_group": false, "end_user_profile_access": "readonly", "explore_access": "readonly", "forum_access": "readonly", "macro_access": "full", "report_access": "none", "ticket_editing": true, "ticket_merge": false, "view_access": "full", "user_view_access": "full", "voice_dashboard_access": false, "manage_contextual_workspaces": false, "manage_organization_fields": false, "manage_ticket_fields": false, "manage_ticket_forms": false, "manage_user_fields": false, "manage_automations": true, "manage_skills": true, "manage_slas": true, "manage_triggers": true, "ticket_redaction": false, "manage_roles": "none"}, "team_member_count": 0}, "emitted_at": 1681484993833} -{"stream": "tags", "data": {"name": "test", "count": 1}, "emitted_at": 1681311413435} +{"stream": "tags", "data": {"name": "test", "count": 2}, "emitted_at": 1681311413435} {"stream": "tags", "data": {"name": "tag1204", "count": 1}, "emitted_at": 1681311413435} From e1101a6a82eb3083737c4e74588ea6449dd0400c Mon Sep 17 00:00:00 2001 From: Ben Church Date: Tue, 18 Apr 2023 09:07:37 -0700 Subject: [PATCH 113/187] Add Dagster Deployment Action skeleton (#24929) * Add code skeleton * Remove pr deployments * remove connectors change * Add action git ignore * Update YAML to deploy properly * Add newline at eof * Setup python-executable deploy * Add temporary script * Update readme * Remove github workflow * Add dagger pipeline for deploy * Add github action * Update readme * Remove comment * Move script into dagger pipeline * Add run test helper and skip test logic * Have the dagster orchestrator properly generate the setup.py file * Remove deploy script * Address PR comments * Update lock * Automated Commit - Formatting Changes --------- Co-authored-by: bnchrch --- ...ata_service_deploy_orchestrator_dagger.yml | 23 + .gitignore | 3 + .../metadata_service/orchestrator/README.md | 18 +- .../orchestrator/dagster_cloud.yaml | 4 + .../metadata_service/orchestrator/poetry.lock | 871 +++++++++++++----- .../orchestrator/pyproject.toml | 9 +- .../ci_connector_ops/pipelines/bases.py | 11 +- .../pipelines/commands/groups/connectors.py | 4 - .../pipelines/commands/groups/metadata.py | 36 +- .../pipelines/pipelines/metadata.py | 148 ++- 10 files changed, 853 insertions(+), 274 deletions(-) create mode 100644 .github/workflows/metadata_service_deploy_orchestrator_dagger.yml create mode 100644 airbyte-ci/connectors/metadata_service/orchestrator/dagster_cloud.yaml diff --git a/.github/workflows/metadata_service_deploy_orchestrator_dagger.yml b/.github/workflows/metadata_service_deploy_orchestrator_dagger.yml new file mode 100644 index 000000000000..86811d1536c6 --- /dev/null +++ b/.github/workflows/metadata_service_deploy_orchestrator_dagger.yml @@ -0,0 +1,23 @@ +name: Connector metadata service deploy orchestrator + +on: + workflow_dispatch: + push: + branches: + - master + paths: + - "airbyte-ci/connectors/metadata_service/orchestrator/**" +jobs: + connector_metadata_service_deploy_orchestrator: + name: Connector metadata service deploy orchestrator + runs-on: medium-runner + env: + CI_GITHUB_ACCESS_TOKEN: ${{ secrets.GH_PAT_MAINTENANCE_OCTAVIA }} + steps: + - name: Deploy the metadata orchestrator + id: metadata-orchestrator-deploy-orchestrator-pipeline + uses: ./.github/actions/run-dagger-pipeline + with: + subcommand: "metadata deploy orchestrator" + env: + DAGSTER_CLOUD_API_TOKEN: ${{ secrets.DAGSTER_CLOUD_METADATA_API_TOKEN }} diff --git a/.gitignore b/.gitignore index 8c8c09badd1a..89021f0950d2 100644 --- a/.gitignore +++ b/.gitignore @@ -91,3 +91,6 @@ docker-compose.debug.yaml .env .env.dev flags.yml + +# Ignore generated credentials from google-github-actions/auth +gha-creds-*.json diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/README.md b/airbyte-ci/connectors/metadata_service/orchestrator/README.md index 94a17682472d..f3d402f93104 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/README.md +++ b/airbyte-ci/connectors/metadata_service/orchestrator/README.md @@ -86,7 +86,7 @@ Refer to the [Dagster documentation](https://docs.dagster.io/concepts) for more ### Starting the Dagster Daemons Start the orchestrator with the following command: ```bash -poetry run dagster dev -m orchestrator +poetry run dagster dev ``` Then you can access the Dagster UI at http://localhost:3000 @@ -110,3 +110,19 @@ In some cases you may want to run the orchestrator without the UI. To learn more poetry run pytest ``` +## Deploying to Dagster Cloud manually +Note: This is a temporary solution until we have a CI/CD pipeline setup. + +Getting the CICD setup is currently blocked until we hear back from Dagster on a better way to use relative imports in a Dagster Cloud Deployment. + +### Installing the dagster-cloud cli +```bash +pip install dagster-cloud +dagster-cloud config +``` + +### Deploying the orchestrator +```bash +cd orchestrator +DAGSTER_CLOUD_API_TOKEN= airbyte-ci metadata deploy orchestrator +``` diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/dagster_cloud.yaml b/airbyte-ci/connectors/metadata_service/orchestrator/dagster_cloud.yaml new file mode 100644 index 000000000000..79c78347c078 --- /dev/null +++ b/airbyte-ci/connectors/metadata_service/orchestrator/dagster_cloud.yaml @@ -0,0 +1,4 @@ +locations: + - location_name: metadata_service_orchestrator + code_source: + package_name: orchestrator diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/poetry.lock b/airbyte-ci/connectors/metadata_service/orchestrator/poetry.lock index aa50e7f6cc33..1373b4700d9c 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/poetry.lock +++ b/airbyte-ci/connectors/metadata_service/orchestrator/poetry.lock @@ -2,14 +2,14 @@ [[package]] name = "alembic" -version = "1.10.2" +version = "1.10.3" description = "A database migration tool for SQLAlchemy." category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "alembic-1.10.2-py3-none-any.whl", hash = "sha256:8b48368f6533c064b39c024e1daba15ae7f947eac84185c28c06bbe1301a5497"}, - {file = "alembic-1.10.2.tar.gz", hash = "sha256:457eafbdc0769d855c2c92cbafe6b7f319f916c80cf4ed02b8f394f38b51b89d"}, + {file = "alembic-1.10.3-py3-none-any.whl", hash = "sha256:b2e0a6cfd3a8ce936a1168320bcbe94aefa3f4463cd773a968a55071beb3cd37"}, + {file = "alembic-1.10.3.tar.gz", hash = "sha256:32a69b13a613aeb7e8093f242da60eff9daed13c0df02fff279c1b06c32965d2"}, ] [package.dependencies] @@ -68,25 +68,6 @@ files = [ {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, ] -[[package]] -name = "attrs" -version = "22.2.0" -description = "Classes Without Boilerplate" -category = "dev" -optional = false -python-versions = ">=3.6" -files = [ - {file = "attrs-22.2.0-py3-none-any.whl", hash = "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836"}, - {file = "attrs-22.2.0.tar.gz", hash = "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99"}, -] - -[package.extras] -cov = ["attrs[tests]", "coverage-enable-subprocess", "coverage[toml] (>=5.3)"] -dev = ["attrs[docs,tests]"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope.interface"] -tests = ["attrs[tests-no-zope]", "zope.interface"] -tests-no-zope = ["cloudpickle", "cloudpickle", "hypothesis", "hypothesis", "mypy (>=0.971,<0.990)", "mypy (>=0.971,<0.990)", "pympler", "pympler", "pytest (>=4.3.0)", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-mypy-plugins", "pytest-xdist[psutil]", "pytest-xdist[psutil]"] - [[package]] name = "backoff" version = "2.2.1" @@ -101,14 +82,14 @@ files = [ [[package]] name = "beautifulsoup4" -version = "4.12.0" +version = "4.12.2" description = "Screen-scraping library" category = "main" optional = false python-versions = ">=3.6.0" files = [ - {file = "beautifulsoup4-4.12.0-py3-none-any.whl", hash = "sha256:2130a5ad7f513200fae61a17abb5e338ca980fa28c439c0571014bc0217e9591"}, - {file = "beautifulsoup4-4.12.0.tar.gz", hash = "sha256:c5fceeaec29d09c84970e47c65f2f0efe57872f7cff494c9691a26ec0ff13234"}, + {file = "beautifulsoup4-4.12.2-py3-none-any.whl", hash = "sha256:bd2520ca0d9d7d12694a53d44ac482d181b4ec1888909b035a3dbf40d0f57d4a"}, + {file = "beautifulsoup4-4.12.2.tar.gz", hash = "sha256:492bbc69dca35d12daac71c4db1bfff0c876c00ef4a2ffacce226d4638eb72da"}, ] [package.dependencies] @@ -349,16 +330,31 @@ humanfriendly = ">=7.1" [package.extras] cron = ["capturer (>=2.4)"] +[[package]] +name = "commonmark" +version = "0.9.1" +description = "Python parser for the CommonMark Markdown spec" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "commonmark-0.9.1-py2.py3-none-any.whl", hash = "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9"}, + {file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60"}, +] + +[package.extras] +test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] + [[package]] name = "croniter" -version = "1.3.8" +version = "1.3.14" description = "croniter provides iteration for datetime object with cron like format" category = "main" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ - {file = "croniter-1.3.8-py2.py3-none-any.whl", hash = "sha256:d6ed8386d5f4bbb29419dc1b65c4909c04a2322bd15ec0dc5b2877bfa1b75c7a"}, - {file = "croniter-1.3.8.tar.gz", hash = "sha256:32a5ec04e97ec0837bcdf013767abd2e71cceeefd3c2e14c804098ce51ad6cd9"}, + {file = "croniter-1.3.14-py2.py3-none-any.whl", hash = "sha256:da1a1a7ca977b38e952ab0a119576e002bc4c05d058d644e81fc06ef7e995bb0"}, + {file = "croniter-1.3.14.tar.gz", hash = "sha256:d067b1f95b553c6e82d95a983c465695913dcd12f47a8b9aa938a0450d94dd5e"}, ] [package.dependencies] @@ -366,31 +362,31 @@ python-dateutil = "*" [[package]] name = "cryptography" -version = "40.0.1" +version = "40.0.2" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "cryptography-40.0.1-cp36-abi3-macosx_10_12_universal2.whl", hash = "sha256:918cb89086c7d98b1b86b9fdb70c712e5a9325ba6f7d7cfb509e784e0cfc6917"}, - {file = "cryptography-40.0.1-cp36-abi3-macosx_10_12_x86_64.whl", hash = "sha256:9618a87212cb5200500e304e43691111570e1f10ec3f35569fdfcd17e28fd797"}, - {file = "cryptography-40.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a4805a4ca729d65570a1b7cac84eac1e431085d40387b7d3bbaa47e39890b88"}, - {file = "cryptography-40.0.1-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63dac2d25c47f12a7b8aa60e528bfb3c51c5a6c5a9f7c86987909c6c79765554"}, - {file = "cryptography-40.0.1-cp36-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:0a4e3406cfed6b1f6d6e87ed243363652b2586b2d917b0609ca4f97072994405"}, - {file = "cryptography-40.0.1-cp36-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:1e0af458515d5e4028aad75f3bb3fe7a31e46ad920648cd59b64d3da842e4356"}, - {file = "cryptography-40.0.1-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:d8aa3609d337ad85e4eb9bb0f8bcf6e4409bfb86e706efa9a027912169e89122"}, - {file = "cryptography-40.0.1-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:cf91e428c51ef692b82ce786583e214f58392399cf65c341bc7301d096fa3ba2"}, - {file = "cryptography-40.0.1-cp36-abi3-win32.whl", hash = "sha256:650883cc064297ef3676b1db1b7b1df6081794c4ada96fa457253c4cc40f97db"}, - {file = "cryptography-40.0.1-cp36-abi3-win_amd64.whl", hash = "sha256:a805a7bce4a77d51696410005b3e85ae2839bad9aa38894afc0aa99d8e0c3160"}, - {file = "cryptography-40.0.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cd033d74067d8928ef00a6b1327c8ea0452523967ca4463666eeba65ca350d4c"}, - {file = "cryptography-40.0.1-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d36bbeb99704aabefdca5aee4eba04455d7a27ceabd16f3b3ba9bdcc31da86c4"}, - {file = "cryptography-40.0.1-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:32057d3d0ab7d4453778367ca43e99ddb711770477c4f072a51b3ca69602780a"}, - {file = "cryptography-40.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:f5d7b79fa56bc29580faafc2ff736ce05ba31feaa9d4735048b0de7d9ceb2b94"}, - {file = "cryptography-40.0.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7c872413353c70e0263a9368c4993710070e70ab3e5318d85510cc91cce77e7c"}, - {file = "cryptography-40.0.1-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:28d63d75bf7ae4045b10de5413fb1d6338616e79015999ad9cf6fc538f772d41"}, - {file = "cryptography-40.0.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6f2bbd72f717ce33100e6467572abaedc61f1acb87b8d546001328d7f466b778"}, - {file = "cryptography-40.0.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cc3a621076d824d75ab1e1e530e66e7e8564e357dd723f2533225d40fe35c60c"}, - {file = "cryptography-40.0.1.tar.gz", hash = "sha256:2803f2f8b1e95f614419926c7e6f55d828afc614ca5ed61543877ae668cc3472"}, + {file = "cryptography-40.0.2-cp36-abi3-macosx_10_12_universal2.whl", hash = "sha256:8f79b5ff5ad9d3218afb1e7e20ea74da5f76943ee5edb7f76e56ec5161ec782b"}, + {file = "cryptography-40.0.2-cp36-abi3-macosx_10_12_x86_64.whl", hash = "sha256:05dc219433b14046c476f6f09d7636b92a1c3e5808b9a6536adf4932b3b2c440"}, + {file = "cryptography-40.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4df2af28d7bedc84fe45bd49bc35d710aede676e2a4cb7fc6d103a2adc8afe4d"}, + {file = "cryptography-40.0.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dcca15d3a19a66e63662dc8d30f8036b07be851a8680eda92d079868f106288"}, + {file = "cryptography-40.0.2-cp36-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:a04386fb7bc85fab9cd51b6308633a3c271e3d0d3eae917eebab2fac6219b6d2"}, + {file = "cryptography-40.0.2-cp36-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:adc0d980fd2760c9e5de537c28935cc32b9353baaf28e0814df417619c6c8c3b"}, + {file = "cryptography-40.0.2-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:d5a1bd0e9e2031465761dfa920c16b0065ad77321d8a8c1f5ee331021fda65e9"}, + {file = "cryptography-40.0.2-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:a95f4802d49faa6a674242e25bfeea6fc2acd915b5e5e29ac90a32b1139cae1c"}, + {file = "cryptography-40.0.2-cp36-abi3-win32.whl", hash = "sha256:aecbb1592b0188e030cb01f82d12556cf72e218280f621deed7d806afd2113f9"}, + {file = "cryptography-40.0.2-cp36-abi3-win_amd64.whl", hash = "sha256:b12794f01d4cacfbd3177b9042198f3af1c856eedd0a98f10f141385c809a14b"}, + {file = "cryptography-40.0.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:142bae539ef28a1c76794cca7f49729e7c54423f615cfd9b0b1fa90ebe53244b"}, + {file = "cryptography-40.0.2-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:956ba8701b4ffe91ba59665ed170a2ebbdc6fc0e40de5f6059195d9f2b33ca0e"}, + {file = "cryptography-40.0.2-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:4f01c9863da784558165f5d4d916093737a75203a5c5286fde60e503e4276c7a"}, + {file = "cryptography-40.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:3daf9b114213f8ba460b829a02896789751626a2a4e7a43a28ee77c04b5e4958"}, + {file = "cryptography-40.0.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:48f388d0d153350f378c7f7b41497a54ff1513c816bcbbcafe5b829e59b9ce5b"}, + {file = "cryptography-40.0.2-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c0764e72b36a3dc065c155e5b22f93df465da9c39af65516fe04ed3c68c92636"}, + {file = "cryptography-40.0.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:cbaba590180cba88cb99a5f76f90808a624f18b169b90a4abb40c1fd8c19420e"}, + {file = "cryptography-40.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7a38250f433cd41df7fcb763caa3ee9362777fdb4dc642b9a349721d2bf47404"}, + {file = "cryptography-40.0.2.tar.gz", hash = "sha256:c33c0d32b8594fa647d2e01dbccc303478e16fdd7cf98652d5b3ed11aa5e5c99"}, ] [package.dependencies] @@ -408,20 +404,20 @@ tox = ["tox"] [[package]] name = "dagit" -version = "1.1.21" +version = "1.2.7" description = "Web UI for dagster." category = "main" optional = false python-versions = "*" files = [ - {file = "dagit-1.1.21-py3-none-any.whl", hash = "sha256:cf8d98ca478dbcfe2981058603baf9033188ee6469eedea4d962ba2f81b92a70"}, - {file = "dagit-1.1.21.tar.gz", hash = "sha256:90b7315ab9001bfd04e085c3128302b64aa8b64e341e546def4948011b546395"}, + {file = "dagit-1.2.7-py3-none-any.whl", hash = "sha256:c1203d02d8fff28a51793fdf3d10826f019fca62d0859e2eac3c3c3237006ed4"}, + {file = "dagit-1.2.7.tar.gz", hash = "sha256:057f852ab4296028ab87024f45ecc61cfffe20c8815169da51d7258204e80c4f"}, ] [package.dependencies] click = ">=7.0,<9.0" -dagster = "1.1.21" -dagster-graphql = "1.1.21" +dagster = "1.2.7" +dagster-graphql = "1.2.7" starlette = "*" uvicorn = {version = "*", extras = ["standard"]} @@ -431,14 +427,14 @@ test = ["starlette[full]"] [[package]] name = "dagster" -version = "1.1.21" +version = "1.2.7" description = "The data orchestration platform built for productivity." category = "main" optional = false python-versions = "*" files = [ - {file = "dagster-1.1.21-py3-none-any.whl", hash = "sha256:75249daa0076c4cc0000f6a5c9570469cce815f4c0b8c5e9c1e48e0cabd37bb4"}, - {file = "dagster-1.1.21.tar.gz", hash = "sha256:49ba8e30d44e9dcc933158048f6f6f1d18fdf9262e2ee3397b724566006593c2"}, + {file = "dagster-1.2.7-py3-none-any.whl", hash = "sha256:2063ac378db51bdcb2fffc05eef9b732ea3dcc7099f604a517276f8f0a82117f"}, + {file = "dagster-1.2.7.tar.gz", hash = "sha256:993a92b29eda9a403b59b4d3bcf18bc4081eae8cb5330f256141143adf531928"}, ] [package.dependencies] @@ -447,12 +443,15 @@ click = ">=5.0" coloredlogs = ">=6.1,<=14.0" croniter = ">=0.3.34" docstring-parser = "*" -grpcio = ">=1.32.0,<1.48.1" -grpcio-health-checking = ">=1.32.0,<1.44.0" +grpcio = [ + {version = ">=1.44.0,<1.48.0", markers = "python_version < \"3.11\""}, + {version = ">=1.44.0", markers = "python_version >= \"3.11\""}, +] +grpcio-health-checking = ">=1.44.0" Jinja2 = "*" packaging = ">=20.9" pendulum = "*" -protobuf = ">=3.13.0,<4" +protobuf = ">=3.20.0" psutil = {version = ">=1.0", markers = "platform_system == \"Windows\""} pydantic = "*" python-dateutil = "*" @@ -475,25 +474,77 @@ watchdog = ">=0.8.3" black = ["black[jupyter] (==22.12.0)"] docker = ["docker"] mypy = ["mypy (==0.991)"] -pyright = ["pandas-stubs", "pyright (==1.1.293)", "types-PyYAML", "types-backports", "types-certifi", "types-chardet", "types-croniter", "types-cryptography", "types-mock", "types-paramiko", "types-pkg-resources", "types-pyOpenSSL", "types-python-dateutil", "types-pytz", "types-requests", "types-simplejson", "types-six", "types-sqlalchemy", "types-tabulate", "types-toml", "types-tzlocal"] -ruff = ["ruff (==0.0.241)"] -test = ["buildkite-test-collector", "docker", "grpcio-tools (>=1.32.0,<1.44.0)", "mock (==3.0.5)", "objgraph", "pytest (==7.0.1)", "pytest-cov (==2.10.1)", "pytest-dependency (==0.5.1)", "pytest-mock (==3.3.1)", "pytest-rerunfailures (==10.0)", "pytest-runner (==5.2)", "pytest-xdist (==2.1.0)", "responses", "snapshottest (==0.6.0)", "tox (==3.25.0)", "yamllint"] +pyright = ["pandas-stubs", "pyright (==1.1.298)", "types-PyYAML", "types-backports", "types-certifi", "types-chardet", "types-croniter", "types-cryptography", "types-mock", "types-paramiko", "types-pkg-resources", "types-pyOpenSSL", "types-python-dateutil", "types-pytz", "types-requests", "types-simplejson", "types-six", "types-sqlalchemy", "types-tabulate", "types-toml", "types-tzlocal"] +ruff = ["ruff (==0.0.255)"] +test = ["buildkite-test-collector", "docker", "grpcio-tools (>=1.44.0)", "mock (==3.0.5)", "objgraph", "pytest (==7.0.1)", "pytest-cov (==2.10.1)", "pytest-dependency (==0.5.1)", "pytest-mock (==3.3.1)", "pytest-rerunfailures (==10.0)", "pytest-runner (==5.2)", "pytest-xdist (==2.1.0)", "responses", "snapshottest (==0.6.0)", "tox (==3.25.0)", "yamllint"] + +[[package]] +name = "dagster-cloud" +version = "1.2.7" +description = "" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "dagster_cloud-1.2.7-py3-none-any.whl", hash = "sha256:5f4a077ebc1170cd8d241a6347cca0346cbaeb85b82fee8697b66e71fba431e1"}, + {file = "dagster_cloud-1.2.7.tar.gz", hash = "sha256:517f23424166051285ad8e7bd8c7c976c9d072f51709846e7a900942d14a62ad"}, +] + +[package.dependencies] +dagster = "1.2.7" +dagster-cloud-cli = "1.2.7" +pex = "*" +questionary = "*" +requests = "*" +typer = {version = "*", extras = ["all"]} + +[package.extras] +docker = ["dagster-docker (==0.18.7)", "docker"] +ecs = ["boto3", "dagster-aws (==0.18.7)"] +kubernetes = ["dagster-k8s (==0.18.7)", "kubernetes"] +pex = ["boto3"] +sandbox = ["supervisor"] +serverless = ["boto3"] +tests = ["black", "dagster-cloud-test-infra", "dagster-k8s (==0.18.7)", "docker", "httpretty", "isort", "kubernetes", "moto[all]", "mypy", "paramiko", "pylint", "pytest", "types-PyYAML", "types-requests"] + +[[package]] +name = "dagster-cloud-cli" +version = "1.2.7" +description = "" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "dagster_cloud_cli-1.2.7-py3-none-any.whl", hash = "sha256:9a1c41ca3d5c15657f180e042327954e853342fe299a74e0a2721e22078f690f"}, + {file = "dagster_cloud_cli-1.2.7.tar.gz", hash = "sha256:695881c458759f09187a785522f86756f6ee2f3abac3d4a6638d92ae4206f55e"}, +] + +[package.dependencies] +"github3.py" = "*" +packaging = ">=20.9" +PyYAML = ">=5.1" +questionary = "*" +requests = "*" +typer = {version = ">=0.4.1", extras = ["all"]} + +[package.extras] +tests = ["freezegun"] [[package]] name = "dagster-gcp" -version = "0.17.21" +version = "0.18.7" description = "Package for GCP-specific Dagster framework op and resource components." category = "main" optional = false python-versions = "*" files = [ - {file = "dagster-gcp-0.17.21.tar.gz", hash = "sha256:07561c5155ee0beb3bcf1e704c2552df8be0433114f76cc0c0c6f0689a5aacd3"}, - {file = "dagster_gcp-0.17.21-py3-none-any.whl", hash = "sha256:8d207e0ebb2f972e0d64da380f347ace05b56b70faddc26d946d29c1d460f1c3"}, + {file = "dagster-gcp-0.18.7.tar.gz", hash = "sha256:942e8313c6b94c194aa313f66bc3fa06daefa35801787ad501739c06a4246523"}, + {file = "dagster_gcp-0.18.7-py3-none-any.whl", hash = "sha256:6ccd5fd1ed23b4ed8db6651b601acfcc21de73a95636865d85a2b1ec37140aa8"}, ] [package.dependencies] -dagster = "1.1.21" -dagster-pandas = "0.17.21" +dagster = "1.2.7" +dagster-pandas = "0.18.7" db-dtypes = "*" google-api-python-client = "*" google-cloud-bigquery = "*" @@ -505,18 +556,18 @@ pyarrow = ["pyarrow"] [[package]] name = "dagster-graphql" -version = "1.1.21" +version = "1.2.7" description = "The GraphQL frontend to python dagster." category = "main" optional = false python-versions = "*" files = [ - {file = "dagster-graphql-1.1.21.tar.gz", hash = "sha256:d9204b565b26eedc1f4678614ea72712cf5465e094660b6d181e9cc7d705fc9d"}, - {file = "dagster_graphql-1.1.21-py3-none-any.whl", hash = "sha256:84e47d31b7f8d054c46bf5bcc34a6fc8ee30f3da31e1ba74636fcb6ceca5101a"}, + {file = "dagster-graphql-1.2.7.tar.gz", hash = "sha256:394f4933eb7fd3ab789cefdcd98f521e57e31b88f18f38807efbee55a9f9a378"}, + {file = "dagster_graphql-1.2.7-py3-none-any.whl", hash = "sha256:e07a4f3505219d76302b48e5e5d568b0bd51b7508d071d269ebd59ce598e01e8"}, ] [package.dependencies] -dagster = "1.1.21" +dagster = "1.2.7" gql = {version = ">=3.0.0", extras = ["requests"]} graphene = ">=3" requests = "*" @@ -524,18 +575,18 @@ starlette = "*" [[package]] name = "dagster-pandas" -version = "0.17.21" +version = "0.18.7" description = "Utilities and examples for working with pandas and dagster, an opinionated framework for expressing data pipelines" category = "main" optional = false python-versions = "*" files = [ - {file = "dagster-pandas-0.17.21.tar.gz", hash = "sha256:ac6e4f85599a705e3b3d12d40bbdafaf92e8451052e354b769f6518ba07cfb04"}, - {file = "dagster_pandas-0.17.21-py3-none-any.whl", hash = "sha256:14ca52ba17762d6dc7d84db680f1f2a82f5308f4c76ee4a6d046f0ff4f49a30b"}, + {file = "dagster-pandas-0.18.7.tar.gz", hash = "sha256:aa4e984a4c762d8dd121f139b11d821b5e29de5d4e67c168a3936e317ef5dbe8"}, + {file = "dagster_pandas-0.18.7-py3-none-any.whl", hash = "sha256:64737bcf9d94666c3dc8ca5f3dc12426ed3f557bf4596847874d9d8bb15b0373"}, ] [package.dependencies] -dagster = "1.1.21" +dagster = "1.2.7" pandas = "*" [[package]] @@ -634,14 +685,14 @@ test = ["pytest (>=6)"] [[package]] name = "fsspec" -version = "2023.3.0" +version = "2023.4.0" description = "File-system specification" category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "fsspec-2023.3.0-py3-none-any.whl", hash = "sha256:bf57215e19dbfa4fe7edae53040cc1deef825e3b1605cca9a8d2c2fadd2328a0"}, - {file = "fsspec-2023.3.0.tar.gz", hash = "sha256:24e635549a590d74c6c18274ddd3ffab4753341753e923408b1904eaabafe04d"}, + {file = "fsspec-2023.4.0-py3-none-any.whl", hash = "sha256:f398de9b49b14e9d84d2c2d11b7b67121bc072fe97b930c4e5668ac3917d8307"}, + {file = "fsspec-2023.4.0.tar.gz", hash = "sha256:bf064186cd8808f0b2f6517273339ba0a0c8fb1b7048991c28bc67f58b8b67cd"}, ] [package.extras] @@ -649,7 +700,9 @@ abfs = ["adlfs"] adl = ["adlfs"] arrow = ["pyarrow (>=1)"] dask = ["dask", "distributed"] +devel = ["pytest", "pytest-cov"] dropbox = ["dropbox", "dropboxdrivefs", "requests"] +full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "dask", "distributed", "dropbox", "dropboxdrivefs", "fusepy", "gcsfs", "libarchive-c", "ocifs", "panel", "paramiko", "pyarrow (>=1)", "pygit2", "requests", "s3fs", "smbprotocol", "tqdm"] fuse = ["fusepy"] gcs = ["gcsfs"] git = ["pygit2"] @@ -666,6 +719,96 @@ smb = ["smbprotocol"] ssh = ["paramiko"] tqdm = ["tqdm"] +[[package]] +name = "future" +version = "0.18.3" +description = "Clean single-source support for Python 3 and 2" +category = "main" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "future-0.18.3.tar.gz", hash = "sha256:34a17436ed1e96697a86f9de3d15a3b0be01d8bc8de9c1dffd59fb8234ed5307"}, +] + +[[package]] +name = "gax-google-logging-v2" +version = "0.8.3" +description = "GAX library for the Google Logging API" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "gax-google-logging-v2-0.8.3.tar.gz", hash = "sha256:c36cbb93e070b3b535e9fffff6879efe447e525dff75b62eb4564def515e1a18"}, +] + +[package.dependencies] +google-gax = ">=0.12.5,<0.13.0" +googleapis-common-protos = ">=1.1.0" +grpc-google-logging-v2 = ">=0.8.1,<0.9.0" +oauth2client = ">=1.4.11" + +[[package]] +name = "gax-google-pubsub-v1" +version = "0.8.3" +description = "DEPRECATED" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "gax-google-pubsub-v1-0.8.3.tar.gz", hash = "sha256:943df4aa05cf0302fa1616197d05e29adb62be2c0f55f80d8345439d72471526"}, +] + +[package.dependencies] +google-gax = ">=0.12.5,<0.13.0" +googleapis-common-protos = ">=1.1.0" +grpc-google-pubsub-v1 = ">=0.8.1,<0.9.0" +oauth2client = ">=1.4.11" + +[[package]] +name = "gcloud" +version = "0.18.3" +description = "API Client library for Google Cloud" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "gcloud-0.18.3.tar.gz", hash = "sha256:0af2dec59fce20561752f86e42d981c6a255e306a6c5e5d1fa3d358a8857e4fb"}, +] + +[package.dependencies] +gax-google-logging-v2 = ">=0.8.0,<0.9dev" +gax-google-pubsub-v1 = ">=0.8.0,<0.9dev" +google-gax = ">=0.12.3,<0.13dev" +googleapis-common-protos = "*" +grpc-google-logging-v2 = ">=0.8.0,<0.9dev" +grpc-google-pubsub-v1 = ">=0.8.0,<0.9dev" +grpcio = ">=1.0rc1" +httplib2 = ">=0.9.1" +oauth2client = ">=2.0.1" +protobuf = ">=3.0.0b2,<3.0.0.b2.post1 || >3.0.0.b2.post1" +six = "*" + +[package.extras] +grpc = ["gax-google-logging-v2 (>=0.8.0,<0.9dev)", "gax-google-pubsub-v1 (>=0.8.0,<0.9dev)", "google-gax (>=0.12.3,<0.13dev)", "grpc-google-logging-v2 (>=0.8.0,<0.9dev)", "grpc-google-pubsub-v1 (>=0.8.0,<0.9dev)", "grpcio (>=1.0rc1)"] + +[[package]] +name = "github3-py" +version = "3.2.0" +description = "Python wrapper for the GitHub API(http://developer.github.com/v3)" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "github3.py-3.2.0-py2.py3-none-any.whl", hash = "sha256:a9016e40609c6f5cb9954dd188d08257dafd09c4da8c0e830a033fca00054b0d"}, + {file = "github3.py-3.2.0.tar.gz", hash = "sha256:09b72be1497d346b0968cde8360a0d6af79dc206d0149a63cd3ec86c65c377cc"}, +] + +[package.dependencies] +PyJWT = {version = ">=2.3.0", extras = ["crypto"]} +python-dateutil = ">=2.6.0" +requests = ">=2.18" +uritemplate = ">=3.0.0" + [[package]] name = "google" version = "3.0.0" @@ -696,8 +839,14 @@ files = [ [package.dependencies] google-auth = ">=2.14.1,<3.0dev" googleapis-common-protos = ">=1.56.2,<2.0dev" -grpcio = {version = ">=1.33.2,<2.0dev", optional = true, markers = "extra == \"grpc\""} -grpcio-status = {version = ">=1.33.2,<2.0dev", optional = true, markers = "extra == \"grpc\""} +grpcio = [ + {version = ">=1.33.2,<2.0dev", optional = true, markers = "extra == \"grpc\""}, + {version = ">=1.49.1,<2.0dev", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""}, +] +grpcio-status = [ + {version = ">=1.33.2,<2.0dev", optional = true, markers = "extra == \"grpc\""}, + {version = ">=1.49.1,<2.0dev", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""}, +] protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" requests = ">=2.18.0,<3.0.0dev" @@ -708,14 +857,14 @@ grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0dev)"] [[package]] name = "google-api-python-client" -version = "2.83.0" +version = "2.86.0" description = "Google API Client Library for Python" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "google-api-python-client-2.83.0.tar.gz", hash = "sha256:d07509f1b2d2b2427363b454db996f7a15e1751a48cfcaf28427050560dd51cf"}, - {file = "google_api_python_client-2.83.0-py2.py3-none-any.whl", hash = "sha256:afa7fe2a5d77e8f136cdb8f40a120dd6660c2292f791c1b22734dfe786bd1dac"}, + {file = "google-api-python-client-2.86.0.tar.gz", hash = "sha256:3ca4e93821f4e9ac29b91ab0d9df168b42c8ad0fb8bff65b8c2ccb2d462b0464"}, + {file = "google_api_python_client-2.86.0-py2.py3-none-any.whl", hash = "sha256:0f320190ab9d5bd2fdb0cb894e8e53bb5e17d4888ee8dc4d26ba65ce378409e2"}, ] [package.dependencies] @@ -727,14 +876,14 @@ uritemplate = ">=3.0.1,<5" [[package]] name = "google-auth" -version = "2.17.1" +version = "2.17.3" description = "Google Authentication Library" category = "main" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*" files = [ - {file = "google-auth-2.17.1.tar.gz", hash = "sha256:8f379b46bad381ad2a0b989dfb0c13ad28d3c2a79f27348213f8946a1d15d55a"}, - {file = "google_auth-2.17.1-py2.py3-none-any.whl", hash = "sha256:357ff22a75b4c0f6093470f21816a825d2adee398177569824e37b6c10069e19"}, + {file = "google-auth-2.17.3.tar.gz", hash = "sha256:ce311e2bc58b130fddf316df57c9b3943c2a7b4f6ec31de9663a9333e4064efc"}, + {file = "google_auth-2.17.3-py2.py3-none-any.whl", hash = "sha256:f586b274d3eb7bd932ea424b1c702a30e0393a2e2bc4ca3eae8263ffd8be229f"}, ] [package.dependencies] @@ -767,21 +916,6 @@ google-auth = "*" httplib2 = ">=0.15.0" six = "*" -[[package]] -name = "google-cloud-bigquery" -version = "0.21.0" -description = "Python Client for Google BigQuery" -category = "main" -optional = false -python-versions = "*" -files = [ - {file = "google-cloud-bigquery-0.21.0.tar.gz", hash = "sha256:5c8447059a64f5af0f64ed79e0a64d56dfe7619fafb61c194671b21f058fc31d"}, - {file = "google_cloud_bigquery-0.21.0-py2.py3-none-any.whl", hash = "sha256:468365025bc90e8c3abd3cdf112af471ac417a11cc2d527cdbbb979ba7773cef"}, -] - -[package.dependencies] -google-cloud-core = ">=0.21.0" - [[package]] name = "google-cloud-bigquery" version = "3.9.0" @@ -798,7 +932,10 @@ files = [ google-api-core = {version = ">=1.31.5,<2.0.0 || >2.3.0,<3.0.0dev", extras = ["grpc"]} google-cloud-core = ">=1.6.0,<3.0.0dev" google-resumable-media = ">=0.6.0,<3.0dev" -grpcio = {version = ">=1.47.0,<2.0dev", markers = "python_version < \"3.11\""} +grpcio = [ + {version = ">=1.47.0,<2.0dev", markers = "python_version < \"3.11\""}, + {version = ">=1.49.1,<2.0dev", markers = "python_version >= \"3.11\""}, +] packaging = ">=20.0.0" proto-plus = ">=1.15.0,<2.0.0dev" protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0dev" @@ -937,6 +1074,24 @@ files = [ [package.extras] testing = ["pytest"] +[[package]] +name = "google-gax" +version = "0.12.5" +description = "Google API Extensions" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "google-gax-0.12.5.tar.gz", hash = "sha256:63312a04cb87ca50e857245f05c582b2171807a30e61cef85006b983bf659cb9"}, +] + +[package.dependencies] +future = ">=0.15.2" +grpcio = ">=1.0rc1" +oauth2client = ">=1.5.2" +ply = "3.8" +protobuf = ">=3.0.0b3" + [[package]] name = "google-resumable-media" version = "2.4.1" @@ -1126,6 +1281,38 @@ files = [ docs = ["Sphinx", "docutils (<0.18)"] test = ["objgraph", "psutil"] +[[package]] +name = "grpc-google-logging-v2" +version = "0.8.1" +description = "GRPC library for the google-logging-v2 service" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "grpc-google-logging-v2-0.8.1.tar.gz", hash = "sha256:4b6b4e603860b134b2cb8732bb4d1f2cec963d553497dcf70b3f5ecc99d7fb4f"}, +] + +[package.dependencies] +googleapis-common-protos = ">=1.1.0" +grpcio = ">=1.0rc1" +oauth2client = ">=1.4.11" + +[[package]] +name = "grpc-google-pubsub-v1" +version = "0.8.1" +description = "GRPC library for the google-pubsub-v1 service" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "grpc-google-pubsub-v1-0.8.1.tar.gz", hash = "sha256:ab5a3a239a9678012cdc00a9b9a8fe8c75fca9a0035da41da3078145e9d967b9"}, +] + +[package.dependencies] +googleapis-common-protos = ">=1.1.0" +grpcio = ">=1.0rc1" +oauth2client = ">=1.4.11" + [[package]] name = "grpcio" version = "1.47.5" @@ -1188,21 +1375,95 @@ six = ">=1.5.2" [package.extras] protobuf = ["grpcio-tools (>=1.47.5)"] +[[package]] +name = "grpcio" +version = "1.54.0" +description = "HTTP/2-based RPC framework" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "grpcio-1.54.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:a947d5298a0bbdd4d15671024bf33e2b7da79a70de600ed29ba7e0fef0539ebb"}, + {file = "grpcio-1.54.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:e355ee9da9c1c03f174efea59292b17a95e0b7b4d7d2a389265f731a9887d5a9"}, + {file = "grpcio-1.54.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:73c238ef6e4b64272df7eec976bb016c73d3ab5a6c7e9cd906ab700523d312f3"}, + {file = "grpcio-1.54.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c59d899ee7160638613a452f9a4931de22623e7ba17897d8e3e348c2e9d8d0b"}, + {file = "grpcio-1.54.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48cb7af77238ba16c77879009003f6b22c23425e5ee59cb2c4c103ec040638a5"}, + {file = "grpcio-1.54.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:2262bd3512ba9e9f0e91d287393df6f33c18999317de45629b7bd46c40f16ba9"}, + {file = "grpcio-1.54.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:224166f06ccdaf884bf35690bf4272997c1405de3035d61384ccb5b25a4c1ca8"}, + {file = "grpcio-1.54.0-cp310-cp310-win32.whl", hash = "sha256:ed36e854449ff6c2f8ee145f94851fe171298e1e793f44d4f672c4a0d78064e7"}, + {file = "grpcio-1.54.0-cp310-cp310-win_amd64.whl", hash = "sha256:27fb030a4589d2536daec5ff5ba2a128f4f155149efab578fe2de2cb21596d3d"}, + {file = "grpcio-1.54.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:f4a7dca8ccd8023d916b900aa3c626f1bd181bd5b70159479b142f957ff420e4"}, + {file = "grpcio-1.54.0-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:1209d6b002b26e939e4c8ea37a3d5b4028eb9555394ea69fb1adbd4b61a10bb8"}, + {file = "grpcio-1.54.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:860fcd6db7dce80d0a673a1cc898ce6bc3d4783d195bbe0e911bf8a62c93ff3f"}, + {file = "grpcio-1.54.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3930669c9e6f08a2eed824738c3d5699d11cd47a0ecc13b68ed11595710b1133"}, + {file = "grpcio-1.54.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62117486460c83acd3b5d85c12edd5fe20a374630475388cfc89829831d3eb79"}, + {file = "grpcio-1.54.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e3e526062c690517b42bba66ffe38aaf8bc99a180a78212e7b22baa86902f690"}, + {file = "grpcio-1.54.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ebff0738be0499d7db74d20dca9f22a7b27deae31e1bf92ea44924fd69eb6251"}, + {file = "grpcio-1.54.0-cp311-cp311-win32.whl", hash = "sha256:21c4a1aae861748d6393a3ff7867473996c139a77f90326d9f4104bebb22d8b8"}, + {file = "grpcio-1.54.0-cp311-cp311-win_amd64.whl", hash = "sha256:3db71c6f1ab688d8dfc102271cedc9828beac335a3a4372ec54b8bf11b43fd29"}, + {file = "grpcio-1.54.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:960b176e0bb2b4afeaa1cd2002db1e82ae54c9b6e27ea93570a42316524e77cf"}, + {file = "grpcio-1.54.0-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:d8ae6e0df3a608e99ee1acafaafd7db0830106394d54571c1ece57f650124ce9"}, + {file = "grpcio-1.54.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:c33744d0d1a7322da445c0fe726ea6d4e3ef2dfb0539eadf23dce366f52f546c"}, + {file = "grpcio-1.54.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d109df30641d050e009105f9c9ca5a35d01e34d2ee2a4e9c0984d392fd6d704"}, + {file = "grpcio-1.54.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:775a2f70501370e5ba54e1ee3464413bff9bd85bd9a0b25c989698c44a6fb52f"}, + {file = "grpcio-1.54.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c55a9cf5cba80fb88c850915c865b8ed78d5e46e1f2ec1b27692f3eaaf0dca7e"}, + {file = "grpcio-1.54.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1fa7d6ddd33abbd3c8b3d7d07c56c40ea3d1891ce3cd2aa9fa73105ed5331866"}, + {file = "grpcio-1.54.0-cp37-cp37m-win_amd64.whl", hash = "sha256:ed3d458ded32ff3a58f157b60cc140c88f7ac8c506a1c567b2a9ee8a2fd2ce54"}, + {file = "grpcio-1.54.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:5942a3e05630e1ef5b7b5752e5da6582460a2e4431dae603de89fc45f9ec5aa9"}, + {file = "grpcio-1.54.0-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:125ed35aa3868efa82eabffece6264bf638cfdc9f0cd58ddb17936684aafd0f8"}, + {file = "grpcio-1.54.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:b7655f809e3420f80ce3bf89737169a9dce73238af594049754a1128132c0da4"}, + {file = "grpcio-1.54.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:87f47bf9520bba4083d65ab911f8f4c0ac3efa8241993edd74c8dd08ae87552f"}, + {file = "grpcio-1.54.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16bca8092dd994f2864fdab278ae052fad4913f36f35238b2dd11af2d55a87db"}, + {file = "grpcio-1.54.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d2f62fb1c914a038921677cfa536d645cb80e3dd07dc4859a3c92d75407b90a5"}, + {file = "grpcio-1.54.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a7caf553ccaf715ec05b28c9b2ab2ee3fdb4036626d779aa09cf7cbf54b71445"}, + {file = "grpcio-1.54.0-cp38-cp38-win32.whl", hash = "sha256:2585b3c294631a39b33f9f967a59b0fad23b1a71a212eba6bc1e3ca6e6eec9ee"}, + {file = "grpcio-1.54.0-cp38-cp38-win_amd64.whl", hash = "sha256:3b170e441e91e4f321e46d3cc95a01cb307a4596da54aca59eb78ab0fc03754d"}, + {file = "grpcio-1.54.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:1382bc499af92901c2240c4d540c74eae8a671e4fe9839bfeefdfcc3a106b5e2"}, + {file = "grpcio-1.54.0-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:031bbd26656e0739e4b2c81c172155fb26e274b8d0312d67aefc730bcba915b6"}, + {file = "grpcio-1.54.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:a97b0d01ae595c997c1d9d8249e2d2da829c2d8a4bdc29bb8f76c11a94915c9a"}, + {file = "grpcio-1.54.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:533eaf5b2a79a3c6f35cbd6a095ae99cac7f4f9c0e08bdcf86c130efd3c32adf"}, + {file = "grpcio-1.54.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49eace8ea55fbc42c733defbda1e4feb6d3844ecd875b01bb8b923709e0f5ec8"}, + {file = "grpcio-1.54.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:30fbbce11ffeb4f9f91c13fe04899aaf3e9a81708bedf267bf447596b95df26b"}, + {file = "grpcio-1.54.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:650f5f2c9ab1275b4006707411bb6d6bc927886874a287661c3c6f332d4c068b"}, + {file = "grpcio-1.54.0-cp39-cp39-win32.whl", hash = "sha256:02000b005bc8b72ff50c477b6431e8886b29961159e8b8d03c00b3dd9139baed"}, + {file = "grpcio-1.54.0-cp39-cp39-win_amd64.whl", hash = "sha256:6dc1e2c9ac292c9a484ef900c568ccb2d6b4dfe26dfa0163d5bc815bb836c78d"}, + {file = "grpcio-1.54.0.tar.gz", hash = "sha256:eb0807323572642ab73fd86fe53d88d843ce617dd1ddf430351ad0759809a0ae"}, +] + +[package.extras] +protobuf = ["grpcio-tools (>=1.54.0)"] + +[[package]] +name = "grpcio-health-checking" +version = "1.47.5" +description = "Standard Health Checking Service for gRPC" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "grpcio-health-checking-1.47.5.tar.gz", hash = "sha256:74f36ef2ff704c46965bd74cdea51afc0bbcde641134c9d09ecb5063391db516"}, + {file = "grpcio_health_checking-1.47.5-py3-none-any.whl", hash = "sha256:659b83138cb2b7db71777044d0caf58bab4f958fce972900f8577ebb4edca29d"}, +] + +[package.dependencies] +grpcio = ">=1.47.5" +protobuf = ">=3.12.0" + [[package]] name = "grpcio-health-checking" -version = "1.43.0" +version = "1.54.0" description = "Standard Health Checking Service for gRPC" category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "grpcio-health-checking-1.43.0.tar.gz", hash = "sha256:23b3c6c3a6da85f7cd944cbebd965cdceb2a5e4e65f071a2b6cf1eb3510c993e"}, - {file = "grpcio_health_checking-1.43.0-py3-none-any.whl", hash = "sha256:802195ec77dd609ed9721dcb4d5916b6018dc49351b904d152fb697595debd33"}, + {file = "grpcio-health-checking-1.54.0.tar.gz", hash = "sha256:d29418119353745d20233c21bf1ea94e9b6f0b420f268f1c9532d2fc7f0e725d"}, + {file = "grpcio_health_checking-1.54.0-py3-none-any.whl", hash = "sha256:3e0ea233c6ba42916b70f06f3a8755013009d3b8c877447d861496b85a8e08be"}, ] [package.dependencies] -grpcio = ">=1.43.0" -protobuf = ">=3.6.0" +grpcio = ">=1.54.0" +protobuf = ">=4.21.6" [[package]] name = "grpcio-status" @@ -1221,6 +1482,23 @@ googleapis-common-protos = ">=1.5.5" grpcio = ">=1.47.5" protobuf = ">=3.12.0" +[[package]] +name = "grpcio-status" +version = "1.54.0" +description = "Status proto mapping for gRPC" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "grpcio-status-1.54.0.tar.gz", hash = "sha256:b50305d52c0df6169493cca5f2e39b9b4d773b3f30d4a7a6b6dd7c18cb89007c"}, + {file = "grpcio_status-1.54.0-py3-none-any.whl", hash = "sha256:96968314e0c8576b2b631be3917c665964c8018900cb980d58a736fbff828578"}, +] + +[package.dependencies] +googleapis-common-protos = ">=1.5.5" +grpcio = ">=1.54.0" +protobuf = ">=4.21.6" + [[package]] name = "h11" version = "0.14.0" @@ -1483,8 +1761,11 @@ develop = true [package.dependencies] click = "^8.1.3" +gcloud = "^0.18.3" google = "^3.0.0" +google-cloud-storage = "^2.8.0" pydantic = "^1.10.6" +pyyaml = "^6.0" [package.source] type = "directory" @@ -1648,14 +1929,14 @@ dev = ["black", "mypy", "pytest"] [[package]] name = "packaging" -version = "23.0" +version = "23.1" description = "Core utilities for Python packages" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-23.0-py3-none-any.whl", hash = "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2"}, - {file = "packaging-23.0.tar.gz", hash = "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97"}, + {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, + {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, ] [[package]] @@ -1758,6 +2039,23 @@ files = [ python-dateutil = ">=2.6,<3.0" pytzdata = ">=2020.1" +[[package]] +name = "pex" +version = "2.0.3" +description = "The PEX packaging toolchain." +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "pex-2.0.3-py2.py3-none-any.whl", hash = "sha256:4ca62e27fd30cd1d4acbcdadfc52739c6e73c9292613d98cb35d88065174fa63"}, + {file = "pex-2.0.3.tar.gz", hash = "sha256:a8a35e7eb212616b2964d70d8a134d41d16649c943ab206b90c749c005e60999"}, +] + +[package.extras] +cachecontrol = ["CacheControl (>=0.12.3)"] +requests = ["requests (>=2.8.14)"] +subprocess = ["subprocess32 (>=3.2.7)"] + [[package]] name = "pluggy" version = "1.0.0" @@ -1774,11 +2072,49 @@ files = [ dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] +[[package]] +name = "ply" +version = "3.8" +description = "Python Lex & Yacc" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "ply-3.8.tar.gz", hash = "sha256:e7d1bdff026beb159c9942f7a17e102c375638d9478a7ecd4cc0c76afd8de0b8"}, +] + +[[package]] +name = "poetry-core" +version = "1.5.2" +description = "Poetry PEP 517 Build Backend" +category = "main" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "poetry_core-1.5.2-py3-none-any.whl", hash = "sha256:832d40a1ea5fd10c0f648d0575cadddc8b79f06f91d83a1f1a73a7e1dfacfbd7"}, + {file = "poetry_core-1.5.2.tar.gz", hash = "sha256:c6556c3b1ec5b8668e6ef5a4494726bc41d31907339425e194e78a6178436c14"}, +] + +[[package]] +name = "poetry2setup" +version = "1.1.0" +description = "Convert python-poetry to setup.py" +category = "main" +optional = false +python-versions = ">=3.6,<4.0" +files = [ + {file = "poetry2setup-1.1.0-py3-none-any.whl", hash = "sha256:aad820a89d94ae88db9f39a4fc57337963a8faf59830f4f93be171852e67a697"}, + {file = "poetry2setup-1.1.0.tar.gz", hash = "sha256:87591578fc0b68e1716261c5f3ef7ed436cdc0e1174e629a36de4244c245beeb"}, +] + +[package.dependencies] +poetry-core = ">=1.0.0,<2.0.0" + [[package]] name = "prompt-toolkit" version = "3.0.38" description = "Library for building powerful interactive command lines in Python" -category = "dev" +category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -1809,58 +2145,49 @@ testing = ["google-api-core[grpc] (>=1.31.5)"] [[package]] name = "protobuf" -version = "3.20.3" -description = "Protocol Buffers" +version = "4.22.3" +description = "" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "protobuf-3.20.3-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:f4bd856d702e5b0d96a00ec6b307b0f51c1982c2bf9c0052cf9019e9a544ba99"}, - {file = "protobuf-3.20.3-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9aae4406ea63d825636cc11ffb34ad3379335803216ee3a856787bcf5ccc751e"}, - {file = "protobuf-3.20.3-cp310-cp310-win32.whl", hash = "sha256:28545383d61f55b57cf4df63eebd9827754fd2dc25f80c5253f9184235db242c"}, - {file = "protobuf-3.20.3-cp310-cp310-win_amd64.whl", hash = "sha256:67a3598f0a2dcbc58d02dd1928544e7d88f764b47d4a286202913f0b2801c2e7"}, - {file = "protobuf-3.20.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:899dc660cd599d7352d6f10d83c95df430a38b410c1b66b407a6b29265d66469"}, - {file = "protobuf-3.20.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e64857f395505ebf3d2569935506ae0dfc4a15cb80dc25261176c784662cdcc4"}, - {file = "protobuf-3.20.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:d9e4432ff660d67d775c66ac42a67cf2453c27cb4d738fc22cb53b5d84c135d4"}, - {file = "protobuf-3.20.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:74480f79a023f90dc6e18febbf7b8bac7508420f2006fabd512013c0c238f454"}, - {file = "protobuf-3.20.3-cp37-cp37m-win32.whl", hash = "sha256:b6cc7ba72a8850621bfec987cb72623e703b7fe2b9127a161ce61e61558ad905"}, - {file = "protobuf-3.20.3-cp37-cp37m-win_amd64.whl", hash = "sha256:8c0c984a1b8fef4086329ff8dd19ac77576b384079247c770f29cc8ce3afa06c"}, - {file = "protobuf-3.20.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:de78575669dddf6099a8a0f46a27e82a1783c557ccc38ee620ed8cc96d3be7d7"}, - {file = "protobuf-3.20.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:f4c42102bc82a51108e449cbb32b19b180022941c727bac0cfd50170341f16ee"}, - {file = "protobuf-3.20.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:44246bab5dd4b7fbd3c0c80b6f16686808fab0e4aca819ade6e8d294a29c7050"}, - {file = "protobuf-3.20.3-cp38-cp38-win32.whl", hash = "sha256:c02ce36ec760252242a33967d51c289fd0e1c0e6e5cc9397e2279177716add86"}, - {file = "protobuf-3.20.3-cp38-cp38-win_amd64.whl", hash = "sha256:447d43819997825d4e71bf5769d869b968ce96848b6479397e29fc24c4a5dfe9"}, - {file = "protobuf-3.20.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:398a9e0c3eaceb34ec1aee71894ca3299605fa8e761544934378bbc6c97de23b"}, - {file = "protobuf-3.20.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bf01b5720be110540be4286e791db73f84a2b721072a3711efff6c324cdf074b"}, - {file = "protobuf-3.20.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:daa564862dd0d39c00f8086f88700fdbe8bc717e993a21e90711acfed02f2402"}, - {file = "protobuf-3.20.3-cp39-cp39-win32.whl", hash = "sha256:819559cafa1a373b7096a482b504ae8a857c89593cf3a25af743ac9ecbd23480"}, - {file = "protobuf-3.20.3-cp39-cp39-win_amd64.whl", hash = "sha256:03038ac1cfbc41aa21f6afcbcd357281d7521b4157926f30ebecc8d4ea59dcb7"}, - {file = "protobuf-3.20.3-py2.py3-none-any.whl", hash = "sha256:a7ca6d488aa8ff7f329d4c545b2dbad8ac31464f1d8b1c87ad1346717731e4db"}, - {file = "protobuf-3.20.3.tar.gz", hash = "sha256:2e3427429c9cffebf259491be0af70189607f365c2f41c7c3764af6f337105f2"}, + {file = "protobuf-4.22.3-cp310-abi3-win32.whl", hash = "sha256:8b54f56d13ae4a3ec140076c9d937221f887c8f64954673d46f63751209e839a"}, + {file = "protobuf-4.22.3-cp310-abi3-win_amd64.whl", hash = "sha256:7760730063329d42a9d4c4573b804289b738d4931e363ffbe684716b796bde51"}, + {file = "protobuf-4.22.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:d14fc1a41d1a1909998e8aff7e80d2a7ae14772c4a70e4bf7db8a36690b54425"}, + {file = "protobuf-4.22.3-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:70659847ee57a5262a65954538088a1d72dfc3e9882695cab9f0c54ffe71663b"}, + {file = "protobuf-4.22.3-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:13233ee2b9d3bd9a5f216c1fa2c321cd564b93d8f2e4f521a85b585447747997"}, + {file = "protobuf-4.22.3-cp37-cp37m-win32.whl", hash = "sha256:ecae944c6c2ce50dda6bf76ef5496196aeb1b85acb95df5843cd812615ec4b61"}, + {file = "protobuf-4.22.3-cp37-cp37m-win_amd64.whl", hash = "sha256:d4b66266965598ff4c291416be429cef7989d8fae88b55b62095a2331511b3fa"}, + {file = "protobuf-4.22.3-cp38-cp38-win32.whl", hash = "sha256:f08aa300b67f1c012100d8eb62d47129e53d1150f4469fd78a29fa3cb68c66f2"}, + {file = "protobuf-4.22.3-cp38-cp38-win_amd64.whl", hash = "sha256:f2f4710543abec186aee332d6852ef5ae7ce2e9e807a3da570f36de5a732d88e"}, + {file = "protobuf-4.22.3-cp39-cp39-win32.whl", hash = "sha256:7cf56e31907c532e460bb62010a513408e6cdf5b03fb2611e4b67ed398ad046d"}, + {file = "protobuf-4.22.3-cp39-cp39-win_amd64.whl", hash = "sha256:e0e630d8e6a79f48c557cd1835865b593d0547dce221c66ed1b827de59c66c97"}, + {file = "protobuf-4.22.3-py3-none-any.whl", hash = "sha256:52f0a78141078077cfe15fe333ac3e3a077420b9a3f5d1bf9b5fe9d286b4d881"}, + {file = "protobuf-4.22.3.tar.gz", hash = "sha256:23452f2fdea754a8251d0fc88c0317735ae47217e0d27bf330a30eec2848811a"}, ] [[package]] name = "psutil" -version = "5.9.4" +version = "5.9.5" description = "Cross-platform lib for process and system monitoring in Python." category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ - {file = "psutil-5.9.4-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c1ca331af862803a42677c120aff8a814a804e09832f166f226bfd22b56feee8"}, - {file = "psutil-5.9.4-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:68908971daf802203f3d37e78d3f8831b6d1014864d7a85937941bb35f09aefe"}, - {file = "psutil-5.9.4-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:3ff89f9b835100a825b14c2808a106b6fdcc4b15483141482a12c725e7f78549"}, - {file = "psutil-5.9.4-cp27-cp27m-win32.whl", hash = "sha256:852dd5d9f8a47169fe62fd4a971aa07859476c2ba22c2254d4a1baa4e10b95ad"}, - {file = "psutil-5.9.4-cp27-cp27m-win_amd64.whl", hash = "sha256:9120cd39dca5c5e1c54b59a41d205023d436799b1c8c4d3ff71af18535728e94"}, - {file = "psutil-5.9.4-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:6b92c532979bafc2df23ddc785ed116fced1f492ad90a6830cf24f4d1ea27d24"}, - {file = "psutil-5.9.4-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:efeae04f9516907be44904cc7ce08defb6b665128992a56957abc9b61dca94b7"}, - {file = "psutil-5.9.4-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:54d5b184728298f2ca8567bf83c422b706200bcbbfafdc06718264f9393cfeb7"}, - {file = "psutil-5.9.4-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:16653106f3b59386ffe10e0bad3bb6299e169d5327d3f187614b1cb8f24cf2e1"}, - {file = "psutil-5.9.4-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54c0d3d8e0078b7666984e11b12b88af2db11d11249a8ac8920dd5ef68a66e08"}, - {file = "psutil-5.9.4-cp36-abi3-win32.whl", hash = "sha256:149555f59a69b33f056ba1c4eb22bb7bf24332ce631c44a319cec09f876aaeff"}, - {file = "psutil-5.9.4-cp36-abi3-win_amd64.whl", hash = "sha256:fd8522436a6ada7b4aad6638662966de0d61d241cb821239b2ae7013d41a43d4"}, - {file = "psutil-5.9.4-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:6001c809253a29599bc0dfd5179d9f8a5779f9dffea1da0f13c53ee568115e1e"}, - {file = "psutil-5.9.4.tar.gz", hash = "sha256:3d7f9739eb435d4b1338944abe23f49584bde5395f27487d2ee25ad9a8774a62"}, + {file = "psutil-5.9.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:be8929ce4313f9f8146caad4272f6abb8bf99fc6cf59344a3167ecd74f4f203f"}, + {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ab8ed1a1d77c95453db1ae00a3f9c50227ebd955437bcf2a574ba8adbf6a74d5"}, + {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:4aef137f3345082a3d3232187aeb4ac4ef959ba3d7c10c33dd73763fbc063da4"}, + {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ea8518d152174e1249c4f2a1c89e3e6065941df2fa13a1ab45327716a23c2b48"}, + {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:acf2aef9391710afded549ff602b5887d7a2349831ae4c26be7c807c0a39fac4"}, + {file = "psutil-5.9.5-cp27-none-win32.whl", hash = "sha256:5b9b8cb93f507e8dbaf22af6a2fd0ccbe8244bf30b1baad6b3954e935157ae3f"}, + {file = "psutil-5.9.5-cp27-none-win_amd64.whl", hash = "sha256:8c5f7c5a052d1d567db4ddd231a9d27a74e8e4a9c3f44b1032762bd7b9fdcd42"}, + {file = "psutil-5.9.5-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:3c6f686f4225553615612f6d9bc21f1c0e305f75d7d8454f9b46e901778e7217"}, + {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a7dd9997128a0d928ed4fb2c2d57e5102bb6089027939f3b722f3a210f9a8da"}, + {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89518112647f1276b03ca97b65cc7f64ca587b1eb0278383017c2a0dcc26cbe4"}, + {file = "psutil-5.9.5-cp36-abi3-win32.whl", hash = "sha256:104a5cc0e31baa2bcf67900be36acde157756b9c44017b86b2c049f11957887d"}, + {file = "psutil-5.9.5-cp36-abi3-win_amd64.whl", hash = "sha256:b258c0c1c9d145a1d5ceffab1134441c4c5113b2417fafff7315a917a026c3c9"}, + {file = "psutil-5.9.5-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:c607bb3b57dc779d55e1554846352b4e358c10fff3abf3514a7a6601beebdb30"}, + {file = "psutil-5.9.5.tar.gz", hash = "sha256:5410638e4df39c54d957fc51ce03048acd8e6d60abc0f5107af51e5fb566eb3c"}, ] [package.extras] @@ -2053,14 +2380,14 @@ requests = ">=2.14.0" [[package]] name = "pygments" -version = "2.14.0" +version = "2.15.0" description = "Pygments is a syntax highlighting package written in Python." -category = "dev" +category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "Pygments-2.14.0-py3-none-any.whl", hash = "sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717"}, - {file = "Pygments-2.14.0.tar.gz", hash = "sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297"}, + {file = "Pygments-2.15.0-py3-none-any.whl", hash = "sha256:77a3299119af881904cd5ecd1ac6a66214b6e9bed1f2db16993b54adede64094"}, + {file = "Pygments-2.15.0.tar.gz", hash = "sha256:f7e36cffc4c517fbc252861b9a6e4644ca0e5abadf9a113c72d1358ad09b9500"}, ] [package.extras] @@ -2143,18 +2470,17 @@ files = [ [[package]] name = "pytest" -version = "7.2.2" +version = "7.3.1" description = "pytest: simple powerful testing with Python" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-7.2.2-py3-none-any.whl", hash = "sha256:130328f552dcfac0b1cec75c12e3f005619dc5f874f0a06e8ff7263f0ee6225e"}, - {file = "pytest-7.2.2.tar.gz", hash = "sha256:c99ab0c73aceb050f68929bc93af19ab6db0558791c6a0715723abe9d0ade9d4"}, + {file = "pytest-7.3.1-py3-none-any.whl", hash = "sha256:3799fa815351fea3a5e96ac7e503a96fa51cc9942c3753cda7651b93c1cfa362"}, + {file = "pytest-7.3.1.tar.gz", hash = "sha256:434afafd78b1d78ed0addf160ad2b77a30d35d4bdf8af234fe621919d9ed15e3"}, ] [package.dependencies] -attrs = ">=19.2.0" colorama = {version = "*", markers = "sys_platform == \"win32\""} exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} iniconfig = "*" @@ -2163,7 +2489,7 @@ pluggy = ">=0.12,<2.0" tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} [package.extras] -testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] [[package]] name = "python-dateutil" @@ -2293,6 +2619,24 @@ files = [ {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, ] +[[package]] +name = "questionary" +version = "1.10.0" +description = "Python library to build pretty command line user prompts ⭐️" +category = "main" +optional = false +python-versions = ">=3.6,<4.0" +files = [ + {file = "questionary-1.10.0-py3-none-any.whl", hash = "sha256:fecfcc8cca110fda9d561cb83f1e97ecbb93c613ff857f655818839dac74ce90"}, + {file = "questionary-1.10.0.tar.gz", hash = "sha256:600d3aefecce26d48d97eee936fdb66e4bc27f934c3ab6dd1e292c4f43946d90"}, +] + +[package.dependencies] +prompt_toolkit = ">=2.0,<4.0" + +[package.extras] +docs = ["Sphinx (>=3.3,<4.0)", "sphinx-autobuild (>=2020.9.1,<2021.0.0)", "sphinx-autodoc-typehints (>=1.11.1,<2.0.0)", "sphinx-copybutton (>=0.3.1,<0.4.0)", "sphinx-rtd-theme (>=0.5.0,<0.6.0)"] + [[package]] name = "requests" version = "2.28.2" @@ -2330,6 +2674,25 @@ files = [ [package.dependencies] requests = ">=2.0.1,<3.0.0" +[[package]] +name = "rich" +version = "12.6.0" +description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" +category = "main" +optional = false +python-versions = ">=3.6.3,<4.0.0" +files = [ + {file = "rich-12.6.0-py3-none-any.whl", hash = "sha256:a4eb26484f2c82589bd9a17c73d32a010b1e29d89f1604cd9bf3a2097b81bb5e"}, + {file = "rich-12.6.0.tar.gz", hash = "sha256:ba3a3775974105c221d31141f2c116f4fd65c5ceb0698657a11e9f295ec93fd0"}, +] + +[package.dependencies] +commonmark = ">=0.9.0,<0.10.0" +pygments = ">=2.6.0,<3.0.0" + +[package.extras] +jupyter = ["ipywidgets (>=7.5.1,<8.0.0)"] + [[package]] name = "rsa" version = "4.9" @@ -2362,6 +2725,18 @@ docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-g testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +[[package]] +name = "shellingham" +version = "1.5.0.post1" +description = "Tool to Detect Surrounding Shell" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "shellingham-1.5.0.post1-py2.py3-none-any.whl", hash = "sha256:368bf8c00754fd4f55afb7bbb86e272df77e4dc76ac29dbcbb81a59e9fc15744"}, + {file = "shellingham-1.5.0.post1.tar.gz", hash = "sha256:823bc5fb5c34d60f285b624e7264f4dda254bc803a3774a147bf99c0e3004a28"}, +] + [[package]] name = "six" version = "1.16.0" @@ -2388,14 +2763,14 @@ files = [ [[package]] name = "soupsieve" -version = "2.4" +version = "2.4.1" description = "A modern CSS selector implementation for Beautiful Soup." category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "soupsieve-2.4-py3-none-any.whl", hash = "sha256:49e5368c2cda80ee7e84da9dbe3e110b70a4575f196efb74e51b94549d921955"}, - {file = "soupsieve-2.4.tar.gz", hash = "sha256:e28dba9ca6c7c00173e34e4ba57448f0688bb681b7c5e8bf4971daafc093d69a"}, + {file = "soupsieve-2.4.1-py3-none-any.whl", hash = "sha256:1c1bfee6819544a3447586c889157365a27e10d88cde3ad3da0cf0ddf646feb8"}, + {file = "soupsieve-2.4.1.tar.gz", hash = "sha256:89d12b2d5dfcd2c9e8c22326da9d9aa9cb3dfab0a83a024f05704076ee8d35ea"}, ] [[package]] @@ -2552,6 +2927,30 @@ notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] +[[package]] +name = "typer" +version = "0.7.0" +description = "Typer, build great CLIs. Easy to code. Based on Python type hints." +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "typer-0.7.0-py3-none-any.whl", hash = "sha256:b5e704f4e48ec263de1c0b3a2387cd405a13767d2f907f44c1a08cbad96f606d"}, + {file = "typer-0.7.0.tar.gz", hash = "sha256:ff797846578a9f2a201b53442aedeb543319466870fbe1c701eab66dd7681165"}, +] + +[package.dependencies] +click = ">=7.1.1,<9.0.0" +colorama = {version = ">=0.4.3,<0.5.0", optional = true, markers = "extra == \"all\""} +rich = {version = ">=10.11.0,<13.0.0", optional = true, markers = "extra == \"all\""} +shellingham = {version = ">=1.3.0,<2.0.0", optional = true, markers = "extra == \"all\""} + +[package.extras] +all = ["colorama (>=0.4.3,<0.5.0)", "rich (>=10.11.0,<13.0.0)", "shellingham (>=1.3.0,<2.0.0)"] +dev = ["autoflake (>=1.3.1,<2.0.0)", "flake8 (>=3.8.3,<4.0.0)", "pre-commit (>=2.17.0,<3.0.0)"] +doc = ["cairosvg (>=2.5.2,<3.0.0)", "mdx-include (>=1.4.1,<2.0.0)", "mkdocs (>=1.1.2,<2.0.0)", "mkdocs-material (>=8.1.4,<9.0.0)", "pillow (>=9.3.0,<10.0.0)"] +test = ["black (>=22.3.0,<23.0.0)", "coverage (>=6.2,<7.0)", "isort (>=5.0.6,<6.0.0)", "mypy (==0.910)", "pytest (>=4.4.0,<8.0.0)", "pytest-cov (>=2.10.0,<5.0.0)", "pytest-sugar (>=0.9.4,<0.10.0)", "pytest-xdist (>=1.32.0,<4.0.0)", "rich (>=10.11.0,<13.0.0)", "shellingham (>=1.3.0,<2.0.0)"] + [[package]] name = "typing-extensions" version = "4.5.0" @@ -2761,7 +3160,7 @@ anyio = ">=3.0.0" name = "wcwidth" version = "0.2.6" description = "Measures the displayed width of unicode strings in a terminal" -category = "dev" +category = "main" optional = false python-versions = "*" files = [ @@ -2771,82 +3170,82 @@ files = [ [[package]] name = "websockets" -version = "11.0" +version = "11.0.2" description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "websockets-11.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:269e3547877a6ca55f62acdf291b256b01bc3469535e892af36afd3e17de284a"}, - {file = "websockets-11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:70a4e03d2416c1dad16ccfab97c975192337c6481b07167c90221f1926893e1e"}, - {file = "websockets-11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4100dc8566ea3b9c0528dee73284be524ab053aebd77e3fc7439a90e0d57745b"}, - {file = "websockets-11.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8e0505c556b2b48078291b300d930f2fb8ba81d1e36379b637c060cfa561ae4"}, - {file = "websockets-11.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d5bc68cec8269b4b52ab6d1d8690f56dba35f7bcb83a5487518406300f81cf1"}, - {file = "websockets-11.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:067ac1f6153fc5218afc4563491dcbdb7384895cfc588a0afee962ca77fe0b58"}, - {file = "websockets-11.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:910c84c0cfe4f872905b6ebe1866c579582070331abcb7a58621935eca95c18a"}, - {file = "websockets-11.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:df0f7769450ca67a53182f917910e2b0b6dd3f8268f88cbfe54ee6be96812889"}, - {file = "websockets-11.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fe23605f5c351773b6fb82fcf680549980d63e126fab5213ed875686c0cec25d"}, - {file = "websockets-11.0-cp310-cp310-win32.whl", hash = "sha256:eb2e7cd654a05c36fccf726385c64a0e1027997d05ba0859f4d84c3d87db1623"}, - {file = "websockets-11.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb26c333751a1e3805ecc416a85dcfa3657676b185acd515fd6992f0cea898ef"}, - {file = "websockets-11.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b4a939963bae1055f14976ef2cf53e797c1997f8835ca9cf23060afc3e7d6718"}, - {file = "websockets-11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d7fc189fb632f8b31af8a5b32105919662a1bbaac20912320482415b7fed9c96"}, - {file = "websockets-11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6e3cfc890f1326c95fd7d4cc50f2bd496d3f014fb2da36b4525a10f226be565d"}, - {file = "websockets-11.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9093f4c72c23ed5e475970c6a37e77c4f3a8856223421b9eb405b9fb2170629f"}, - {file = "websockets-11.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5c56547f97bc76293522ccfcfbdde12442420f1a2c0218ff45d733a0030046df"}, - {file = "websockets-11.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffb406b4449d4fa41ebc47faa3b9153a082f6fe0e4a0891f596a5ddb69fdeccd"}, - {file = "websockets-11.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8fad76be2c5e36fb3620ad507ac8004e9f358f5c4a9a1b756dbe7918d58884a0"}, - {file = "websockets-11.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:17eb1988d320e2f1f20e4a3523f1068a0bb08318ab123962fc99fd90c90ab0d6"}, - {file = "websockets-11.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9873288db9c673a2ba9c0f7b59a130576c50fc75f3336a706fff686009c41631"}, - {file = "websockets-11.0-cp311-cp311-win32.whl", hash = "sha256:cf4ef6343478bf63098d3060fe06baf54d9c011b4b1b05e65e7957091cc87ef4"}, - {file = "websockets-11.0-cp311-cp311-win_amd64.whl", hash = "sha256:713cd5fc1fd40436495c90a259274e1a4a39416c65447a256434941ddaf2f424"}, - {file = "websockets-11.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:649ddddcbafd318d427b843425c92b1c035660c32507645c472c77356226cf07"}, - {file = "websockets-11.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:564c53d84b95da527e96778f2cc873ef186038924abee601f9e8f12ebda9ad46"}, - {file = "websockets-11.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:66d8df2db9801063e4093efe01458b1705c9f76382ad32617c005eeeb201a730"}, - {file = "websockets-11.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcd876ed166a82d250fcf012b729315489e9d653cb659c2e013c19daba2eb8f"}, - {file = "websockets-11.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:cb00963b49d343210ebbdbe69a35004fbecad73da2158e83d481cd2a6716cf19"}, - {file = "websockets-11.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3d6f7c2f822e439f47f3492ee3e48c87c7d134d619a42c6dba1a318504501bfb"}, - {file = "websockets-11.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c4b2ae9c0f1acec5d2f8000eb496eebb9db19055a63716ee166cf0694b945982"}, - {file = "websockets-11.0-cp37-cp37m-win32.whl", hash = "sha256:2b363e0f9b4247a0c7482e22c70ef39fb3259a14f7c0791c9200b93145f60b4b"}, - {file = "websockets-11.0-cp37-cp37m-win_amd64.whl", hash = "sha256:3d372c3426f165a0a22be9250526b1cd12e3556e80b4b2afaa6fd6649c99b086"}, - {file = "websockets-11.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:7eb914d37e0574246c63b995f9ca8d7bb7c2f2d53a8d4e9b00200ea856aa43c4"}, - {file = "websockets-11.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a8717a5f3a00cde308e2971064bd5fcb14e0cc08f8234b97f4eb92b505ea95d4"}, - {file = "websockets-11.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a17151722349c4af221616cca2f28e79237738bfbc53e7155240e2a8a7cc02f4"}, - {file = "websockets-11.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4b60686d9b2ba500847c045595eb5887f4cca7102b4615773b6f490aa611107"}, - {file = "websockets-11.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eededf25ef6b838e650eeeb1511804b82e9ece566fe6cdc11aa909d2992dcdaf"}, - {file = "websockets-11.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7587f339f016f0e1b0b6f013e98c83e382c5929774f2b8234c1b2d3f01dd1339"}, - {file = "websockets-11.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:26369646078e16e7364729ed3e3b1a4315ab1a22ca3c48b4e25dea48fcc1a881"}, - {file = "websockets-11.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:92f51fbe87381ff76c1791dd44d599152b400f1adfa8453613f1ff6857200ee7"}, - {file = "websockets-11.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b5bb04a77c326d727c0b986c37a76147916d79db95629267307d1be47788a020"}, - {file = "websockets-11.0-cp38-cp38-win32.whl", hash = "sha256:50ac95111009178e58b9a25aa51702cdaad4ed843b98eb9b58d69b323ccb224e"}, - {file = "websockets-11.0-cp38-cp38-win_amd64.whl", hash = "sha256:7a4076cd6a3678def988668fc4b1779da598e1e5c9fa26319af5499f00c23e1c"}, - {file = "websockets-11.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:26559e8a385f71ce2a58f3bb1d005ddd3db7d3328ddbfbff1034f4039d46c4ec"}, - {file = "websockets-11.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f10d283697dec8d91fa983eb8e217c9cac27bc1032057768129b89780009318e"}, - {file = "websockets-11.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f74efe229e078bf5595e207e9a7b135ff37a10858263ed86be66003c4c98d47b"}, - {file = "websockets-11.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f048c88bfcc5bf0e038630cfb970b2c479f913819fd9653db920eef3b105a2b1"}, - {file = "websockets-11.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ceab6c1827fa14ad10c6b0806941d577b21d17012a3648787ac2b946182285b4"}, - {file = "websockets-11.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:817227e23897808c4bb621da7f57b1f83ee18345bdc44f5c9c1bbd3a094a73f6"}, - {file = "websockets-11.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6fdcc17348d8697c1f88bba38680cca94131f2a9db727a61fe067284e1e59e8d"}, - {file = "websockets-11.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:8b21ad915b747075f29fe2fa5590111d98988d6730d2cd212acfe52bbe6a2545"}, - {file = "websockets-11.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9ae401ad881d5329062b9b2d8160f0b2a147430974f2a3f32e6cedadddc2d634"}, - {file = "websockets-11.0-cp39-cp39-win32.whl", hash = "sha256:ee84660927293f449760badfe010e06409edb99d72e1910e2e404d2eeff6990f"}, - {file = "websockets-11.0-cp39-cp39-win_amd64.whl", hash = "sha256:2b4e704a9dac1faf4994e63dceae9e2f504913ff0f865bd3e5a097cbd5874a8f"}, - {file = "websockets-11.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c2d6429c9bcd70ed8126a1f9ca6069e4ab95c96a3cc141fc84ce02917f7b45ec"}, - {file = "websockets-11.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff3f67567862a853af2c0db362ede8249be50c576cd9eaf380736c6fce840414"}, - {file = "websockets-11.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b86ce3d17bcc4b6556b2a2e1277beed74ff6b1de23f002f9763e9875e8ba361d"}, - {file = "websockets-11.0-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59c4b458cc09ea6470a5eee98b06ccaa84f2a193b92e337a879612614df0f8eb"}, - {file = "websockets-11.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:e5e21aeb350906dfcff321bfa6c60541a1d05cadb6d431ecf9d6376365be60d4"}, - {file = "websockets-11.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8731189f6985b239a6c34a353c36b45cb3c9fed1c287fbcf7f61df9e4a7ac392"}, - {file = "websockets-11.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee3aa7660ae0d3a4e47517bb5a545b9a02ff7b9632a640f617e755990ef65f66"}, - {file = "websockets-11.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:027aabfd053715ce0f5f6fc5107e5093e05b3c94fa555fb65375aa09cb845a66"}, - {file = "websockets-11.0-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e8c729aa179ef105f096cad12070aef230be9e2ae509eb47c3cdd9257213c14"}, - {file = "websockets-11.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:ff607c6e16409ac83f1ae59cc96167fead577bc652e8dff48f7458ce082372ff"}, - {file = "websockets-11.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ca3d7c08f472c40f28bb9fb99610d28dc97137612ab5308f80dac7ce79f87fe1"}, - {file = "websockets-11.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f179deef8288dd8ec227d644ba5b711609093b634008643561f6d9c74938c3c"}, - {file = "websockets-11.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:269d33f1573a31130da9afd63a2558f60131522d3fe86d0aa2d1612ad065d27c"}, - {file = "websockets-11.0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb0b306c1180d0268341447982b415aca7c072c84b4a59688dbc1d7d2ec25df9"}, - {file = "websockets-11.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:6ae209f11e433575e17d5d6e61a2f77ceda53b4bce07df55af614aa1d618e2e7"}, - {file = "websockets-11.0-py3-none-any.whl", hash = "sha256:6ebd971b9b2c0aaa2188c472016e4dad93108b3db425a33ad584bdc41b22026d"}, - {file = "websockets-11.0.tar.gz", hash = "sha256:19d638549c470f5fd3b67b52b2a08f2edba5a04e05323a706937e35f5f19d056"}, + {file = "websockets-11.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:580cc95c58118f8c39106be71e24d0b7e1ad11a155f40a2ee687f99b3e5e432e"}, + {file = "websockets-11.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:143782041e95b63083b02107f31cda999f392903ae331de1307441f3a4557d51"}, + {file = "websockets-11.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8df63dcd955eb6b2e371d95aacf8b7c535e482192cff1b6ce927d8f43fb4f552"}, + {file = "websockets-11.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca9b2dced5cbbc5094678cc1ec62160f7b0fe4defd601cd28a36fde7ee71bbb5"}, + {file = "websockets-11.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e0eeeea3b01c97fd3b5049a46c908823f68b59bf0e18d79b231d8d6764bc81ee"}, + {file = "websockets-11.0.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:502683c5dedfc94b9f0f6790efb26aa0591526e8403ad443dce922cd6c0ec83b"}, + {file = "websockets-11.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d3cc3e48b6c9f7df8c3798004b9c4b92abca09eeea5e1b0a39698f05b7a33b9d"}, + {file = "websockets-11.0.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:808b8a33c961bbd6d33c55908f7c137569b09ea7dd024bce969969aa04ecf07c"}, + {file = "websockets-11.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:34a6f8996964ccaa40da42ee36aa1572adcb1e213665e24aa2f1037da6080909"}, + {file = "websockets-11.0.2-cp310-cp310-win32.whl", hash = "sha256:8f24cd758cbe1607a91b720537685b64e4d39415649cac9177cd1257317cf30c"}, + {file = "websockets-11.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:3b87cd302f08ea9e74fdc080470eddbed1e165113c1823fb3ee6328bc40ca1d3"}, + {file = "websockets-11.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3565a8f8c7bdde7c29ebe46146bd191290413ee6f8e94cf350609720c075b0a1"}, + {file = "websockets-11.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f97e03d4d5a4f0dca739ea274be9092822f7430b77d25aa02da6775e490f6846"}, + {file = "websockets-11.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8f392587eb2767afa8a34e909f2fec779f90b630622adc95d8b5e26ea8823cb8"}, + {file = "websockets-11.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7742cd4524622cc7aa71734b51294644492a961243c4fe67874971c4d3045982"}, + {file = "websockets-11.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:46dda4bc2030c335abe192b94e98686615f9274f6b56f32f2dd661fb303d9d12"}, + {file = "websockets-11.0.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6b2bfa1d884c254b841b0ff79373b6b80779088df6704f034858e4d705a4802"}, + {file = "websockets-11.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1df2413266bf48430ef2a752c49b93086c6bf192d708e4a9920544c74cd2baa6"}, + {file = "websockets-11.0.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cf45d273202b0c1cec0f03a7972c655b93611f2e996669667414557230a87b88"}, + {file = "websockets-11.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a09cce3dacb6ad638fdfa3154d9e54a98efe7c8f68f000e55ca9c716496ca67"}, + {file = "websockets-11.0.2-cp311-cp311-win32.whl", hash = "sha256:2174a75d579d811279855df5824676d851a69f52852edb0e7551e0eeac6f59a4"}, + {file = "websockets-11.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:c78ca3037a954a4209b9f900e0eabbc471fb4ebe96914016281df2c974a93e3e"}, + {file = "websockets-11.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3a2100b02d1aaf66dc48ff1b2a72f34f6ebc575a02bc0350cc8e9fbb35940166"}, + {file = "websockets-11.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dca9708eea9f9ed300394d4775beb2667288e998eb6f542cdb6c02027430c599"}, + {file = "websockets-11.0.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:320ddceefd2364d4afe6576195201a3632a6f2e6d207b0c01333e965b22dbc84"}, + {file = "websockets-11.0.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2a573c8d71b7af937852b61e7ccb37151d719974146b5dc734aad350ef55a02"}, + {file = "websockets-11.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:13bd5bebcd16a4b5e403061b8b9dcc5c77e7a71e3c57e072d8dff23e33f70fba"}, + {file = "websockets-11.0.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:95c09427c1c57206fe04277bf871b396476d5a8857fa1b99703283ee497c7a5d"}, + {file = "websockets-11.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2eb042734e710d39e9bc58deab23a65bd2750e161436101488f8af92f183c239"}, + {file = "websockets-11.0.2-cp37-cp37m-win32.whl", hash = "sha256:5875f623a10b9ba154cb61967f940ab469039f0b5e61c80dd153a65f024d9fb7"}, + {file = "websockets-11.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:634239bc844131863762865b75211a913c536817c0da27f691400d49d256df1d"}, + {file = "websockets-11.0.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3178d965ec204773ab67985a09f5696ca6c3869afeed0bb51703ea404a24e975"}, + {file = "websockets-11.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:955fcdb304833df2e172ce2492b7b47b4aab5dcc035a10e093d911a1916f2c87"}, + {file = "websockets-11.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cb46d2c7631b2e6f10f7c8bac7854f7c5e5288f024f1c137d4633c79ead1e3c0"}, + {file = "websockets-11.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25aae96c1060e85836552a113495db6d857400288161299d77b7b20f2ac569f2"}, + {file = "websockets-11.0.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2abeeae63154b7f63d9f764685b2d299e9141171b8b896688bd8baec6b3e2303"}, + {file = "websockets-11.0.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:daa1e8ea47507555ed7a34f8b49398d33dff5b8548eae3de1dc0ef0607273a33"}, + {file = "websockets-11.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:954eb789c960fa5daaed3cfe336abc066941a5d456ff6be8f0e03dd89886bb4c"}, + {file = "websockets-11.0.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3ffe251a31f37e65b9b9aca5d2d67fd091c234e530f13d9dce4a67959d5a3fba"}, + {file = "websockets-11.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:adf6385f677ed2e0b021845b36f55c43f171dab3a9ee0ace94da67302f1bc364"}, + {file = "websockets-11.0.2-cp38-cp38-win32.whl", hash = "sha256:aa7b33c1fb2f7b7b9820f93a5d61ffd47f5a91711bc5fa4583bbe0c0601ec0b2"}, + {file = "websockets-11.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:220d5b93764dd70d7617f1663da64256df7e7ea31fc66bc52c0e3750ee134ae3"}, + {file = "websockets-11.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0fb4480556825e4e6bf2eebdbeb130d9474c62705100c90e59f2f56459ddab42"}, + {file = "websockets-11.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ec00401846569aaf018700249996143f567d50050c5b7b650148989f956547af"}, + {file = "websockets-11.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:87c69f50281126dcdaccd64d951fb57fbce272578d24efc59bce72cf264725d0"}, + {file = "websockets-11.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:232b6ba974f5d09b1b747ac232f3a3d8f86de401d7b565e837cc86988edf37ac"}, + {file = "websockets-11.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:392d409178db1e46d1055e51cc850136d302434e12d412a555e5291ab810f622"}, + {file = "websockets-11.0.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a4fe2442091ff71dee0769a10449420fd5d3b606c590f78dd2b97d94b7455640"}, + {file = "websockets-11.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ede13a6998ba2568b21825809d96e69a38dc43184bdeebbde3699c8baa21d015"}, + {file = "websockets-11.0.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:4c54086b2d2aec3c3cb887ad97e9c02c6be9f1d48381c7419a4aa932d31661e4"}, + {file = "websockets-11.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e37a76ccd483a6457580077d43bc3dfe1fd784ecb2151fcb9d1c73f424deaeba"}, + {file = "websockets-11.0.2-cp39-cp39-win32.whl", hash = "sha256:d1881518b488a920434a271a6e8a5c9481a67c4f6352ebbdd249b789c0467ddc"}, + {file = "websockets-11.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:25e265686ea385f22a00cc2b719b880797cd1bb53b46dbde969e554fb458bfde"}, + {file = "websockets-11.0.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ce69f5c742eefd039dce8622e99d811ef2135b69d10f9aa79fbf2fdcc1e56cd7"}, + {file = "websockets-11.0.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b985ba2b9e972cf99ddffc07df1a314b893095f62c75bc7c5354a9c4647c6503"}, + {file = "websockets-11.0.2-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1b52def56d2a26e0e9c464f90cadb7e628e04f67b0ff3a76a4d9a18dfc35e3dd"}, + {file = "websockets-11.0.2-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d70a438ef2a22a581d65ad7648e949d4ccd20e3c8ed7a90bbc46df4e60320891"}, + {file = "websockets-11.0.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:752fbf420c71416fb1472fec1b4cb8631c1aa2be7149e0a5ba7e5771d75d2bb9"}, + {file = "websockets-11.0.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:dd906b0cdc417ea7a5f13bb3c6ca3b5fd563338dc596996cb0fdd7872d691c0a"}, + {file = "websockets-11.0.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e79065ff6549dd3c765e7916067e12a9c91df2affea0ac51bcd302aaf7ad207"}, + {file = "websockets-11.0.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:46388a050d9e40316e58a3f0838c63caacb72f94129eb621a659a6e49bad27ce"}, + {file = "websockets-11.0.2-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c7de298371d913824f71b30f7685bb07ad13969c79679cca5b1f7f94fec012f"}, + {file = "websockets-11.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:6d872c972c87c393e6a49c1afbdc596432df8c06d0ff7cd05aa18e885e7cfb7c"}, + {file = "websockets-11.0.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b444366b605d2885f0034dd889faf91b4b47668dd125591e2c64bfde611ac7e1"}, + {file = "websockets-11.0.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8b967a4849db6b567dec3f7dd5d97b15ce653e3497b8ce0814e470d5e074750"}, + {file = "websockets-11.0.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2acdc82099999e44fa7bd8c886f03c70a22b1d53ae74252f389be30d64fd6004"}, + {file = "websockets-11.0.2-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:518ed6782d9916c5721ebd61bb7651d244178b74399028302c8617d0620af291"}, + {file = "websockets-11.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:58477b041099bb504e1a5ddd8aa86302ed1d5c6995bdd3db2b3084ef0135d277"}, + {file = "websockets-11.0.2-py3-none-any.whl", hash = "sha256:5004c087d17251938a52cce21b3dbdabeecbbe432ce3f5bbbf15d8692c36eac9"}, + {file = "websockets-11.0.2.tar.gz", hash = "sha256:b1a69701eb98ed83dd099de4a686dc892c413d974fa31602bc00aca7cb988ac9"}, ] [[package]] @@ -3025,4 +3424,4 @@ multidict = ">=4.0" [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "c39d19c4c03712b3f0e3dfd1784d497998878da48c5d9cba92ccff22349d38f6" +content-hash = "b78e64d493bdc66dd5e23be6eb9983fc535c16a67a7be99da649f5cc89921a6e" diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/pyproject.toml b/airbyte-ci/connectors/metadata_service/orchestrator/pyproject.toml index 8f95412425d1..03ac9a3eef1b 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/pyproject.toml +++ b/airbyte-ci/connectors/metadata_service/orchestrator/pyproject.toml @@ -11,7 +11,7 @@ python = "^3.9" dagit = "^1.1.21" dagster = "^1.1.21" pandas = "^1.5.3" -dagster-gcp = "^0.17.21" +dagster-gcp = "^0.18.6" google = "^3.0.0" jinja2 = "^3.1.2" pygithub = "^1.58.0" @@ -20,6 +20,9 @@ deepdiff = "^6.3.0" mergedeep = "^1.3.4" pydash = "^6.0.2" dpath = "^2.1.5" +dagster-cloud = "^1.2.6" +grpcio = "^1.47.0" +poetry2setup = "^1.1.0" [tool.poetry.group.dev.dependencies] @@ -29,6 +32,10 @@ ptpython = "^3.0.23" [tool.poetry.group.test.dependencies] pytest = "^7.2.2" + [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" + +[tool.dagster] +module_name = "orchestrator" diff --git a/tools/ci_connector_ops/ci_connector_ops/pipelines/bases.py b/tools/ci_connector_ops/ci_connector_ops/pipelines/bases.py index a79f3f33330b..dd24b6730efb 100644 --- a/tools/ci_connector_ops/ci_connector_ops/pipelines/bases.py +++ b/tools/ci_connector_ops/ci_connector_ops/pipelines/bases.py @@ -73,7 +73,8 @@ def __str__(self) -> str: # noqa D105 class Step(ABC): """An abstract class to declare and run pipeline step.""" - title: ClassVar + title: ClassVar[str] + started_at: ClassVar[datetime] def __init__(self, context: ConnectorTestContext) -> None: # noqa D107 self.context = context @@ -87,6 +88,7 @@ async def run(self, *args, **kwargs) -> StepResult: Returns: StepResult: The step result following the step run. """ + self.started_at = datetime.utcnow() try: return await self._run(*args, **kwargs) except QueryError as e: @@ -269,7 +271,12 @@ def print(self): step.stylize(step_result.status.get_rich_style()) result = Text(step_result.status.value) result.stylize(step_result.status.get_rich_style()) - step_results_table.add_row(step, result, f"{round((self.created_at - step_result.created_at).total_seconds())}s") + + if step_result.status is StepStatus.SKIPPED: + step_results_table.add_row(step, result, "N/A") + else: + run_time_seconds = round((step_result.created_at - step_result.step.started_at).total_seconds()) + step_results_table.add_row(step, result, f"{run_time_seconds}s") to_render = [step_results_table] if self.failed_steps: diff --git a/tools/ci_connector_ops/ci_connector_ops/pipelines/commands/groups/connectors.py b/tools/ci_connector_ops/ci_connector_ops/pipelines/commands/groups/connectors.py index a41216b837db..bc9b5c09d16a 100644 --- a/tools/ci_connector_ops/ci_connector_ops/pipelines/commands/groups/connectors.py +++ b/tools/ci_connector_ops/ci_connector_ops/pipelines/commands/groups/connectors.py @@ -164,7 +164,3 @@ def test( should_send=ctx.obj.get("ci_context") == CIContext.PULL_REQUEST, logger=logger, ) - - -if __name__ == "__main__": - test() diff --git a/tools/ci_connector_ops/ci_connector_ops/pipelines/commands/groups/metadata.py b/tools/ci_connector_ops/ci_connector_ops/pipelines/commands/groups/metadata.py index 31d2ffe11a7a..8baa827a5a40 100644 --- a/tools/ci_connector_ops/ci_connector_ops/pipelines/commands/groups/metadata.py +++ b/tools/ci_connector_ops/ci_connector_ops/pipelines/commands/groups/metadata.py @@ -11,6 +11,7 @@ run_metadata_orchestrator_test_pipeline, run_metadata_upload_pipeline, run_metadata_validation_pipeline, + run_metadata_orchestrator_deploy_pipeline, ) from ci_connector_ops.pipelines.utils import DaggerPipelineCommand, get_all_metadata_files, get_modified_metadata_files from rich.logging import RichHandler @@ -97,6 +98,29 @@ def upload(ctx: click.Context, gcs_bucket_name: str, gcs_credentials: str, modif ) +# DEPLOY GROUP + + +@metadata.group(help="Commands related to deploying components of the metadata service.") +@click.pass_context +def deploy(ctx: click.Context): + pass + + +@deploy.command(cls=DaggerPipelineCommand, name="orchestrator", help="Deploy the metadata service orchestrator to production") +@click.pass_context +def deploy_orchestrator(ctx: click.Context): + return anyio.run( + run_metadata_orchestrator_deploy_pipeline, + ctx.obj["is_local"], + ctx.obj["git_branch"], + ctx.obj["git_revision"], + ctx.obj.get("gha_workflow_run_url"), + ctx.obj.get("pipeline_start_timestamp"), + ctx.obj.get("ci_context"), + ) + + # TEST GROUP @@ -106,9 +130,9 @@ def test(ctx: click.Context): pass -@test.command(cls=DaggerPipelineCommand, help="Run tests for the metadata service library.") +@test.command(cls=DaggerPipelineCommand, name="lib", help="Run tests for the metadata service library.") @click.pass_context -def lib(ctx: click.Context): +def test_lib(ctx: click.Context): return anyio.run( run_metadata_lib_test_pipeline, ctx.obj["is_local"], @@ -120,9 +144,9 @@ def lib(ctx: click.Context): ) -@test.command(cls=DaggerPipelineCommand, help="Run tests for the metadata service orchestrator.") +@test.command(cls=DaggerPipelineCommand, name="orchestrator", help="Run tests for the metadata service orchestrator.") @click.pass_context -def orchestrator(ctx: click.Context): +def test_orchestrator(ctx: click.Context): return anyio.run( run_metadata_orchestrator_test_pipeline, ctx.obj["is_local"], @@ -132,7 +156,3 @@ def orchestrator(ctx: click.Context): ctx.obj.get("pipeline_start_timestamp"), ctx.obj.get("ci_context"), ) - - -if __name__ == "__main__": - lib() diff --git a/tools/ci_connector_ops/ci_connector_ops/pipelines/pipelines/metadata.py b/tools/ci_connector_ops/ci_connector_ops/pipelines/pipelines/metadata.py index 42a31c198849..a3ce22001d9d 100644 --- a/tools/ci_connector_ops/ci_connector_ops/pipelines/pipelines/metadata.py +++ b/tools/ci_connector_ops/ci_connector_ops/pipelines/pipelines/metadata.py @@ -3,11 +3,13 @@ # import uuid from pathlib import Path -from typing import Optional, Set +from typing import Optional, Set, List +import asyncer import dagger -from ci_connector_ops.pipelines.actions.environments import with_poetry_module -from ci_connector_ops.pipelines.bases import Step, StepStatus, TestReport + +from ci_connector_ops.pipelines.actions.environments import with_poetry_module, with_python_base, with_pip_packages +from ci_connector_ops.pipelines.bases import Step, StepStatus, TestReport, StepResult from ci_connector_ops.pipelines.contexts import PipelineContext from ci_connector_ops.pipelines.utils import DAGGER_CONFIG, METADATA_FILE_NAME, execute_concurrently @@ -15,18 +17,31 @@ METADATA_LIB_MODULE_PATH = "lib" METADATA_ORCHESTRATOR_MODULE_PATH = "orchestrator" +# HELPERS -class PoetryRun(Step): - def __init__(self, context: PipelineContext, title: str, parent_dir_path: str, module_path: str): - self.title = title - super().__init__(context) - self.parent_dir = self.context.get_repo_dir(parent_dir_path) - self.module_path = module_path - self.poetry_run_container = with_poetry_module(self.context, self.parent_dir, self.module_path).with_entrypoint(["poetry", "run"]) - async def _run(self, poetry_run_args: list) -> StepStatus: - poetry_run_exec = self.poetry_run_container.with_exec(poetry_run_args) - return await self.get_step_result(poetry_run_exec) +async def run_steps(steps: List[Step | List[Step]], results: List[StepResult] = []) -> List[StepResult]: + # If there are no steps to run, return the results + if not steps: + return results + + # If any of the previous steps failed, skip the remaining steps + if any(result.status == StepStatus.FAILURE for result in results): + skipped_results = [step.skip() for step in steps] + return results + skipped_results + + # Pop the next step to run + steps_to_run, remaining_steps = steps[0], steps[1:] + + # wrap the step in a list if it is not already (allows for parallel steps) + if not isinstance(steps_to_run, list): + steps_to_run = [steps_to_run] + + async with asyncer.create_task_group() as task_group: + tasks = [task_group.soonify(step_to_run.run)() for step_to_run in steps_to_run] + + new_results = [task.value for task in tasks] + return await run_steps(remaining_steps, results + new_results) def get_metadata_file_from_path(context: PipelineContext, metadata_path: Path) -> dagger.File: @@ -40,6 +55,22 @@ def get_metadata_file_from_path(context: PipelineContext, metadata_path: Path) - return context.get_repo_dir(str(metadata_path.parent), include=[METADATA_FILE_NAME]).file(METADATA_FILE_NAME) +# STEPS + + +class PoetryRun(Step): + def __init__(self, context: PipelineContext, title: str, parent_dir_path: str, module_path: str): + self.title = title + super().__init__(context) + self.parent_dir = self.context.get_repo_dir(parent_dir_path) + self.module_path = module_path + self.poetry_run_container = with_poetry_module(self.context, self.parent_dir, self.module_path).with_entrypoint(["poetry", "run"]) + + async def _run(self, poetry_run_args: list) -> StepStatus: + poetry_run_exec = self.poetry_run_container.with_exec(poetry_run_args) + return await self.get_step_result(poetry_run_exec) + + class MetadataValidation(PoetryRun): def __init__(self, context: PipelineContext, metadata_path: Path): title = f"Validate {metadata_path}" @@ -53,7 +84,6 @@ async def _run(self) -> StepStatus: class MetadataUpload(PoetryRun): - GCS_CREDENTIALS_CONTAINER_PATH = "gcs_credentials.json" def __init__(self, context: PipelineContext, metadata_path: Path, gcs_bucket_name: str, gcs_credentials: str): @@ -81,6 +111,58 @@ async def _run(self) -> StepStatus: ) +class DeployOrchestrator(Step): + title = "Deploy Metadata Orchestrator to Dagster Cloud" + deploy_dagster_command = [ + "dagster-cloud", + "serverless", + "deploy-python-executable", + "--location-name", + "metadata_service_orchestrator", + "--location-file", + "dagster_cloud.yaml", + "--organization", + "airbyte-connectors", + "--deployment", + "prod", + "--python-version", + "3.9", + ] + + async def _run(self) -> StepStatus: + parent_dir = self.context.get_repo_dir(METADATA_DIR) + python_base = with_python_base(self.context) + python_with_dependencies = with_pip_packages(python_base, ["dagster-cloud==1.2.6", "poetry2setup==1.1.0"]) + dagster_cloud_api_token_secret: dagger.Secret = ( + self.context.dagger_client.host().env_variable("DAGSTER_CLOUD_METADATA_API_TOKEN").secret() + ) + + container_to_run = ( + python_with_dependencies.with_mounted_directory("/src", parent_dir) + .with_secret_variable("DAGSTER_CLOUD_API_TOKEN", dagster_cloud_api_token_secret) + .with_workdir(f"/src/{METADATA_ORCHESTRATOR_MODULE_PATH}") + .with_exec(["/bin/sh", "-c", "poetry2setup >> setup.py"]) + .with_exec(self.deploy_dagster_command) + ) + return await self.get_step_result(container_to_run) + + +class TestOrchestrator(PoetryRun): + def __init__(self, context: PipelineContext): + super().__init__( + context=context, + title="Test Metadata Orchestrator", + parent_dir_path=METADATA_DIR, + module_path=METADATA_ORCHESTRATOR_MODULE_PATH, + ) + + async def _run(self) -> StepStatus: + return await super()._run(["pytest"]) + + +# PIPELINES + + async def run_metadata_validation_pipeline( is_local: bool, git_branch: str, @@ -165,13 +247,8 @@ async def run_metadata_orchestrator_test_pipeline( async with dagger.Connection(DAGGER_CONFIG) as dagger_client: metadata_pipeline_context.dagger_client = dagger_client.pipeline(metadata_pipeline_context.pipeline_name) async with metadata_pipeline_context: - test_orch_step = PoetryRun( - context=metadata_pipeline_context, - title="Test Metadata Service Orchestrator", - parent_dir_path=METADATA_DIR, - module_path=METADATA_ORCHESTRATOR_MODULE_PATH, - ) - result = await test_orch_step.run(["pytest"]) + test_orch_step = TestOrchestrator(context=metadata_pipeline_context) + result = await test_orch_step.run() metadata_pipeline_context.test_report = TestReport(pipeline_context=metadata_pipeline_context, steps_results=[result]) return metadata_pipeline_context.test_report.success @@ -202,7 +279,6 @@ async def run_metadata_upload_pipeline( pipeline_context.dagger_client = dagger_client.pipeline(pipeline_context.pipeline_name) async with pipeline_context: - results = await execute_concurrently( [ MetadataUpload(pipeline_context, metadata_path, gcs_bucket_name, gcs_credentials).run @@ -212,3 +288,31 @@ async def run_metadata_upload_pipeline( pipeline_context.test_report = TestReport(pipeline_context, results) return pipeline_context.test_report.success + + +async def run_metadata_orchestrator_deploy_pipeline( + is_local: bool, + git_branch: str, + git_revision: str, + gha_workflow_run_url: Optional[str], + pipeline_start_timestamp: Optional[int], + ci_context: Optional[str], +) -> bool: + metadata_pipeline_context = PipelineContext( + pipeline_name="Metadata Service Orchestrator Unit Test Pipeline", + is_local=is_local, + git_branch=git_branch, + git_revision=git_revision, + gha_workflow_run_url=gha_workflow_run_url, + pipeline_start_timestamp=pipeline_start_timestamp, + ci_context=ci_context, + ) + + async with dagger.Connection(DAGGER_CONFIG) as dagger_client: + metadata_pipeline_context.dagger_client = dagger_client.pipeline(metadata_pipeline_context.pipeline_name) + + async with metadata_pipeline_context: + steps = [TestOrchestrator(context=metadata_pipeline_context), DeployOrchestrator(context=metadata_pipeline_context)] + steps_results = await run_steps(steps) + metadata_pipeline_context.test_report = TestReport(pipeline_context=metadata_pipeline_context, steps_results=steps_results) + return metadata_pipeline_context.test_report.success From 68992073fa472b387822faf065856f99cfdd2d57 Mon Sep 17 00:00:00 2001 From: Vladimir remar Date: Tue, 18 Apr 2023 19:25:27 +0200 Subject: [PATCH 114/187] :tada: Source Facebook Marketing: Increase pause interval time after reach MIN_RATE or MAX_RATE. (#22990) * Change min rate and increase time in pauses * Update Dockerfile * Update source_definitions.yaml * Update facebook-marketing.md * auto-bump connector version --------- Co-authored-by: Marcos Marx Co-authored-by: Octavia Squidington III --- .../init-oss/src/main/resources/seed/oss_catalog.json | 2 +- .../init-oss/src/main/resources/seed/source_definitions.yaml | 2 +- .../init-oss/src/main/resources/seed/source_specs.yaml | 2 +- .../connectors/source-facebook-marketing/Dockerfile | 2 +- .../source_facebook_marketing/api.py | 4 ++-- connectors.md | 2 +- docs/integrations/sources/facebook-marketing.md | 3 ++- 7 files changed, 9 insertions(+), 8 deletions(-) diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json index 986acdb2a503..564c83e9dc59 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json @@ -12073,7 +12073,7 @@ "sourceDefinitionId": "e7778cfc-e97c-4458-9ecb-b4f2bba8946c", "name": "Facebook Marketing", "dockerRepository": "airbyte/source-facebook-marketing", - "dockerImageTag": "0.3.3", + "dockerImageTag": "0.3.4", "documentationUrl": "https://docs.airbyte.com/integrations/sources/facebook-marketing", "icon": "facebook.svg", "sourceType": "api", diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml index e13956a6a110..c508837d8c86 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml @@ -562,7 +562,7 @@ - name: Facebook Marketing sourceDefinitionId: e7778cfc-e97c-4458-9ecb-b4f2bba8946c dockerRepository: airbyte/source-facebook-marketing - dockerImageTag: 0.3.3 + dockerImageTag: 0.3.4 documentationUrl: https://docs.airbyte.com/integrations/sources/facebook-marketing icon: facebook.svg sourceType: api diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml index be7b30e750ed..9f07f4a45b00 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml @@ -3882,7 +3882,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-facebook-marketing:0.3.3" +- dockerImage: "airbyte/source-facebook-marketing:0.3.4" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/facebook-marketing" changelogUrl: "https://docs.airbyte.com/integrations/sources/facebook-marketing" diff --git a/airbyte-integrations/connectors/source-facebook-marketing/Dockerfile b/airbyte-integrations/connectors/source-facebook-marketing/Dockerfile index 7ea538b4a6f3..29f3177076b8 100644 --- a/airbyte-integrations/connectors/source-facebook-marketing/Dockerfile +++ b/airbyte-integrations/connectors/source-facebook-marketing/Dockerfile @@ -13,5 +13,5 @@ ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=0.3.3 +LABEL io.airbyte.version=0.3.4 LABEL io.airbyte.name=airbyte/source-facebook-marketing diff --git a/airbyte-integrations/connectors/source-facebook-marketing/source_facebook_marketing/api.py b/airbyte-integrations/connectors/source-facebook-marketing/source_facebook_marketing/api.py index b9d9908327bb..48238280c88a 100644 --- a/airbyte-integrations/connectors/source-facebook-marketing/source_facebook_marketing/api.py +++ b/airbyte-integrations/connectors/source-facebook-marketing/source_facebook_marketing/api.py @@ -29,8 +29,8 @@ class FacebookAPIException(Exception): class MyFacebookAdsApi(FacebookAdsApi): """Custom Facebook API class to intercept all API calls and handle call rate limits""" - MAX_RATE, MAX_PAUSE_INTERVAL = (95, pendulum.duration(minutes=5)) - MIN_RATE, MIN_PAUSE_INTERVAL = (90, pendulum.duration(minutes=1)) + MAX_RATE, MAX_PAUSE_INTERVAL = (95, pendulum.duration(minutes=10)) + MIN_RATE, MIN_PAUSE_INTERVAL = (85, pendulum.duration(minutes=2)) @dataclass class Throttle: diff --git a/connectors.md b/connectors.md index 84fe2dcff27a..ee439231fd08 100644 --- a/connectors.md +++ b/connectors.md @@ -69,7 +69,7 @@ | **EmailOctopus** | EmailOctopus icon | Source | airbyte/source-emailoctopus:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/emailoctopus) | [connectors/source/emailoctopus](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/emailoctopus) | [source-emailoctopus](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-emailoctopus) | `46b25e70-c980-4590-a811-8deaf50ee09f` | | **Everhour** | Everhour icon | Source | airbyte/source-everhour:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/everhour) | [connectors/source/everhour](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/everhour) | [source-everhour](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-everhour) | `6babfc42-c734-4ef6-a817-6eca15f0f9b7` | | **Exchange Rates Api** | Exchange Rates Api icon | Source | airbyte/source-exchange-rates:1.2.8 | alpha | [docs](https://docs.airbyte.com/integrations/sources/exchangeratesapi) | [connectors/source/exchange-rates](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/exchange-rates) | [source-exchange-rates](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-exchange-rates) | `e2b40e36-aa0e-4bed-b41b-bcea6fa348b1` | -| **Facebook Marketing** | Facebook Marketing icon | Source | airbyte/source-facebook-marketing:0.3.3 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/facebook-marketing) | [connectors/source/facebook-marketing](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/facebook-marketing) | [source-facebook-marketing](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-facebook-marketing) | `e7778cfc-e97c-4458-9ecb-b4f2bba8946c` | +| **Facebook Marketing** | Facebook Marketing icon | Source | airbyte/source-facebook-marketing:0.3.4 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/facebook-marketing) | [connectors/source/facebook-marketing](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/facebook-marketing) | [source-facebook-marketing](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-facebook-marketing) | `e7778cfc-e97c-4458-9ecb-b4f2bba8946c` | | **Facebook Pages** | Facebook Pages icon | Source | airbyte/source-facebook-pages:0.2.4 | beta | [docs](https://docs.airbyte.com/integrations/sources/facebook-pages) | [connectors/source/facebook-pages](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/facebook-pages) | [source-facebook-pages](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-facebook-pages) | `010eb12f-837b-4685-892d-0a39f76a98f5` | | **Fastbill** | Fastbill icon | Source | airbyte/source-fastbill:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/fastbill) | [connectors/source/fastbill](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/fastbill) | [source-fastbill](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-fastbill) | `eb3e9c1c-0467-4eb7-a172-5265e04ccd0a` | | **Fauna** | Fauna icon | Source | airbyte/source-fauna:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/fauna) | [connectors/source/fauna](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/fauna) | [source-fauna](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-fauna) | `3825db3e-c94b-42ac-bd53-b5a9507ace2b` | diff --git a/docs/integrations/sources/facebook-marketing.md b/docs/integrations/sources/facebook-marketing.md index dbfade05c295..c3bb8de0959f 100644 --- a/docs/integrations/sources/facebook-marketing.md +++ b/docs/integrations/sources/facebook-marketing.md @@ -136,7 +136,8 @@ Please be informed that the connector uses the `lookback_window` parameter to pe | Version | Date | Pull Request | Subject | |:--------|:-----------|:---------------------------------------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| 0.3.3 | 2023-04-14 | [00000](https://github.com/airbytehq/airbyte/pull/00000) | Fix data retention period validation | +| 0.3.4 | 2023-04-18 | [22990](https://github.com/airbytehq/airbyte/pull/22990) | Increase pause interval | +| 0.3.3 | 2023-04-14 | [25204](https://github.com/airbytehq/airbyte/pull/25204) | Fix data retention period validation | | 0.3.2 | 2023-04-08 | [25003](https://github.com/airbytehq/airbyte/pull/25003) | Don't fetch `thumbnail_data_url` if it's None | | 0.3.1 | 2023-03-27 | [24600](https://github.com/airbytehq/airbyte/pull/24600) | Reduce request record limit when retrying second page or further | | 0.3.0 | 2023-03-16 | [19141](https://github.com/airbytehq/airbyte/pull/19141) | Added Level parameter to custom Ads Insights | From 3867129c6d208dfb70f3ab1c7cd6a308769c9c71 Mon Sep 17 00:00:00 2001 From: Rachel Rizk <69161287+rach-r@users.noreply.github.com> Date: Tue, 18 Apr 2023 19:57:39 +0200 Subject: [PATCH 115/187] =?UTF-8?q?=F0=9F=8E=89=20New=20Source:=20Apple=20?= =?UTF-8?q?Search=20Ads=20[low-code=20CDK]=20(#19557)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore(source-apple-search-ads): add low-code boilerplate code * feat(source-apple-search-ads): add spec and 6 streams * test(source-apple-search-ads): set integration and acceptance tests * fix(source-apple-search-ads): camel case for all properties * docs(source-apple-search-ads): add bootstrap and general docs * docs(source-apple-search-ads): update changelog with right PR number and content * feat(source-apple-search-ads): add lookback window and set to 30d * chore(source-apple-search-ads): remove unused file * test(source-apple-search-ads): complete sample state * docs(source-apple-search-ads): rename documentation url * docs(source-apple-search-ads): remove 90 days limitation * feat(source-apple-search-ads): add exponential backoff * fix(source-apple-search-ads): fix acceptance test execution * chore(source-apple-search-ads): switch time interval to ISO 8601 duration * chore(source-apple-search-ads): update json schemas to the latest version * test(source-apple-search-ads): ignore fields that are not idempotent * test(source-apple-search-ads): align threshold days with lookback window for incremental test * test(source-apple-search-ads): adjust timeout * chore(source-apple-search-ads): add latest CDK changes to boilerplate code * refactor(source-apple-search-ads): use latest manifest for CDK * add icon and source seed * auto-bump connector version --------- Co-authored-by: Marcos Marx Co-authored-by: marcosmarxm Co-authored-by: Octavia Squidington III --- .../src/main/resources/icons/apple.svg | 47 ++++ .../src/main/resources/seed/oss_catalog.json | 58 +++++ .../resources/seed/source_definitions.yaml | 8 + .../src/main/resources/seed/source_specs.yaml | 49 ++++ .../source-apple-search-ads/.dockerignore | 6 + .../source-apple-search-ads/Dockerfile | 38 +++ .../source-apple-search-ads/README.md | 79 ++++++ .../source-apple-search-ads/__init__.py | 3 + .../acceptance-test-config.yml | 51 ++++ .../acceptance-test-docker.sh | 3 + .../source-apple-search-ads/bootstrap.md | 26 ++ .../source-apple-search-ads/build.gradle | 9 + .../integration_tests/__init__.py | 3 + .../integration_tests/abnormal_state.json | 11 + .../integration_tests/acceptance.py | 16 ++ .../integration_tests/configured_catalog.json | 79 ++++++ .../integration_tests/invalid_config.json | 6 + .../integration_tests/sample_config.json | 6 + .../integration_tests/sample_state.json | 11 + .../source-apple-search-ads/main.py | 13 + .../source-apple-search-ads/requirements.txt | 2 + .../source-apple-search-ads/setup.py | 29 +++ .../source_apple_search_ads/__init__.py | 8 + .../source_apple_search_ads/manifest.yaml | 218 +++++++++++++++++ .../schemas/adgroups.json | 228 ++++++++++++++++++ .../schemas/adgroups_report_daily.json | 161 +++++++++++++ .../schemas/campaigns.json | 130 ++++++++++ .../schemas/campaigns_report_daily.json | 193 +++++++++++++++ .../schemas/keywords.json | 44 ++++ .../schemas/keywords_report_daily.json | 181 ++++++++++++++ .../source_apple_search_ads/source.py | 18 ++ .../source_apple_search_ads/spec.yaml | 45 ++++ connectors.md | 1 + docs/integrations/sources/apple-search-ads.md | 50 ++++ 34 files changed, 1830 insertions(+) create mode 100644 airbyte-config-oss/init-oss/src/main/resources/icons/apple.svg create mode 100644 airbyte-integrations/connectors/source-apple-search-ads/.dockerignore create mode 100644 airbyte-integrations/connectors/source-apple-search-ads/Dockerfile create mode 100644 airbyte-integrations/connectors/source-apple-search-ads/README.md create mode 100644 airbyte-integrations/connectors/source-apple-search-ads/__init__.py create mode 100644 airbyte-integrations/connectors/source-apple-search-ads/acceptance-test-config.yml create mode 100755 airbyte-integrations/connectors/source-apple-search-ads/acceptance-test-docker.sh create mode 100644 airbyte-integrations/connectors/source-apple-search-ads/bootstrap.md create mode 100644 airbyte-integrations/connectors/source-apple-search-ads/build.gradle create mode 100644 airbyte-integrations/connectors/source-apple-search-ads/integration_tests/__init__.py create mode 100644 airbyte-integrations/connectors/source-apple-search-ads/integration_tests/abnormal_state.json create mode 100644 airbyte-integrations/connectors/source-apple-search-ads/integration_tests/acceptance.py create mode 100644 airbyte-integrations/connectors/source-apple-search-ads/integration_tests/configured_catalog.json create mode 100644 airbyte-integrations/connectors/source-apple-search-ads/integration_tests/invalid_config.json create mode 100644 airbyte-integrations/connectors/source-apple-search-ads/integration_tests/sample_config.json create mode 100644 airbyte-integrations/connectors/source-apple-search-ads/integration_tests/sample_state.json create mode 100644 airbyte-integrations/connectors/source-apple-search-ads/main.py create mode 100644 airbyte-integrations/connectors/source-apple-search-ads/requirements.txt create mode 100644 airbyte-integrations/connectors/source-apple-search-ads/setup.py create mode 100644 airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/__init__.py create mode 100644 airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/manifest.yaml create mode 100644 airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/schemas/adgroups.json create mode 100644 airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/schemas/adgroups_report_daily.json create mode 100644 airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/schemas/campaigns.json create mode 100644 airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/schemas/campaigns_report_daily.json create mode 100644 airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/schemas/keywords.json create mode 100644 airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/schemas/keywords_report_daily.json create mode 100644 airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/source.py create mode 100644 airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/spec.yaml create mode 100644 docs/integrations/sources/apple-search-ads.md diff --git a/airbyte-config-oss/init-oss/src/main/resources/icons/apple.svg b/airbyte-config-oss/init-oss/src/main/resources/icons/apple.svg new file mode 100644 index 000000000000..edad61a9c4c7 --- /dev/null +++ b/airbyte-config-oss/init-oss/src/main/resources/icons/apple.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json index 564c83e9dc59..da0d151fae95 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json @@ -9065,6 +9065,64 @@ "public": true, "custom": false, "releaseStage": "alpha" + }, { + "sourceDefinitionId": "e59c8416-c2fa-4bd3-9e95-52677ea281c1", + "name": "Apple Search Ads", + "dockerRepository": "airbyte/source-apple-search-ads", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/apple-search-ads", + "icon": "apple.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.io/integrations/sources/apple-search-ads", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Apple Search Ads Spec", + "type": "object", + "required": [ "org_id", "client_id", "client_secret", "start_date" ], + "additionalProperties": true, + "properties": { + "org_id": { + "type": "integer", + "title": "Org Id", + "description": "The identifier of the organization that owns the campaign. Your Org Id is the same as your account in the Apple Search Ads UI." + }, + "client_id": { + "type": "string", + "title": "Client Id", + "description": "A user identifier for the token request. See here", + "airbyte_secret": true + }, + "client_secret": { + "type": "string", + "title": "Client Secret", + "description": "A string that authenticates the user’s setup request. See here", + "airbyte_secret": true + }, + "start_date": { + "type": "string", + "title": "Start Date", + "description": "Start getting data from that date.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": [ "2020-01-01" ] + }, + "end_date": { + "type": "string", + "title": "End Date", + "description": "Data is retrieved until that date (included)", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", + "examples": [ "2021-01-01" ] + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" }, { "sourceDefinitionId": "16447954-e6a8-4593-b140-43dea13bc457", "name": "AppsFlyer", diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml index c508837d8c86..4d7f15cda5ff 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml @@ -120,6 +120,14 @@ icon: appfollow.svg sourceType: api releaseStage: alpha +- name: Apple Search Ads + sourceDefinitionId: e59c8416-c2fa-4bd3-9e95-52677ea281c1 + dockerRepository: airbyte/source-apple-search-ads + dockerImageTag: 0.1.0 + documentationUrl: https://docs.airbyte.com/integrations/sources/apple-search-ads + icon: apple.svg + sourceType: api + releaseStage: alpha - name: AppsFlyer sourceDefinitionId: 16447954-e6a8-4593-b140-43dea13bc457 dockerRepository: airbyte/source-appsflyer diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml index 9f07f4a45b00..8967f30e2676 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml @@ -1421,6 +1421,55 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] +- dockerImage: "airbyte/source-apple-search-ads:0.1.0" + spec: + documentationUrl: "https://docs.airbyte.io/integrations/sources/apple-search-ads" + connectionSpecification: + $schema: "http://json-schema.org/draft-07/schema#" + title: "Apple Search Ads Spec" + type: "object" + required: + - "org_id" + - "client_id" + - "client_secret" + - "start_date" + additionalProperties: true + properties: + org_id: + type: "integer" + title: "Org Id" + description: "The identifier of the organization that owns the campaign.\ + \ Your Org Id is the same as your account in the Apple Search Ads UI." + client_id: + type: "string" + title: "Client Id" + description: "A user identifier for the token request. See here" + airbyte_secret: true + client_secret: + type: "string" + title: "Client Secret" + description: "A string that authenticates the user’s setup request. See\ + \ here" + airbyte_secret: true + start_date: + type: "string" + title: "Start Date" + description: "Start getting data from that date." + pattern: "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" + examples: + - "2020-01-01" + end_date: + type: "string" + title: "End Date" + description: "Data is retrieved until that date (included)" + pattern: "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" + examples: + - "2021-01-01" + supportsNormalization: false + supportsDBT: false + supported_destination_sync_modes: [] - dockerImage: "airbyte/source-appsflyer:0.1.0" spec: documentationUrl: "https://docsurl.com" diff --git a/airbyte-integrations/connectors/source-apple-search-ads/.dockerignore b/airbyte-integrations/connectors/source-apple-search-ads/.dockerignore new file mode 100644 index 000000000000..32eb9dcb9875 --- /dev/null +++ b/airbyte-integrations/connectors/source-apple-search-ads/.dockerignore @@ -0,0 +1,6 @@ +* +!Dockerfile +!main.py +!source_apple_search_ads +!setup.py +!secrets diff --git a/airbyte-integrations/connectors/source-apple-search-ads/Dockerfile b/airbyte-integrations/connectors/source-apple-search-ads/Dockerfile new file mode 100644 index 000000000000..2f1b015660a1 --- /dev/null +++ b/airbyte-integrations/connectors/source-apple-search-ads/Dockerfile @@ -0,0 +1,38 @@ +FROM python:3.9.11-alpine3.15 as base + +# build and load all requirements +FROM base as builder +WORKDIR /airbyte/integration_code + +# upgrade pip to the latest version +RUN apk --no-cache upgrade \ + && pip install --upgrade pip \ + && apk --no-cache add tzdata build-base + + +COPY setup.py ./ +# install necessary packages to a temporary folder +RUN pip install --prefix=/install . + +# build a clean environment +FROM base +WORKDIR /airbyte/integration_code + +# copy all loaded and built libraries to a pure basic image +COPY --from=builder /install /usr/local +# add default timezone settings +COPY --from=builder /usr/share/zoneinfo/Etc/UTC /etc/localtime +RUN echo "Etc/UTC" > /etc/timezone + +# bash is installed for more convenient debugging. +RUN apk --no-cache add bash + +# copy payload code only +COPY main.py ./ +COPY source_apple_search_ads ./source_apple_search_ads + +ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" +ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] + +LABEL io.airbyte.version=0.1.0 +LABEL io.airbyte.name=airbyte/source-apple-search-ads diff --git a/airbyte-integrations/connectors/source-apple-search-ads/README.md b/airbyte-integrations/connectors/source-apple-search-ads/README.md new file mode 100644 index 000000000000..f6a1226115b2 --- /dev/null +++ b/airbyte-integrations/connectors/source-apple-search-ads/README.md @@ -0,0 +1,79 @@ +# Apple Search Ads Source + +This is the repository for the Apple Search Ads configuration based source connector. +For information about how to use this connector within Airbyte, see [the documentation](https://docs.airbyte.io/integrations/sources/apple-search-ads). + +## Local development + +#### Building via Gradle +You can also build the connector in Gradle. This is typically used in CI and not needed for your development workflow. + +To build using Gradle, from the Airbyte repository root, run: +``` +./gradlew :airbyte-integrations:connectors:source-apple-search-ads:build +``` + +#### Create credentials +**If you are a community contributor**, follow the instructions in the [documentation](https://docs.airbyte.io/integrations/sources/apple-search-ads) +to generate the necessary credentials. Then create a file `secrets/config.json` conforming to the `source_apple_search_ads/spec.yaml` file. +Note that any directory named `secrets` is gitignored across the entire Airbyte repo, so there is no danger of accidentally checking in sensitive information. +See `integration_tests/sample_config.json` for a sample config file. + +**If you are an Airbyte core member**, copy the credentials in Lastpass under the secret name `source apple-search-ads test creds` +and place them into `secrets/config.json`. + +### Locally running the connector docker image + +#### Build +First, make sure you build the latest Docker image: +``` +docker build . -t airbyte/source-apple-search-ads:dev +``` + +You can also build the connector image via Gradle: +``` +./gradlew :airbyte-integrations:connectors:source-apple-search-ads:airbyteDocker +``` +When building via Gradle, the docker image name and tag, respectively, are the values of the `io.airbyte.name` and `io.airbyte.version` `LABEL`s in +the Dockerfile. + +#### Run +Then run any of the connector commands as follows: +``` +docker run --rm airbyte/source-apple-search-ads:dev spec +docker run --rm -v $(pwd)/secrets:/secrets airbyte/source-apple-search-ads:dev check --config /secrets/config.json +docker run --rm -v $(pwd)/secrets:/secrets airbyte/source-apple-search-ads:dev discover --config /secrets/config.json +docker run --rm -v $(pwd)/secrets:/secrets -v $(pwd)/integration_tests:/integration_tests airbyte/source-apple-search-ads:dev read --config /secrets/config.json --catalog /integration_tests/configured_catalog.json +``` +## Testing + +#### Acceptance Tests +Customize `acceptance-test-config.yml` file to configure tests. See [Source Acceptance Tests](https://docs.airbyte.io/connector-development/testing-connectors/source-acceptance-tests-reference) for more information. +If your connector requires to create or destroy resources for use during acceptance tests create fixtures for it and place them inside integration_tests/acceptance.py. + +To run your integration tests with docker + +### Using gradle to run tests +All commands should be run from airbyte project root. +To run unit tests: +``` +./gradlew :airbyte-integrations:connectors:source-apple-search-ads:unitTest +``` +To run acceptance and custom integration tests: +``` +./gradlew :airbyte-integrations:connectors:source-apple-search-ads:integrationTest +``` + +## Dependency Management +All of your dependencies should go in `setup.py`, NOT `requirements.txt`. The requirements file is only used to connect internal Airbyte dependencies in the monorepo for local development. +We split dependencies between two groups, dependencies that are: +* required for your connector to work need to go to `MAIN_REQUIREMENTS` list. +* required for the testing need to go to `TEST_REQUIREMENTS` list + +### Publishing a new version of the connector +You've checked out the repo, implemented a million dollar feature, and you're ready to share your changes with the world. Now what? +1. Make sure your changes are passing unit and integration tests. +1. Bump the connector version in `Dockerfile` -- just increment the value of the `LABEL io.airbyte.version` appropriately (we use [SemVer](https://semver.org/)). +1. Create a Pull Request. +1. Pat yourself on the back for being an awesome contributor. +1. Someone from Airbyte will take a look at your PR and iterate with you to merge it into master. diff --git a/airbyte-integrations/connectors/source-apple-search-ads/__init__.py b/airbyte-integrations/connectors/source-apple-search-ads/__init__.py new file mode 100644 index 000000000000..1100c1c58cf5 --- /dev/null +++ b/airbyte-integrations/connectors/source-apple-search-ads/__init__.py @@ -0,0 +1,3 @@ +# +# Copyright (c) 2022 Airbyte, Inc., all rights reserved. +# diff --git a/airbyte-integrations/connectors/source-apple-search-ads/acceptance-test-config.yml b/airbyte-integrations/connectors/source-apple-search-ads/acceptance-test-config.yml new file mode 100644 index 000000000000..b169b167be72 --- /dev/null +++ b/airbyte-integrations/connectors/source-apple-search-ads/acceptance-test-config.yml @@ -0,0 +1,51 @@ +# See [Source Acceptance Tests](https://docs.airbyte.com/connector-development/testing-connectors/source-acceptance-tests-reference) +# for more information about how to configure these tests +connector_image: airbyte/source-apple-search-ads:dev +acceptance_tests: + spec: + tests: + - spec_path: "source_apple_search_ads/spec.yaml" + connection: + tests: + - config_path: "secrets/config.json" + status: "succeed" + - config_path: "integration_tests/invalid_config.json" + status: "failed" + discovery: + tests: + - config_path: "secrets/config.json" + basic_read: + tests: + - config_path: "secrets/config.json" + configured_catalog_path: "integration_tests/configured_catalog.json" + empty_streams: [] + timeout_seconds: 3600 + incremental: + tests: + - config_path: "secrets/config.json" + configured_catalog_path: "integration_tests/configured_catalog.json" + future_state: + future_state_path: "integration_tests/abnormal_state.json" + timeout_seconds: 3600 + threshold_days: 30 # Reduce this if you have many data to retrieve + full_refresh: + tests: + - config_path: "secrets/config.json" + configured_catalog_path: "integration_tests/configured_catalog.json" + ignored_fields: + adgroups_report_daily: + - name: granularity + bypass_reason: "Can't be idempotent by nature" + - name: metadata + bypass_reason: "Can't be idempotent by nature" + campaigns_report_daily: + - name: granularity + bypass_reason: "Can't be idempotent by nature" + - name: metadata + bypass_reason: "Can't be idempotent by nature" + keywords_report_daily: + - name: granularity + bypass_reason: "Can't be idempotent by nature" + - name: metadata + bypass_reason: "Can't be idempotent by nature" + timeout_seconds: 3600 diff --git a/airbyte-integrations/connectors/source-apple-search-ads/acceptance-test-docker.sh b/airbyte-integrations/connectors/source-apple-search-ads/acceptance-test-docker.sh new file mode 100755 index 000000000000..b6d65deeccb4 --- /dev/null +++ b/airbyte-integrations/connectors/source-apple-search-ads/acceptance-test-docker.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env sh + +source "$(git rev-parse --show-toplevel)/airbyte-integrations/bases/connector-acceptance-test/acceptance-test-docker.sh" diff --git a/airbyte-integrations/connectors/source-apple-search-ads/bootstrap.md b/airbyte-integrations/connectors/source-apple-search-ads/bootstrap.md new file mode 100644 index 000000000000..83a87921d30d --- /dev/null +++ b/airbyte-integrations/connectors/source-apple-search-ads/bootstrap.md @@ -0,0 +1,26 @@ + +## Base streams + +Apple Search Ads is a REST based API. Connector is implemented with the [Airbyte Low-Code CDK](https://docs.airbyte.com/connector-development/config-based/low-code-cdk-overview/) + +Connector has base streams including attributes about entities in the API (e.g: what campaigns, which adgroups, etc…), and all of them support full refresh only: +* [Campaigns](https://developer.apple.com/documentation/apple_search_ads/get_all_campaigns) +* [AdGroups](https://developer.apple.com/documentation/apple_search_ads/get_all_ad_groups) +* [Keywords](https://developer.apple.com/documentation/apple_search_ads/get_all_targeting_keywords_in_an_ad_group) + + +## Report streams + +Connector also has report streams including statistics about entities (e.g: how many spending on a campaign, how many clicks on a keyword, etc...) which support incremental sync. + +* [Campaign-Level Report](https://developer.apple.com/documentation/apple_search_ads/get_campaign-level_reports) +* [Ad Group-Level Report](https://developer.apple.com/documentation/apple_search_ads/get__ad_group-level_reports) +* [Keyword-Level Report](https://developer.apple.com/documentation/apple_search_ads/get_keyword-level_reports) + + +Connector uses `start_date` config for initial reports sync and current date as an end date if this one is not explicitly set. + +At the moment, report streams are only set to the `DAILY` granularity (e.g: `campaigns_report_daily`, `adgroups_report_daily`, `keywords_report_daily`). + + +See [this](https://docs.airbyte.io/integrations/sources/apple-search-ads) link for the nuances about the connector. diff --git a/airbyte-integrations/connectors/source-apple-search-ads/build.gradle b/airbyte-integrations/connectors/source-apple-search-ads/build.gradle new file mode 100644 index 000000000000..96c13217906d --- /dev/null +++ b/airbyte-integrations/connectors/source-apple-search-ads/build.gradle @@ -0,0 +1,9 @@ +plugins { + id 'airbyte-python' + id 'airbyte-docker' + id 'airbyte-connector-acceptance-test' +} + +airbytePython { + moduleDirectory 'source_apple_search_ads' +} diff --git a/airbyte-integrations/connectors/source-apple-search-ads/integration_tests/__init__.py b/airbyte-integrations/connectors/source-apple-search-ads/integration_tests/__init__.py new file mode 100644 index 000000000000..1100c1c58cf5 --- /dev/null +++ b/airbyte-integrations/connectors/source-apple-search-ads/integration_tests/__init__.py @@ -0,0 +1,3 @@ +# +# Copyright (c) 2022 Airbyte, Inc., all rights reserved. +# diff --git a/airbyte-integrations/connectors/source-apple-search-ads/integration_tests/abnormal_state.json b/airbyte-integrations/connectors/source-apple-search-ads/integration_tests/abnormal_state.json new file mode 100644 index 000000000000..70f3c174f8f4 --- /dev/null +++ b/airbyte-integrations/connectors/source-apple-search-ads/integration_tests/abnormal_state.json @@ -0,0 +1,11 @@ +{ + "campaigns_report_daily": { + "date": "2999-11-06" + }, + "adgroups_report_daily": { + "date": "2999-11-06" + }, + "keywords_report_daily": { + "date": "2999-11-06" + } +} diff --git a/airbyte-integrations/connectors/source-apple-search-ads/integration_tests/acceptance.py b/airbyte-integrations/connectors/source-apple-search-ads/integration_tests/acceptance.py new file mode 100644 index 000000000000..9e6409236281 --- /dev/null +++ b/airbyte-integrations/connectors/source-apple-search-ads/integration_tests/acceptance.py @@ -0,0 +1,16 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + + +import pytest + +pytest_plugins = ("connector_acceptance_test.plugin",) + + +@pytest.fixture(scope="session", autouse=True) +def connector_setup(): + """This fixture is a placeholder for external resources that acceptance test might require.""" + # TODO: setup test dependencies if needed. otherwise remove the TODO comments + yield + # TODO: clean up test dependencies diff --git a/airbyte-integrations/connectors/source-apple-search-ads/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-apple-search-ads/integration_tests/configured_catalog.json new file mode 100644 index 000000000000..74c4977fc8ba --- /dev/null +++ b/airbyte-integrations/connectors/source-apple-search-ads/integration_tests/configured_catalog.json @@ -0,0 +1,79 @@ +{ + "streams": [ + { + "stream": { + "json_schema": {}, + "name": "campaigns", + "source_defined_primary_key": [["id"]], + "supported_sync_modes": ["full_refresh"] + }, + "destination_sync_mode": "overwrite", + "sync_mode": "full_refresh" + }, + { + "stream": { + "json_schema": {}, + "name": "adgroups", + "source_defined_primary_key": [["id"]], + "supported_sync_modes": ["full_refresh"] + }, + "destination_sync_mode": "overwrite", + "sync_mode": "full_refresh" + }, + { + "stream": { + "json_schema": {}, + "name": "keywords", + "source_defined_primary_key": [["id"]], + "supported_sync_modes": ["full_refresh"] + }, + "destination_sync_mode": "overwrite", + "sync_mode": "full_refresh" + }, + { + "stream": { + "default_cursor_field": ["date"], + "json_schema": {}, + "name": "campaigns_report_daily", + "source_defined_cursor": true, + "source_defined_primary_key": [["date"], ["campaignId"]], + "supported_sync_modes": [ + "full_refresh", + "incremental" + ] + }, + "destination_sync_mode": "append", + "sync_mode": "incremental" + }, + { + "stream": { + "default_cursor_field": ["date"], + "json_schema": {}, + "name": "adgroups_report_daily", + "source_defined_cursor": true, + "source_defined_primary_key": [["date"], ["adGroupId"]], + "supported_sync_modes": [ + "full_refresh", + "incremental" + ] + }, + "destination_sync_mode": "append", + "sync_mode": "incremental" + }, + { + "stream": { + "default_cursor_field": ["date"], + "json_schema": {}, + "name": "keywords_report_daily", + "source_defined_cursor": true, + "source_defined_primary_key": [["date"], ["keywordId"]], + "supported_sync_modes": [ + "full_refresh", + "incremental" + ] + }, + "destination_sync_mode": "append", + "sync_mode": "incremental" + } + ] +} diff --git a/airbyte-integrations/connectors/source-apple-search-ads/integration_tests/invalid_config.json b/airbyte-integrations/connectors/source-apple-search-ads/integration_tests/invalid_config.json new file mode 100644 index 000000000000..de58e3f23b7f --- /dev/null +++ b/airbyte-integrations/connectors/source-apple-search-ads/integration_tests/invalid_config.json @@ -0,0 +1,6 @@ +{ + "org_id": "wrongid", + "client_id": "aaaaaaaaaa", + "client_secret": "eyvbvubevxUIBVUYEUYB", + "start_date": "9999-99-99" +} diff --git a/airbyte-integrations/connectors/source-apple-search-ads/integration_tests/sample_config.json b/airbyte-integrations/connectors/source-apple-search-ads/integration_tests/sample_config.json new file mode 100644 index 000000000000..8489ea016b41 --- /dev/null +++ b/airbyte-integrations/connectors/source-apple-search-ads/integration_tests/sample_config.json @@ -0,0 +1,6 @@ +{ + "org_id": "REPLACEME", + "client_id": "REPLACEME", + "client_secret": "REPLACEME", + "start_date": "2022-11-11" +} diff --git a/airbyte-integrations/connectors/source-apple-search-ads/integration_tests/sample_state.json b/airbyte-integrations/connectors/source-apple-search-ads/integration_tests/sample_state.json new file mode 100644 index 000000000000..ad5af7e0dfb3 --- /dev/null +++ b/airbyte-integrations/connectors/source-apple-search-ads/integration_tests/sample_state.json @@ -0,0 +1,11 @@ +{ + "campaigns_report_daily": { + "date": "2022-11-09" + }, + "adgroups_report_daily": { + "date": "2022-11-09" + }, + "keywords_report_daily": { + "date": "2022-11-09" + } +} diff --git a/airbyte-integrations/connectors/source-apple-search-ads/main.py b/airbyte-integrations/connectors/source-apple-search-ads/main.py new file mode 100644 index 000000000000..8998f6bd4388 --- /dev/null +++ b/airbyte-integrations/connectors/source-apple-search-ads/main.py @@ -0,0 +1,13 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + + +import sys + +from airbyte_cdk.entrypoint import launch +from source_apple_search_ads import SourceAppleSearchAds + +if __name__ == "__main__": + source = SourceAppleSearchAds() + launch(source, sys.argv[1:]) diff --git a/airbyte-integrations/connectors/source-apple-search-ads/requirements.txt b/airbyte-integrations/connectors/source-apple-search-ads/requirements.txt new file mode 100644 index 000000000000..cc57334ef619 --- /dev/null +++ b/airbyte-integrations/connectors/source-apple-search-ads/requirements.txt @@ -0,0 +1,2 @@ +-e ../../bases/connector-acceptance-test +-e . diff --git a/airbyte-integrations/connectors/source-apple-search-ads/setup.py b/airbyte-integrations/connectors/source-apple-search-ads/setup.py new file mode 100644 index 000000000000..f4070c78949d --- /dev/null +++ b/airbyte-integrations/connectors/source-apple-search-ads/setup.py @@ -0,0 +1,29 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + + +from setuptools import find_packages, setup + +MAIN_REQUIREMENTS = [ + "airbyte-cdk~=0.1", +] + +TEST_REQUIREMENTS = [ + "pytest~=6.1", + "pytest-mock~=3.6.1", + "connector-acceptance-test", +] + +setup( + name="source_apple_search_ads", + description="Source implementation for Apple Search Ads.", + author="Airbyte", + author_email="contact@airbyte.io", + packages=find_packages(), + install_requires=MAIN_REQUIREMENTS, + package_data={"": ["*.json", "*.yaml", "schemas/*.json", "schemas/shared/*.json"]}, + extras_require={ + "tests": TEST_REQUIREMENTS, + }, +) diff --git a/airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/__init__.py b/airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/__init__.py new file mode 100644 index 000000000000..f0c12ace95ae --- /dev/null +++ b/airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/__init__.py @@ -0,0 +1,8 @@ +# +# Copyright (c) 2022 Airbyte, Inc., all rights reserved. +# + + +from .source import SourceAppleSearchAds + +__all__ = ["SourceAppleSearchAds"] diff --git a/airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/manifest.yaml b/airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/manifest.yaml new file mode 100644 index 000000000000..8df0dc8934a1 --- /dev/null +++ b/airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/manifest.yaml @@ -0,0 +1,218 @@ +version: "0.29.0" + +definitions: + requester: + type: HttpRequester + url_base: "https://api.searchads.apple.com/api/v4" + http_method: "GET" + authenticator: + type: "OAuthAuthenticator" + token_refresh_endpoint: "https://appleid.apple.com/auth/oauth2/token?grant_type=client_credentials&scope=searchadsorg" + client_id: "{{ config.client_id }}" + client_secret: "{{ config.client_secret }}" + refresh_token: "" + request_headers: + X-AP-Context: orgId={{ config.org_id }} + error_handler: + response_filters: + - http_codes: [ 500, 429 ] + action: RETRY + backoff_strategies: + - type: "ExponentialBackoffStrategy" + retriever: + requester: + $ref: "#/definitions/requester" + + base_stream: + selector: + extractor: + field_path: ["data"] + retriever: + $ref: "#/definitions/retriever" + record_selector: + $ref: "#/definitions/base_stream/selector" + paginator: + type: DefaultPaginator + pagination_strategy: + type: OffsetIncrement + page_size: 1000 + page_size_option: + inject_into: request_parameter + field_name: limit + page_token_option: + type: RequestOption + field_name: offset + inject_into: request_parameter + + campaigns_stream: + $ref: "#/definitions/base_stream" + $parameters: + name: "campaigns" + primary_key: "id" + path: "/campaigns" + + adgroups_stream: + $ref: "#/definitions/base_stream" + $parameters: + name: "adgroups" + primary_key: "id" + retriever: + $ref: "#/definitions/base_stream/retriever" + partition_router: + type: SubstreamPartitionRouter + parent_stream_configs: + - stream: "#/definitions/campaigns_stream" + parent_key: "id" + partition_field: "campaign_id" + requester: + $ref: "#/definitions/retriever/requester" + path: "/campaigns/{{ stream_slice.campaign_id }}/adgroups" + + keywords_stream: + $ref: "#/definitions/base_stream" + $parameters: + name: "keywords" + primary_key: "id" + retriever: + $ref: "#/definitions/base_stream/retriever" + partition_router: + type: SubstreamPartitionRouter + parent_stream_configs: + - stream: "#/definitions/adgroups_stream" + parent_key: "id" + partition_field: "adgroup_id" + requester: + $ref: "#/definitions/retriever/requester" + path: "/campaigns/{{ stream_slice.parent_slice.campaign_id }}/adgroups/{{ stream_slice.adgroup_id }}/targetingkeywords" + + incremental_sync: + type: "DatetimeBasedCursor" + start_datetime: "{{ config.start_date }}" + end_datetime: "{{ config.end_date or today_utc() }}" + datetime_format: "%Y-%m-%d" + step: "P1D" + cursor_granularity: "P1D" + cursor_field: "date" + lookback_window: "P30D" + datetime_format: "%Y-%m-%d" + + report_stream: + selector: + extractor: + field_path: ["data", "reportingDataResponse", "row"] + incremental_sync: + $ref: "#/definitions/incremental_sync" + retriever: + $ref: "#/definitions/retriever" + record_selector: + $ref: "#/definitions/report_stream/selector" + paginator: + type: NoPagination + requester: + $ref: "#/definitions/retriever/requester" + http_method: "POST" + request_body_json: + startTime: "{{ stream_slice.start_time }}" + endTime: "{{ stream_slice.end_time }}" + timeZone: "UTC" + granularity: "{{ parameters.granularity }}" + selector: '{ + "orderBy": [ + { + "field": "countryOrRegion", + "sortOrder": "ASCENDING" + } + ] + }' + groupBy: "[ 'countryOrRegion' ]" + + campaigns_report_daily_stream: + $ref: "#/definitions/report_stream" + $parameters: + name: "campaigns_report_daily" + granularity: "DAILY" + primary_key: [["date"], ["campaignId"]] + retriever: + $ref: "#/definitions/report_stream/retriever" + requester: + $ref: "#/definitions/report_stream/retriever/requester" + path: "/reports/campaigns" + transformations: + - type: AddFields + fields: + - path: [ "campaignId" ] + value: "{{ record.metadata.campaignId }}" + - path: [ "date" ] + value: "{{ stream_slice.start_time }}" + + adgroups_report_daily_stream: + $ref: "#/definitions/report_stream" + $parameters: + name: "adgroups_report_daily" + granularity: "DAILY" + primary_key: [["date"], ["adGroupId"]] + retriever: + $ref: "#/definitions/report_stream/retriever" + partition_router: + type: SubstreamPartitionRouter + parent_stream_configs: + - stream: "#/definitions/campaigns_stream" + parent_key: "id" + partition_field: "campaign_id" + requester: + $ref: "#/definitions/report_stream/retriever/requester" + path: "/reports/campaigns/{{ stream_slice.campaign_id }}/adgroups" + transformations: + - type: AddFields + fields: + - path: [ "adGroupId" ] + value: "{{ record.metadata.adGroupId }}" + - path: [ "date" ] + value: "{{ stream_slice.start_time }}" + + keywords_report_daily_stream: + $ref: "#/definitions/report_stream" + $parameters: + name: "keywords_report_daily" + granularity: "DAILY" + primary_key: [["date"], ["keywordId"]] + retriever: + $ref: "#/definitions/report_stream/retriever" + partition_router: + type: SubstreamPartitionRouter + parent_stream_configs: + - stream: "#/definitions/campaigns_stream" + parent_key: "id" + partition_field: "campaign_id" + requester: + $ref: "#/definitions/report_stream/retriever/requester" + path: "/reports/campaigns/{{ stream_slice.campaign_id }}/keywords" + error_handler: + $ref: "#/definitions/requester/error_handler" + response_filters: + - predicate: "{{ 'CAMPAIGN DOES NOT CONTAIN KEYWORD' in response.error.errors[0].message }}" + action: IGNORE + - http_codes: [ 500, 429 ] + action: RETRY + backoff_strategies: + - type: "ExponentialBackoffStrategy" + transformations: + - type: AddFields + fields: + - path: [ "keywordId" ] + value: "{{ record.metadata.keywordId }}" + - path: [ "date" ] + value: "{{ stream_slice.start_time }}" + + +streams: + - "#/definitions/campaigns_stream" + - "#/definitions/adgroups_stream" + - "#/definitions/keywords_stream" + - "#/definitions/campaigns_report_daily_stream" + - "#/definitions/adgroups_report_daily_stream" + - "#/definitions/keywords_report_daily_stream" + +check: + stream_names: + - "campaigns" diff --git a/airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/schemas/adgroups.json b/airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/schemas/adgroups.json new file mode 100644 index 000000000000..fc2ad9992c39 --- /dev/null +++ b/airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/schemas/adgroups.json @@ -0,0 +1,228 @@ +{ + "$schema": "http://json-schema.org/schema#", + "properties": { + "automatedKeywordsOptIn": { + "type": "boolean" + }, + "campaignId": { + "type": "integer" + }, + "cpaGoal": { + "type": "null" + }, + "creationTime": { + "type": "string" + }, + "defaultBidAmount": { + "properties": { + "amount": { + "type": "string" + }, + "currency": { + "type": "string" + } + }, + "type": "object" + }, + "deleted": { + "type": "boolean" + }, + "displayStatus": { + "type": "string" + }, + "endTime": { + "type": "null" + }, + "id": { + "type": "integer" + }, + "modificationTime": { + "type": "string" + }, + "name": { + "type": "string" + }, + "orgId": { + "type": "integer" + }, + "pricingModel": { + "type": "string" + }, + "servingStateReasons": { + "anyOf": [ + { + "type": "null" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ] + }, + "servingStatus": { + "type": "string" + }, + "startTime": { + "type": "string" + }, + "status": { + "type": "string" + }, + "targetingDimensions": { + "properties": { + "adminArea": { + "anyOf": [ + { + "type": "null" + }, + { + "properties": { + "included": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + ] + }, + "age": { + "anyOf": [ + { + "type": "null" + }, + { + "properties": { + "included": { + "items": { + "properties": { + "maxAge": { + "type": "null" + }, + "minAge": { + "type": [ + "integer", + "null" + ] + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + ] + }, + "appCategories": { + "properties": { + "excluded": { + "anyOf": [ + { + "type": "null" + }, + { + "items": { + "type": "integer" + }, + "type": "array" + } + ] + }, + "included": { + "anyOf": [ + { + "type": "null" + }, + { + "items": { + "type": "integer" + }, + "type": "array" + } + ] + } + }, + "type": "object" + }, + "appDownloaders": { + "properties": { + "excluded": { + "items": { + "type": "string" + }, + "type": "array" + }, + "included": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "country": { + "anyOf": [ + { + "type": "null" + }, + { + "properties": { + "included": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + ] + }, + "daypart": { + "type": "null" + }, + "deviceClass": { + "properties": { + "included": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "gender": { + "type": "null" + }, + "locality": { + "anyOf": [ + { + "type": "null" + }, + { + "properties": { + "included": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + ] + } + }, + "type": "object" + } + }, + "type": "object" +} diff --git a/airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/schemas/adgroups_report_daily.json b/airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/schemas/adgroups_report_daily.json new file mode 100644 index 000000000000..781cf003b924 --- /dev/null +++ b/airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/schemas/adgroups_report_daily.json @@ -0,0 +1,161 @@ +{ + "$schema": "http://json-schema.org/schema#", + "properties": { + "adGroupId": { + "type": "integer" + }, + "date": { + "type": "string" + }, + "granularity": { + "items": { + "properties": { + "avgCPA": { + "properties": { + "amount": { + "type": "string" + }, + "currency": { + "type": "string" + } + }, + "type": "object" + }, + "avgCPM": { + "properties": { + "amount": { + "type": "string" + }, + "currency": { + "type": "string" + } + }, + "type": "object" + }, + "avgCPT": { + "properties": { + "amount": { + "type": "string" + }, + "currency": { + "type": "string" + } + }, + "type": "object" + }, + "conversionRate": { + "type": "number" + }, + "date": { + "type": "string" + }, + "impressions": { + "type": "integer" + }, + "installs": { + "type": "integer" + }, + "latOffInstalls": { + "type": "integer" + }, + "latOnInstalls": { + "type": "integer" + }, + "localSpend": { + "properties": { + "amount": { + "type": "string" + }, + "currency": { + "type": "string" + } + }, + "type": "object" + }, + "newDownloads": { + "type": "integer" + }, + "redownloads": { + "type": "integer" + }, + "taps": { + "type": "integer" + }, + "ttr": { + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "metadata": { + "properties": { + "adGroupDisplayStatus": { + "type": "string" + }, + "adGroupId": { + "type": "integer" + }, + "adGroupName": { + "type": "string" + }, + "adGroupServingStateReasons": { + "type": "null" + }, + "adGroupServingStatus": { + "type": "string" + }, + "adGroupStatus": { + "type": "string" + }, + "automatedKeywordsOptIn": { + "type": "boolean" + }, + "campaignId": { + "type": "integer" + }, + "countryOrRegion": { + "type": "string" + }, + "cpaGoal": { + "type": "null" + }, + "defaultBidAmount": { + "properties": { + "amount": { + "type": "string" + }, + "currency": { + "type": "string" + } + }, + "type": "object" + }, + "deleted": { + "type": "boolean" + }, + "endTime": { + "type": "null" + }, + "modificationTime": { + "type": "string" + }, + "orgId": { + "type": "integer" + }, + "pricingModel": { + "type": "string" + }, + "startTime": { + "type": "string" + } + }, + "type": "object" + }, + "other": { + "type": "boolean" + } + }, + "type": "object" +} diff --git a/airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/schemas/campaigns.json b/airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/schemas/campaigns.json new file mode 100644 index 000000000000..1b439e3cb102 --- /dev/null +++ b/airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/schemas/campaigns.json @@ -0,0 +1,130 @@ +{ + "$schema": "http://json-schema.org/schema#", + "properties": { + "adChannelType": { + "type": "string" + }, + "adamId": { + "type": "integer" + }, + "billingEvent": { + "type": "string" + }, + "budgetAmount": { + "anyOf": [ + { + "type": "null" + }, + { + "properties": { + "amount": { + "type": "string" + }, + "currency": { + "type": "string" + } + }, + "type": "object" + } + ] + }, + "budgetOrders": { + "type": "array" + }, + "countriesOrRegions": { + "items": { + "type": "string" + }, + "type": "array" + }, + "countryOrRegionServingStateReasons": { + "type": "object" + }, + "creationTime": { + "type": "string" + }, + "dailyBudgetAmount": { + "properties": { + "amount": { + "type": "string" + }, + "currency": { + "type": "string" + } + }, + "type": "object" + }, + "deleted": { + "type": "boolean" + }, + "displayStatus": { + "type": "string" + }, + "endTime": { + "type": "null" + }, + "id": { + "type": "integer" + }, + "locInvoiceDetails": { + "properties": { + "billingContactEmail": { + "type": "string" + }, + "buyerEmail": { + "type": "string" + }, + "buyerName": { + "type": "string" + }, + "clientName": { + "type": [ + "null", + "string" + ] + }, + "orderNumber": { + "type": [ + "null", + "string" + ] + } + }, + "type": "object" + }, + "modificationTime": { + "type": "string" + }, + "name": { + "type": "string" + }, + "orgId": { + "type": "integer" + }, + "paymentModel": { + "type": "string" + }, + "sapinLawResponse": { + "type": "string" + }, + "servingStateReasons": { + "type": "null" + }, + "servingStatus": { + "type": "string" + }, + "startTime": { + "type": "string" + }, + "status": { + "type": "string" + }, + "supplySources": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" +} diff --git a/airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/schemas/campaigns_report_daily.json b/airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/schemas/campaigns_report_daily.json new file mode 100644 index 000000000000..f2eb3e02b9b1 --- /dev/null +++ b/airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/schemas/campaigns_report_daily.json @@ -0,0 +1,193 @@ +{ + "$schema": "http://json-schema.org/schema#", + "properties": { + "campaignId": { + "type": "integer" + }, + "date": { + "type": "string" + }, + "granularity": { + "items": { + "properties": { + "avgCPA": { + "properties": { + "amount": { + "type": "string" + }, + "currency": { + "type": "string" + } + }, + "type": "object" + }, + "avgCPM": { + "properties": { + "amount": { + "type": "string" + }, + "currency": { + "type": "string" + } + }, + "type": "object" + }, + "avgCPT": { + "properties": { + "amount": { + "type": "string" + }, + "currency": { + "type": "string" + } + }, + "type": "object" + }, + "conversionRate": { + "type": "number" + }, + "date": { + "type": "string" + }, + "impressions": { + "type": "integer" + }, + "installs": { + "type": "integer" + }, + "latOffInstalls": { + "type": "integer" + }, + "latOnInstalls": { + "type": "integer" + }, + "localSpend": { + "properties": { + "amount": { + "type": "string" + }, + "currency": { + "type": "string" + } + }, + "type": "object" + }, + "newDownloads": { + "type": "integer" + }, + "redownloads": { + "type": "integer" + }, + "taps": { + "type": "integer" + }, + "ttr": { + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "metadata": { + "properties": { + "adChannelType": { + "type": "string" + }, + "app": { + "properties": { + "adamId": { + "type": "integer" + }, + "appName": { + "type": "string" + } + }, + "type": "object" + }, + "billingEvent": { + "type": "string" + }, + "campaignId": { + "type": "integer" + }, + "campaignName": { + "type": "string" + }, + "campaignStatus": { + "type": "string" + }, + "countriesOrRegions": { + "items": { + "type": "string" + }, + "type": "array" + }, + "countryOrRegion": { + "type": "string" + }, + "countryOrRegionServingStateReasons": { + "type": "object" + }, + "dailyBudget": { + "properties": { + "amount": { + "type": "string" + }, + "currency": { + "type": "string" + } + }, + "type": "object" + }, + "deleted": { + "type": "boolean" + }, + "displayStatus": { + "type": "string" + }, + "modificationTime": { + "type": "string" + }, + "orgId": { + "type": "integer" + }, + "servingStateReasons": { + "type": "null" + }, + "servingStatus": { + "type": "string" + }, + "supplySources": { + "items": { + "type": "string" + }, + "type": "array" + }, + "totalBudget": { + "anyOf": [ + { + "type": "null" + }, + { + "properties": { + "amount": { + "type": "string" + }, + "currency": { + "type": "string" + } + }, + "type": "object" + } + ] + } + }, + "type": "object" + }, + "other": { + "type": "boolean" + } + }, + "type": "object" +} diff --git a/airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/schemas/keywords.json b/airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/schemas/keywords.json new file mode 100644 index 000000000000..d833278c222e --- /dev/null +++ b/airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/schemas/keywords.json @@ -0,0 +1,44 @@ +{ + "$schema": "http://json-schema.org/schema#", + "properties": { + "adGroupId": { + "type": "integer" + }, + "bidAmount": { + "properties": { + "amount": { + "type": "string" + }, + "currency": { + "type": "string" + } + }, + "type": "object" + }, + "campaignId": { + "type": "integer" + }, + "creationTime": { + "type": "string" + }, + "deleted": { + "type": "boolean" + }, + "id": { + "type": "integer" + }, + "matchType": { + "type": "string" + }, + "modificationTime": { + "type": "string" + }, + "status": { + "type": "string" + }, + "text": { + "type": "string" + } + }, + "type": "object" +} diff --git a/airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/schemas/keywords_report_daily.json b/airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/schemas/keywords_report_daily.json new file mode 100644 index 000000000000..0a37211243f2 --- /dev/null +++ b/airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/schemas/keywords_report_daily.json @@ -0,0 +1,181 @@ +{ + "$schema": "http://json-schema.org/schema#", + "properties": { + "date": { + "type": "string" + }, + "granularity": { + "items": { + "properties": { + "avgCPA": { + "properties": { + "amount": { + "type": "string" + }, + "currency": { + "type": "string" + } + }, + "type": "object" + }, + "avgCPT": { + "properties": { + "amount": { + "type": "string" + }, + "currency": { + "type": "string" + } + }, + "type": "object" + }, + "conversionRate": { + "type": "number" + }, + "date": { + "type": "string" + }, + "impressions": { + "type": "integer" + }, + "installs": { + "type": "integer" + }, + "latOffInstalls": { + "type": "integer" + }, + "latOnInstalls": { + "type": "integer" + }, + "localSpend": { + "properties": { + "amount": { + "type": "string" + }, + "currency": { + "type": "string" + } + }, + "type": "object" + }, + "newDownloads": { + "type": "integer" + }, + "redownloads": { + "type": "integer" + }, + "taps": { + "type": "integer" + }, + "ttr": { + "type": "number" + } + }, + "type": "object" + }, + "type": "array" + }, + "insights": { + "properties": { + "bidRecommendation": { + "properties": { + "bidMax": { + "anyOf": [ + { + "type": "null" + }, + { + "properties": { + "amount": { + "type": "string" + }, + "currency": { + "type": "string" + } + }, + "type": "object" + } + ] + }, + "bidMin": { + "anyOf": [ + { + "type": "null" + }, + { + "properties": { + "amount": { + "type": "string" + }, + "currency": { + "type": "string" + } + }, + "type": "object" + } + ] + } + }, + "type": "object" + } + }, + "type": "object" + }, + "keywordId": { + "type": "integer" + }, + "metadata": { + "properties": { + "adGroupDeleted": { + "type": "boolean" + }, + "adGroupId": { + "type": "integer" + }, + "adGroupName": { + "type": "string" + }, + "bidAmount": { + "properties": { + "amount": { + "type": "string" + }, + "currency": { + "type": "string" + } + }, + "type": "object" + }, + "countryOrRegion": { + "type": "string" + }, + "deleted": { + "type": "boolean" + }, + "keyword": { + "type": "string" + }, + "keywordDisplayStatus": { + "type": "string" + }, + "keywordId": { + "type": "integer" + }, + "keywordStatus": { + "type": "string" + }, + "matchType": { + "type": "string" + }, + "modificationTime": { + "type": "string" + } + }, + "type": "object" + }, + "other": { + "type": "boolean" + } + }, + "type": "object" +} diff --git a/airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/source.py b/airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/source.py new file mode 100644 index 000000000000..890284d4c94b --- /dev/null +++ b/airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/source.py @@ -0,0 +1,18 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + +from airbyte_cdk.sources.declarative.yaml_declarative_source import YamlDeclarativeSource + +""" +This file provides the necessary constructs to interpret a provided declarative YAML configuration file into +source connector. + +WARNING: Do not modify this file. +""" + + +# Declarative Source +class SourceAppleSearchAds(YamlDeclarativeSource): + def __init__(self): + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/spec.yaml b/airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/spec.yaml new file mode 100644 index 000000000000..0fe5d3b502d7 --- /dev/null +++ b/airbyte-integrations/connectors/source-apple-search-ads/source_apple_search_ads/spec.yaml @@ -0,0 +1,45 @@ +documentationUrl: https://docs.airbyte.io/integrations/sources/apple-search-ads +connectionSpecification: + $schema: http://json-schema.org/draft-07/schema# + title: Apple Search Ads Spec + type: object + required: + - org_id + - client_id + - client_secret + - start_date + additionalProperties: true + properties: + org_id: + type: integer + title: Org Id + description: >- + The identifier of the organization that owns the campaign. Your Org Id is the same as your account in the Apple Search Ads UI. + client_id: + type: string + title: Client Id + description: >- + A user identifier for the token request. See here + airbyte_secret: true + client_secret: + type: string + title: Client Secret + description: >- + A string that authenticates the user’s setup request. See here + airbyte_secret: true + start_date: + type: string + title: Start Date + description: Start getting data from that date. + pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ + examples: + - "2020-01-01" + end_date: + type: string + title: End Date + description: Data is retrieved until that date (included) + pattern: ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ + examples: + - "2021-01-01" diff --git a/connectors.md b/connectors.md index ee439231fd08..a25d39ecb141 100644 --- a/connectors.md +++ b/connectors.md @@ -17,6 +17,7 @@ | **Amplitude** | Amplitude icon | Source | airbyte/source-amplitude:0.2.0 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/amplitude) | [connectors/source/amplitude](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/amplitude) | [source-amplitude](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-amplitude) | `fa9f58c6-2d03-4237-aaa4-07d75e0c1396` | | **Apify Dataset** | Apify Dataset icon | Source | airbyte/source-apify-dataset:0.1.11 | alpha | [docs](https://docs.airbyte.com/integrations/sources/apify-dataset) | [connectors/source/apify-dataset](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/apify-dataset) | [source-apify-dataset](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-apify-dataset) | `47f17145-fe20-4ef5-a548-e29b048adf84` | | **Appfollow** | Appfollow icon | Source | airbyte/source-appfollow:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/appfollow) | [connectors/source/appfollow](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/appfollow) | [source-appfollow](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-appfollow) | `b4375641-e270-41d3-9c20-4f9cecad87a8` | +| **Apple Search Ads** | Apple Search Ads icon | Source | airbyte/source-apple-search-ads:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/apple-search-ads) | [connectors/source/apple-search-ads](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/apple-search-ads) | [source-apple-search-ads](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-apple-search-ads) | `e59c8416-c2fa-4bd3-9e95-52677ea281c1` | | **AppsFlyer** | AppsFlyer icon | Source | airbyte/source-appsflyer:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/appsflyer) | [connectors/source/appsflyer](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/appsflyer) | [source-appsflyer](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-appsflyer) | `16447954-e6a8-4593-b140-43dea13bc457` | | **Appstore** | Appstore icon | Source | airbyte/source-appstore-singer:0.2.6 | alpha | [docs](https://docs.airbyte.com/integrations/sources/appstore) | [connectors/source/appstore-singer](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/appstore-singer) | [source-appstore-singer](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-appstore-singer) | `2af123bf-0aaf-4e0d-9784-cb497f23741a` | | **Asana** | Asana icon | Source | airbyte/source-asana:0.1.5 | beta | [docs](https://docs.airbyte.com/integrations/sources/asana) | [connectors/source/asana](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/asana) | [source-asana](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-asana) | `d0243522-dccf-4978-8ba0-37ed47a0bdbf` | diff --git a/docs/integrations/sources/apple-search-ads.md b/docs/integrations/sources/apple-search-ads.md new file mode 100644 index 000000000000..f1c6e9ea9580 --- /dev/null +++ b/docs/integrations/sources/apple-search-ads.md @@ -0,0 +1,50 @@ +# Apple Search Ads +This page contains the setup guide and reference information for the Apple Search Ads source connector. + +## Setup guide +### Step 1: Set up Apple Search Ads +1. With an administrator account, [create an API user role](https://developer.apple.com/documentation/apple_search_ads/implementing_oauth_for_the_apple_search_ads_api) from the Apple Search Ads UI. +2. Then [implement OAuth for your API user](https://developer.apple.com/documentation/apple_search_ads/implementing_oauth_for_the_apple_search_ads_api) in order to the required Client Secret and Client Id. + + +### Step 2: Set up the source connector in Airbyte +#### For Airbyte Open Source +1. Log in to your Airbyte Open Source account. +2. Click **Sources** and then click **+ New source**. +3. On the Set up the source page, select **Apple Search Ads** from the **Source type** dropdown. +4. Enter a name for your source. +5. For **Org Id**, enter the Id of your organization (found in the Apple Search Ads UI). +6. Enter the **Client ID** and the **Client Secret** from [Step 1](#step-1-set-up-apple-search-ads). +7. For **Start Date** and **End Date**, enter the date in YYYY-MM-DD format. For DAILY reports, the Start Date can't be earlier than 90 days from today. If the End Date field is left blank, Airbyte will replicate data to today. +8. Click **Set up source**. + +## Supported sync modes +The Apple Search Ads source connector supports the following [sync modes](https://docs.airbyte.com/cloud/core-concepts#connection-sync-modes): +* [Full Refresh - Overwrite](https://docs.airbyte.com/understanding-airbyte/glossary#full-refresh-sync) +* [Full Refresh - Append](https://docs.airbyte.com/understanding-airbyte/connections/full-refresh-append) +* [Incremental - Append](https://docs.airbyte.com/understanding-airbyte/connections/incremental-append) +* [Incremental - Deduped History](https://docs.airbyte.com/understanding-airbyte/connections/incremental-deduped-history) + +## Supported Streams +The Apple Ads source connector supports the following streams. For more information, see the [Apple Search Ads API](https://developer.apple.com/documentation/apple_search_ads). + +### Base streams +- [campaigns](https://developer.apple.com/documentation/apple_search_ads/get_all_campaigns) +- [adgroups](https://developer.apple.com/documentation/apple_search_ads/get_all_ad_groups) +- [keywords](https://developer.apple.com/documentation/apple_search_ads/get_all_targeting_keywords_in_an_ad_group) + +### Report Streams +- [campaigns_report_daily](https://developer.apple.com/documentation/apple_search_ads/get_campaign-level_reports) +- [adgroups_report_daily](https://developer.apple.com/documentation/apple_search_ads/get__ad_group-level_reports) +- [keywords_report_daily](https://developer.apple.com/documentation/apple_search_ads/get_keyword-level_reports) + +### Report aggregation +The Apple Search Ads currently offers [aggregation](https://developer.apple.com/documentation/apple_search_ads/reportingrequest) at hourly, daily, weekly, or monthly level. + +However, at this moment and as indicated in the stream names, the connector only offers data with daily aggregation. + + +## Changelog +| Version | Date | Pull Request | Subject | +| :------ |:-----------|:--------------------------------------------------------|:-------------------------------------------------------------------------------------| +| 0.1.0 | 2022-11-17 | [19557](https://github.com/airbytehq/airbyte/pull/19557) | Initial release with campaigns, adgroups & keywords streams (base and daily reports) | From f5b644ce27a14fb24a6677478c494029c89e79d3 Mon Sep 17 00:00:00 2001 From: btkcodedev Date: Wed, 19 Apr 2023 00:49:57 +0530 Subject: [PATCH 116/187] =?UTF-8?q?=F0=9F=8E=89=20New=20Source:=20Aircall?= =?UTF-8?q?=20[Low=20code=20CDK]=20(#25240)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Initial Commit * fix sample config * change date_from to start_date * optimize retriever method * paginate records * fix formating * auto-bump connector version --------- Co-authored-by: marcosmarxm Co-authored-by: Octavia Squidington III --- .../src/main/resources/icons/aircall.svg | 1 + .../src/main/resources/seed/oss_catalog.json | 47 ++++ .../resources/seed/source_definitions.yaml | 8 + .../src/main/resources/seed/source_specs.yaml | 35 +++ .../connectors/source-aircall/.dockerignore | 6 + .../connectors/source-aircall/Dockerfile | 38 +++ .../connectors/source-aircall/README.md | 82 ++++++ .../connectors/source-aircall/__init__.py | 3 + .../source-aircall/acceptance-test-config.yml | 38 +++ .../source-aircall/acceptance-test-docker.sh | 3 + .../connectors/source-aircall/build.gradle | 9 + .../integration_tests/__init__.py | 3 + .../integration_tests/abnormal_state.json | 16 ++ .../integration_tests/acceptance.py | 16 ++ .../integration_tests/configured_catalog.json | 85 ++++++ .../integration_tests/expected_records.jsonl | 2 + .../integration_tests/invalid_config.json | 5 + .../integration_tests/sample_config.json | 5 + .../integration_tests/sample_state.json | 9 + .../connectors/source-aircall/main.py | 13 + .../source-aircall/requirements.txt | 2 + .../connectors/source-aircall/setup.py | 29 ++ .../source-aircall/source_aircall/__init__.py | 8 + .../source_aircall/manifest.yaml | 184 +++++++++++++ .../source_aircall/schemas/calls.json | 250 ++++++++++++++++++ .../source_aircall/schemas/company.json | 17 ++ .../source_aircall/schemas/contacts.json | 69 +++++ .../source_aircall/schemas/numbers.json | 89 +++++++ .../source_aircall/schemas/tags.json | 20 ++ .../source_aircall/schemas/teams.json | 47 ++++ .../schemas/user_availablity.json | 14 + .../source_aircall/schemas/users.json | 38 +++ .../source_aircall/schemas/webhooks.json | 33 +++ .../source-aircall/source_aircall/source.py | 18 ++ .../source-aircall/source_aircall/spec.yaml | 29 ++ connectors.md | 1 + docs/integrations/sources/aircall.md | 73 +++++ 37 files changed, 1345 insertions(+) create mode 100644 airbyte-config-oss/init-oss/src/main/resources/icons/aircall.svg create mode 100644 airbyte-integrations/connectors/source-aircall/.dockerignore create mode 100644 airbyte-integrations/connectors/source-aircall/Dockerfile create mode 100644 airbyte-integrations/connectors/source-aircall/README.md create mode 100644 airbyte-integrations/connectors/source-aircall/__init__.py create mode 100644 airbyte-integrations/connectors/source-aircall/acceptance-test-config.yml create mode 100755 airbyte-integrations/connectors/source-aircall/acceptance-test-docker.sh create mode 100644 airbyte-integrations/connectors/source-aircall/build.gradle create mode 100644 airbyte-integrations/connectors/source-aircall/integration_tests/__init__.py create mode 100644 airbyte-integrations/connectors/source-aircall/integration_tests/abnormal_state.json create mode 100644 airbyte-integrations/connectors/source-aircall/integration_tests/acceptance.py create mode 100644 airbyte-integrations/connectors/source-aircall/integration_tests/configured_catalog.json create mode 100644 airbyte-integrations/connectors/source-aircall/integration_tests/expected_records.jsonl create mode 100644 airbyte-integrations/connectors/source-aircall/integration_tests/invalid_config.json create mode 100644 airbyte-integrations/connectors/source-aircall/integration_tests/sample_config.json create mode 100644 airbyte-integrations/connectors/source-aircall/integration_tests/sample_state.json create mode 100644 airbyte-integrations/connectors/source-aircall/main.py create mode 100644 airbyte-integrations/connectors/source-aircall/requirements.txt create mode 100644 airbyte-integrations/connectors/source-aircall/setup.py create mode 100644 airbyte-integrations/connectors/source-aircall/source_aircall/__init__.py create mode 100644 airbyte-integrations/connectors/source-aircall/source_aircall/manifest.yaml create mode 100644 airbyte-integrations/connectors/source-aircall/source_aircall/schemas/calls.json create mode 100644 airbyte-integrations/connectors/source-aircall/source_aircall/schemas/company.json create mode 100644 airbyte-integrations/connectors/source-aircall/source_aircall/schemas/contacts.json create mode 100644 airbyte-integrations/connectors/source-aircall/source_aircall/schemas/numbers.json create mode 100644 airbyte-integrations/connectors/source-aircall/source_aircall/schemas/tags.json create mode 100644 airbyte-integrations/connectors/source-aircall/source_aircall/schemas/teams.json create mode 100644 airbyte-integrations/connectors/source-aircall/source_aircall/schemas/user_availablity.json create mode 100644 airbyte-integrations/connectors/source-aircall/source_aircall/schemas/users.json create mode 100644 airbyte-integrations/connectors/source-aircall/source_aircall/schemas/webhooks.json create mode 100644 airbyte-integrations/connectors/source-aircall/source_aircall/source.py create mode 100644 airbyte-integrations/connectors/source-aircall/source_aircall/spec.yaml create mode 100644 docs/integrations/sources/aircall.md diff --git a/airbyte-config-oss/init-oss/src/main/resources/icons/aircall.svg b/airbyte-config-oss/init-oss/src/main/resources/icons/aircall.svg new file mode 100644 index 000000000000..50c45f181ab7 --- /dev/null +++ b/airbyte-config-oss/init-oss/src/main/resources/icons/aircall.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json index da0d151fae95..a47421977455 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json @@ -7766,6 +7766,53 @@ "public": true, "custom": false, "releaseStage": "alpha" + }, { + "sourceDefinitionId": "912eb6b7-a893-4a5b-b1c0-36ebbe2de8cd", + "name": "Aircall", + "dockerRepository": "airbyte/source-aircall", + "dockerImageTag": "0.1.0", + "documentationUrl": "https://docs.airbyte.com/integrations/sources/aircall", + "icon": "aircall.svg", + "sourceType": "api", + "spec": { + "documentationUrl": "https://docs.airbyte.com/integrations/sources/aircall", + "connectionSpecification": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Aircall Spec", + "type": "object", + "required": [ "api_id", "api_token", "start_date" ], + "additionalProperties": true, + "properties": { + "api_id": { + "title": "API ID", + "type": "string", + "description": "App ID found at settings https://dashboard.aircall.io/integrations/api-keys", + "airbyte_secret": true + }, + "api_token": { + "title": "API Token", + "type": "string", + "description": "App token found at settings (Ref- https://dashboard.aircall.io/integrations/api-keys)", + "airbyte_secret": true + }, + "start_date": { + "title": "Date-From Filter", + "type": "string", + "description": "Date time filter for incremental filter, Specify which date to extract from.", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}Z$", + "examples": [ "2022-03-01T00:00:00.000Z" ], + "format": "date-time" + } + } + }, + "supportsNormalization": false, + "supportsDBT": false, + "supported_destination_sync_modes": [ ] + }, + "tombstone": false, + "public": true, + "custom": false, + "releaseStage": "alpha" }, { "sourceDefinitionId": "14c6e7ea-97ed-4f5e-a7b5-25e9a80b8212", "name": "Airtable", diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml index 4d7f15cda5ff..7e2bdb3b519b 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml @@ -14,6 +14,14 @@ icon: adjust.svg sourceType: api releaseStage: alpha +- name: Aircall + sourceDefinitionId: 912eb6b7-a893-4a5b-b1c0-36ebbe2de8cd + dockerRepository: airbyte/source-aircall + dockerImageTag: 0.1.0 + documentationUrl: https://docs.airbyte.com/integrations/sources/aircall + icon: aircall.svg + sourceType: api + releaseStage: alpha - name: Airtable sourceDefinitionId: 14c6e7ea-97ed-4f5e-a7b5-25e9a80b8212 dockerRepository: airbyte/source-airtable diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml index 8967f30e2676..bc6cfd1877fa 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml @@ -178,6 +178,41 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] +- dockerImage: "airbyte/source-aircall:0.1.0" + spec: + documentationUrl: "https://docs.airbyte.com/integrations/sources/aircall" + connectionSpecification: + $schema: "http://json-schema.org/draft-07/schema#" + title: "Aircall Spec" + type: "object" + required: + - "api_id" + - "api_token" + - "start_date" + additionalProperties: true + properties: + api_id: + title: "API ID" + type: "string" + description: "App ID found at settings https://dashboard.aircall.io/integrations/api-keys" + airbyte_secret: true + api_token: + title: "API Token" + type: "string" + description: "App token found at settings (Ref- https://dashboard.aircall.io/integrations/api-keys)" + airbyte_secret: true + start_date: + title: "Date-From Filter" + type: "string" + description: "Date time filter for incremental filter, Specify which date\ + \ to extract from." + pattern: "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}Z$" + examples: + - "2022-03-01T00:00:00.000Z" + format: "date-time" + supportsNormalization: false + supportsDBT: false + supported_destination_sync_modes: [] - dockerImage: "airbyte/source-airtable:3.0.0" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/airtable" diff --git a/airbyte-integrations/connectors/source-aircall/.dockerignore b/airbyte-integrations/connectors/source-aircall/.dockerignore new file mode 100644 index 000000000000..a9ca20b1887d --- /dev/null +++ b/airbyte-integrations/connectors/source-aircall/.dockerignore @@ -0,0 +1,6 @@ +* +!Dockerfile +!main.py +!source_aircall +!setup.py +!secrets diff --git a/airbyte-integrations/connectors/source-aircall/Dockerfile b/airbyte-integrations/connectors/source-aircall/Dockerfile new file mode 100644 index 000000000000..3a10c2a5eaa0 --- /dev/null +++ b/airbyte-integrations/connectors/source-aircall/Dockerfile @@ -0,0 +1,38 @@ +FROM python:3.9.11-alpine3.15 as base + +# build and load all requirements +FROM base as builder +WORKDIR /airbyte/integration_code + +# upgrade pip to the latest version +RUN apk --no-cache upgrade \ + && pip install --upgrade pip \ + && apk --no-cache add tzdata build-base + + +COPY setup.py ./ +# install necessary packages to a temporary folder +RUN pip install --prefix=/install . + +# build a clean environment +FROM base +WORKDIR /airbyte/integration_code + +# copy all loaded and built libraries to a pure basic image +COPY --from=builder /install /usr/local +# add default timezone settings +COPY --from=builder /usr/share/zoneinfo/Etc/UTC /etc/localtime +RUN echo "Etc/UTC" > /etc/timezone + +# bash is installed for more convenient debugging. +RUN apk --no-cache add bash + +# copy payload code only +COPY main.py ./ +COPY source_aircall ./source_aircall + +ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" +ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] + +LABEL io.airbyte.version=0.1.0 +LABEL io.airbyte.name=airbyte/source-aircall diff --git a/airbyte-integrations/connectors/source-aircall/README.md b/airbyte-integrations/connectors/source-aircall/README.md new file mode 100644 index 000000000000..605e432fa276 --- /dev/null +++ b/airbyte-integrations/connectors/source-aircall/README.md @@ -0,0 +1,82 @@ +# Aircall Source + +This is the repository for the Aircall configuration based source connector. +For information about how to use this connector within Airbyte, see [the documentation](https://docs.airbyte.com/integrations/sources/aircall). + +## Local development + +#### Building via Gradle +You can also build the connector in Gradle. This is typically used in CI and not needed for your development workflow. + +To build using Gradle, from the Airbyte repository root, run: +``` +./gradlew :airbyte-integrations:connectors:source-aircall:build +``` + +#### Create credentials +**If you are a community contributor**, follow the instructions in the [documentation](https://docs.airbyte.com/integrations/sources/aircall) +to generate the necessary credentials. Then create a file `secrets/config.json` conforming to the `source_aircall/spec.yaml` file. +Note that any directory named `secrets` is gitignored across the entire Airbyte repo, so there is no danger of accidentally checking in sensitive information. +See `integration_tests/sample_config.json` for a sample config file. + +**If you are an Airbyte core member**, copy the credentials in Lastpass under the secret name `source aircall test creds` +and place them into `secrets/config.json`. + +### Locally running the connector docker image + +#### Build +First, make sure you build the latest Docker image: +``` +docker build . -t airbyte/source-aircall:dev +``` + +You can also build the connector image via Gradle: +``` +./gradlew :airbyte-integrations:connectors:source-aircall:airbyteDocker +``` +When building via Gradle, the docker image name and tag, respectively, are the values of the `io.airbyte.name` and `io.airbyte.version` `LABEL`s in +the Dockerfile. + +#### Run +Then run any of the connector commands as follows: +``` +docker run --rm airbyte/source-aircall:dev spec +docker run --rm -v $(pwd)/secrets:/secrets airbyte/source-aircall:dev check --config /secrets/config.json +docker run --rm -v $(pwd)/secrets:/secrets airbyte/source-aircall:dev discover --config /secrets/config.json +docker run --rm -v $(pwd)/secrets:/secrets -v $(pwd)/integration_tests:/integration_tests airbyte/source-aircall:dev read --config /secrets/config.json --catalog /integration_tests/configured_catalog.json +``` +## Testing + +#### Acceptance Tests +Customize `acceptance-test-config.yml` file to configure tests. See [Connector Acceptance Tests](https://docs.airbyte.com/connector-development/testing-connectors/connector-acceptance-tests-reference) for more information. +If your connector requires to create or destroy resources for use during acceptance tests create fixtures for it and place them inside integration_tests/acceptance.py. + +To run your integration tests with Docker, run: +``` +./acceptance-test-docker.sh +``` + +### Using gradle to run tests +All commands should be run from airbyte project root. +To run unit tests: +``` +./gradlew :airbyte-integrations:connectors:source-aircall:unitTest +``` +To run acceptance and custom integration tests: +``` +./gradlew :airbyte-integrations:connectors:source-aircall:integrationTest +``` + +## Dependency Management +All of your dependencies should go in `setup.py`, NOT `requirements.txt`. The requirements file is only used to connect internal Airbyte dependencies in the monorepo for local development. +We split dependencies between two groups, dependencies that are: +* required for your connector to work need to go to `MAIN_REQUIREMENTS` list. +* required for the testing need to go to `TEST_REQUIREMENTS` list + +### Publishing a new version of the connector +You've checked out the repo, implemented a million dollar feature, and you're ready to share your changes with the world. Now what? +1. Make sure your changes are passing unit and integration tests. +1. Bump the connector version in `Dockerfile` -- just increment the value of the `LABEL io.airbyte.version` appropriately (we use [SemVer](https://semver.org/)). +1. Create a Pull Request. +1. Pat yourself on the back for being an awesome contributor. +1. Someone from Airbyte will take a look at your PR and iterate with you to merge it into master. diff --git a/airbyte-integrations/connectors/source-aircall/__init__.py b/airbyte-integrations/connectors/source-aircall/__init__.py new file mode 100644 index 000000000000..c941b3045795 --- /dev/null +++ b/airbyte-integrations/connectors/source-aircall/__init__.py @@ -0,0 +1,3 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# diff --git a/airbyte-integrations/connectors/source-aircall/acceptance-test-config.yml b/airbyte-integrations/connectors/source-aircall/acceptance-test-config.yml new file mode 100644 index 000000000000..a9d65f94152b --- /dev/null +++ b/airbyte-integrations/connectors/source-aircall/acceptance-test-config.yml @@ -0,0 +1,38 @@ +# See [Connector Acceptance Tests](https://docs.airbyte.com/connector-development/testing-connectors/connector-acceptance-tests-reference) +# for more information about how to configure these tests +connector_image: airbyte/source-aircall:dev +acceptance_tests: + spec: + tests: + - spec_path: "source_aircall/spec.yaml" + connection: + tests: + - config_path: "secrets/config.json" + status: "succeed" + - config_path: "integration_tests/invalid_config.json" + status: "failed" + discovery: + tests: + - config_path: "secrets/config.json" + basic_read: + tests: + - config_path: "secrets/config.json" + configured_catalog_path: "integration_tests/configured_catalog.json" + empty_streams: + - name: "webhooks" + bypass_reason: "Sandbox account cannot seed this stream" + expect_records: + path: "integration_tests/expected_records.jsonl" + extra_fields: no + exact_order: no + extra_records: yes + incremental: + tests: + - config_path: "secrets/config.json" + configured_catalog_path: "integration_tests/configured_catalog.json" + future_state: + future_state_path: "integration_tests/abnormal_state.json" + full_refresh: + tests: + - config_path: "secrets/config.json" + configured_catalog_path: "integration_tests/configured_catalog.json" diff --git a/airbyte-integrations/connectors/source-aircall/acceptance-test-docker.sh b/airbyte-integrations/connectors/source-aircall/acceptance-test-docker.sh new file mode 100755 index 000000000000..b6d65deeccb4 --- /dev/null +++ b/airbyte-integrations/connectors/source-aircall/acceptance-test-docker.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env sh + +source "$(git rev-parse --show-toplevel)/airbyte-integrations/bases/connector-acceptance-test/acceptance-test-docker.sh" diff --git a/airbyte-integrations/connectors/source-aircall/build.gradle b/airbyte-integrations/connectors/source-aircall/build.gradle new file mode 100644 index 000000000000..8bd32f352847 --- /dev/null +++ b/airbyte-integrations/connectors/source-aircall/build.gradle @@ -0,0 +1,9 @@ +plugins { + id 'airbyte-python' + id 'airbyte-docker' + id 'airbyte-connector-acceptance-test' +} + +airbytePython { + moduleDirectory 'source_aircall' +} diff --git a/airbyte-integrations/connectors/source-aircall/integration_tests/__init__.py b/airbyte-integrations/connectors/source-aircall/integration_tests/__init__.py new file mode 100644 index 000000000000..c941b3045795 --- /dev/null +++ b/airbyte-integrations/connectors/source-aircall/integration_tests/__init__.py @@ -0,0 +1,3 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# diff --git a/airbyte-integrations/connectors/source-aircall/integration_tests/abnormal_state.json b/airbyte-integrations/connectors/source-aircall/integration_tests/abnormal_state.json new file mode 100644 index 000000000000..a568c6be9023 --- /dev/null +++ b/airbyte-integrations/connectors/source-aircall/integration_tests/abnormal_state.json @@ -0,0 +1,16 @@ +[ + { + "type": "STREAM", + "stream": { + "stream_state": { "created_at": "9999-04-12T18:13:36.000Z" }, + "stream_descriptor": { "name": "teams" } + } + }, + { + "type": "STREAM", + "stream": { + "stream_state": { "created_at": "9999-04-12T18:13:36.000Z" }, + "stream_descriptor": { "name": "numbers" } + } + } +] \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-aircall/integration_tests/acceptance.py b/airbyte-integrations/connectors/source-aircall/integration_tests/acceptance.py new file mode 100644 index 000000000000..9e6409236281 --- /dev/null +++ b/airbyte-integrations/connectors/source-aircall/integration_tests/acceptance.py @@ -0,0 +1,16 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + + +import pytest + +pytest_plugins = ("connector_acceptance_test.plugin",) + + +@pytest.fixture(scope="session", autouse=True) +def connector_setup(): + """This fixture is a placeholder for external resources that acceptance test might require.""" + # TODO: setup test dependencies if needed. otherwise remove the TODO comments + yield + # TODO: clean up test dependencies diff --git a/airbyte-integrations/connectors/source-aircall/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-aircall/integration_tests/configured_catalog.json new file mode 100644 index 000000000000..6af1ac52f359 --- /dev/null +++ b/airbyte-integrations/connectors/source-aircall/integration_tests/configured_catalog.json @@ -0,0 +1,85 @@ +{ + "streams": [ + { + "stream": { + "name": "calls", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "company", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "contacts", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "numbers", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"] + }, + "sync_mode": "incremental", + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "tags", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "teams", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"] + }, + "sync_mode": "incremental", + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "user_availablity", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "users", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "webhooks", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + } + ] +} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-aircall/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-aircall/integration_tests/expected_records.jsonl new file mode 100644 index 000000000000..06078ce3c6f0 --- /dev/null +++ b/airbyte-integrations/connectors/source-aircall/integration_tests/expected_records.jsonl @@ -0,0 +1,2 @@ +{"stream": "teams", "data": {"id": 111953,"name": "tester","direct_link": "https://api.aircall.io/v1/teams/111953","created_at": "2023-04-13T10:09:11.000Z","users": []}, "emitted_at": 1679051186833} +{"stream": "numbers", "data": {"id": 618658,"direct_link": "https://api.aircall.io/v1/numbers/618658","name": "Netherlands Ready To Go","digits": "+31 85 107 1104","country": "NL","time_zone": "Etc/UTC","open": true,"availability_status": "open","is_ivr": false,"live_recording_activated": false,"priority": null,"messages": {"welcome": "https://media-web.aircall.io/tracks/tts/languages/en/voices/Joanna/85a54589f4bac4767f07c3adb4d5bad49602c0e4.mp3","waiting": "https://media-web.aircall.io/tracks/library/bensound-retrosoul.mp3","ivr": "https://media-web.aircall.io/tts/languages/en/voices/Joanna/5b2401096b75861108e2ceb6ccc4e4c81e03b525.mp3","voicemail": "https://media-web.aircall.io/tracks/tts/languages/en/voices/Joanna/74ce97ac9772be646ccf5583b92be7248930af18.mp3","closed": "https://media-web.aircall.io/tracks/tts/languages/en/voices/Joanna/e5bc465c2b0595ade98a98500aa6851cb557a663.mp3","callback_later": "https://media-web.aircall.io/tts/languages/en/voices/Joanna/a04a676e475a50791cccbea7faa349dab88c4f05.mp3","unanswered_call": "https://media-web.aircall.io/tracks/tts/languages/en/voices/Joanna/74ce97ac9772be646ccf5583b92be7248930af18.mp3","after_hours": "https://media-web.aircall.io/tracks/tts/languages/en/voices/Joanna/e5bc465c2b0595ade98a98500aa6851cb557a663.mp3","ringing_tone": "https://media-web.aircall.io/tracks/ringing_tones/EU.mp3"},"created_at": "2023-04-13T10:11:55.000Z"}, "emitted_at": 1679051186833} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-aircall/integration_tests/invalid_config.json b/airbyte-integrations/connectors/source-aircall/integration_tests/invalid_config.json new file mode 100644 index 000000000000..4d2ee3d73086 --- /dev/null +++ b/airbyte-integrations/connectors/source-aircall/integration_tests/invalid_config.json @@ -0,0 +1,5 @@ +{ + "api_id": "Invalid_token", + "api_token": "Invalid_token", + "start_date": "9999-03-01T00:00:00.000Z" +} diff --git a/airbyte-integrations/connectors/source-aircall/integration_tests/sample_config.json b/airbyte-integrations/connectors/source-aircall/integration_tests/sample_config.json new file mode 100644 index 000000000000..4a9569ed5487 --- /dev/null +++ b/airbyte-integrations/connectors/source-aircall/integration_tests/sample_config.json @@ -0,0 +1,5 @@ +{ + "api_id": "XXXXXXXXXXXXXXXXXX", + "api_token": "YYYYYYYYYYYYYYYYYYYY", + "start_date": "2022-03-01T00:00:00.000Z" +} diff --git a/airbyte-integrations/connectors/source-aircall/integration_tests/sample_state.json b/airbyte-integrations/connectors/source-aircall/integration_tests/sample_state.json new file mode 100644 index 000000000000..48e215dc8a08 --- /dev/null +++ b/airbyte-integrations/connectors/source-aircall/integration_tests/sample_state.json @@ -0,0 +1,9 @@ +[ + { + "type": "STREAM", + "stream": { + "stream_state": { "created_at": "2023-04-12T18:13:36.000Z" }, + "stream_descriptor": { "name": "teams" } + } + } +] \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-aircall/main.py b/airbyte-integrations/connectors/source-aircall/main.py new file mode 100644 index 000000000000..ff8cceaf862c --- /dev/null +++ b/airbyte-integrations/connectors/source-aircall/main.py @@ -0,0 +1,13 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + + +import sys + +from airbyte_cdk.entrypoint import launch +from source_aircall import SourceAircall + +if __name__ == "__main__": + source = SourceAircall() + launch(source, sys.argv[1:]) diff --git a/airbyte-integrations/connectors/source-aircall/requirements.txt b/airbyte-integrations/connectors/source-aircall/requirements.txt new file mode 100644 index 000000000000..cc57334ef619 --- /dev/null +++ b/airbyte-integrations/connectors/source-aircall/requirements.txt @@ -0,0 +1,2 @@ +-e ../../bases/connector-acceptance-test +-e . diff --git a/airbyte-integrations/connectors/source-aircall/setup.py b/airbyte-integrations/connectors/source-aircall/setup.py new file mode 100644 index 000000000000..658ef0d53c58 --- /dev/null +++ b/airbyte-integrations/connectors/source-aircall/setup.py @@ -0,0 +1,29 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + + +from setuptools import find_packages, setup + +MAIN_REQUIREMENTS = [ + "airbyte-cdk~=0.1", +] + +TEST_REQUIREMENTS = [ + "pytest~=6.2", + "pytest-mock~=3.6.1", + "connector-acceptance-test", +] + +setup( + name="source_aircall", + description="Source implementation for Aircall.", + author="Airbyte", + author_email="contact@airbyte.io", + packages=find_packages(), + install_requires=MAIN_REQUIREMENTS, + package_data={"": ["*.json", "*.yaml", "schemas/*.json", "schemas/shared/*.json"]}, + extras_require={ + "tests": TEST_REQUIREMENTS, + }, +) diff --git a/airbyte-integrations/connectors/source-aircall/source_aircall/__init__.py b/airbyte-integrations/connectors/source-aircall/source_aircall/__init__.py new file mode 100644 index 000000000000..52c3492ac632 --- /dev/null +++ b/airbyte-integrations/connectors/source-aircall/source_aircall/__init__.py @@ -0,0 +1,8 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + + +from .source import SourceAircall + +__all__ = ["SourceAircall"] diff --git a/airbyte-integrations/connectors/source-aircall/source_aircall/manifest.yaml b/airbyte-integrations/connectors/source-aircall/source_aircall/manifest.yaml new file mode 100644 index 000000000000..8f3ded1c24ec --- /dev/null +++ b/airbyte-integrations/connectors/source-aircall/source_aircall/manifest.yaml @@ -0,0 +1,184 @@ +version: "0.29.0" + +definitions: + requester: + type: HttpRequester + url_base: "https://api.aircall.io/v1" + http_method: "GET" + authenticator: + type: BasicHttpAuthenticator + username: "{{ config['api_id'] }}" + password: "{{ config['api_token'] }}" + + record_retriever: + type: SimpleRetriever + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: ["{{ parameters.name }}"] + paginator: + type: "DefaultPaginator" + page_size_option: + type: "RequestOption" + inject_into: "request_parameter" + field_name: "{{ response['meta']['per_page'] }}" + pagination_strategy: + type: "PageIncrement" + page_size: 5 + page_token_option: + type: "RequestOption" + inject_into: "request_parameter" + field_name: "{{ response['meta']['page'] }}" + + calls_stream: + type: DeclarativeStream + $parameters: + name: "calls" + path: "/calls" + retriever: + $ref: "#/definitions/record_retriever" + requester: + $ref: "#/definitions/requester" + + company_stream: + type: DeclarativeStream + $parameters: + name: "company" + path: "/company" + retriever: + $ref: "#/definitions/record_retriever" + requester: + $ref: "#/definitions/requester" + + contacts_stream: + type: DeclarativeStream + $parameters: + name: "contacts" + path: "/contacts" + retriever: + $ref: "#/definitions/record_retriever" + requester: + $ref: "#/definitions/requester" + + numbers_stream: + type: DeclarativeStream + $parameters: + name: "numbers" + path: "/numbers" + retriever: + $ref: "#/definitions/record_retriever" + requester: + $ref: "#/definitions/requester" + incremental_sync: + type: DatetimeBasedCursor + cursor_field: "created_at" + datetime_format: "%Y-%m-%dT%H:%M:%S.%f%z" + cursor_granularity: "PT0.000001S" + lookback_window: "P31D" + start_datetime: + datetime: "{{ config['start_date'] }}" + datetime_format: "%Y-%m-%dT%H:%M:%S.%f%z" + end_datetime: + datetime: "{{ today_utc() }}" + datetime_format: "%Y-%m-%d" + step: "P1M" + primary_key: "id" + + tags_stream: + type: DeclarativeStream + $parameters: + name: "tags" + path: "/tags" + retriever: + $ref: "#/definitions/record_retriever" + requester: + $ref: "#/definitions/requester" + primary_key: "id" + + user_retriever: + type: SimpleRetriever + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: ["users"] + requester: + $ref: "#/definitions/requester" + + users_stream: + type: DeclarativeStream + retriever: + $ref: "#/definitions/user_retriever" + name: "users" + primary_key: "id" + $parameters: + path: "/users" + + user_availablity_stream: + type: DeclarativeStream + retriever: + $ref: "#/definitions/user_retriever" + name: "user_availablity" + primary_key: "id" + $parameters: + path: "/users/availabilities" + + teams_stream: + type: DeclarativeStream + $parameters: + name: "teams" + path: "/teams" + retriever: + $ref: "#/definitions/record_retriever" + requester: + $ref: "#/definitions/requester" + incremental_sync: + type: DatetimeBasedCursor + cursor_field: "created_at" + datetime_format: "%Y-%m-%dT%H:%M:%S.%f%z" + cursor_granularity: "PT0.000001S" + lookback_window: "P31D" + start_datetime: + datetime: "{{ config['start_date'] }}" + datetime_format: "%Y-%m-%dT%H:%M:%S.%f%z" + end_datetime: + datetime: "{{ today_utc() }}" + datetime_format: "%Y-%m-%d" + step: "P1M" + primary_key: "id" + + webhooks_stream: + type: DeclarativeStream + $parameters: + name: "webhooks" + path: "/webhooks" + retriever: + $ref: "#/definitions/record_retriever" + requester: + $ref: "#/definitions/requester" + primary_key: "id" + +streams: + - "#/definitions/calls_stream" + - "#/definitions/company_stream" + - "#/definitions/contacts_stream" + - "#/definitions/numbers_stream" + - "#/definitions/tags_stream" + - "#/definitions/user_availablity_stream" + - "#/definitions/users_stream" + - "#/definitions/teams_stream" + - "#/definitions/webhooks_stream" + +check: + type: CheckStream + stream_names: + - "calls" + - "company" + - "contacts" + - "numbers" + - "tags" + - "user_availablity" + - "users" + - "teams" + - "webhooks" diff --git a/airbyte-integrations/connectors/source-aircall/source_aircall/schemas/calls.json b/airbyte-integrations/connectors/source-aircall/source_aircall/schemas/calls.json new file mode 100644 index 000000000000..5cf4add84e68 --- /dev/null +++ b/airbyte-integrations/connectors/source-aircall/source_aircall/schemas/calls.json @@ -0,0 +1,250 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Calls Schema", + "additionalProperties": true, + "type": "object", + "properties": { + "id": { + "type": ["null", "number"] + }, + "country_code_a2": { + "type": ["null", "string"] + }, + "pricing_type": { + "type": ["null", "string"] + }, + "direct_link": { + "type": ["null", "string"] + }, + "direction": { + "type": ["null", "string"] + }, + "status": { + "type": ["null", "string"] + }, + "missed_call_reason": { + "type": ["null", "string"] + }, + "started_at": { + "type": ["null", "number"] + }, + "answered_at": { + "type": ["null", "number"] + }, + "ended_at": { + "type": ["null", "number"] + }, + "duration": { + "type": ["null", "number"] + }, + "voicemail": { + "type": ["null", "string"] + }, + "recording": { + "type": ["null", "string"] + }, + "asset": { + "type": ["null", "string"] + }, + "raw_digits": { + "type": ["null", "string"] + }, + "user": { + "type": ["null", "object"], + "properties": { + "id": { + "type": ["null", "number"] + }, + "direct_link": { + "type": ["null", "string"] + }, + "name": { + "type": ["null", "string"] + }, + "email": { + "type": ["null", "string"] + }, + "available": { + "type": ["null", "boolean"] + }, + "availability_status": { + "type": ["null", "string"] + }, + "created_at": { + "type": ["null", "string"] + }, + "time_zone": { + "type": ["null", "string"] + }, + "language": { + "type": ["null", "string"] + } + } + }, + "contact": { + "type": ["null", "string"] + }, + "archived": { + "type": ["null", "boolean"] + }, + "assigned_to": { + "type": ["null", "string"] + }, + "transferred_by": { + "type": ["null", "string"] + }, + "transferred_to": { + "type": ["null", "string"] + }, + "cost": { + "type": ["null", "string"] + }, + "number": { + "type": ["null", "object"], + "properties": { + "id": { + "type": ["null", "number"] + }, + "direct_link": { + "type": ["null", "string"] + }, + "name": { + "type": ["null", "string"] + }, + "digits": { + "type": ["null", "string"] + }, + "created_at": { + "type": ["null", "string"] + }, + "country": { + "type": ["null", "string"] + }, + "time_zone": { + "type": ["null", "string"] + }, + "open": { + "type": ["null", "boolean"] + }, + "availability_status": { + "type": ["null", "string"] + }, + "is_ivr": { + "type": ["null", "boolean"] + }, + "live_recording_activated": { + "type": ["null", "boolean"] + }, + "priority": { + "type": ["null", "string"] + } + } + }, + "comments": { + "type": ["null", "array"], + "items": { + "type": ["null", "object"], + "properties": { + "id": { + "type": ["null", "number"] + }, + "content": { + "type": ["null", "string"] + }, + "posted_at": { + "type": ["null", "number"] + }, + "posted_by": { + "type": ["null", "object"], + "properties": { + "id": { + "type": ["null", "number"] + }, + "direct_link": { + "type": ["null", "string"] + }, + "name": { + "type": ["null", "string"] + }, + "email": { + "type": ["null", "string"] + }, + "available": { + "type": ["null", "boolean"] + }, + "availability_status": { + "type": ["null", "string"] + }, + "created_at": { + "type": ["null", "string"] + } + } + } + } + } + }, + "tags": { + "type": ["null", "array"], + "items": { + "type": ["null", "object"], + "properties": { + "id": { + "type": ["null", "number"] + }, + "name": { + "type": ["null", "string"] + }, + "created_at": { + "type": ["null", "number"] + }, + "tagged_by": { + "type": ["null", "object"], + "properties": { + "id": { + "type": ["null", "number"] + }, + "direct_link": { + "type": ["null", "string"] + }, + "name": { + "type": ["null", "string"] + }, + "email": { + "type": ["null", "string"] + }, + "available": { + "type": ["null", "boolean"] + }, + "availability_status": { + "type": ["null", "string"] + }, + "created_at": { + "type": ["null", "string"] + } + } + } + } + } + }, + "teams": { + "type": ["null", "array"], + "items": { + "type": ["null", "object"], + "properties": { + "id": { + "type": ["null", "number"] + }, + "name": { + "type": ["null", "string"] + }, + "direct_link": { + "type": ["null", "string"] + }, + "created_at": { + "type": ["null", "string"] + } + } + } + } + } +} diff --git a/airbyte-integrations/connectors/source-aircall/source_aircall/schemas/company.json b/airbyte-integrations/connectors/source-aircall/source_aircall/schemas/company.json new file mode 100644 index 000000000000..c8a037577357 --- /dev/null +++ b/airbyte-integrations/connectors/source-aircall/source_aircall/schemas/company.json @@ -0,0 +1,17 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Company schema", + "additionalProperties": true, + "type": "object", + "properties": { + "name": { + "type": ["null", "string"] + }, + "users_count": { + "type": ["null", "number"] + }, + "numbers_count": { + "type": ["null", "number"] + } + } +} diff --git a/airbyte-integrations/connectors/source-aircall/source_aircall/schemas/contacts.json b/airbyte-integrations/connectors/source-aircall/source_aircall/schemas/contacts.json new file mode 100644 index 000000000000..ba2a57537de8 --- /dev/null +++ b/airbyte-integrations/connectors/source-aircall/source_aircall/schemas/contacts.json @@ -0,0 +1,69 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Contacts Schema", + "additionalProperties": true, + "type": "object", + "properties": { + "id": { + "type": ["null", "number"] + }, + "first_name": { + "type": ["null", "string"] + }, + "last_name": { + "type": ["null", "string"] + }, + "company_name": { + "type": ["null", "string"] + }, + "information": { + "type": ["null", "string"] + }, + "is_shared": { + "type": ["null", "boolean"] + }, + "direct_link": { + "type": ["null", "string"] + }, + "created_at": { + "type": ["null", "number"] + }, + "updated_at": { + "type": ["null", "number"] + }, + "phone_numbers": { + "type": ["null", "array"], + "items": { + "type": ["null", "object"], + "properties": { + "id": { + "type": ["null", "number"] + }, + "label": { + "type": ["null", "string"] + }, + "value": { + "type": ["null", "string"] + } + } + } + }, + "emails": { + "type": ["null", "array"], + "items": { + "type": ["null", "object"], + "properties": { + "id": { + "type": ["null", "number"] + }, + "label": { + "type": ["null", "string"] + }, + "value": { + "type": ["null", "string"] + } + } + } + } + } +} diff --git a/airbyte-integrations/connectors/source-aircall/source_aircall/schemas/numbers.json b/airbyte-integrations/connectors/source-aircall/source_aircall/schemas/numbers.json new file mode 100644 index 000000000000..4b5c7d3b5acf --- /dev/null +++ b/airbyte-integrations/connectors/source-aircall/source_aircall/schemas/numbers.json @@ -0,0 +1,89 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Numbers Schema", + "additionalProperties": true, + "type": "object", + "properties": { + "id": { + "type": ["null", "number"] + }, + "direct_link": { + "type": ["null", "string"] + }, + "name": { + "type": ["null", "string"] + }, + "digits": { + "type": ["null", "string"] + }, + "country": { + "type": ["null", "string"] + }, + "time_zone": { + "type": ["null", "string"] + }, + "open": { + "type": ["null", "boolean"] + }, + "availability_status": { + "type": ["null", "string"] + }, + "is_ivr": { + "type": ["null", "boolean"] + }, + "live_recording_activated": { + "type": ["null", "boolean"] + }, + "priority": { + "type": ["null", "string"] + }, + "messages": { + "type": ["null", "object"], + "properties": { + "welcome": { + "type": ["null", "string"] + }, + "waiting": { + "type": ["null", "string"] + }, + "ivr": { + "type": ["null", "string"] + }, + "voicemail": { + "type": ["null", "string"] + }, + "closed": { + "type": ["null", "string"] + }, + "callback_later": { + "type": ["null", "string"] + }, + "unanswered_call": { + "type": ["null", "string"] + }, + "after_hours": { + "type": ["null", "string"] + }, + "ringing_tone": { + "type": ["null", "string"] + } + } + }, + "wrap_up_time": { + "type": ["null", "number"] + }, + "available": { + "type": ["null", "boolean"] + }, + "language": { + "type": ["null", "string"] + }, + "email": { + "type": ["null", "string"] + }, + "created_at": { + "type": ["null", "string"], + "format": "date-time" + } + } +} diff --git a/airbyte-integrations/connectors/source-aircall/source_aircall/schemas/tags.json b/airbyte-integrations/connectors/source-aircall/source_aircall/schemas/tags.json new file mode 100644 index 000000000000..749d9cb162ea --- /dev/null +++ b/airbyte-integrations/connectors/source-aircall/source_aircall/schemas/tags.json @@ -0,0 +1,20 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Tags Schema", + "additionalProperties": true, + "type": "object", + "properties": { + "id": { + "type": ["null", "number"] + }, + "name": { + "type": ["null", "string"] + }, + "color": { + "type": ["null", "string"] + }, + "description": { + "type": ["null", "string"] + } + } +} diff --git a/airbyte-integrations/connectors/source-aircall/source_aircall/schemas/teams.json b/airbyte-integrations/connectors/source-aircall/source_aircall/schemas/teams.json new file mode 100644 index 000000000000..d289e3fcb5f9 --- /dev/null +++ b/airbyte-integrations/connectors/source-aircall/source_aircall/schemas/teams.json @@ -0,0 +1,47 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Teams", + "additionalProperties": true, + "type": "object", + "properties": { + "id": { + "type": ["null", "number"] + }, + "name": { + "type": ["null", "string"] + }, + "direct_link": { + "type": ["null", "string"] + }, + "created_at": { + "type": ["null", "string"], + "format": "date-time" + }, + "users": { + "type": ["null", "array"], + "items": { + "type": ["null", "object"], + "properties": { + "id": { + "type": ["null", "number"] + }, + "direct_link": { + "type": ["null", "string"] + }, + "name": { + "type": ["null", "string"] + }, + "email": { + "type": ["null", "string"] + }, + "created_at": { + "type": ["null", "string"] + }, + "time_zone": { + "type": ["null", "string"] + } + } + } + } + } +} diff --git a/airbyte-integrations/connectors/source-aircall/source_aircall/schemas/user_availablity.json b/airbyte-integrations/connectors/source-aircall/source_aircall/schemas/user_availablity.json new file mode 100644 index 000000000000..21cec6f94642 --- /dev/null +++ b/airbyte-integrations/connectors/source-aircall/source_aircall/schemas/user_availablity.json @@ -0,0 +1,14 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Users Availiablity", + "additionalProperties": true, + "type": "object", + "properties": { + "availability": { + "type": ["null", "string"] + }, + "id": { + "type": ["null", "number"] + } + } +} diff --git a/airbyte-integrations/connectors/source-aircall/source_aircall/schemas/users.json b/airbyte-integrations/connectors/source-aircall/source_aircall/schemas/users.json new file mode 100644 index 000000000000..37ed0386e22d --- /dev/null +++ b/airbyte-integrations/connectors/source-aircall/source_aircall/schemas/users.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Users", + "additionalProperties": true, + "type": "object", + "properties": { + "id": { + "type": ["null", "number"] + }, + "direct_link": { + "type": ["null", "string"] + }, + "name": { + "type": ["null", "string"] + }, + "email": { + "type": ["null", "string"] + }, + "available": { + "type": ["null", "boolean"] + }, + "availability_status": { + "type": ["null", "string"] + }, + "created_at": { + "type": ["null", "string"] + }, + "time_zone": { + "type": ["null", "string"] + }, + "language": { + "type": ["null", "string"] + }, + "wrap_up_time": { + "type": ["null", "number"] + } + } +} diff --git a/airbyte-integrations/connectors/source-aircall/source_aircall/schemas/webhooks.json b/airbyte-integrations/connectors/source-aircall/source_aircall/schemas/webhooks.json new file mode 100644 index 000000000000..8b77a5b897ae --- /dev/null +++ b/airbyte-integrations/connectors/source-aircall/source_aircall/schemas/webhooks.json @@ -0,0 +1,33 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Webhooks Schema", + "additionalProperties": true, + "type": "object", + "properties": { + "id": { + "type": ["null", "number"] + }, + "direct_link": { + "type": ["null", "string"] + }, + "created_at": { + "type": ["null", "string"], + "format": "date-time" + }, + "url": { + "type": ["null", "string"] + }, + "active": { + "type": ["null", "boolean"] + }, + "token": { + "type": ["null", "string"] + }, + "events": { + "type": ["null", "array"], + "items": { + "type": ["null", "string"] + } + } + } +} diff --git a/airbyte-integrations/connectors/source-aircall/source_aircall/source.py b/airbyte-integrations/connectors/source-aircall/source_aircall/source.py new file mode 100644 index 000000000000..e00620fcad53 --- /dev/null +++ b/airbyte-integrations/connectors/source-aircall/source_aircall/source.py @@ -0,0 +1,18 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + +from airbyte_cdk.sources.declarative.yaml_declarative_source import YamlDeclarativeSource + +""" +This file provides the necessary constructs to interpret a provided declarative YAML configuration file into +source connector. + +WARNING: Do not modify this file. +""" + + +# Declarative Source +class SourceAircall(YamlDeclarativeSource): + def __init__(self): + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-aircall/source_aircall/spec.yaml b/airbyte-integrations/connectors/source-aircall/source_aircall/spec.yaml new file mode 100644 index 000000000000..1b5045f5e024 --- /dev/null +++ b/airbyte-integrations/connectors/source-aircall/source_aircall/spec.yaml @@ -0,0 +1,29 @@ +documentationUrl: https://docs.airbyte.com/integrations/sources/aircall +connectionSpecification: + $schema: http://json-schema.org/draft-07/schema# + title: Aircall Spec + type: object + required: + - api_id + - api_token + - start_date + additionalProperties: true + properties: + api_id: + title: API ID + type: string + description: App ID found at settings https://dashboard.aircall.io/integrations/api-keys + airbyte_secret: true + api_token: + title: API Token + type: string + description: App token found at settings (Ref- https://dashboard.aircall.io/integrations/api-keys) + airbyte_secret: true + start_date: + title: Date-From Filter + type: string + description: Date time filter for incremental filter, Specify which date to extract from. + pattern: "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}Z$" + examples: + - "2022-03-01T00:00:00.000Z" + format: "date-time" diff --git a/connectors.md b/connectors.md index a25d39ecb141..564770c910db 100644 --- a/connectors.md +++ b/connectors.md @@ -8,6 +8,7 @@ | **ActiveCampaign** | ActiveCampaign icon | Source | airbyte/source-activecampaign:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/activecampaign) | [connectors/source/activecampaign](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/activecampaign) | [source-activecampaign](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-activecampaign) | `9f32dab3-77cb-45a1-9d33-347aa5fbe363` | | **Adjust** | Adjust icon | Source | airbyte/source-adjust:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/adjust) | [connectors/source/adjust](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/adjust) | [source-adjust](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-adjust) | `d3b7fa46-111b-419a-998a-d7f046f6d66d` | | **Aha** | Aha icon | Source | airbyte/source-aha:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/aha) | [connectors/source/aha](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/aha) | [source-aha](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-aha) | `81ca39dc-4534-4dd2-b848-b0cfd2c11fce` | +| **Aircall** | Aircall icon | Source | airbyte/source-aircall:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/aircall) | [connectors/source/aircall](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/aircall) | [source-aircall](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-aircall) | `912eb6b7-a893-4a5b-b1c0-36ebbe2de8cd` | | **Airtable** | Airtable icon | Source | airbyte/source-airtable:3.0.0 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/airtable) | [connectors/source/airtable](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/airtable) | [source-airtable](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-airtable) | `14c6e7ea-97ed-4f5e-a7b5-25e9a80b8212` | | **AlloyDB for PostgreSQL** | AlloyDB for PostgreSQL icon | Source | airbyte/source-alloydb:2.0.22 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/alloydb) | [connectors/source/alloydb](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/alloydb) | [source-alloydb](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-alloydb) | `1fa90628-2b9e-11ed-a261-0242ac120002` | | **Alpha Vantage** | Alpha Vantage icon | Source | airbyte/source-alpha-vantage:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/alpha-vantage) | [connectors/source/alpha-vantage](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/alpha-vantage) | [source-alpha-vantage](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-alpha-vantage) | `db385323-9333-4fec-bec3-9e0ca9326c90` | diff --git a/docs/integrations/sources/aircall.md b/docs/integrations/sources/aircall.md new file mode 100644 index 000000000000..ef3d016fae38 --- /dev/null +++ b/docs/integrations/sources/aircall.md @@ -0,0 +1,73 @@ +# Aircall + +This page contains the setup guide and reference information for the [Aircall](https://developer.aircall.io/api-references/#rest-api) source + +## Prerequisites + +Access Token (which acts as bearer token) is mandate for this connector to work, It could be seen at settings (ref - https://dashboard.aircall.io/integrations/api-keys). + +## Setup guide + +### Step 1: Set up Aircall connection + +- Get an Aircall access token via settings (ref - https://dashboard.aircall.io/integrations/api-keys) +- Setup params (All params are required) +- Available params + - api_id: The auto generated id + - api_token: Seen at the Aircall settings (ref - https://dashboard.aircall.io/integrations/api-keys) + - start_date: Date filter for eligible streams, enter + +## Step 2: Set up the Aircall connector in Airbyte + +### For Airbyte Cloud: + +1. [Log into your Airbyte Cloud](https://cloud.airbyte.io/workspaces) account. +2. In the left navigation bar, click **Sources**. In the top-right corner, click **+new source**. +3. On the Set up the source page, enter the name for the Aircall connector and select **Aircall** from the Source type dropdown. +4. Enter your `api_id, api_token and start_date`. +5. Click **Set up source**. + +### For Airbyte OSS: + +1. Navigate to the Airbyte Open Source dashboard. +2. Set the name for your source. +3. Enter your `api_id, api_token and start_date`. +5. Click **Set up source**. + +## Supported sync modes + +The Aircall source connector supports the following [sync modes](https://docs.airbyte.com/cloud/core-concepts#connection-sync-modes): + +| Feature | Supported? | +| :---------------------------- | :--------- | +| Full Refresh Sync | Yes | +| Incremental Sync | Yes | +| Replicate Incremental Deletes | No | +| SSL connection | Yes | +| Namespaces | No | + +## Supported Streams + +- calls +- company +- contacts +- numbers +- tags +- user_availablity +- users +- teams +- webhooks + +## API method example + +GET https://api.aircall.io/v1/numbers + +## Performance considerations + +Aircall [API reference](https://api.aircall.io/v1) has v1 at present. The connector as default uses v1. + +## Changelog + +| Version | Date | Pull Request | Subject | +| :------ | :--------- | :----------------------------------------------------- | :------------- | +| 0.1.0 | 2023-04-19 | [Init](https://github.com/airbytehq/airbyte/pull/)| Initial commit | \ No newline at end of file From 5d202595455124983460ca5bba923d6f1383cf41 Mon Sep 17 00:00:00 2001 From: Catherine Noll Date: Tue, 18 Apr 2023 20:34:25 +0100 Subject: [PATCH 117/187] Increase memory_limit for Amplitude (#25282) * Increase memory_limit for Amplitude * Automated Change --- .../init-oss/src/main/resources/seed/oss_catalog.json | 8 ++++++++ .../src/main/resources/seed/source_definitions.yaml | 5 +++++ 2 files changed, 13 insertions(+) diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json index a47421977455..79e505abe16c 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json @@ -9024,6 +9024,14 @@ "public": true, "custom": false, "releaseStage": "generally_available", + "resourceRequirements": { + "jobSpecific": [ { + "jobType": "sync", + "resourceRequirements": { + "memory_limit": "8Gi" + } + } ] + }, "allowedHosts": { "hosts": [ "amplitude.com", "analytics.eu.amplitude.com" ] } diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml index 7e2bdb3b519b..a4c3f49db761 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml @@ -108,6 +108,11 @@ icon: amplitude.svg sourceType: api releaseStage: generally_available + resourceRequirements: + jobSpecific: + - jobType: sync + resourceRequirements: + memory_limit: "8Gi" allowedHosts: hosts: - amplitude.com From 754e8ff22fe3245604d58c0fa60ad1f017612c7a Mon Sep 17 00:00:00 2001 From: Juan <80164312+jnr0790@users.noreply.github.com> Date: Tue, 18 Apr 2023 15:40:28 -0400 Subject: [PATCH 118/187] Adds 400 errors and reauth suggestion to Airtable doc (#25255) * Adds information about 400 and 401 errors that can be temporarily fixed by reauthing * Update docs/integrations/sources/airtable.md --- docs/integrations/sources/airtable.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/integrations/sources/airtable.md b/docs/integrations/sources/airtable.md index e79f3e10b0d8..6efdb3d6de10 100644 --- a/docs/integrations/sources/airtable.md +++ b/docs/integrations/sources/airtable.md @@ -25,9 +25,13 @@ Currently, this source connector works with `Standard` subscription plan only. ` 2. In the left navigation bar, click **Sources**. In the top-right corner, click **+new source**. 3. On the Set up the source page, enter the name for the Airtable connector and select **Airtable** from the Source type dropdown. 4. You can use OAuth or a Personal Access Token to authenticate your Airtable account. We recommend using OAuth for Airbyte Cloud. - - To authenticate using OAuth, select **OAuth2.0** from the Authentication dropdown click **Authenticate your Airtable account** to sign in with Airtable, select required workspaces you want to sync and authorize your account. + - To authenticate using OAuth, select **OAuth2.0** from the Authentication dropdown click **Authenticate your Airtable account** to sign in with Airtable, select required workspaces you want to sync and authorize your account. - To authenticate using a Personal Access Token, select **Personal Access Token** from the Authentication dropdown and enter the Access Token for your Airtable account. -5. Click **Set up source**. +:::info +When using OAuth, you may see a `400` or `401` error causing a failed sync. You can re-authenticate your Airtable connector to solve the issue temporarily. We are working on a permanent fix that you can follow [here](https://github.com/airbytehq/airbyte/issues/25278). +::: + +1. Click **Set up source**. From f87f43533a8d918d8323be5234e239ebda10d0ab Mon Sep 17 00:00:00 2001 From: Henri Blancke Date: Tue, 18 Apr 2023 15:56:55 -0400 Subject: [PATCH 119/187] =?UTF-8?q?=F0=9F=90=9B=20Source=20Jira:=20Add=20m?= =?UTF-8?q?issing=20types=20to=20issues=20json=20schema=20(#25275)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [FIX] add types Signed-off-by: Henri Blancke * [UPD] bump source-jira version Signed-off-by: Henri Blancke * [UPD] bump oss version Signed-off-by: Henri Blancke * auto-bump connector version --------- Signed-off-by: Henri Blancke Co-authored-by: Octavia Squidington III --- .../init-oss/src/main/resources/seed/oss_catalog.json | 2 +- .../init-oss/src/main/resources/seed/source_definitions.yaml | 2 +- .../init-oss/src/main/resources/seed/source_specs.yaml | 2 +- airbyte-integrations/connectors/source-jira/Dockerfile | 2 +- .../connectors/source-jira/source_jira/schemas/issues.json | 3 +++ connectors.md | 2 +- docs/integrations/sources/jira.md | 3 ++- 7 files changed, 10 insertions(+), 6 deletions(-) diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json index 79e505abe16c..c71bc15fae00 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json @@ -15789,7 +15789,7 @@ "sourceDefinitionId": "68e63de2-bb83-4c7e-93fa-a8a9051e3993", "name": "Jira", "dockerRepository": "airbyte/source-jira", - "dockerImageTag": "0.3.6", + "dockerImageTag": "0.3.7", "documentationUrl": "https://docs.airbyte.com/integrations/sources/jira", "icon": "jira.svg", "sourceType": "api", diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml index a4c3f49db761..4fe5b66cfd8f 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml @@ -1043,7 +1043,7 @@ - name: Jira sourceDefinitionId: 68e63de2-bb83-4c7e-93fa-a8a9051e3993 dockerRepository: airbyte/source-jira - dockerImageTag: 0.3.6 + dockerImageTag: 0.3.7 documentationUrl: https://docs.airbyte.com/integrations/sources/jira icon: jira.svg sourceType: api diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml index bc6cfd1877fa..b8e11bb9eec9 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml @@ -7399,7 +7399,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-jira:0.3.6" +- dockerImage: "airbyte/source-jira:0.3.7" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/jira" connectionSpecification: diff --git a/airbyte-integrations/connectors/source-jira/Dockerfile b/airbyte-integrations/connectors/source-jira/Dockerfile index b116362c569a..11a9c773233f 100644 --- a/airbyte-integrations/connectors/source-jira/Dockerfile +++ b/airbyte-integrations/connectors/source-jira/Dockerfile @@ -12,5 +12,5 @@ RUN pip install . ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=0.3.6 +LABEL io.airbyte.version=0.3.7 LABEL io.airbyte.name=airbyte/source-jira diff --git a/airbyte-integrations/connectors/source-jira/source_jira/schemas/issues.json b/airbyte-integrations/connectors/source-jira/source_jira/schemas/issues.json index e1f69d82c3c4..94011b490510 100644 --- a/airbyte-integrations/connectors/source-jira/source_jira/schemas/issues.json +++ b/airbyte-integrations/connectors/source-jira/source_jira/schemas/issues.json @@ -55,14 +55,17 @@ "readOnly": true }, "operations": { + "type": ["object", "null"], "description": "The operations that can be performed on the issue.", "readOnly": true }, "editmeta": { + "type": ["object", "null"], "description": "The metadata for the fields on the issue that can be amended.", "readOnly": true }, "changelog": { + "type": ["object", "null"], "description": "Details of changelogs associated with the issue.", "readOnly": true }, diff --git a/connectors.md b/connectors.md index 564770c910db..a1cbb8e57612 100644 --- a/connectors.md +++ b/connectors.md @@ -118,7 +118,7 @@ | **Intruder** | Intruder icon | Source | airbyte/source-intruder:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/intruder) | [connectors/source/intruder](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/intruder) | [source-intruder](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-intruder) | `3d15163b-11d8-412f-b808-795c9b2c3a3a` | | **Iterable** | Iterable icon | Source | airbyte/source-iterable:0.1.27 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/iterable) | [connectors/source/iterable](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/iterable) | [source-iterable](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-iterable) | `2e875208-0c0b-4ee4-9e92-1cb3156ea799` | | **Jenkins** | Jenkins icon | Source | farosai/airbyte-jenkins-source:0.1.23 | alpha | [docs](https://docs.airbyte.com/integrations/sources/jenkins) | [connectors/destination/airbyte-jenkins-source](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/destination/airbyte-jenkins-source) | [airbyte-jenkins-source](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/airbyte-jenkins-source) | `d6f73702-d7a0-4e95-9758-b0fb1af0bfba` | -| **Jira** | Jira icon | Source | airbyte/source-jira:0.3.6 | beta | [docs](https://docs.airbyte.com/integrations/sources/jira) | [connectors/source/jira](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/jira) | [source-jira](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-jira) | `68e63de2-bb83-4c7e-93fa-a8a9051e3993` | +| **Jira** | Jira icon | Source | airbyte/source-jira:0.3.7 | beta | [docs](https://docs.airbyte.com/integrations/sources/jira) | [connectors/source/jira](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/jira) | [source-jira](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-jira) | `68e63de2-bb83-4c7e-93fa-a8a9051e3993` | | **K6 Cloud** | K6 Cloud icon | Source | airbyte/source-k6-cloud:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/k6-cloud) | [connectors/source/k6-cloud](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/k6-cloud) | [source-k6-cloud](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-k6-cloud) | `e300ece7-b073-43a3-852e-8aff36a57f13` | | **Kafka** | Kafka icon | Source | airbyte/source-kafka:0.2.3 | alpha | [docs](https://docs.airbyte.com/integrations/sources/kafka) | [connectors/source/kafka](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/kafka) | [source-kafka](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-kafka) | `d917a47b-8537-4d0d-8c10-36a9928d4265` | | **Klarna** | Klarna icon | Source | airbyte/source-klarna:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/klarna) | [connectors/source/klarna](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/klarna) | [source-klarna](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-klarna) | `60c24725-00ae-490c-991d-55b78c3197e0` | diff --git a/docs/integrations/sources/jira.md b/docs/integrations/sources/jira.md index 3da831b5ef92..6050ae23357e 100644 --- a/docs/integrations/sources/jira.md +++ b/docs/integrations/sources/jira.md @@ -122,10 +122,11 @@ Check out common troubleshooting issues for the Jira connector on our Discourse The Jira connector should not run into Jira API limitations under normal usage. Please [create an issue](https://github.com/airbytehq/airbyte/issues) if you see any rate limit issues that are not automatically retried successfully. -## CHANGELOG +## CHANGELOG | Version | Date | Pull Request | Subject | |:--------|:-----------|:------------------------------------------------------------|:------------------------------------------------------------------------------------------------------------------------| +| 0.3.7 | 2023-04-18 | [\#25275](https://github.com/airbytehq/airbyte/pull/25275) | Add missing types to issues json schema | | 0.3.6 | 2023-04-10 | [\#24636](https://github.com/airbytehq/airbyte/pull/24636) | Removed Connector Domain Pattern from Spec | | 0.3.5 | 2023-04-05 | [\#24890](https://github.com/airbytehq/airbyte/pull/24890) | Fix streams "IssuePropertyKeys", "ScreenTabFields" | | 0.3.4 | 2023-02-14 | [\#23006](https://github.com/airbytehq/airbyte/pull/23006) | Remove caching for `Issues` stream | From 8945c253739955ce59a286d6a6c460854679193a Mon Sep 17 00:00:00 2001 From: Ella Rohm-Ensing Date: Tue, 18 Apr 2023 14:58:31 -0500 Subject: [PATCH 120/187] CAT tools/acceptance_test_config_migration: Make relatively configurable per migration, add (hacky) ability to run CAT tests locally for multiple connectors (#24377) * Pass argument along, add test that should pass and test that should fail * Add tests with additionalProperties * Set additionalproperties=false when not set| * Parametrize test cases * Make the behavior 'optional' * Fix parametrization for all combinations * Improve CI credentials README and rename param * Update naming to be clearer about columns only * record_has_unexpected_field > record_has_unexpected_column * Automated Change * Hacking the CAT dockerfile and run script to test my changes specifically * First crack at running CAT on all connectors * Write during instead of after all tests * Async-ify it * Add ability to define max concurrency * Write successes * ci_credentials: fix overwriting 'data' before getting nextPageToken * Adjustible num_semaphores, check to make sure it's an airbyte connector first * Automated Change * Make create_issues and create_prs more configurable, add issue for fail_on_extra_columns * Add ability to pass in sources as a list or from a txt file * Add logs to issue, make project nullable * Migrate multiple connectors * Add cli args * use ruamel.yaml to preserve ordering * Separate config loading from config migration * Add ability to pass in lists of sources to test. Sort output by exit codes. Fix max_concurrency flag * Default to testing only beta and GA connectors * Always write test output when available * Revert "Add cli args" This reverts commit b538a8c6961a15bdf4fa787e19ad56c85e4f428a. * Remove slash * Don't run on alpha connetors, handle older config style * Don't migrate to new format, preserve quotes and long lines * Automated Change * Update issue, don't run for alpha connectors * Automated Change * Add bypass for extra fields test * Add bypass for extra fields test * Rename run_tests script * Rename module * Update args usage, small changes * Refactor create_issues.py * Clean up run_tests.py * Sort out arg parsers * Pull out get_valid_definitions_from_args * Import definitions module instead of methods * Use config files to provide constants for each migration * Handle FileNotFoundError in create_issues.py, improve logging * Rename to migrations, reference name of folder via utils * Update readmes for migration modules, add script for getting outputs * Use tmp dir, correct path for issue reference * Fix bash script * Fix create command, pull out test results insertion * Update call to update_configuration * add precommit to requirements * Reorder README * README cleanup for test and create issues * README cleanup for create_prs and config_migration * More readmes! Readmes galore * allow_beta * Restore hacky changes to dockerfile and acceptance-test-docker * Handle 'other' release stages * Update readme * Remove TODO, add comments to shell script * format according to gradle * format * Fix formatting --------- Co-authored-by: marcosmarxm Co-authored-by: erohmensing --- .../README.md | 296 ++++++++++++++++++ .../__init__.py | 0 .../config_migration.py | 88 ++++++ .../create_issues.py | 116 +++++++ .../create_prs.py | 53 ++-- .../definitions.py | 53 ++++ .../fail_on_extra_columns/.gitignore | 2 + .../fail_on_extra_columns/README.md | 53 ++++ .../fail_on_extra_columns/config.py | 11 + .../fail_on_extra_columns/get_failures.sh | 22 ++ .../fail_on_extra_columns/issue.md.j2 | 31 ++ .../strictness_level_migration/README.md | 48 +++ .../strictness_level_migration/config.py | 11 + .../strictness_level_migration}/issue.md.j2 | 0 .../strictness_level_migration}/pr.md.j2 | 0 .../requirements.txt | 4 +- .../run_tests.py | 73 +++++ .../acceptance_test_config_migration/utils.py | 78 +++++ .../strictness_level_migration/README.md | 64 ---- .../config_migration.py | 58 ---- .../create_issues.py | 84 ----- .../strictness_level_migration/definitions.py | 21 -- 22 files changed, 909 insertions(+), 257 deletions(-) create mode 100644 airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/README.md rename airbyte-integrations/bases/connector-acceptance-test/tools/{strictness_level_migration => acceptance_test_config_migration}/__init__.py (100%) create mode 100644 airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/config_migration.py create mode 100644 airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/create_issues.py rename airbyte-integrations/bases/connector-acceptance-test/tools/{strictness_level_migration => acceptance_test_config_migration}/create_prs.py (74%) create mode 100644 airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/definitions.py create mode 100644 airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/migrations/fail_on_extra_columns/.gitignore create mode 100644 airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/migrations/fail_on_extra_columns/README.md create mode 100644 airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/migrations/fail_on_extra_columns/config.py create mode 100644 airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/migrations/fail_on_extra_columns/get_failures.sh create mode 100644 airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/migrations/fail_on_extra_columns/issue.md.j2 create mode 100644 airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/migrations/strictness_level_migration/README.md create mode 100644 airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/migrations/strictness_level_migration/config.py rename airbyte-integrations/bases/connector-acceptance-test/tools/{strictness_level_migration/templates => acceptance_test_config_migration/migrations/strictness_level_migration}/issue.md.j2 (100%) rename airbyte-integrations/bases/connector-acceptance-test/tools/{strictness_level_migration/templates => acceptance_test_config_migration/migrations/strictness_level_migration}/pr.md.j2 (100%) rename airbyte-integrations/bases/connector-acceptance-test/tools/{strictness_level_migration => acceptance_test_config_migration}/requirements.txt (85%) create mode 100644 airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/run_tests.py create mode 100644 airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/utils.py delete mode 100644 airbyte-integrations/bases/connector-acceptance-test/tools/strictness_level_migration/README.md delete mode 100644 airbyte-integrations/bases/connector-acceptance-test/tools/strictness_level_migration/config_migration.py delete mode 100644 airbyte-integrations/bases/connector-acceptance-test/tools/strictness_level_migration/create_issues.py delete mode 100644 airbyte-integrations/bases/connector-acceptance-test/tools/strictness_level_migration/definitions.py diff --git a/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/README.md b/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/README.md new file mode 100644 index 000000000000..399adf9ab52e --- /dev/null +++ b/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/README.md @@ -0,0 +1,296 @@ +# Tooling for automated migration of `acceptance-test-config.yml` files + +This directory contains scripts that can help us manage the migration of connectors' `acceptance-test-config.yml` files. + +## Setup +Before running these scripts you need to set up a local virtual environment in the **current directory**: +```bash +python -m venv .venv +source .venv/bin/activate +pip install -r requirements.txt +brew install gh +``` + +Then create a module to contain the information for your migration/issues etc.: +``` +mkdir migrations/ +touch migrations//__init__.py +touch migrations//config.py +``` + +Copy a config.py file from another migration and fill in the `MODULE_NAME` variable. The other variables +can be filled in when you use certain scripts. +```python +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + +from typing import Optional, List + +# SET THESE BEFORE USING THE SCRIPT +MODULE_NAME: str = "" +# GITHUB_PROJECT_NAME: Optional[str] = None +# COMMON_ISSUE_LABELS: List[str] = ["area/connectors", "team/connectors-python", "type/enhancement", "column-selection-sources"] +# ISSUE_TITLE: str = "Add undeclared columns to spec" +``` + +## Scripts + +The scripts perform operations on a set of connectors. + +### `run_tests.py`: Run CAT tests and save results by exit code + +#### What it does + +The script will run CAT on all connectors and report the results to `migrations//output` and classify the +results by exit code. + +TODO: Replace this process with Dagger + +#### Before running + +1. The tests will run on the `latest` version of CAT by default. To run the `dev` version of CAT, and select a specific +test, commit the hacky changes in [this commit](https://github.com/airbytehq/airbyte/pull/24377/commits/7d9fb1414911a512cd5d5ffafe2a384e8004fb1e). + +2. Give Docker a _lot_ of space to build all the connector images! + +3. Make sure you have the secrets downloaded from GSM for all of the connectors you want to run tests on. Please keep +in mind that secrets need to be re-uploaded for connectors with single-use Oauth tokens. + +#### How to run + +Typical usage: +``` +python run_tests.py +``` + +Full options: +``` +usage: run_tests.py [-h] --connectors [CONNECTORS ...] [--allow_alpha | --no-allow_alpha] [--allow_beta | --no-allow_beta] [--max_concurrency MAX_CONCURRENCY] + +Run connector acceptance tests for a list of connectors. + +options: + -h, --help show this help message and exit + --connectors [CONNECTORS ...] + A list of connectors (separated by spaces) to run a script on. (default: all connectors) + --allow_alpha, --no-allow_alpha + Whether to apply the change to alpha connectors, if they are included in the list of connectors. (default: False) + --allow_beta, --no-allow_beta + Whether to apply the change to bets connectors, if they are included in the list of connectors. (default: False) + --max_concurrency MAX_CONCURRENCY + The maximum number of acceptance tests that should happen at once. +``` + +### `create_issues.py`: Create issues in bulk + +#### What it does: +For each connector: +1. Generate an issue content (title, body, labels, project), using an `issue.md.j2` template +2. Find an already existing issue with the same title, if one already exists +3. Create the issue and return its url if it does not exist. + +Issues get created with the title according to `ISSUE_TITLE`. Labels are added according to `COMMON_ISSUE_LABELS`. Issues are added to the `GITHUB_PROJECT_NAME` project, if one is provided. + +#### Before running + +1. Update your config file to define the following variables: + + ```python + # + # Copyright (c) 2023 Airbyte, Inc., all rights reserved. + # + + from typing import Optional, List + + # SET THESE BEFORE USING THE SCRIPT + MODULE_NAME: str = "" + GITHUB_PROJECT_NAME: Optional[str] = "" + COMMON_ISSUE_LABELS: List[str] = ["", "", "..."] + ISSUE_TITLE: str = "" + ``` + Note that `ISSUE_TITLE` will be prepended with `Source :` in the actual created issue. + +2. Create a template for your issue: + + ```bash + touch migrations//issue.md.j2 + ``` + + If you need to fill more variables than are currently defined in the call to `template.render()` + in `create_issues.py`, edit the script to allow filling of that variable and define how it should be + filled. Please keep in mind the other migrations when you do this. + +3. Update the following line in the script so that it points to the config file from your migration: + + ```python + ## Update this line before running the script + from migrations. import config + ``` + +#### How to run: + +Typical usage (dry run): +``` +python create_issues.py --connectors +``` + +Typical usage (real execution): +``` +python create_issues.py --connectors --no-dry +``` + +Full options: +``` +usage: create_issues.py [-h] [-d | --dry | --no-dry] --connectors [CONNECTORS ...] [--allow_beta | --no-allow_beta] [--allow_alpha | --no-allow_alpha] + +Create issues for a list of connectors from a template. + +options: + -h, --help show this help message and exit + -d, --dry, --no-dry Whether the action performed is a dry run. In the case of a dry run, no git actions will be pushed to the remote. (default: True) + --connectors [CONNECTORS ...] + A list of connectors (separated by spaces) to run a script on. (default: all connectors) + --allow_beta, --no-allow_beta + Whether to apply the change to bets connectors, if they are included in the list of connectors. (default: False) + --allow_alpha, --no-allow_alpha + Whether to apply the change to alpha connectors, if they are included in the list of connectors. (default: False) +``` + + +### `config_migration.py`: Perform migrations on `acceptance-test-config.yml` files + +#### What it does: +For each connector: +1. Load the connector's `acceptance-test-config.yml` +2. Migrate the connector to the new format if this option was chosen +3. Apply the given migration to the `acceptance-test-config.yml` file + +Note that all changes happen on the working branch. + +#### Before running + +1. Create a method in `config_migration.py` to perform your migration on a given config. For this, + You can take inspiration from the existing `set_high_strictness_level` and `set_ignore_extra_columns` + migration methods. + +2. Update the following line to point to your new migration: + ```python + # Update this before running the script + MIGRATION_TO_RUN = + ``` + +#### How to run: + +Typical usage: +``` +python config_migration.py --connectors +``` + +Full options: +``` +usage: config_migration.py [-h] --connectors [CONNECTORS ...] [--allow_alpha | --no-allow_alpha] [--allow_beta | --no-allow_beta] [--migrate_from_legacy | --no-migrate_from_legacy] + +Migrate acceptance-test-config.yml files for a list of connectors. + +options: + -h, --help show this help message and exit + --connectors [CONNECTORS ...] + A list of connectors (separated by spaces) to run a script on. (default: all connectors) + --allow_alpha, --no-allow_alpha + Whether to apply the change to alpha connectors, if they are included in the list of connectors. (default: False) + --allow_beta, --no-allow_beta + Whether to apply the change to bets connectors, if they are included in the list of connectors. (default: False) + --migrate_from_legacy, --no-migrate_from_legacy + Whether to migrate config files from the legacy format before applying the migration. (default: False) +``` + + +### `create_prs.py`: Create a PR per connector that performs a config migration and pushes it + +## Create migration PRs for GA connectors (`create_prs.py`) + +#### What it does: +For each connector: +1. Create a branch and check it out +2. Locally apply the migration to `acceptance_test_config.yml` by calling `config_migration.py` +3. Commit and push the changes on this branch +4. Open a PR for this branch +5. Run a connector acceptance test on this branch by posting a `/test` comment on the PR + +An example of the PR it creates can be found [here](https://github.com/airbytehq/airbyte/pull/19136). + +PRs get created with the title according to `ISSUE_TITLE`. Labels are added according to `COMMON_ISSUE_LABELS`. PRs are added to the `GITHUB_PROJECT_NAME` project, if one is provided. + +#### Before running + +1. Update your config file to define the following variables: + + ```python + # + # Copyright (c) 2023 Airbyte, Inc., all rights reserved. + # + + from typing import Optional, List + + # SET THESE BEFORE USING THE SCRIPT + MODULE_NAME: str = "" + GITHUB_PROJECT_NAME: Optional[str] = "" + COMMON_ISSUE_LABELS: List[str] = ["", "", "..."] + ISSUE_TITLE: str = "" + ``` + Note that `ISSUE_TITLE` will be prepended with `Source :` in the actual created issue. + +2. Create a template for your PR description: + + ```bash + touch migrations//pr.md.j2 + ``` + + If you need to fill more variables than are currently defined in the call to `template.render()` + in `create_pr.py`, edit the script to allow filling of that variable and define how it should be + filled. Please keep in mind the other migrations when you do this. + +3. Update the following line in the `create_prs.py` so that it points to the config file from your migration: + + ```python + ## Update this line before running the script + from migrations. import config + ``` + +4. Ensure that your current git envronment is clean by (perhaps temorarily) committing changes. + + +#### How to run: + +Typical usage (dry run): +``` +python create_prs.py --connectors +``` + +Typical usage (real execution): +``` +python create_prs.py --connectors --no-dry +``` + +Full options: +``` +usage: create_prs.py [-h] [-d | --dry | --no-dry] --connectors [CONNECTORS ...] [--allow_alpha | --no-allow_alpha] [--allow_beta | --no-allow_beta] + +Create PRs for a list of connectors from a template. + +options: + -h, --help show this help message and exit + -d, --dry, --no-dry Whether the action performed is a dry run. In the case of a dry run, no git actions will be pushed to the remote. (default: True) + --connectors [CONNECTORS ...] + A list of connectors (separated by spaces) to run a script on. (default: all connectors) + --allow_alpha, --no-allow_alpha + Whether to apply the change to alpha connectors, if they are included in the list of connectors. (default: False) + --allow_beta, --no-allow_beta + Whether to apply the change to bets connectors, if they are included in the list of connectors. (default: False) +``` + +## Existing migrations +* `strictness_level_migration`: Migrates a connector from the old format to the new format, and adds enforcement of high strictness level. +* `fail_on_extra_columns`: Adds `fail_on_extra_columns: false` to connectors which fail the `Additional properties are not allowed` extra column validation. + Supports adding this parameter to configs in the old and new config format. \ No newline at end of file diff --git a/airbyte-integrations/bases/connector-acceptance-test/tools/strictness_level_migration/__init__.py b/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/__init__.py similarity index 100% rename from airbyte-integrations/bases/connector-acceptance-test/tools/strictness_level_migration/__init__.py rename to airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/__init__.py diff --git a/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/config_migration.py b/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/config_migration.py new file mode 100644 index 000000000000..e39d1bf02806 --- /dev/null +++ b/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/config_migration.py @@ -0,0 +1,88 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + +import argparse +import logging +from pathlib import Path +from typing import Callable + +import definitions +import utils +from connector_acceptance_test.config import Config +from ruamel.yaml import YAML + +yaml = YAML() +yaml.preserve_quotes = True +yaml.width = 150 + +parser = argparse.ArgumentParser(description="Migrate acceptance-test-config.yml files for a list of connectors.") +utils.add_connectors_param(parser) +utils.add_allow_alpha_param(parser) +utils.add_allow_beta_param(parser) +parser.add_argument( + "--migrate_from_legacy", + action=argparse.BooleanOptionalAction, + default=False, + help="Whether to migrate config files from the legacy format before applying the migration.", +) + + +def load_config(config_path: Path) -> Config: + with open(config_path, "r") as file: + config = yaml.load(file) + return config + + +def migrate_to_new_config_format(config: Config): + if Config.is_legacy(config): + return Config.migrate_legacy_to_current_config(config) + else: + logging.warning("The configuration is not in a legacy format.") + return config + + +def set_high_test_strictness_level(config): + if Config.is_legacy(config): + raise Exception("You can't set a strictness level on a legacy config. Please use the `--migrate_from_legacy` flag.") + config["test_strictness_level"] = "high" + for basic_read_test in config["acceptance_tests"].get("basic_read", {"tests": []})["tests"]: + basic_read_test.pop("configured_catalog_path", None) + return config + + +def set_ignore_extra_columns(config): + if Config.is_legacy(config): + for basic_read_test in config["tests"].get("basic_read"): + basic_read_test["fail_on_extra_columns"] = False + else: + for basic_read_test in config["acceptance_tests"].get("basic_read", {"tests": []})["tests"]: + basic_read_test["fail_on_extra_columns"] = False + return config + + +def write_new_config(new_config, output_path): + with open(output_path, "w") as output_file: + yaml.dump(new_config, output_file) + logging.info("Saved the configuration in its new format") + + +def update_configuration(config_path, migration: Callable, migrate_from_legacy: bool): + config_to_migrate = load_config(config_path) + if migrate_from_legacy: + config_to_migrate = migrate_to_new_config_format(config_to_migrate) + new_config = migration(config_to_migrate) + write_new_config(new_config, config_path) + logging.info(f"The configuration was successfully updated: {config_path}") + return config_path + + +if __name__ == "__main__": + args = parser.parse_args() + + # Update this before running the script + MIGRATION_TO_RUN = set_high_test_strictness_level + + for definition in utils.get_valid_definitions_from_args(args): + config_path = utils.acceptance_test_config_path(definitions.get_airbyte_connector_name_from_definition(definition)) + update_configuration(config_path, MIGRATION_TO_RUN, args.migrate_from_legacy) diff --git a/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/create_issues.py b/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/create_issues.py new file mode 100644 index 000000000000..9b77374a53d5 --- /dev/null +++ b/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/create_issues.py @@ -0,0 +1,116 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + + +import argparse +import json +import logging +import os +import subprocess +import tempfile +from typing import Any, Dict, Optional, Text + +import definitions +import utils +from jinja2 import Environment, FileSystemLoader + +# Update this line before running the script +from migrations.strictness_level_migration import config + +logging.basicConfig(level=logging.DEBUG) +environment = Environment(loader=FileSystemLoader(utils.MIGRATIONS_FOLDER)) + +parser = argparse.ArgumentParser(description="Create issues for a list of connectors from a template.") +utils.add_dry_param(parser) +utils.add_connectors_param(parser) +utils.add_allow_beta_param(parser) +utils.add_allow_alpha_param(parser) + + +def get_test_failure_logs(definition): + test_failure_logs = "" + if config.MODULE_NAME == "fail_on_extra_columns": + connector_technical_name = definitions.get_airbyte_connector_name_from_definition(definition) + + try: + with open(f"{utils.MIGRATIONS_FOLDER}/{config.MODULE_NAME}/test_failure_logs/{connector_technical_name}", "r") as f: + for line in f: + test_failure_logs += line + except FileNotFoundError: + logging.warning(f"Skipping creating an issue for {definition['name']} -- could not find an output file for it.") + return + + return test_failure_logs + + +def get_issue_content(source_definition) -> Optional[Dict[Text, Any]]: + issue_title = f"Source {source_definition['name']}: {config.ISSUE_TITLE}" + + template = environment.get_template(f"{config.MODULE_NAME}/issue.md.j2") + + # TODO: Make list of variables to render, and how to render them, configurable + issue_body = template.render( + connector_name=source_definition["name"], + release_stage=source_definition["releaseStage"], + test_failure_logs=get_test_failure_logs(source_definition), + ) + file_definition, issue_body_path = tempfile.mkstemp() + + with os.fdopen(file_definition, "w") as tmp: + tmp.write(issue_body) + + return {"title": issue_title, "body_file": issue_body_path, "labels": config.COMMON_ISSUE_LABELS, "project": config.GITHUB_PROJECT_NAME} + + +def get_existing_issues(issue_content): + list_command_arguments = ["gh", "issue", "list", "--state", "open", "--search", f"'{issue_content['title']}'", "--json", "url"] + list_existing_issue_process = subprocess.Popen(list_command_arguments, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + stdout, stderr = list_existing_issue_process.communicate() + existing_issues = json.loads(stdout.decode()) + return existing_issues + + +def create_command(issue_content): + create_command_arguments = [ + "gh", + "issue", + "create", + "--title", + issue_content["title"], + "--body-file", + issue_content["body_file"], + ] + if config.GITHUB_PROJECT_NAME: + create_command_arguments += ["--project", issue_content["project"]] + for label in issue_content["labels"]: + create_command_arguments += ["--label", label] + return create_command_arguments + + +def create_issue(source_definition, dry_run=True): + issue_content = get_issue_content(source_definition) + if not issue_content: + return + + existing_issues = get_existing_issues(issue_content) + if existing_issues: + logging.warning(f"An issue was already created for {source_definition['name']}: {existing_issues[0]}") + else: + if not dry_run: + process = subprocess.Popen(create_command(issue_content), stdout=subprocess.PIPE, stderr=subprocess.PIPE) + stdout, stderr = process.communicate() + if stderr: + logging.error(stderr.decode()) + else: + created_issue_url = stdout.decode() + logging.info(f"Created issue for {source_definition['name']}: {created_issue_url}") + else: + logging.info(f"[DRY RUN]: {' '.join(create_command(issue_content))}") + os.remove(issue_content["body_file"]) + + +if __name__ == "__main__": + args = parser.parse_args() + for definition in utils.get_valid_definitions_from_args(args): + create_issue(definition, dry_run=args.dry) diff --git a/airbyte-integrations/bases/connector-acceptance-test/tools/strictness_level_migration/create_prs.py b/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/create_prs.py similarity index 74% rename from airbyte-integrations/bases/connector-acceptance-test/tools/strictness_level_migration/create_prs.py rename to airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/create_prs.py index f05e57351297..94118ccad780 100644 --- a/airbyte-integrations/bases/connector-acceptance-test/tools/strictness_level_migration/create_prs.py +++ b/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/create_prs.py @@ -8,38 +8,33 @@ import os import subprocess import tempfile -from pathlib import Path -from config_migration import migrate_configuration -from create_issues import COMMON_ISSUE_LABELS as COMMON_PR_LABELS -from create_issues import GITHUB_PROJECT_NAME -from definitions import GA_DEFINITIONS +import definitions +import utils +from config_migration import set_high_test_strictness_level, update_configuration from git import Repo from jinja2 import Environment, FileSystemLoader -CONNECTORS_DIRECTORY = "../../../../connectors" +# Update this before running the script +from migrations.strictness_level_migration import config + REPO_ROOT = "../../../../../" AIRBYTE_REPO = Repo(REPO_ROOT) -environment = Environment(loader=FileSystemLoader("./templates/")) -PR_TEMPLATE = environment.get_template("pr.md.j2") - -parser = argparse.ArgumentParser( - description="Create PRs for migration of GA connectors to high test strictness level in connector acceptance test" -) -parser.add_argument("-d", "--dry", default=True) +environment = Environment(loader=FileSystemLoader(utils.MIGRATIONS_FOLDER)) +PR_TEMPLATE = environment.get_template(f"{config.MODULE_NAME}/pr.md.j2") +parser = argparse.ArgumentParser(description="Create PRs for a list of connectors from a template.") +utils.add_dry_param(parser) +utils.add_connectors_param(parser) +utils.add_allow_alpha_param(parser) +utils.add_allow_beta_param(parser) logging.basicConfig(level=logging.DEBUG) -def migrate_acceptance_test_config(connector_name): - acceptance_test_config_path = Path(CONNECTORS_DIRECTORY) / connector_name / "acceptance-test-config.yml" - return migrate_configuration(acceptance_test_config_path) - - def checkout_new_branch(connector_name): AIRBYTE_REPO.heads.master.checkout() - new_branch_name = f"{connector_name}/sat/migrate-to-high-test-strictness-level" + new_branch_name = f"{connector_name}/{config.MODULE_NAME}" new_branch = AIRBYTE_REPO.create_head(new_branch_name) new_branch.checkout() return new_branch @@ -58,7 +53,7 @@ def commit_push_migrated_config(config_path, connector_name, new_branch, dry_run def get_pr_content(definition): - pr_title = f"Source {definition['name']}: enable `high` test strictness level in connector acceptance test" + pr_title = f"Source {definition['name']}: {config.ISSUE_TITLE}" pr_body = PR_TEMPLATE.render(connector_name=definition["name"], release_stage=definition["releaseStage"]) file_definition, pr_body_path = tempfile.mkstemp() @@ -66,7 +61,7 @@ def get_pr_content(definition): with os.fdopen(file_definition, "w") as tmp: tmp.write(pr_body) - return {"title": pr_title, "body_file": pr_body_path, "labels": COMMON_PR_LABELS} + return {"title": pr_title, "body_file": pr_body_path, "labels": config.COMMON_ISSUE_LABELS} def open_pr(definition, new_branch, dry_run): @@ -81,9 +76,9 @@ def open_pr(definition, new_branch, dry_run): pr_content["title"], "--body-file", pr_content["body_file"], - "--project", - GITHUB_PROJECT_NAME, ] + if config.GITHUB_PROJECT_NAME: + create_command_arguments += ["--project", config.GITHUB_PROJECT_NAME] for label in pr_content["labels"]: create_command_arguments += ["--label", label] list_existing_pr_process = subprocess.Popen(list_command_arguments, stdout=subprocess.PIPE, stderr=subprocess.PIPE) @@ -107,7 +102,7 @@ def open_pr(definition, new_branch, dry_run): def add_test_comment(definition, new_branch, dry_run): - connector_name = definition["dockerRepository"].replace("airbyte/", "") + connector_name = definitions.get_airbyte_connector_name_from_definition(definition) comment = f"/test connector=connectors/{connector_name}" comment_command_arguments = ["gh", "pr", "comment", new_branch.name, "--body", comment] if not dry_run: @@ -123,9 +118,10 @@ def add_test_comment(definition, new_branch, dry_run): def migrate_config_on_new_branch(definition, dry_run): AIRBYTE_REPO.heads.master.checkout() - connector_name = definition["dockerRepository"].replace("airbyte/", "") + connector_name = definitions.get_airbyte_connector_name_from_definition(definition) new_branch = checkout_new_branch(connector_name) - config_path = migrate_acceptance_test_config(connector_name) + config_path = utils.acceptance_test_config_path(connector_name) + update_configuration(config_path, migration=set_high_test_strictness_level, migrate_from_legacy=True) commit_push_migrated_config(config_path, connector_name, new_branch, dry_run) return new_branch @@ -142,6 +138,5 @@ def migrate_definition_and_open_pr(definition, dry_run): if __name__ == "__main__": args = parser.parse_args() - dry_run = False if args.dry == "False" or args.dry == "false" else True - for definition in GA_DEFINITIONS[:1]: - migrate_definition_and_open_pr(definition, dry_run=dry_run) + for definition in utils.get_valid_definitions_from_args(args): + migrate_definition_and_open_pr(definition, dry_run=args.dry) diff --git a/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/definitions.py b/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/definitions.py new file mode 100644 index 000000000000..1ccf8506d3b4 --- /dev/null +++ b/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/definitions.py @@ -0,0 +1,53 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + +import logging +from typing import List + +import yaml + +SOURCE_DEFINITIONS_FILE_PATH = "../../../../../airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml" + + +logging.basicConfig(level=logging.DEBUG) + + +def read_source_definitions(): + with open(SOURCE_DEFINITIONS_FILE_PATH, "r") as source_definitions_file: + return yaml.safe_load(source_definitions_file) + + +def find_by_release_stage(source_definitions, release_stage): + if release_stage == "other": + return [ + definition + for definition in source_definitions + if definition.get("releaseStage", "") not in ["alpha", "beta", "generally_available"] + ] + else: + return [definition for definition in source_definitions if definition.get("releaseStage") == release_stage] + + +def find_by_name(connector_names: List[str]): + definitions = [ + definition for definition in ALL_DEFINITIONS if get_airbyte_connector_name_from_definition(definition) in connector_names + ] + if len(definitions) != len(connector_names): + logging.warning(f"Looked for {len(connector_names)} items, got {len(definitions)} items. Did you misspell something?") + return definitions + + +def get_airbyte_connector_name_from_definition(connector_definition): + return connector_definition["dockerRepository"].replace("airbyte/", "") + + +def is_airbyte_connector(connector_definition): + return connector_definition["dockerRepository"].startswith("airbyte/") + + +ALL_DEFINITIONS = read_source_definitions() +GA_DEFINITIONS = find_by_release_stage(ALL_DEFINITIONS, "generally_available") +BETA_DEFINITIONS = find_by_release_stage(ALL_DEFINITIONS, "beta") +ALPHA_DEFINTIONS = find_by_release_stage(ALL_DEFINITIONS, "alpha") +OTHER_DEFINITIONS = find_by_release_stage(ALL_DEFINITIONS, "other") diff --git a/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/migrations/fail_on_extra_columns/.gitignore b/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/migrations/fail_on_extra_columns/.gitignore new file mode 100644 index 000000000000..fca46f75457f --- /dev/null +++ b/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/migrations/fail_on_extra_columns/.gitignore @@ -0,0 +1,2 @@ +output +test_failure_logs diff --git a/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/migrations/fail_on_extra_columns/README.md b/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/migrations/fail_on_extra_columns/README.md new file mode 100644 index 000000000000..22edcd917b27 --- /dev/null +++ b/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/migrations/fail_on_extra_columns/README.md @@ -0,0 +1,53 @@ +# Bypassing column selection validation for sources which fail it +This migration adds `fail_on_extra_columns: false` to the `basic_read` test in the `acceptance-test-config.yml` +file for all Beta and GA connectors which fail the stricter validation added to the `basic_read` test. It creates +issues for each of the connectors whose configs were modified as a result. + +Before following this README, please reference the `acceptance_test_config_migraton` README for general +usage information for the given scripts. + +## Add bypass for connectors that fail the new CAT test + +### Run tests on all connectors +Run CAT on all Beta and GA connectors. + +``` +python run_tests.py --allow_beta +``` + +### Collect output from connectors that fail due to `additionalProperties` +``` +cd migrations/fail_on_extra_columns +sh get_failures.sh +``` + +### Migrate configs for failed connectors +For the connectors that failed due to `Additional properties are not allowed:`, we want to add the new +`fail_on_extra_columns` input parameter to the basic read test. To do this, + +``` +python config_migration.py --connectors $(ls migrations/fail_on_extra_columns/test_failure_logs) --allow_beta +``` + +Add these bypasses to the PR that adds the new CAT test! + + +## Create issues for failing connectors (`create_issues.py`) +Create one issue per GA connectors to add the missing columns to the spec and remove the `fail_on_extra_columns` bypass. + +Issues get created with the following labels: +* `area/connectors` +* `team/connectors-python` +* `type/enhancement` +* `column-selection-sources` + +### How to run: +**Dry run**: +``` +python create_issues.py --connectors $(ls migrations/fail_on_extra_columns/test_failure_logs) --allow_beta +``` + +**Real execution**: +``` +python create_issues.py --connectors $(ls migrations/fail_on_extra_columns/test_failure_logs) --allow_beta --no-dry +``` diff --git a/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/migrations/fail_on_extra_columns/config.py b/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/migrations/fail_on_extra_columns/config.py new file mode 100644 index 000000000000..e283a0b43d15 --- /dev/null +++ b/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/migrations/fail_on_extra_columns/config.py @@ -0,0 +1,11 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + +from typing import List, Optional + +# SET THESE BEFORE USING THE SCRIPT +MODULE_NAME: str = "fail_on_extra_columns" +GITHUB_PROJECT_NAME: Optional[str] = None +COMMON_ISSUE_LABELS: List[str] = ["area/connectors", "team/connectors-python", "type/enhancement", "column-selection-sources"] +ISSUE_TITLE: str = "Add undeclared columns to spec" diff --git a/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/migrations/fail_on_extra_columns/get_failures.sh b/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/migrations/fail_on_extra_columns/get_failures.sh new file mode 100644 index 000000000000..e7a572b90c48 --- /dev/null +++ b/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/migrations/fail_on_extra_columns/get_failures.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +# Outputs where the tests ran, but failed (exit code 1) +FULL_OUTPUT_DIR="./output/1" # TODO: make this work even when called from another dir + +# In test output look for lines with "Additional properties are not allowed" and collect them all into one file. +# Results from each output file will contain the name of the file in the lines output in the columns file +tmp_columns_file=$(mktemp) +grep -rnw "$FULL_OUTPUT_DIR" -e "Additional properties are not allowed" -B 1 > "$tmp_columns_file" + +# For each connector, grab the lines in the columns file associated with them and put them into a test_failure_logs +# file so that we can attach it to the issue created. +mkdir -p "./test_failure_logs" +for f in $(ls $FULL_OUTPUT_DIR); do + results=$(mktemp) + grep "$tmp_columns_file" -e "$f" > "$results" + + # If there weren't any 'additionalProperties are not allowed' logs, don't create test_failure_output for this connector + if [ -s "$results" ]; then + cat "$results" > "./test_failure_logs/$f" + fi +done \ No newline at end of file diff --git a/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/migrations/fail_on_extra_columns/issue.md.j2 b/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/migrations/fail_on_extra_columns/issue.md.j2 new file mode 100644 index 000000000000..fa50adc62ebc --- /dev/null +++ b/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/migrations/fail_on_extra_columns/issue.md.j2 @@ -0,0 +1,31 @@ +## What +In this [PR](https://github.com/airbytehq/airbyte/pull/23985), `BasicReadTest.test_read` test in the Connector Acceptance Tests was updated to fail if the connector produces +stream records which contain columns that haven't been declared in the spec. + +{{ connector_name }} currently fails the updated test. Its `acceptance-test-config.yml` was edited with the +`fail_on_extra_columns: false` parameter in order to avoid this change from making the connector fail CAT. + +We want to add the undeclared columns to the spec. + +**How this will help**: +- Column selection is currently blocked for connectors that don't declare all columns that they pass. This + is because turning on column selection will stop these undeclared columns from being sent, when they were + previously being sent. Doing this allows us to enable column selection for {{ connector_name }}! +- Users will better understand the shape of the data they'll receive, since the columns will match the spec. + +## How +The following descriptions of streams that pass undeclared columns come from results of the failed connector acceptance test: + +``` +{{ test_failure_logs }} +``` + +1. Add the missing properties indicated by the `Additional properties are not allowed ('', 'column' were unexpected)` logs to the connector's spec. +2. Remove `fail_on_extra_columns: false` from the `acceptance-test-config.yml` file. +3. Commit changes to spec and `acceptance-test-config.yml` and open a PR. +4. Run tests on the connector, either automatically via CI or manually via the `/test` command +5. Profit! + +Definition of done: {{ connector_name }} passes CAT without declaring `fail_on_extra_columns: false`. If the +API starts sending over extra columns in the future, we will catch and fix them as part of the #connector-health +movement. \ No newline at end of file diff --git a/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/migrations/strictness_level_migration/README.md b/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/migrations/strictness_level_migration/README.md new file mode 100644 index 000000000000..38a946b1ef78 --- /dev/null +++ b/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/migrations/strictness_level_migration/README.md @@ -0,0 +1,48 @@ +# Migrating connectors' acceptance test configs to high strictness +This migration sets connectors' `acceptance-test-config.yml` to `high` test strictness level. +In doing so, it migrates the config files from a previous format into our new format. + +Before following this README, please reference the `acceptance_test_config_migraton` README for general +usage information for the given scripts. + +## Create migration issue for GA connectors (`create_issues.py`) +Create one issue per GA connectors to migrate to `high` test strictness level. + +Issues get created with the following labels: +* `area/connectors` +* `team/connectors-python` +* `type/enhancement` +* `test-strictness-level` + +Issues are added to the following project: `SAT-high-test-strictness-level` + +### How to run: +**Dry run**: +``` +python create_issues.py +``` + +**Real execution**: +``` +python create_issues.py --no-dry +``` + +## Create migration PRs for GA connectors (`create_prs.py`) +Create one PR per GA connector to perform the migration to `high` test strictness level. + +An example of the PR it creates can be found [here](https://github.com/airbytehq/airbyte/pull/19136) + +PR get created with the following labels: +* `area/connectors` +* `team/connectors-python` +* `type/enhancement` +* `test-strictness-level` + +PR are added to the following project: `SAT-high-test-strictness-level` + +### How to run: +**Dry run**: +`python create_prs.py` + +**Real execution**: +`python create_prs.py --no-dry` \ No newline at end of file diff --git a/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/migrations/strictness_level_migration/config.py b/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/migrations/strictness_level_migration/config.py new file mode 100644 index 000000000000..2ef9af30429c --- /dev/null +++ b/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/migrations/strictness_level_migration/config.py @@ -0,0 +1,11 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + +from typing import List, Optional + +# SET THESE BEFORE USING THE SCRIPT +MODULE_NAME: str = "strictness_level_migration" +GITHUB_PROJECT_NAME: Optional[str] = "SAT-high-test-strictness-level" +COMMON_ISSUE_LABELS: List[str] = ["area/connectors", "team/connectors-python", "type/enhancement", "test-strictness-level"] +ISSUE_TITLE: str = "enable `high` test strictness level in connector acceptance test" diff --git a/airbyte-integrations/bases/connector-acceptance-test/tools/strictness_level_migration/templates/issue.md.j2 b/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/migrations/strictness_level_migration/issue.md.j2 similarity index 100% rename from airbyte-integrations/bases/connector-acceptance-test/tools/strictness_level_migration/templates/issue.md.j2 rename to airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/migrations/strictness_level_migration/issue.md.j2 diff --git a/airbyte-integrations/bases/connector-acceptance-test/tools/strictness_level_migration/templates/pr.md.j2 b/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/migrations/strictness_level_migration/pr.md.j2 similarity index 100% rename from airbyte-integrations/bases/connector-acceptance-test/tools/strictness_level_migration/templates/pr.md.j2 rename to airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/migrations/strictness_level_migration/pr.md.j2 diff --git a/airbyte-integrations/bases/connector-acceptance-test/tools/strictness_level_migration/requirements.txt b/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/requirements.txt similarity index 85% rename from airbyte-integrations/bases/connector-acceptance-test/tools/strictness_level_migration/requirements.txt rename to airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/requirements.txt index 97b14d6e7173..f286425918e9 100644 --- a/airbyte-integrations/bases/connector-acceptance-test/tools/strictness_level_migration/requirements.txt +++ b/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/requirements.txt @@ -30,6 +30,7 @@ packaging==21.3 pdbpp==0.10.3 pendulum==2.1.2 pluggy==1.0.0 +pre-commit==3.2.1 pprintpp==0.4.0 py==1.11.0 pyaml==21.10.1 @@ -49,10 +50,11 @@ PyYAML==5.4.1 requests==2.28.1 requests-cache==0.9.7 requests-mock==1.9.3 +ruamel.yaml==0.17.21 six==1.16.0 smmap==5.0.0 sortedcontainers==2.4.0 --e git+ssh://git@github.com/airbytehq/airbyte.git@70679775b55c5bb1be7384114155924772885be0#egg=connector_acceptance_test&subdirectory=airbyte-integrations/bases/connector-acceptance-test +-e ../.. # local `connector-acceptance-test` module termcolor==2.1.0 toml==0.10.2 tomli==2.0.1 diff --git a/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/run_tests.py b/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/run_tests.py new file mode 100644 index 000000000000..dd323c556e9b --- /dev/null +++ b/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/run_tests.py @@ -0,0 +1,73 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + +import argparse +import asyncio +import logging +import os +from pathlib import Path + +import definitions +import utils +from migrations.fail_on_extra_columns import config + +parser = argparse.ArgumentParser(description="Run connector acceptance tests for a list of connectors.") +utils.add_connectors_param(parser) +utils.add_allow_alpha_param(parser) +utils.add_allow_beta_param(parser) +parser.add_argument("--max_concurrency", type=int, default=10, help="The maximum number of acceptance tests that should happen at once.") + + +async def run_tests(connector_name): + path_to_acceptance_test_runner = utils.acceptance_test_docker_sh_path(connector_name) + path_to_acceptance_test_config = utils.acceptance_test_config_path(connector_name) + + logging.info(f"Start running tests for {connector_name}.") + process = await asyncio.create_subprocess_exec( + "sh", + path_to_acceptance_test_runner, + env=dict(os.environ, CONFIG_PATH=path_to_acceptance_test_config), + stdout=asyncio.subprocess.PIPE, + stderr=asyncio.subprocess.PIPE, + ) + return_code = await process.wait() + + output_path = Path(utils.MIGRATIONS_FOLDER) / config.MODULE_NAME / "output" / str(return_code) + output_path.mkdir(parents=True, exist_ok=True) + + contents = await process.stdout.read() + with open(f"{output_path}/{connector_name}", "wb") as f: + f.write(contents) + + if return_code == 0: + logging.info(f"{connector_name} succeeded.") + else: + logging.info(f"{connector_name} tests failed with exit code {return_code}.") + + +async def semaphore_gather(coroutines, num_semaphores): + # Limit the amount of connectors we want to test at once + # To avoid crashing our docker by spinning up too many containers + # Or using too much CPU. How many you can run at once effectively + # will depend on the specs you've allocated to Docker + semaphore = asyncio.Semaphore(num_semaphores) + + async def _wrap_coroutine(coroutine): + async with semaphore: + return await coroutine + + return await asyncio.gather(*(_wrap_coroutine(coroutine) for coroutine in coroutines), return_exceptions=False) + + +async def main(args): + tasks = [] + for definition in utils.get_valid_definitions_from_args(args): + connector_name = definitions.get_airbyte_connector_name_from_definition(definition) + tasks.append(run_tests(connector_name)) + await asyncio.gather(semaphore_gather(tasks, num_semaphores=args.max_concurrency)) + + +if __name__ == "__main__": + args = parser.parse_args() + asyncio.run(main(args)) diff --git a/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/utils.py b/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/utils.py new file mode 100644 index 000000000000..9858915e9032 --- /dev/null +++ b/airbyte-integrations/bases/connector-acceptance-test/tools/acceptance_test_config_migration/utils.py @@ -0,0 +1,78 @@ +# +# Copyright (c) 2023 Airbyte, Inc., all rights reserved. +# + +import argparse +import logging +from pathlib import Path + +import definitions + +CONNECTORS_DIRECTORY = "../../../../connectors" +MIGRATIONS_FOLDER = "./migrations/" + + +def acceptance_test_config_path(connector_name): + """Returns the path to a given connector's acceptance-test-config.yml file.""" + return Path(CONNECTORS_DIRECTORY) / connector_name / "acceptance-test-config.yml" + + +def acceptance_test_docker_sh_path(connector_name): + return Path(CONNECTORS_DIRECTORY) / connector_name / "acceptance-test-docker.sh" + + +def add_dry_param(parser: argparse.ArgumentParser): + parser.add_argument( + "-d", + "--dry", + action=argparse.BooleanOptionalAction, + default=True, + help="Whether the action performed is a dry run. In the case of a dry run, no git actions will be pushed to the remote.", + ) + + +def add_allow_alpha_param(parser: argparse.ArgumentParser): + parser.add_argument( + "--allow_alpha", + action=argparse.BooleanOptionalAction, + default=False, + help="Whether to apply the change to alpha connectors, if they are included in the list of connectors.", + ) + + +def add_allow_beta_param(parser: argparse.ArgumentParser): + parser.add_argument( + "--allow_beta", + action=argparse.BooleanOptionalAction, + default=False, + help="Whether to apply the change to bets connectors, if they are included in the list of connectors.", + ) + + +def add_connectors_param(parser: argparse.ArgumentParser): + parser.add_argument( + "--connectors", nargs="*", help="A list of connectors (separated by spaces) to run a script on. (default: all connectors)" + ) + + +def get_valid_definitions_from_args(args): + if not args.connectors: + requested_defintions = definitions.ALL_DEFINITIONS + else: + requested_defintions = definitions.find_by_name(args.connectors) + + valid_definitions = [] + for definition in requested_defintions: + connector_technical_name = definitions.get_airbyte_connector_name_from_definition(definition) + if not definitions.is_airbyte_connector(definition): + logging.warning(f"Skipping {connector_technical_name} since it's not an airbyte connector.") + elif not args.allow_beta and definition in definitions.BETA_DEFINITIONS: + logging.warning(f"Skipping {connector_technical_name} since it's a beta connector. This is configurable via `--allow_beta`") + elif not args.allow_alpha and definition in definitions.ALPHA_DEFINTIONS: + logging.warning(f"Skipping {connector_technical_name} since it's an alpha connector. This is configurable via `--allow_alpha`") + elif definition in definitions.OTHER_DEFINITIONS: + logging.warning(f"Skipping {connector_technical_name} since it doesn't have a release stage.") + else: + valid_definitions.append(definition) + + return valid_definitions diff --git a/airbyte-integrations/bases/connector-acceptance-test/tools/strictness_level_migration/README.md b/airbyte-integrations/bases/connector-acceptance-test/tools/strictness_level_migration/README.md deleted file mode 100644 index 2a06a1b39302..000000000000 --- a/airbyte-integrations/bases/connector-acceptance-test/tools/strictness_level_migration/README.md +++ /dev/null @@ -1,64 +0,0 @@ -# Tooling for `test_strictness_level` migration - -This directory contains scripts that can help us manage the migration of connectors's `acceptance-test-config.yml` to `high` test strictness level. -Before running these scripts you need to set up a local virtual environment in the **current directory**: -```bash -python -m venv .venv -source .venv/bin/activate -pip install -r requirements.txt -``` -## Requirements -* [GitHub CLI](https://cli.github.com/) (`brew install gh`) - -## Create migration issue for GA connectors (`create_issues.py`) -This script will create one issue per GA connectors to migrate to `high` test strictness level. - -### What it does: -1. Find all GA connectors in `../../../../../airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml` -2. Generate an issue content (title, body, labels, project), using `./templates/issue.md.j2` -3. Find an already existing issue with the same title. -4. Create the issue and return its url if it does not exist. - -Issues get created with the following labels: -* `area/connectors` -* `team/connectors-python` -* `type/enhancement` -* `test-strictness-level` - -Issues are added to the following project: `SAT-high-test-strictness-level` - -### How to run: -**Dry run**: -`python create_issues.py` - -**Real execution**: -`python create_issues.py --dry False` - -## Create migration PRs for GA connectors (`create_prs.py`) -This script will create one PR per GA connectors to migrate to `high` test strictness level. - -### What it does: -1. Iterate on all GA connectors in `../../../../../airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml` -2. Create a branch for each GA connector -3. Locally migrate `acceptance_test_config.yml` to the latest format -4. Commit and push the changes on this branch -5. Open a PR for this branch -6. Run a connector acceptance test on this branch by posting a `/test` comment on the PR - -An example of the PR it creates can be found [here](https://github.com/airbytehq/airbyte/pull/19136) - -PR get created with the following labels: -* `area/connectors` -* `team/connectors-python` -* `type/enhancement` -* `test-strictness-level` - -PR are added to the following project: `SAT-high-test-strictness-level` - -### How to run: -**Dry run**: -`python create_prs.py` - -**Real execution**: -`python create_prs.py --dry False` - diff --git a/airbyte-integrations/bases/connector-acceptance-test/tools/strictness_level_migration/config_migration.py b/airbyte-integrations/bases/connector-acceptance-test/tools/strictness_level_migration/config_migration.py deleted file mode 100644 index 7c7b6ebe6463..000000000000 --- a/airbyte-integrations/bases/connector-acceptance-test/tools/strictness_level_migration/config_migration.py +++ /dev/null @@ -1,58 +0,0 @@ -# -# Copyright (c) 2023 Airbyte, Inc., all rights reserved. -# - -import argparse -import logging -from pathlib import Path - -import yaml -from connector_acceptance_test.config import Config -from yaml import load - -try: - from yaml import CLoader as Loader -except ImportError: - from yaml import Loader - -parser = argparse.ArgumentParser(description="Migrate legacy acceptance-test-config.yml to the latest configuration format.") -parser.add_argument("config_path", type=str, help="Path to the acceptance-test-config.yml to migrate.") - - -def get_new_config_format(config_path: Path): - - with open(config_path, "r") as file: - to_migrate = load(file, Loader=Loader) - - if Config.is_legacy(to_migrate): - return Config.migrate_legacy_to_current_config(to_migrate) - else: - logging.warn("The configuration is not in a legacy format.") - return to_migrate - - -def set_high_test_strictness_level(config): - config["test_strictness_level"] = "high" - for basic_read_test in config["acceptance_tests"].get("basic_read", {"tests": []})["tests"]: - basic_read_test.pop("configured_catalog_path", None) - return config - - -def write_new_config(new_config, output_path): - with open(output_path, "w") as output_file: - yaml.dump(new_config, output_file) - logging.info("Saved the configuration in its new format") - - -def migrate_configuration(config_path): - new_config = get_new_config_format(config_path) - new_config = set_high_test_strictness_level(new_config) - write_new_config(new_config, config_path) - logging.info(f"The configuration was successfully migrated to the latest configuration format: {config_path}") - return config_path - - -if __name__ == "__main__": - args = parser.parse_args() - config_path = Path(args.config_path) - migrate_configuration(config_path) diff --git a/airbyte-integrations/bases/connector-acceptance-test/tools/strictness_level_migration/create_issues.py b/airbyte-integrations/bases/connector-acceptance-test/tools/strictness_level_migration/create_issues.py deleted file mode 100644 index 36042df2d435..000000000000 --- a/airbyte-integrations/bases/connector-acceptance-test/tools/strictness_level_migration/create_issues.py +++ /dev/null @@ -1,84 +0,0 @@ -# -# Copyright (c) 2023 Airbyte, Inc., all rights reserved. -# - - -import argparse -import json -import logging -import os -import subprocess -import tempfile - -from definitions import GA_DEFINITIONS -from jinja2 import Environment, FileSystemLoader - -TEMPLATES_FOLDER = "./templates/" -COMMON_ISSUE_LABELS = ["area/connectors", "team/connectors-python", "type/enhancement", "test-strictness-level"] -GITHUB_PROJECT_NAME = "SAT-high-test-strictness-level" - -logging.basicConfig(level=logging.DEBUG) -environment = Environment(loader=FileSystemLoader(TEMPLATES_FOLDER)) - -parser = argparse.ArgumentParser( - description="Create issues for migration of GA connectors to high test strictness level in connector acceptance test" -) -parser.add_argument("-d", "--dry", default=True) - - -def get_issue_content(source_definition): - issue_title = f"Source {source_definition['name']}: enable `high` test strictness level in connector acceptance test" - - template = environment.get_template("issue.md.j2") - issue_body = template.render(connector_name=source_definition["name"], release_stage=source_definition["releaseStage"]) - file_definition, issue_body_path = tempfile.mkstemp() - - with os.fdopen(file_definition, "w") as tmp: - tmp.write(issue_body) - - return {"title": issue_title, "body_file": issue_body_path, "labels": COMMON_ISSUE_LABELS} - - -def create_issue(source_definition, dry_run=True): - issue_content = get_issue_content(source_definition) - list_command_arguments = ["gh", "issue", "list", "--state", "open", "--search", f"'{issue_content['title']}'", "--json", "url"] - - create_command_arguments = [ - "gh", - "issue", - "create", - "--title", - issue_content["title"], - "--body-file", - issue_content["body_file"], - "--project", - GITHUB_PROJECT_NAME, - ] - for label in issue_content["labels"]: - create_command_arguments += ["--label", label] - - list_existing_issue_process = subprocess.Popen(list_command_arguments, stdout=subprocess.PIPE, stderr=subprocess.PIPE) - stdout, stderr = list_existing_issue_process.communicate() - existing_issues = json.loads(stdout.decode()) - already_created = len(existing_issues) > 0 - if already_created: - logging.warning(f"An issue was already created for this definition: {existing_issues[0]}") - if not already_created: - if not dry_run: - process = subprocess.Popen(create_command_arguments, stdout=subprocess.PIPE, stderr=subprocess.PIPE) - stdout, stderr = process.communicate() - if stderr: - logging.error(stderr.decode()) - else: - created_issue_url = stdout.decode() - logging.info(f"Created issue for {source_definition['name']}: {created_issue_url}") - else: - logging.info(f"[DRY RUN]: {' '.join(create_command_arguments)}") - os.remove(issue_content["body_file"]) - - -if __name__ == "__main__": - args = parser.parse_args() - dry_run = False if args.dry == "False" or args.dry == "false" else True - for definition in GA_DEFINITIONS: - create_issue(definition, dry_run=dry_run) diff --git a/airbyte-integrations/bases/connector-acceptance-test/tools/strictness_level_migration/definitions.py b/airbyte-integrations/bases/connector-acceptance-test/tools/strictness_level_migration/definitions.py deleted file mode 100644 index adc1373caa25..000000000000 --- a/airbyte-integrations/bases/connector-acceptance-test/tools/strictness_level_migration/definitions.py +++ /dev/null @@ -1,21 +0,0 @@ -# -# Copyright (c) 2023 Airbyte, Inc., all rights reserved. -# - - -import yaml - -SOURCE_DEFINITIONS_FILE_PATH = "../../../../../airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml" - - -def read_source_definitions(): - with open(SOURCE_DEFINITIONS_FILE_PATH, "r") as source_definitions_file: - return yaml.safe_load(source_definitions_file) - - -def find_by_release_stage(source_definitions, release_stage): - return [definition for definition in source_definitions if definition.get("releaseStage") == release_stage] - - -ALL_DEFINITIONS = read_source_definitions() -GA_DEFINITIONS = find_by_release_stage(ALL_DEFINITIONS, "generally_available") From 59acd193b380420b980bc6b7dac270f148f8a50a Mon Sep 17 00:00:00 2001 From: Ben Church Date: Tue, 18 Apr 2023 13:15:11 -0700 Subject: [PATCH 121/187] Dagster: rename catalog to registry (#25254) * rename catalog to registry in metadata service * rename catalog to registry in metadata files * Run generate models * Fix missed renames * Add github personal access token * Run black * Automated Change --------- Co-authored-by: bnchrch --- .../connectors/metadata_service/lib/README.md | 2 +- .../ConnectorMetadataDefinitionV1.py | 14 +-- .../src/ConnectorMetadataDefinitionV1.yaml | 6 +- ...gOverrides.yaml => RegistryOverrides.yaml} | 6 +- .../metadata_service/lib/pyproject.toml | 2 +- ... => metadata_registry_no_id_override.yaml} | 2 +- ...> metadata_registry_no_type_override.yaml} | 2 +- ...> metadata_registry_unknown_override.yaml} | 2 +- ...l => metadata_registry_allowed_hosts.yaml} | 0 ...> metadata_registry_complex_override.yaml} | 2 +- ...ed.yaml => metadata_registry_enabled.yaml} | 2 +- ...metadata_registry_required_resources.yaml} | 0 .../orchestrator/.env.template | 1 + .../metadata_service/orchestrator/README.md | 2 +- .../orchestrator/orchestrator/__init__.py | 107 ++++++++-------- .../orchestrator/orchestrator/assets/dev.py | 52 ++++---- .../orchestrator/assets/metadata.py | 76 ++++++------ .../assets/{catalog.py => registry.py} | 116 +++++++++--------- .../{catalog_report.py => registry_report.py} | 58 ++++----- .../orchestrator/assets/specs_secrets_mask.py | 16 +-- .../orchestrator/orchestrator/config.py | 2 +- .../orchestrator/orchestrator/jobs/catalog.py | 11 -- .../orchestrator/jobs/registry.py | 11 ++ .../file_managers/local_file_manager.py | 2 +- .../orchestrator/resources/github.py | 9 +- .../sensors/{catalog.py => registry.py} | 24 ++-- ...html => connector_registry_locations.html} | 4 +- ...ons.md => connector_registry_locations.md} | 2 +- .../orchestrator/templates/render.py | 8 +- .../orchestrator/tests/fixtures/__init__.py | 8 +- ...cloud_catalog.json => cloud_registry.json} | 0 .../{oss_catalog.json => oss_registry.json} | 0 .../orchestrator/tests/test_debug.py | 40 +++--- .../orchestrator/tests/test_metadata.py | 88 ++++++------- .../{test_catalog.py => test_registry.py} | 34 ++--- .../destination-amazon-sqs/metadata.yaml | 2 +- .../destination-aws-datalake/metadata.yaml | 2 +- .../metadata.yaml | 2 +- .../metadata.yaml | 2 +- .../destination-bigquery/metadata.yaml | 2 +- .../destination-cassandra/metadata.yaml | 2 +- .../metadata.yaml | 2 +- .../destination-clickhouse/metadata.yaml | 2 +- .../destination-convex/metadata.yaml | 2 +- .../connectors/destination-csv/metadata.yaml | 2 +- .../destination-databend/metadata.yaml | 2 +- .../destination-databricks/metadata.yaml | 2 +- .../destination-dev-null/metadata.yaml | 2 +- .../destination-doris/metadata.yaml | 2 +- .../destination-duckdb/metadata.yaml | 2 +- .../destination-dynamodb/metadata.yaml | 2 +- .../destination-e2e-test/metadata.yaml | 2 +- .../metadata.yaml | 2 +- .../destination-elasticsearch/metadata.yaml | 2 +- .../destination-exasol/metadata.yaml | 2 +- .../destination-firebolt/metadata.yaml | 2 +- .../destination-firestore/metadata.yaml | 2 +- .../connectors/destination-gcs/metadata.yaml | 2 +- .../destination-google-sheets/metadata.yaml | 2 +- .../destination-iceberg/metadata.yaml | 2 +- .../destination-kafka/metadata.yaml | 2 +- .../connectors/destination-keen/metadata.yaml | 2 +- .../destination-kinesis/metadata.yaml | 2 +- .../destination-local-json/metadata.yaml | 2 +- .../metadata.yaml | 2 +- .../destination-meilisearch/metadata.yaml | 2 +- .../metadata.yaml | 2 +- .../destination-mongodb/metadata.yaml | 2 +- .../connectors/destination-mqtt/metadata.yaml | 2 +- .../metadata.yaml | 2 +- .../destination-mssql/metadata.yaml | 2 +- .../metadata.yaml | 2 +- .../destination-mysql/metadata.yaml | 2 +- .../metadata.yaml | 2 +- .../destination-oracle/metadata.yaml | 2 +- .../metadata.yaml | 2 +- .../destination-postgres/metadata.yaml | 2 +- .../destination-pubsub/metadata.yaml | 2 +- .../destination-pulsar/metadata.yaml | 2 +- .../connectors/destination-r2/metadata.yaml | 2 +- .../destination-rabbitmq/metadata.yaml | 2 +- .../destination-redis/metadata.yaml | 2 +- .../destination-redpanda/metadata.yaml | 2 +- .../destination-redshift/metadata.yaml | 2 +- .../destination-rockset/metadata.yaml | 2 +- .../destination-s3-glue/metadata.yaml | 2 +- .../connectors/destination-s3/metadata.yaml | 2 +- .../destination-scylla/metadata.yaml | 2 +- .../destination-selectdb/metadata.yaml | 2 +- .../destination-sftp-json/metadata.yaml | 2 +- .../destination-snowflake/metadata.yaml | 2 +- .../destination-sqlite/metadata.yaml | 2 +- .../destination-teradata/metadata.yaml | 2 +- .../connectors/destination-tidb/metadata.yaml | 2 +- .../destination-typesense/metadata.yaml | 2 +- .../destination-weaviate/metadata.yaml | 2 +- .../destination-yugabytedb/metadata.yaml | 2 +- .../source-activecampaign/metadata.yaml | 2 +- .../connectors/source-adjust/metadata.yaml | 2 +- .../connectors/source-aha/metadata.yaml | 2 +- .../connectors/source-airtable/metadata.yaml | 2 +- .../metadata.yaml | 2 +- .../connectors/source-alloydb/metadata.yaml | 2 +- .../source-alpha-vantage/metadata.yaml | 2 +- .../source-amazon-ads/metadata.yaml | 2 +- .../metadata.yaml | 2 +- .../source-amazon-sqs/metadata.yaml | 2 +- .../connectors/source-amplitude/metadata.yaml | 2 +- .../source-apify-dataset/metadata.yaml | 2 +- .../connectors/source-appfollow/metadata.yaml | 2 +- .../connectors/source-appsflyer/metadata.yaml | 2 +- .../source-appstore-singer/metadata.yaml | 2 +- .../connectors/source-asana/metadata.yaml | 2 +- .../connectors/source-ashby/metadata.yaml | 2 +- .../connectors/source-auth0/metadata.yaml | 2 +- .../source-aws-cloudtrail/metadata.yaml | 2 +- .../source-azure-blob-storage/metadata.yaml | 2 +- .../source-azure-table/metadata.yaml | 2 +- .../source-babelforce/metadata.yaml | 2 +- .../connectors/source-bamboo-hr/metadata.yaml | 2 +- .../source-bigcommerce/metadata.yaml | 2 +- .../connectors/source-bigquery/metadata.yaml | 2 +- .../connectors/source-bing-ads/metadata.yaml | 2 +- .../connectors/source-braintree/metadata.yaml | 2 +- .../connectors/source-braze/metadata.yaml | 2 +- .../source-breezometer/metadata.yaml | 2 +- .../connectors/source-callrail/metadata.yaml | 2 +- .../connectors/source-cart/metadata.yaml | 2 +- .../connectors/source-chargebee/metadata.yaml | 2 +- .../connectors/source-chargify/metadata.yaml | 2 +- .../source-chartmogul/metadata.yaml | 2 +- .../metadata.yaml | 2 +- .../source-clickhouse/metadata.yaml | 2 +- .../source-clickup-api/metadata.yaml | 2 +- .../connectors/source-clockify/metadata.yaml | 2 +- .../connectors/source-close-com/metadata.yaml | 2 +- .../metadata.yaml | 2 +- .../source-cockroachdb/metadata.yaml | 2 +- .../connectors/source-coda/metadata.yaml | 2 +- .../connectors/source-coin-api/metadata.yaml | 2 +- .../source-coingecko-coins/metadata.yaml | 2 +- .../source-coinmarketcap/metadata.yaml | 2 +- .../connectors/source-commcare/metadata.yaml | 2 +- .../source-commercetools/metadata.yaml | 2 +- .../connectors/source-configcat/metadata.yaml | 2 +- .../source-confluence/metadata.yaml | 2 +- .../source-convertkit/metadata.yaml | 2 +- .../connectors/source-convex/metadata.yaml | 2 +- .../connectors/source-copper/metadata.yaml | 2 +- .../connectors/source-courier/metadata.yaml | 2 +- .../connectors/source-datadog/metadata.yaml | 2 +- .../connectors/source-datascope/metadata.yaml | 2 +- .../connectors/source-db2/metadata.yaml | 2 +- .../connectors/source-delighted/metadata.yaml | 2 +- .../connectors/source-dixa/metadata.yaml | 2 +- .../connectors/source-dockerhub/metadata.yaml | 2 +- .../connectors/source-dremio/metadata.yaml | 2 +- .../connectors/source-drift/metadata.yaml | 2 +- .../connectors/source-dv-360/metadata.yaml | 2 +- .../connectors/source-dynamodb/metadata.yaml | 2 +- .../source-e2e-test-cloud/metadata.yaml | 2 +- .../connectors/source-e2e-test/metadata.yaml | 2 +- .../source-elasticsearch/metadata.yaml | 2 +- .../source-emailoctopus/metadata.yaml | 2 +- .../connectors/source-everhour/metadata.yaml | 2 +- .../source-exchange-rates/metadata.yaml | 2 +- .../source-facebook-marketing/metadata.yaml | 2 +- .../source-facebook-pages/metadata.yaml | 2 +- .../connectors/source-faker/metadata.yaml | 2 +- .../connectors/source-fastbill/metadata.yaml | 2 +- .../connectors/source-fauna/metadata.yaml | 2 +- .../connectors/source-file/metadata.yaml | 2 +- .../metadata.yaml | 2 +- .../connectors/source-firebolt/metadata.yaml | 2 +- .../connectors/source-flexport/metadata.yaml | 2 +- .../source-freshcaller/metadata.yaml | 2 +- .../connectors/source-freshdesk/metadata.yaml | 2 +- .../source-freshsales/metadata.yaml | 2 +- .../source-freshservice/metadata.yaml | 2 +- .../connectors/source-gcs/metadata.yaml | 2 +- .../connectors/source-genesys/metadata.yaml | 2 +- .../connectors/source-getlago/metadata.yaml | 2 +- .../connectors/source-github/metadata.yaml | 2 +- .../connectors/source-gitlab/metadata.yaml | 2 +- .../connectors/source-glassfrog/metadata.yaml | 2 +- .../connectors/source-gnews/metadata.yaml | 2 +- .../source-gocardless/metadata.yaml | 2 +- .../connectors/source-gong/metadata.yaml | 2 +- .../source-google-ads/metadata.yaml | 2 +- .../metadata.yaml | 2 +- .../source-google-analytics-v4/metadata.yaml | 2 +- .../source-google-directory/metadata.yaml | 2 +- .../metadata.yaml | 2 +- .../metadata.yaml | 2 +- .../source-google-sheets/metadata.yaml | 2 +- .../source-google-webfonts/metadata.yaml | 2 +- .../metadata.yaml | 2 +- .../source-greenhouse/metadata.yaml | 2 +- .../connectors/source-gridly/metadata.yaml | 2 +- .../connectors/source-gutendex/metadata.yaml | 2 +- .../connectors/source-harvest/metadata.yaml | 2 +- .../source-hellobaton/metadata.yaml | 2 +- .../source-hubplanner/metadata.yaml | 2 +- .../connectors/source-hubspot/metadata.yaml | 2 +- .../connectors/source-insightly/metadata.yaml | 2 +- .../connectors/source-instagram/metadata.yaml | 2 +- .../connectors/source-instatus/metadata.yaml | 2 +- .../connectors/source-intercom/metadata.yaml | 2 +- .../connectors/source-intruder/metadata.yaml | 2 +- .../connectors/source-ip2whois/metadata.yaml | 2 +- .../connectors/source-iterable/metadata.yaml | 2 +- .../connectors/source-jira/metadata.yaml | 2 +- .../connectors/source-k6-cloud/metadata.yaml | 2 +- .../connectors/source-kafka/metadata.yaml | 2 +- .../connectors/source-klarna/metadata.yaml | 2 +- .../connectors/source-klaviyo/metadata.yaml | 2 +- .../source-kustomer-singer/metadata.yaml | 2 +- .../connectors/source-kyriba/metadata.yaml | 2 +- .../source-launchdarkly/metadata.yaml | 2 +- .../connectors/source-lemlist/metadata.yaml | 2 +- .../source-lever-hiring/metadata.yaml | 2 +- .../source-linkedin-ads/metadata.yaml | 2 +- .../source-linkedin-pages/metadata.yaml | 2 +- .../connectors/source-linnworks/metadata.yaml | 2 +- .../connectors/source-lokalise/metadata.yaml | 2 +- .../connectors/source-looker/metadata.yaml | 2 +- .../connectors/source-mailchimp/metadata.yaml | 2 +- .../source-mailerlite/metadata.yaml | 2 +- .../source-mailersend/metadata.yaml | 2 +- .../connectors/source-mailgun/metadata.yaml | 2 +- .../source-mailjet-mail/metadata.yaml | 2 +- .../source-mailjet-sms/metadata.yaml | 2 +- .../connectors/source-marketo/metadata.yaml | 2 +- .../connectors/source-metabase/metadata.yaml | 2 +- .../source-microsoft-dataverse/metadata.yaml | 2 +- .../source-microsoft-teams/metadata.yaml | 2 +- .../connectors/source-mixpanel/metadata.yaml | 2 +- .../connectors/source-monday/metadata.yaml | 2 +- .../metadata.yaml | 2 +- .../source-mongodb-v2/metadata.yaml | 2 +- .../source-mssql-strict-encrypt/metadata.yaml | 2 +- .../connectors/source-mssql/metadata.yaml | 2 +- .../connectors/source-my-hours/metadata.yaml | 2 +- .../source-mysql-strict-encrypt/metadata.yaml | 2 +- .../connectors/source-mysql/metadata.yaml | 2 +- .../connectors/source-n8n/metadata.yaml | 2 +- .../connectors/source-nasa/metadata.yaml | 2 +- .../connectors/source-netsuite/metadata.yaml | 2 +- .../connectors/source-news-api/metadata.yaml | 2 +- .../connectors/source-newsdata/metadata.yaml | 2 +- .../connectors/source-notion/metadata.yaml | 2 +- .../connectors/source-nytimes/metadata.yaml | 2 +- .../connectors/source-okta/metadata.yaml | 2 +- .../connectors/source-omnisend/metadata.yaml | 2 +- .../connectors/source-onesignal/metadata.yaml | 2 +- .../source-open-exchange-rates/metadata.yaml | 2 +- .../source-openweather/metadata.yaml | 2 +- .../connectors/source-opsgenie/metadata.yaml | 2 +- .../metadata.yaml | 2 +- .../connectors/source-oracle/metadata.yaml | 2 +- .../connectors/source-orb/metadata.yaml | 2 +- .../connectors/source-orbit/metadata.yaml | 2 +- .../connectors/source-oura/metadata.yaml | 2 +- .../connectors/source-outreach/metadata.yaml | 2 +- .../connectors/source-pardot/metadata.yaml | 2 +- .../source-partnerstack/metadata.yaml | 2 +- .../source-paypal-transaction/metadata.yaml | 2 +- .../connectors/source-paystack/metadata.yaml | 2 +- .../connectors/source-pendo/metadata.yaml | 2 +- .../connectors/source-persistiq/metadata.yaml | 2 +- .../source-pexels-api/metadata.yaml | 2 +- .../connectors/source-pinterest/metadata.yaml | 2 +- .../connectors/source-pipedrive/metadata.yaml | 2 +- .../source-pivotal-tracker/metadata.yaml | 2 +- .../connectors/source-plaid/metadata.yaml | 2 +- .../connectors/source-plausible/metadata.yaml | 2 +- .../connectors/source-pocket/metadata.yaml | 2 +- .../connectors/source-pokeapi/metadata.yaml | 2 +- .../source-polygon-stock-api/metadata.yaml | 2 +- .../metadata.yaml | 2 +- .../connectors/source-postgres/metadata.yaml | 2 +- .../connectors/source-posthog/metadata.yaml | 2 +- .../source-postmarkapp/metadata.yaml | 2 +- .../source-prestashop/metadata.yaml | 2 +- .../connectors/source-primetric/metadata.yaml | 2 +- .../source-public-apis/metadata.yaml | 2 +- .../connectors/source-punk-api/metadata.yaml | 2 +- .../connectors/source-pypi/metadata.yaml | 2 +- .../connectors/source-qonto/metadata.yaml | 2 +- .../connectors/source-qualaroo/metadata.yaml | 2 +- .../source-quickbooks-singer/metadata.yaml | 2 +- .../connectors/source-railz/metadata.yaml | 2 +- .../source-rd-station-marketing/metadata.yaml | 2 +- .../connectors/source-recharge/metadata.yaml | 2 +- .../source-recreation/metadata.yaml | 2 +- .../connectors/source-recruitee/metadata.yaml | 2 +- .../connectors/source-recurly/metadata.yaml | 2 +- .../connectors/source-redshift/metadata.yaml | 2 +- .../connectors/source-reply-io/metadata.yaml | 2 +- .../connectors/source-retently/metadata.yaml | 2 +- .../connectors/source-rki-covid/metadata.yaml | 2 +- .../source-rocket-chat/metadata.yaml | 2 +- .../connectors/source-rss/metadata.yaml | 2 +- .../connectors/source-s3/metadata.yaml | 2 +- .../source-salesforce-singer/metadata.yaml | 2 +- .../source-salesforce/metadata.yaml | 2 +- .../connectors/source-salesloft/metadata.yaml | 2 +- .../source-sap-fieldglass/metadata.yaml | 2 +- .../source-search-metrics/metadata.yaml | 2 +- .../connectors/source-secoda/metadata.yaml | 2 +- .../connectors/source-sendgrid/metadata.yaml | 2 +- .../source-sendinblue/metadata.yaml | 2 +- .../source-senseforce/metadata.yaml | 2 +- .../connectors/source-sentry/metadata.yaml | 2 +- .../connectors/source-sftp-bulk/metadata.yaml | 2 +- .../connectors/source-sftp/metadata.yaml | 2 +- .../connectors/source-shopify/metadata.yaml | 2 +- .../connectors/source-shortio/metadata.yaml | 2 +- .../connectors/source-slack/metadata.yaml | 2 +- .../connectors/source-smaily/metadata.yaml | 2 +- .../source-smartengage/metadata.yaml | 2 +- .../source-smartsheets/metadata.yaml | 2 +- .../source-snapchat-marketing/metadata.yaml | 2 +- .../connectors/source-snowflake/metadata.yaml | 2 +- .../source-sonar-cloud/metadata.yaml | 2 +- .../source-spacex-api/metadata.yaml | 2 +- .../connectors/source-square/metadata.yaml | 2 +- .../source-statuspage/metadata.yaml | 2 +- .../connectors/source-strava/metadata.yaml | 2 +- .../connectors/source-stripe/metadata.yaml | 2 +- .../source-survey-sparrow/metadata.yaml | 2 +- .../connectors/source-surveycto/metadata.yaml | 2 +- .../source-surveymonkey/metadata.yaml | 2 +- .../source-talkdesk-explore/metadata.yaml | 2 +- .../connectors/source-tempo/metadata.yaml | 2 +- .../source-the-guardian-api/metadata.yaml | 2 +- .../connectors/source-tidb/metadata.yaml | 2 +- .../source-tiktok-marketing/metadata.yaml | 2 +- .../connectors/source-timely/metadata.yaml | 2 +- .../connectors/source-tmdb/metadata.yaml | 2 +- .../connectors/source-todoist/metadata.yaml | 2 +- .../connectors/source-toggl/metadata.yaml | 2 +- .../source-tplcentral/metadata.yaml | 2 +- .../connectors/source-trello/metadata.yaml | 2 +- .../source-trustpilot/metadata.yaml | 2 +- .../source-tvmaze-schedule/metadata.yaml | 2 +- .../source-twilio-taskrouter/metadata.yaml | 2 +- .../connectors/source-twilio/metadata.yaml | 2 +- .../connectors/source-twitter/metadata.yaml | 2 +- .../source-tyntec-sms/metadata.yaml | 2 +- .../connectors/source-typeform/metadata.yaml | 2 +- .../connectors/source-unleash/metadata.yaml | 2 +- .../connectors/source-us-census/metadata.yaml | 2 +- .../connectors/source-vantage/metadata.yaml | 2 +- .../source-visma-economic/metadata.yaml | 2 +- .../connectors/source-vitally/metadata.yaml | 2 +- .../connectors/source-waiteraid/metadata.yaml | 2 +- .../source-weatherstack/metadata.yaml | 2 +- .../connectors/source-webflow/metadata.yaml | 2 +- .../source-whisky-hunter/metadata.yaml | 2 +- .../source-wikipedia-pageviews/metadata.yaml | 2 +- .../source-woocommerce/metadata.yaml | 2 +- .../connectors/source-workable/metadata.yaml | 2 +- .../connectors/source-workramp/metadata.yaml | 2 +- .../connectors/source-wrike/metadata.yaml | 2 +- .../connectors/source-xero/metadata.yaml | 2 +- .../connectors/source-xkcd/metadata.yaml | 2 +- .../source-yandex-metrica/metadata.yaml | 2 +- .../connectors/source-younium/metadata.yaml | 2 +- .../source-youtube-analytics/metadata.yaml | 2 +- .../metadata.yaml | 2 +- .../source-zendesk-chat/metadata.yaml | 2 +- .../source-zendesk-sell/metadata.yaml | 2 +- .../source-zendesk-sunshine/metadata.yaml | 2 +- .../source-zendesk-support/metadata.yaml | 2 +- .../source-zendesk-talk/metadata.yaml | 2 +- .../connectors/source-zenefits/metadata.yaml | 2 +- .../connectors/source-zenloop/metadata.yaml | 2 +- .../connectors/source-zoho-crm/metadata.yaml | 2 +- .../connectors/source-zoom/metadata.yaml | 2 +- .../connectors/source-zuora/metadata.yaml | 2 +- .../airbyte-customer-io-source/metadata.yaml | 2 +- .../airbyte-harness-source/metadata.yaml | 2 +- .../airbyte-jenkins-source/metadata.yaml | 2 +- .../airbyte-pagerduty-source/metadata.yaml | 2 +- .../airbyte-victorops-source/metadata.yaml | 2 +- .../streamr-airbyte-connector/metadata.yaml | 2 +- 387 files changed, 714 insertions(+), 701 deletions(-) rename airbyte-ci/connectors/metadata_service/lib/metadata_service/models/src/{CatalogOverrides.yaml => RegistryOverrides.yaml} (83%) rename airbyte-ci/connectors/metadata_service/lib/tests/fixtures/invalid/{metadata_catalog_no_id_override.yaml => metadata_registry_no_id_override.yaml} (97%) rename airbyte-ci/connectors/metadata_service/lib/tests/fixtures/invalid/{metadata_catalog_no_type_override.yaml => metadata_registry_no_type_override.yaml} (97%) rename airbyte-ci/connectors/metadata_service/lib/tests/fixtures/invalid/{metadata_catalog_unknown_override.yaml => metadata_registry_unknown_override.yaml} (97%) rename airbyte-ci/connectors/metadata_service/lib/tests/fixtures/valid/{metadata_catalog_allowed_hosts.yaml => metadata_registry_allowed_hosts.yaml} (100%) rename airbyte-ci/connectors/metadata_service/lib/tests/fixtures/valid/{metadata_catalog_complex_override.yaml => metadata_registry_complex_override.yaml} (98%) rename airbyte-ci/connectors/metadata_service/lib/tests/fixtures/valid/{metadata_catalog_enabled.yaml => metadata_registry_enabled.yaml} (97%) rename airbyte-ci/connectors/metadata_service/lib/tests/fixtures/valid/{metadata_catalog_required_resources.yaml => metadata_registry_required_resources.yaml} (100%) rename airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/{catalog.py => registry.py} (52%) rename airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/{catalog_report.py => registry_report.py} (66%) delete mode 100644 airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/jobs/catalog.py create mode 100644 airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/jobs/registry.py rename airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/sensors/{catalog.py => registry.py} (53%) rename airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/templates/{connector_catalog_locations.html => connector_registry_locations.html} (64%) rename airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/templates/{connector_catalog_locations.md => connector_registry_locations.md} (71%) rename airbyte-ci/connectors/metadata_service/orchestrator/tests/fixtures/{cloud_catalog.json => cloud_registry.json} (100%) rename airbyte-ci/connectors/metadata_service/orchestrator/tests/fixtures/{oss_catalog.json => oss_registry.json} (100%) rename airbyte-ci/connectors/metadata_service/orchestrator/tests/{test_catalog.py => test_registry.py} (64%) diff --git a/airbyte-ci/connectors/metadata_service/lib/README.md b/airbyte-ci/connectors/metadata_service/lib/README.md index e2c4fc02d85c..333b8adcddbd 100644 --- a/airbyte-ci/connectors/metadata_service/lib/README.md +++ b/airbyte-ci/connectors/metadata_service/lib/README.md @@ -32,5 +32,5 @@ poetry run pytest ## Validating Metadata Files ```bash -poetry run metadata_service validate tests/fixtures/valid/metadata_catalog_override.yaml +poetry run metadata_service validate tests/fixtures/valid/metadata_registry_override.yaml ``` diff --git a/airbyte-ci/connectors/metadata_service/lib/metadata_service/models/generated/ConnectorMetadataDefinitionV1.py b/airbyte-ci/connectors/metadata_service/lib/metadata_service/models/generated/ConnectorMetadataDefinitionV1.py index 984814d5b4d3..ce4366a528b2 100644 --- a/airbyte-ci/connectors/metadata_service/lib/metadata_service/models/generated/ConnectorMetadataDefinitionV1.py +++ b/airbyte-ci/connectors/metadata_service/lib/metadata_service/models/generated/ConnectorMetadataDefinitionV1.py @@ -1,7 +1,3 @@ -# -# Copyright (c) 2023 Airbyte, Inc., all rights reserved. -# - # generated by datamodel-codegen: # filename: ConnectorMetadataDefinitionV1.yaml @@ -112,7 +108,7 @@ class Config: jobSpecific: Optional[List[JobTypeResourceLimit]] = None -class CatalogOverrides(BaseModel): +class RegistryOverrides(BaseModel): class Config: extra = Extra.forbid @@ -131,12 +127,12 @@ class Config: resourceRequirements: Optional[ActorDefinitionResourceRequirements] = None -class Catalog(BaseModel): +class Registry(BaseModel): class Config: extra = Extra.forbid - oss: Optional[CatalogOverrides] = None - cloud: Optional[CatalogOverrides] = None + oss: Optional[RegistryOverrides] = None + cloud: Optional[RegistryOverrides] = None class Data(BaseModel): @@ -152,7 +148,7 @@ class Data(BaseModel): githubIssueLabel: str connectorSubtype: ConnectorSubtype releaseStage: ReleaseStage - catalogs: Optional[Catalog] = None + registries: Optional[Registry] = None allowedHosts: Optional[AllowedHosts] = None normalizationConfig: Optional[NormalizationDestinationDefinitionConfig] = None suggestedStreams: Optional[SuggestedStreams] = None diff --git a/airbyte-ci/connectors/metadata_service/lib/metadata_service/models/src/ConnectorMetadataDefinitionV1.yaml b/airbyte-ci/connectors/metadata_service/lib/metadata_service/models/src/ConnectorMetadataDefinitionV1.yaml index d7f27a91a895..4ef072f598a1 100644 --- a/airbyte-ci/connectors/metadata_service/lib/metadata_service/models/src/ConnectorMetadataDefinitionV1.yaml +++ b/airbyte-ci/connectors/metadata_service/lib/metadata_service/models/src/ConnectorMetadataDefinitionV1.yaml @@ -69,17 +69,17 @@ properties: - generally_available - source - catalogs: + registries: anyOf: - type: object additionalProperties: false properties: oss: anyOf: - - "$ref": CatalogOverrides.yaml + - "$ref": RegistryOverrides.yaml cloud: anyOf: - - "$ref": CatalogOverrides.yaml + - "$ref": RegistryOverrides.yaml allowedHosts: "$ref": AllowedHosts.yaml diff --git a/airbyte-ci/connectors/metadata_service/lib/metadata_service/models/src/CatalogOverrides.yaml b/airbyte-ci/connectors/metadata_service/lib/metadata_service/models/src/RegistryOverrides.yaml similarity index 83% rename from airbyte-ci/connectors/metadata_service/lib/metadata_service/models/src/CatalogOverrides.yaml rename to airbyte-ci/connectors/metadata_service/lib/metadata_service/models/src/RegistryOverrides.yaml index 7ef356d5f766..60399e80af35 100644 --- a/airbyte-ci/connectors/metadata_service/lib/metadata_service/models/src/CatalogOverrides.yaml +++ b/airbyte-ci/connectors/metadata_service/lib/metadata_service/models/src/RegistryOverrides.yaml @@ -1,8 +1,8 @@ --- "$schema": http://json-schema.org/draft-07/schema# -"$id": https://github.com/airbytehq/airbyte/airbyte-ci/connectors_ci/metadata_service/lib/models/src/CatalogOverrides.yml -title: CatalogOverrides -description: describes the overrides per catalog of a connector +"$id": https://github.com/airbytehq/airbyte/airbyte-ci/connectors_ci/metadata_service/lib/models/src/RegistryOverrides.yml +title: RegistryOverrides +description: describes the overrides per registry of a connector type: object additionalProperties: false required: diff --git a/airbyte-ci/connectors/metadata_service/lib/pyproject.toml b/airbyte-ci/connectors/metadata_service/lib/pyproject.toml index e3c433c2d241..24b1b9d811c0 100644 --- a/airbyte-ci/connectors/metadata_service/lib/pyproject.toml +++ b/airbyte-ci/connectors/metadata_service/lib/pyproject.toml @@ -28,7 +28,7 @@ pytest-mock = "^3.10.0" metadata_service = "metadata_service.commands:metadata_service" [tool.poe.tasks] -generate-models = "datamodel-codegen --input metadata_service/models/src/ConnectorMetadataDefinitionV1.yaml --output metadata_service/models/generated/ConnectorMetadataDefinitionV1.py --use-title-as-name --disable-timestamp" +generate-models = "datamodel-codegen --input metadata_service/models/src/ConnectorMetadataDefinitionV1.yaml --output metadata_service/models/generated/ConnectorMetadataDefinitionV1.py --use-title-as-name --use-double-quotes --disable-timestamp" [build-system] requires = ["poetry-core"] diff --git a/airbyte-ci/connectors/metadata_service/lib/tests/fixtures/invalid/metadata_catalog_no_id_override.yaml b/airbyte-ci/connectors/metadata_service/lib/tests/fixtures/invalid/metadata_registry_no_id_override.yaml similarity index 97% rename from airbyte-ci/connectors/metadata_service/lib/tests/fixtures/invalid/metadata_catalog_no_id_override.yaml rename to airbyte-ci/connectors/metadata_service/lib/tests/fixtures/invalid/metadata_registry_no_id_override.yaml index 44c99f6008a8..867a7e0dba98 100644 --- a/airbyte-ci/connectors/metadata_service/lib/tests/fixtures/invalid/metadata_catalog_no_id_override.yaml +++ b/airbyte-ci/connectors/metadata_service/lib/tests/fixtures/invalid/metadata_registry_no_id_override.yaml @@ -14,7 +14,7 @@ data: hosts: - "${host}" - "${tunnel_method.tunnel_host}" - catalogs: + registries: oss: enabled: true definitionId: woohoo diff --git a/airbyte-ci/connectors/metadata_service/lib/tests/fixtures/invalid/metadata_catalog_no_type_override.yaml b/airbyte-ci/connectors/metadata_service/lib/tests/fixtures/invalid/metadata_registry_no_type_override.yaml similarity index 97% rename from airbyte-ci/connectors/metadata_service/lib/tests/fixtures/invalid/metadata_catalog_no_type_override.yaml rename to airbyte-ci/connectors/metadata_service/lib/tests/fixtures/invalid/metadata_registry_no_type_override.yaml index 111500b43b1d..f27e7158daee 100644 --- a/airbyte-ci/connectors/metadata_service/lib/tests/fixtures/invalid/metadata_catalog_no_type_override.yaml +++ b/airbyte-ci/connectors/metadata_service/lib/tests/fixtures/invalid/metadata_registry_no_type_override.yaml @@ -14,7 +14,7 @@ data: hosts: - "${host}" - "${tunnel_method.tunnel_host}" - catalogs: + registries: oss: enabled: true connectorType: destination diff --git a/airbyte-ci/connectors/metadata_service/lib/tests/fixtures/invalid/metadata_catalog_unknown_override.yaml b/airbyte-ci/connectors/metadata_service/lib/tests/fixtures/invalid/metadata_registry_unknown_override.yaml similarity index 97% rename from airbyte-ci/connectors/metadata_service/lib/tests/fixtures/invalid/metadata_catalog_unknown_override.yaml rename to airbyte-ci/connectors/metadata_service/lib/tests/fixtures/invalid/metadata_registry_unknown_override.yaml index 281fd1e1ba2d..1f49c7168235 100644 --- a/airbyte-ci/connectors/metadata_service/lib/tests/fixtures/invalid/metadata_catalog_unknown_override.yaml +++ b/airbyte-ci/connectors/metadata_service/lib/tests/fixtures/invalid/metadata_registry_unknown_override.yaml @@ -14,7 +14,7 @@ data: hosts: - "${host}" - "${tunnel_method.tunnel_host}" - catalogs: + registries: oss: enabled: true what: is this? diff --git a/airbyte-ci/connectors/metadata_service/lib/tests/fixtures/valid/metadata_catalog_allowed_hosts.yaml b/airbyte-ci/connectors/metadata_service/lib/tests/fixtures/valid/metadata_registry_allowed_hosts.yaml similarity index 100% rename from airbyte-ci/connectors/metadata_service/lib/tests/fixtures/valid/metadata_catalog_allowed_hosts.yaml rename to airbyte-ci/connectors/metadata_service/lib/tests/fixtures/valid/metadata_registry_allowed_hosts.yaml diff --git a/airbyte-ci/connectors/metadata_service/lib/tests/fixtures/valid/metadata_catalog_complex_override.yaml b/airbyte-ci/connectors/metadata_service/lib/tests/fixtures/valid/metadata_registry_complex_override.yaml similarity index 98% rename from airbyte-ci/connectors/metadata_service/lib/tests/fixtures/valid/metadata_catalog_complex_override.yaml rename to airbyte-ci/connectors/metadata_service/lib/tests/fixtures/valid/metadata_registry_complex_override.yaml index 83a3778be407..428153507101 100644 --- a/airbyte-ci/connectors/metadata_service/lib/tests/fixtures/valid/metadata_catalog_complex_override.yaml +++ b/airbyte-ci/connectors/metadata_service/lib/tests/fixtures/valid/metadata_registry_complex_override.yaml @@ -14,7 +14,7 @@ data: hosts: - "${host}" - "${tunnel_method.tunnel_host}" - catalogs: + registries: oss: enabled: true cloud: diff --git a/airbyte-ci/connectors/metadata_service/lib/tests/fixtures/valid/metadata_catalog_enabled.yaml b/airbyte-ci/connectors/metadata_service/lib/tests/fixtures/valid/metadata_registry_enabled.yaml similarity index 97% rename from airbyte-ci/connectors/metadata_service/lib/tests/fixtures/valid/metadata_catalog_enabled.yaml rename to airbyte-ci/connectors/metadata_service/lib/tests/fixtures/valid/metadata_registry_enabled.yaml index 67f64e878822..ad5004ab8210 100644 --- a/airbyte-ci/connectors/metadata_service/lib/tests/fixtures/valid/metadata_catalog_enabled.yaml +++ b/airbyte-ci/connectors/metadata_service/lib/tests/fixtures/valid/metadata_registry_enabled.yaml @@ -14,6 +14,6 @@ data: hosts: - "${host}" - "${tunnel_method.tunnel_host}" - catalogs: + registries: oss: enabled: true diff --git a/airbyte-ci/connectors/metadata_service/lib/tests/fixtures/valid/metadata_catalog_required_resources.yaml b/airbyte-ci/connectors/metadata_service/lib/tests/fixtures/valid/metadata_registry_required_resources.yaml similarity index 100% rename from airbyte-ci/connectors/metadata_service/lib/tests/fixtures/valid/metadata_catalog_required_resources.yaml rename to airbyte-ci/connectors/metadata_service/lib/tests/fixtures/valid/metadata_registry_required_resources.yaml diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/.env.template b/airbyte-ci/connectors/metadata_service/orchestrator/.env.template index 3cd1812bdcc0..28139757028f 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/.env.template +++ b/airbyte-ci/connectors/metadata_service/orchestrator/.env.template @@ -1 +1,2 @@ METADATA_BUCKET="ben-ab-test-bucket" +GITHUB_METADATA_SERVICE_TOKEN="" diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/README.md b/airbyte-ci/connectors/metadata_service/orchestrator/README.md index f3d402f93104..7fccdeb701cb 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/README.md +++ b/airbyte-ci/connectors/metadata_service/orchestrator/README.md @@ -43,7 +43,7 @@ Developing against the orchestrator requires a development bucket in GCP. The orchestrator will use this bucket to: - store important output files. (e.g. Reports) -- watch for changes to the `catalog` directory in the bucket. +- watch for changes to the `registry` directory in the bucket. However all tmp files will be stored in a local directory. diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/__init__.py b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/__init__.py index 873b0c98afff..d7242aaba237 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/__init__.py +++ b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/__init__.py @@ -2,67 +2,78 @@ # Copyright (c) 2023 Airbyte, Inc., all rights reserved. # from dagster import Definitions -from metadata_service.constants import METADATA_FILE_NAME, METADATA_FOLDER -from orchestrator.assets.catalog import ( - cloud_catalog_from_metadata, - cloud_destinations_dataframe, - cloud_sources_dataframe, - latest_cloud_catalog_dict, - latest_oss_catalog_dict, - oss_catalog_from_metadata, + +from orchestrator.jobs.registry import generate_registry, generate_registry_markdown, generate_local_metadata_files +from orchestrator.resources.gcp import gcp_gcs_client, gcs_bucket_manager, gcs_directory_blobs, gcs_file_blob, gcs_file_manager +from orchestrator.resources.github import github_client, github_connector_repo, github_connectors_directory +from orchestrator.resources.local import simple_local_file_manager + + +from orchestrator.assets.github import github_connector_folders +from orchestrator.assets.specs_secrets_mask import all_specs_secrets, specs_secrets_mask_yaml +from orchestrator.assets.spec_cache import cached_specs +from orchestrator.assets.registry_report import ( + all_sources_dataframe, + all_destinations_dataframe, + connector_registry_location_markdown, + connector_registry_location_html, +) +from orchestrator.assets.registry import ( oss_destinations_dataframe, + cloud_destinations_dataframe, oss_sources_dataframe, + cloud_sources_dataframe, + latest_oss_registry_dict, + latest_cloud_registry_dict, + oss_registry_from_metadata, + cloud_registry_from_metadata, ) -from orchestrator.assets.catalog_report import ( - all_destinations_dataframe, - all_sources_dataframe, - connector_catalog_location_html, - connector_catalog_location_markdown, +from orchestrator.assets.metadata import ( + registry_derived_metadata_definitions, + valid_metadata_report_dataframe, + metadata_definitions, ) + from orchestrator.assets.dev import ( - cloud_catalog_diff, - cloud_catalog_diff_dataframe, - metadata_directory_report, - oss_catalog_diff, - oss_catalog_diff_dataframe, - overrode_metadata_definitions, persist_metadata_definitions, + overrode_metadata_definitions, + oss_registry_diff, + cloud_registry_diff, + cloud_registry_diff_dataframe, + oss_registry_diff_dataframe, + metadata_directory_report, ) -from orchestrator.assets.github import github_connector_folders -from orchestrator.assets.metadata import catalog_derived_metadata_definitions, metadata_definitions, valid_metadata_report_dataframe -from orchestrator.assets.spec_cache import cached_specs -from orchestrator.assets.specs_secrets_mask import all_specs_secrets, specs_secrets_mask_yaml -from orchestrator.config import CATALOG_FOLDER, CONNECTOR_REPO_NAME, CONNECTORS_PATH, REPORT_FOLDER -from orchestrator.jobs.catalog import generate_catalog, generate_catalog_markdown, generate_local_metadata_files -from orchestrator.resources.gcp import gcp_gcs_client, gcs_bucket_manager, gcs_directory_blobs, gcs_file_blob, gcs_file_manager -from orchestrator.resources.github import github_client, github_connector_repo, github_connectors_directory -from orchestrator.resources.local import simple_local_file_manager -from orchestrator.sensors.catalog import catalog_updated_sensor + +from orchestrator.jobs.registry import generate_registry_markdown, generate_local_metadata_files, generate_registry +from orchestrator.sensors.registry import registry_updated_sensor from orchestrator.sensors.metadata import metadata_updated_sensor +from orchestrator.config import REPORT_FOLDER, REGISTRIES_FOLDER, CONNECTORS_PATH, CONNECTOR_REPO_NAME +from metadata_service.constants import METADATA_FILE_NAME, METADATA_FOLDER + ASSETS = [ oss_destinations_dataframe, cloud_destinations_dataframe, oss_sources_dataframe, cloud_sources_dataframe, - latest_oss_catalog_dict, - latest_cloud_catalog_dict, + latest_oss_registry_dict, + latest_cloud_registry_dict, all_sources_dataframe, all_destinations_dataframe, - connector_catalog_location_markdown, - connector_catalog_location_html, + connector_registry_location_markdown, + connector_registry_location_html, github_connector_folders, - catalog_derived_metadata_definitions, + registry_derived_metadata_definitions, valid_metadata_report_dataframe, persist_metadata_definitions, overrode_metadata_definitions, cached_specs, - oss_catalog_diff, - oss_catalog_from_metadata, - cloud_catalog_diff, - cloud_catalog_from_metadata, - cloud_catalog_diff_dataframe, - oss_catalog_diff_dataframe, + oss_registry_diff, + oss_registry_from_metadata, + cloud_registry_diff, + cloud_registry_from_metadata, + cloud_registry_diff_dataframe, + oss_registry_diff_dataframe, all_specs_secrets, specs_secrets_mask_yaml, metadata_directory_report, @@ -71,7 +82,7 @@ RESOURCES = { "metadata_file_directory": simple_local_file_manager.configured({"base_dir": "/tmp/metadata"}), - "github_client": github_client, + "github_client": github_client.configured({"github_token": {"env": "GITHUB_METADATA_SERVICE_TOKEN"}}), "github_connector_repo": github_connector_repo.configured({"connector_repo_name": CONNECTOR_REPO_NAME}), "github_connectors_directory": github_connectors_directory.configured({"connectors_path": CONNECTORS_PATH}), "gcp_gcs_client": gcp_gcs_client.configured( @@ -80,21 +91,21 @@ } ), "gcs_bucket_manager": gcs_bucket_manager.configured({"gcs_bucket": {"env": "METADATA_BUCKET"}}), - "catalog_directory_manager": gcs_file_manager.configured({"gcs_bucket": {"env": "METADATA_BUCKET"}, "prefix": CATALOG_FOLDER}), - "catalog_report_directory_manager": gcs_file_manager.configured({"gcs_bucket": {"env": "METADATA_BUCKET"}, "prefix": REPORT_FOLDER}), + "registry_directory_manager": gcs_file_manager.configured({"gcs_bucket": {"env": "METADATA_BUCKET"}, "prefix": REGISTRIES_FOLDER}), + "registry_report_directory_manager": gcs_file_manager.configured({"gcs_bucket": {"env": "METADATA_BUCKET"}, "prefix": REPORT_FOLDER}), "metadata_file_blobs": gcs_directory_blobs.configured({"prefix": METADATA_FOLDER, "suffix": METADATA_FILE_NAME}), - "latest_oss_catalog_gcs_file": gcs_file_blob.configured({"prefix": CATALOG_FOLDER, "gcs_filename": "oss_catalog.json"}), - "latest_cloud_catalog_gcs_file": gcs_file_blob.configured({"prefix": CATALOG_FOLDER, "gcs_filename": "cloud_catalog.json"}), + "latest_oss_registry_gcs_file": gcs_file_blob.configured({"prefix": REGISTRIES_FOLDER, "gcs_filename": "oss_registry.json"}), + "latest_cloud_registry_gcs_file": gcs_file_blob.configured({"prefix": REGISTRIES_FOLDER, "gcs_filename": "cloud_registry.json"}), } SENSORS = [ - catalog_updated_sensor(job=generate_catalog_markdown, resources_def=RESOURCES), - metadata_updated_sensor(job=generate_catalog, resources_def=RESOURCES), + registry_updated_sensor(job=generate_registry_markdown, resources_def=RESOURCES), + metadata_updated_sensor(job=generate_registry, resources_def=RESOURCES), ] SCHEDULES = [] -JOBS = [generate_catalog_markdown, generate_local_metadata_files] +JOBS = [generate_registry_markdown, generate_local_metadata_files] """ START HERE diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/dev.py b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/dev.py index 7a0e7387db7b..af3da1a809cc 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/dev.py +++ b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/dev.py @@ -139,27 +139,27 @@ # HELPERS -def key_catalog_entries(catalog: List[dict]) -> dict: +def key_registry_entries(registry: List[dict]) -> dict: """Transforms a List of connectors into a dictionary keyed by the connector id. Args: - catalog (List[dict]): List of connectors + registry (List[dict]): List of connectors Returns: dict: Dictionary of connectors keyed by the connector id """ - catalog_keyed = catalog.copy() + registry_keyed = registry.copy() for connector_type, id_field in [("sources", "sourceDefinitionId"), ("destinations", "destinationDefinitionId")]: - catalog_keyed[connector_type] = key_by(catalog_keyed[connector_type], id_field) - return catalog_keyed + registry_keyed[connector_type] = key_by(registry_keyed[connector_type], id_field) + return registry_keyed -def diff_catalogs(catalog_dict_1: dict, catalog_dict_2: dict) -> DeepDiff: - """Compares two catalogs and returns a DeepDiff object. +def diff_registries(registry_dict_1: dict, registry_dict_2: dict) -> DeepDiff: + """Compares two registries and returns a DeepDiff object. Args: - catalog_dict_1 (dict) - catalog_dict_2 (dict) + registry_dict_1 (dict) + registry_dict_2 (dict) Returns: DeepDiff @@ -173,29 +173,31 @@ def diff_catalogs(catalog_dict_1: dict, catalog_dict_2: dict) -> DeepDiff: r"protocolVersion", ] - # TODO (ben) remove this when checking the final catalog from GCS metadata + # TODO (ben) remove this when checking the final registry from GCS metadata temporarily_ignored_fields = [ r"spec", ] excludedRegex = new_metadata_fields + removed_metadata_fields + temporarily_ignored_fields - keyed_catalog_dict_1 = key_catalog_entries(catalog_dict_1) - keyed_catalog_dict_2 = key_catalog_entries(catalog_dict_2) + keyed_registry_dict_1 = key_registry_entries(registry_dict_1) + keyed_registry_dict_2 = key_registry_entries(registry_dict_2) - return DeepDiff(keyed_catalog_dict_1, keyed_catalog_dict_2, ignore_order=True, exclude_regex_paths=excludedRegex, verbose_level=2) + return DeepDiff(keyed_registry_dict_1, keyed_registry_dict_2, ignore_order=True, exclude_regex_paths=excludedRegex, verbose_level=2) # ASSETS @asset(group_name=GROUP_NAME) -def overrode_metadata_definitions(catalog_derived_metadata_definitions: List[PartialMetadataDefinition]) -> List[PartialMetadataDefinition]: +def overrode_metadata_definitions( + registry_derived_metadata_definitions: List[PartialMetadataDefinition], +) -> List[PartialMetadataDefinition]: """ Overrides the metadata definitions with the values in the OVERRIDES dictionary. This is useful for ensuring all connectors are passing validation when we go live. """ overrode_definitions = [] - for metadata_definition in catalog_derived_metadata_definitions: + for metadata_definition in registry_derived_metadata_definitions: definition_id = metadata_definition["data"]["definitionId"] if definition_id in OVERRIDES: metadata_definition["data"].update(OVERRIDES[definition_id]) @@ -228,30 +230,30 @@ def persist_metadata_definitions(context: OpExecutionContext, overrode_metadata_ @asset(group_name=GROUP_NAME) -def cloud_catalog_diff(cloud_catalog_from_metadata: dict, latest_cloud_catalog_dict: dict) -> dict: +def cloud_registry_diff(cloud_registry_from_metadata: dict, latest_cloud_registry_dict: dict) -> dict: """ - Compares the cloud catalog from the metadata with the latest OSS catalog. + Compares the cloud registry from the metadata with the latest OSS registry. """ - return diff_catalogs(latest_cloud_catalog_dict, cloud_catalog_from_metadata).to_dict() + return diff_registries(latest_cloud_registry_dict, cloud_registry_from_metadata).to_dict() @asset(group_name=GROUP_NAME) -def oss_catalog_diff(oss_catalog_from_metadata: dict, latest_oss_catalog_dict: dict) -> dict: +def oss_registry_diff(oss_registry_from_metadata: dict, latest_oss_registry_dict: dict) -> dict: """ - Compares the OSS catalog from the metadata with the latest OSS catalog. + Compares the OSS registry from the metadata with the latest OSS registry. """ - return diff_catalogs(latest_oss_catalog_dict, oss_catalog_from_metadata).to_dict() + return diff_registries(latest_oss_registry_dict, oss_registry_from_metadata).to_dict() @asset(group_name=GROUP_NAME) -def cloud_catalog_diff_dataframe(cloud_catalog_diff: dict) -> OutputDataFrame: - diff_df = pd.DataFrame.from_dict(cloud_catalog_diff) +def cloud_registry_diff_dataframe(cloud_registry_diff: dict) -> OutputDataFrame: + diff_df = pd.DataFrame.from_dict(cloud_registry_diff) return output_dataframe(diff_df) @asset(group_name=GROUP_NAME) -def oss_catalog_diff_dataframe(oss_catalog_diff: dict) -> OutputDataFrame: - diff_df = pd.DataFrame.from_dict(oss_catalog_diff) +def oss_registry_diff_dataframe(oss_registry_diff: dict) -> OutputDataFrame: + diff_df = pd.DataFrame.from_dict(oss_registry_diff) return output_dataframe(diff_df) diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/metadata.py b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/metadata.py index 7715c18308fd..9b95b861f699 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/metadata.py +++ b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/metadata.py @@ -19,13 +19,13 @@ CLOUD_SUFFIX = "_cloud" -def get_primary_catalog_suffix(merged_df): +def get_primary_registry_suffix(merged_df): """ - Returns the suffix for the primary catalog and the secondary catalog. - The primary catalog is the one that is used for the final metadata. - The secondary catalog is the one that is used for overrides. + Returns the suffix for the primary registry and the secondary registry. + The primary registry is the one that is used for the final metadata. + The secondary registry is the one that is used for overrides. - This is nessesary because we have connectors that are only in the cloud catalog and vice versa. + This is nessesary because we have connectors that are only in the cloud registry and vice versa. """ cloud_only = merged_df["_merge"] == "right_only" primary_suffix = CLOUD_SUFFIX if cloud_only else OSS_SUFFIX @@ -35,11 +35,11 @@ def get_primary_catalog_suffix(merged_df): def get_field_with_fallback(merged_df, field): """ - Returns the value of the field from the primary catalog. - If the field is not present in the primary catalog, the value from the secondary catalog is returned. + Returns the value of the field from the primary registry. + If the field is not present in the primary registry, the value from the secondary registry is returned. """ - primary_suffix, secondary_suffix = get_primary_catalog_suffix(merged_df) + primary_suffix, secondary_suffix = get_primary_registry_suffix(merged_df) primary_field = field + primary_suffix secondary_field = field + secondary_suffix @@ -48,14 +48,14 @@ def get_field_with_fallback(merged_df, field): return merged_df.get(primary_field, default=secondary_value) -def compute_catalog_overrides(merged_df): +def compute_registry_overrides(merged_df): """ - Returns the catalog overrides section for the metadata file. + Returns the registry overrides section for the metadata file. """ cloud_only = merged_df["_merge"] == "right_only" oss_only = merged_df["_merge"] == "left_only" - catalogs = { + registries = { "oss": { "enabled": not cloud_only, }, @@ -65,7 +65,7 @@ def compute_catalog_overrides(merged_df): } if cloud_only or oss_only: - return catalogs + return registries allowed_overrides = [ "name", @@ -82,7 +82,7 @@ def compute_catalog_overrides(merged_df): "resourceRequirements", ] - # find the difference between the two catalogs + # find the difference between the two registries for override_col in allowed_overrides: oss_col = override_col + OSS_SUFFIX cloud_col = override_col + CLOUD_SUFFIX @@ -92,9 +92,9 @@ def compute_catalog_overrides(merged_df): # if the columns are different, add the cloud value to the overrides if cloud_value and not are_values_equal(oss_value, cloud_value): - catalogs["cloud"][override_col] = merge_values(oss_value, cloud_value) + registries["cloud"][override_col] = merge_values(oss_value, cloud_value) - return catalogs + return registries def merge_into_metadata_definitions( @@ -105,8 +105,8 @@ def merge_into_metadata_definitions( Args: id_field (str): The field that uniquely identifies a connector. connector_type (str): The type of connector (source or destination). - oss_connector_df (pd.DataFrame): The dataframe containing the related OSS connector in the catalog. - cloud_connector_df (pd.DataFrame): The dataframe containing the related Cloud connector in the catalog. + oss_connector_df (pd.DataFrame): The dataframe containing the related OSS connector in the registry. + cloud_connector_df (pd.DataFrame): The dataframe containing the related Cloud connector in the registry. Returns: pd.Series: The merged metadata definition. @@ -118,33 +118,33 @@ def merge_into_metadata_definitions( # Replace numpy nan values with None sanitized_connectors = merged_connectors.replace([np.nan], [None]) - def build_metadata(connector_catalog_entry: dict) -> PartialMetadataDefinition: + def build_metadata(connector_registry_entry: dict) -> PartialMetadataDefinition: """Builds the metadata definition for a single connector. Args: - connector_catalog_entry (dict): The merged connector metadata from the existing json catalogs. + connector_registry_entry (dict): The merged connector metadata from the existing json registries. Returns: PartialMetadataDefinition: The final metadata definition. """ raw_data = { - "name": get_field_with_fallback(connector_catalog_entry, "name"), - "definitionId": connector_catalog_entry[id_field], + "name": get_field_with_fallback(connector_registry_entry, "name"), + "definitionId": connector_registry_entry[id_field], "connectorType": connector_type, - "dockerRepository": get_field_with_fallback(connector_catalog_entry, "dockerRepository"), - "githubIssueLabel": get_field_with_fallback(connector_catalog_entry, "dockerRepository").replace("airbyte/", ""), - "dockerImageTag": get_field_with_fallback(connector_catalog_entry, "dockerImageTag"), - "icon": get_field_with_fallback(connector_catalog_entry, "icon"), - "supportUrl": get_field_with_fallback(connector_catalog_entry, "documentationUrl"), - "connectorSubtype": get_field_with_fallback(connector_catalog_entry, "sourceType"), - "releaseStage": get_field_with_fallback(connector_catalog_entry, "releaseStage"), + "dockerRepository": get_field_with_fallback(connector_registry_entry, "dockerRepository"), + "githubIssueLabel": get_field_with_fallback(connector_registry_entry, "dockerRepository").replace("airbyte/", ""), + "dockerImageTag": get_field_with_fallback(connector_registry_entry, "dockerImageTag"), + "icon": get_field_with_fallback(connector_registry_entry, "icon"), + "supportUrl": get_field_with_fallback(connector_registry_entry, "documentationUrl"), + "connectorSubtype": get_field_with_fallback(connector_registry_entry, "sourceType"), + "releaseStage": get_field_with_fallback(connector_registry_entry, "releaseStage"), "license": "MIT", - "supportsDbt": get_field_with_fallback(connector_catalog_entry, "supportsDbt"), - "supportsNormalization": get_field_with_fallback(connector_catalog_entry, "supportsNormalization"), - "allowedHosts": get_field_with_fallback(connector_catalog_entry, "allowedHosts"), - "normalizationConfig": get_field_with_fallback(connector_catalog_entry, "normalizationConfig"), - "suggestedStreams": get_field_with_fallback(connector_catalog_entry, "suggestedStreams"), - "resourceRequirements": get_field_with_fallback(connector_catalog_entry, "resourceRequirements"), + "supportsDbt": get_field_with_fallback(connector_registry_entry, "supportsDbt"), + "supportsNormalization": get_field_with_fallback(connector_registry_entry, "supportsNormalization"), + "allowedHosts": get_field_with_fallback(connector_registry_entry, "allowedHosts"), + "normalizationConfig": get_field_with_fallback(connector_registry_entry, "normalizationConfig"), + "suggestedStreams": get_field_with_fallback(connector_registry_entry, "suggestedStreams"), + "resourceRequirements": get_field_with_fallback(connector_registry_entry, "resourceRequirements"), } # remove none values @@ -152,12 +152,12 @@ def build_metadata(connector_catalog_entry: dict) -> PartialMetadataDefinition: metadata = {"metadataSpecVersion": "1.0", "data": data} - catalogs = compute_catalog_overrides(connector_catalog_entry) - metadata["data"]["catalogs"] = catalogs + registries = compute_registry_overrides(connector_registry_entry) + metadata["data"]["registries"] = registries return PartialMetadataDefinition.construct(**metadata) - metadata_list = [build_metadata(connector_catalog_entry) for _, connector_catalog_entry in sanitized_connectors.iterrows()] + metadata_list = [build_metadata(connector_registry_entry) for _, connector_registry_entry in sanitized_connectors.iterrows()] return metadata_list @@ -199,7 +199,7 @@ def valid_metadata_report_dataframe(overrode_metadata_definitions: List[PartialM @asset(group_name=GROUP_NAME) -def catalog_derived_metadata_definitions( +def registry_derived_metadata_definitions( cloud_sources_dataframe, cloud_destinations_dataframe, oss_sources_dataframe, oss_destinations_dataframe ) -> Output[List[PartialMetadataDefinition]]: sources_metadata_list = merge_into_metadata_definitions("sourceDefinitionId", "source", oss_sources_dataframe, cloud_sources_dataframe) diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/catalog.py b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/registry.py similarity index 52% rename from airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/catalog.py rename to airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/registry.py index 88428c645039..b576bfb05c45 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/catalog.py +++ b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/registry.py @@ -12,7 +12,7 @@ from orchestrator.utils.dagster_helpers import OutputDataFrame, output_dataframe from orchestrator.utils.object_helpers import deep_copy_params -GROUP_NAME = "catalog" +GROUP_NAME = "registry" # ERRORS @@ -25,39 +25,39 @@ class MissingCachedSpecError(Exception): @deep_copy_params -def apply_overrides_from_catalog(metadata_data: dict, override_catalog_key: str) -> dict: - """Apply the overrides from the catalog to the metadata data. +def apply_overrides_from_registry(metadata_data: dict, override_registry_key: str) -> dict: + """Apply the overrides from the registry to the metadata data. Args: metadata_data (dict): The metadata data field. - override_catalog_key (str): The key of the catalog to override the metadata with. + override_registry_key (str): The key of the registry to override the metadata with. Returns: dict: The metadata data field with the overrides applied. """ - override_catalog = metadata_data["catalogs"][override_catalog_key] - del override_catalog["enabled"] - metadata_data.update(override_catalog) + override_registry = metadata_data["registries"][override_registry_key] + del override_registry["enabled"] + metadata_data.update(override_registry) return metadata_data @deep_copy_params -def metadata_to_catalog_entry(metadata_definition: dict, connector_type: str, override_catalog_key: str) -> dict: - """Convert the metadata definition to a catalog entry. +def metadata_to_registry_entry(metadata_definition: dict, connector_type: str, override_registry_key: str) -> dict: + """Convert the metadata definition to a registry entry. Args: metadata_definition (dict): The metadata definition. connector_type (str): One of "source" or "destination". - override_catalog_key (str): The key of the catalog to override the metadata with. + override_registry_key (str): The key of the registry to override the metadata with. Returns: - dict: The catalog equivalent of the metadata definition. + dict: The registry equivalent of the metadata definition. """ metadata_data = metadata_definition["data"] - overrode_metadata_data = apply_overrides_from_catalog(metadata_data, override_catalog_key) - del overrode_metadata_data["catalogs"] + overrode_metadata_data = apply_overrides_from_registry(metadata_data, override_registry_key) + del overrode_metadata_data["registries"] del overrode_metadata_data["connectorType"] @@ -84,7 +84,7 @@ def metadata_to_catalog_entry(metadata_definition: dict, connector_type: str, ov overrode_metadata_data["public"] = True # if there is no releaseStage, set it to "alpha" - # Note: this is something our current cloud catalog generator does + # Note: this is something our current cloud registry generator does # Note: We will not once this is live if not overrode_metadata_data.get("releaseStage"): overrode_metadata_data["releaseStage"] = "alpha" @@ -92,38 +92,38 @@ def metadata_to_catalog_entry(metadata_definition: dict, connector_type: str, ov return overrode_metadata_data -def is_metadata_catalog_enabled(metadata_definition: dict, catalog_name: str) -> bool: - return metadata_definition["data"]["catalogs"][catalog_name]["enabled"] +def is_metadata_registry_enabled(metadata_definition: dict, registry_name: str) -> bool: + return metadata_definition["data"]["registries"][registry_name]["enabled"] def is_metadata_connector_type(metadata_definition: dict, connector_type: str) -> bool: return metadata_definition["data"]["connectorType"] == connector_type -def construct_catalog_from_metadata(catalog_derived_metadata_definitions: List[PartialMetadataDefinition], catalog_name: str) -> dict: - """Construct the catalog from the metadata definitions. +def construct_registry_from_metadata(registry_derived_metadata_definitions: List[PartialMetadataDefinition], registry_name: str) -> dict: + """Construct the registry from the metadata definitions. Args: - catalog_derived_metadata_definitions (List[dict]): Metadata definitions that have been derived from the existing catalog. - catalog_name (str): The name of the catalog to construct. One of "cloud" or "oss". + registry_derived_metadata_definitions (List[dict]): Metadata definitions that have been derived from the existing registry. + registry_name (str): The name of the registry to construct. One of "cloud" or "oss". Returns: - dict: The catalog. + dict: The registry. """ - catalog_sources = [ - metadata_to_catalog_entry(metadata, "source", catalog_name) - for metadata in catalog_derived_metadata_definitions - if is_metadata_catalog_enabled(metadata, catalog_name) and is_metadata_connector_type(metadata, "source") + registry_sources = [ + metadata_to_registry_entry(metadata, "source", registry_name) + for metadata in registry_derived_metadata_definitions + if is_metadata_registry_enabled(metadata, registry_name) and is_metadata_connector_type(metadata, "source") ] - catalog_destinations = [ - metadata_to_catalog_entry(metadata, "destination", catalog_name) - for metadata in catalog_derived_metadata_definitions - if is_metadata_catalog_enabled(metadata, catalog_name) and is_metadata_connector_type(metadata, "destination") + registry_destinations = [ + metadata_to_registry_entry(metadata, "destination", registry_name) + for metadata in registry_derived_metadata_definitions + if is_metadata_registry_enabled(metadata, registry_name) and is_metadata_connector_type(metadata, "destination") ] - catalog = {"sources": catalog_sources, "destinations": catalog_destinations} + registry = {"sources": registry_sources, "destinations": registry_destinations} - return catalog + return registry def construct_registry_with_spec_from_registry(registry: dict, cached_specs: OutputDataFrame) -> dict: @@ -152,66 +152,66 @@ def construct_registry_with_spec_from_registry(registry: dict, cached_specs: Out @asset(group_name=GROUP_NAME) -def cloud_catalog_from_metadata( - catalog_derived_metadata_definitions: List[PartialMetadataDefinition], cached_specs: OutputDataFrame +def cloud_registry_from_metadata( + registry_derived_metadata_definitions: List[PartialMetadataDefinition], cached_specs: OutputDataFrame ) -> dict: """ - This asset is used to generate the cloud catalog from the metadata definitions. + This asset is used to generate the cloud registry from the metadata definitions. TODO (ben): This asset should be updated to use the GCS metadata definitions once available. """ - from_metadata = construct_catalog_from_metadata(catalog_derived_metadata_definitions, "cloud") + from_metadata = construct_registry_from_metadata(registry_derived_metadata_definitions, "cloud") from_metadata_and_spec = construct_registry_with_spec_from_registry(from_metadata, cached_specs) return from_metadata_and_spec @asset(group_name=GROUP_NAME) -def oss_catalog_from_metadata(catalog_derived_metadata_definitions: List[PartialMetadataDefinition], cached_specs: OutputDataFrame) -> dict: +def oss_registry_from_metadata(registry_derived_metadata_definitions: List[PartialMetadataDefinition], cached_specs: OutputDataFrame) -> dict: """ - This asset is used to generate the oss catalog from the metadata definitions. + This asset is used to generate the oss registry from the metadata definitions. TODO (ben): This asset should be updated to use the GCS metadata definitions once available. """ - from_metadata = construct_catalog_from_metadata(catalog_derived_metadata_definitions, "oss") + from_metadata = construct_registry_from_metadata(registry_derived_metadata_definitions, "oss") from_metadata_and_spec = construct_registry_with_spec_from_registry(from_metadata, cached_specs) return from_metadata_and_spec @asset(group_name=GROUP_NAME) -def cloud_sources_dataframe(latest_cloud_catalog_dict: dict) -> OutputDataFrame: - sources = latest_cloud_catalog_dict["sources"] +def cloud_sources_dataframe(latest_cloud_registry_dict: dict) -> OutputDataFrame: + sources = latest_cloud_registry_dict["sources"] return output_dataframe(pd.DataFrame(sources)) @asset(group_name=GROUP_NAME) -def oss_sources_dataframe(latest_oss_catalog_dict: dict) -> OutputDataFrame: - sources = latest_oss_catalog_dict["sources"] +def oss_sources_dataframe(latest_oss_registry_dict: dict) -> OutputDataFrame: + sources = latest_oss_registry_dict["sources"] return output_dataframe(pd.DataFrame(sources)) @asset(group_name=GROUP_NAME) -def cloud_destinations_dataframe(latest_cloud_catalog_dict: dict) -> OutputDataFrame: - destinations = latest_cloud_catalog_dict["destinations"] +def cloud_destinations_dataframe(latest_cloud_registry_dict: dict) -> OutputDataFrame: + destinations = latest_cloud_registry_dict["destinations"] return output_dataframe(pd.DataFrame(destinations)) @asset(group_name=GROUP_NAME) -def oss_destinations_dataframe(latest_oss_catalog_dict: dict) -> OutputDataFrame: - destinations = latest_oss_catalog_dict["destinations"] +def oss_destinations_dataframe(latest_oss_registry_dict: dict) -> OutputDataFrame: + destinations = latest_oss_registry_dict["destinations"] return output_dataframe(pd.DataFrame(destinations)) -@asset(required_resource_keys={"latest_cloud_catalog_gcs_file"}, group_name=GROUP_NAME) -def latest_cloud_catalog_dict(context: OpExecutionContext) -> dict: - oss_catalog_file = context.resources.latest_cloud_catalog_gcs_file - json_string = oss_catalog_file.download_as_string().decode("utf-8") - oss_catalog_dict = json.loads(json_string) - return oss_catalog_dict +@asset(required_resource_keys={"latest_cloud_registry_gcs_file"}, group_name=GROUP_NAME) +def latest_cloud_registry_dict(context: OpExecutionContext) -> dict: + oss_registry_file = context.resources.latest_cloud_registry_gcs_file + json_string = oss_registry_file.download_as_string().decode("utf-8") + oss_registry_dict = json.loads(json_string) + return oss_registry_dict -@asset(required_resource_keys={"latest_oss_catalog_gcs_file"}, group_name=GROUP_NAME) -def latest_oss_catalog_dict(context: OpExecutionContext) -> dict: - oss_catalog_file = context.resources.latest_oss_catalog_gcs_file - json_string = oss_catalog_file.download_as_string().decode("utf-8") - oss_catalog_dict = json.loads(json_string) - return oss_catalog_dict +@asset(required_resource_keys={"latest_oss_registry_gcs_file"}, group_name=GROUP_NAME) +def latest_oss_registry_dict(context: OpExecutionContext) -> dict: + oss_registry_file = context.resources.latest_oss_registry_gcs_file + json_string = oss_registry_file.download_as_string().decode("utf-8") + oss_registry_dict = json.loads(json_string) + return oss_registry_dict diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/catalog_report.py b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/registry_report.py similarity index 66% rename from airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/catalog_report.py rename to airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/registry_report.py index 2d5357679e62..a7cfed57582e 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/catalog_report.py +++ b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/registry_report.py @@ -1,9 +1,9 @@ import pandas as pd from dagster import MetadataValue, Output, asset -from orchestrator.templates.render import render_connector_catalog_locations_html, render_connector_catalog_locations_markdown +from orchestrator.templates.render import render_connector_registry_locations_html, render_connector_registry_locations_markdown -GROUP_NAME = "catalog_reports" +GROUP_NAME = "registry_reports" # HELPERS @@ -13,25 +13,25 @@ def augment_and_normalize_connector_dataframes( ): """ Normalize the cloud and oss connector dataframes and merge them into a single dataframe. - Augment the dataframe with additional columns that indicate if the connector is in the cloud catalog, oss catalog, and if the metadata is valid. + Augment the dataframe with additional columns that indicate if the connector is in the cloud registry, oss registry, and if the metadata is valid. """ - # Add a column 'is_cloud' to indicate if an image/version pair is in the cloud catalog + # Add a column 'is_cloud' to indicate if an image/version pair is in the cloud registry cloud_df["is_cloud"] = True - # Add a column 'is_oss' to indicate if an image/version pair is in the oss catalog + # Add a column 'is_oss' to indicate if an image/version pair is in the oss registry oss_df["is_oss"] = True composite_key = [primaryKey, "dockerRepository", "dockerImageTag"] - # Merge the two catalogs on the 'image' and 'version' columns, keeping only the unique pairs - total_catalog = pd.merge(cloud_df, oss_df, how="outer", on=composite_key).drop_duplicates(subset=composite_key) + # Merge the two registries on the 'image' and 'version' columns, keeping only the unique pairs + total_registry = pd.merge(cloud_df, oss_df, how="outer", on=composite_key).drop_duplicates(subset=composite_key) # Replace NaN values in the 'is_cloud' and 'is_oss' columns with False - total_catalog[["is_cloud", "is_oss"]] = total_catalog[["is_cloud", "is_oss"]].fillna(False) + total_registry[["is_cloud", "is_oss"]] = total_registry[["is_cloud", "is_oss"]].fillna(False) - catalog_with_metadata = pd.merge( - total_catalog, + registry_with_metadata = pd.merge( + total_registry, valid_metadata_report_dataframe[["definitionId", "is_metadata_valid"]], left_on=primaryKey, right_on="definitionId", @@ -40,8 +40,8 @@ def augment_and_normalize_connector_dataframes( # merge with cached_specs on dockerRepository and dockerImageTag cached_specs["is_spec_cached"] = True - merged_catalog = pd.merge( - catalog_with_metadata, + merged_registry = pd.merge( + registry_with_metadata, cached_specs, left_on=["dockerRepository", "dockerImageTag"], right_on=["docker_repository", "docker_image_tag"], @@ -49,21 +49,21 @@ def augment_and_normalize_connector_dataframes( ) # Set connectorType to 'source' or 'destination' - merged_catalog["connector_type"] = connector_type - merged_catalog["is_source_controlled"] = merged_catalog["dockerRepository"].apply( + merged_registry["connector_type"] = connector_type + merged_registry["is_source_controlled"] = merged_registry["dockerRepository"].apply( lambda x: x.lstrip("airbyte/") in github_connector_folders ) - return merged_catalog + return merged_registry # ASSETS -@asset(required_resource_keys={"catalog_report_directory_manager"}, group_name=GROUP_NAME) -def connector_catalog_location_html(context, all_destinations_dataframe, all_sources_dataframe): +@asset(required_resource_keys={"registry_report_directory_manager"}, group_name=GROUP_NAME) +def connector_registry_location_html(context, all_destinations_dataframe, all_sources_dataframe): """ - Generate an HTML report of the connector catalog locations. + Generate an HTML report of the connector registry locations. """ columns_to_show = [ @@ -80,13 +80,13 @@ def connector_catalog_location_html(context, all_destinations_dataframe, all_sou all_sources_dataframe.replace({True: "✅", False: "❌"}, inplace=True) all_destinations_dataframe.replace({True: "✅", False: "❌"}, inplace=True) - html = render_connector_catalog_locations_html( + html = render_connector_registry_locations_html( destinations_table=all_destinations_dataframe[columns_to_show].to_html(), sources_table=all_sources_dataframe[columns_to_show].to_html(), ) - catalog_report_directory_manager = context.resources.catalog_report_directory_manager - file_handle = catalog_report_directory_manager.write_data(html.encode(), ext="html", key="connector_catalog_locations") + registry_report_directory_manager = context.resources.registry_report_directory_manager + file_handle = registry_report_directory_manager.write_data(html.encode(), ext="html", key="connector_registry_locations") metadata = { "preview": html, @@ -96,10 +96,10 @@ def connector_catalog_location_html(context, all_destinations_dataframe, all_sou return Output(metadata=metadata, value=file_handle) -@asset(required_resource_keys={"catalog_report_directory_manager"}, group_name=GROUP_NAME) -def connector_catalog_location_markdown(context, all_destinations_dataframe, all_sources_dataframe): +@asset(required_resource_keys={"registry_report_directory_manager"}, group_name=GROUP_NAME) +def connector_registry_location_markdown(context, all_destinations_dataframe, all_sources_dataframe): """ - Generate a markdown report of the connector catalog locations. + Generate a markdown report of the connector registry locations. """ columns_to_show = [ @@ -116,13 +116,13 @@ def connector_catalog_location_markdown(context, all_destinations_dataframe, all all_sources_dataframe.replace({True: "✅", False: "❌"}, inplace=True) all_destinations_dataframe.replace({True: "✅", False: "❌"}, inplace=True) - markdown = render_connector_catalog_locations_markdown( + markdown = render_connector_registry_locations_markdown( destinations_markdown=all_destinations_dataframe[columns_to_show].to_markdown(), sources_markdown=all_sources_dataframe[columns_to_show].to_markdown(), ) - catalog_report_directory_manager = context.resources.catalog_report_directory_manager - file_handle = catalog_report_directory_manager.write_data(markdown.encode(), ext="md", key="connector_catalog_locations") + registry_report_directory_manager = context.resources.registry_report_directory_manager + file_handle = registry_report_directory_manager.write_data(markdown.encode(), ext="md", key="connector_registry_locations") metadata = { "preview": MetadataValue.md(markdown), @@ -136,7 +136,7 @@ def all_sources_dataframe( cloud_sources_dataframe, oss_sources_dataframe, github_connector_folders, valid_metadata_report_dataframe, cached_specs ) -> pd.DataFrame: """ - Merge the cloud and oss sources catalogs into a single dataframe. + Merge the cloud and oss sources registries into a single dataframe. """ return augment_and_normalize_connector_dataframes( @@ -155,7 +155,7 @@ def all_destinations_dataframe( cloud_destinations_dataframe, oss_destinations_dataframe, github_connector_folders, valid_metadata_report_dataframe, cached_specs ) -> pd.DataFrame: """ - Merge the cloud and oss destinations catalogs into a single dataframe. + Merge the cloud and oss destinations registries into a single dataframe. """ return augment_and_normalize_connector_dataframes( diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/specs_secrets_mask.py b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/specs_secrets_mask.py index c574c505e484..5df1b234d4e3 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/specs_secrets_mask.py +++ b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/assets/specs_secrets_mask.py @@ -45,24 +45,24 @@ def get_secrets_properties_from_registry_entry(registry_entry: dict) -> List[str @asset(group_name=GROUP_NAME) -def all_specs_secrets(oss_catalog_from_metadata: dict, cloud_catalog_from_metadata: dict) -> Set[str]: +def all_specs_secrets(oss_registry_from_metadata: dict, cloud_registry_from_metadata: dict) -> Set[str]: all_secret_properties = [] all_entries = ( - oss_catalog_from_metadata["sources"] - + cloud_catalog_from_metadata["sources"] - + oss_catalog_from_metadata["destinations"] - + cloud_catalog_from_metadata["destinations"] + oss_registry_from_metadata["sources"] + + cloud_registry_from_metadata["sources"] + + oss_registry_from_metadata["destinations"] + + cloud_registry_from_metadata["destinations"] ) for registry_entry in all_entries: all_secret_properties += get_secrets_properties_from_registry_entry(registry_entry) return set(all_secret_properties) -@asset(required_resource_keys={"catalog_directory_manager"}, group_name=GROUP_NAME) +@asset(required_resource_keys={"registry_directory_manager"}, group_name=GROUP_NAME) def specs_secrets_mask_yaml(context, all_specs_secrets: Set[str]) -> Output: yaml_string = yaml.dump({"properties": list(all_specs_secrets)}) - catalog_directory_manager = context.resources.catalog_directory_manager - file_handle = catalog_directory_manager.write_data(yaml_string.encode(), ext="yaml", key="specs_secrets_mask") + registry_directory_manager = context.resources.registry_directory_manager + file_handle = registry_directory_manager.write_data(yaml_string.encode(), ext="yaml", key="specs_secrets_mask") metadata = { "preview": yaml_string, "gcs_path": MetadataValue.url(file_handle.gcs_path), diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/config.py b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/config.py index 36e3722a47f8..2454936ee30e 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/config.py +++ b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/config.py @@ -1,4 +1,4 @@ -CATALOG_FOLDER = "catalogs" +REGISTRIES_FOLDER = "registry" REPORT_FOLDER = "generated_reports" CONNECTOR_REPO_NAME = "airbytehq/airbyte" diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/jobs/catalog.py b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/jobs/catalog.py deleted file mode 100644 index c36803183a37..000000000000 --- a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/jobs/catalog.py +++ /dev/null @@ -1,11 +0,0 @@ -# -# Copyright (c) 2023 Airbyte, Inc., all rights reserved. -# -from dagster import define_asset_job - -generate_catalog = define_asset_job(name="generate_catalog", selection=["metadata_directory_report", "metadata_definitions"]) -generate_catalog_markdown = define_asset_job( - name="generate_catalog_markdown", selection=["connector_catalog_location_html", "connector_catalog_location_markdown"] -) -generate_local_metadata_files = define_asset_job(name="generate_local_metadata_files", selection=["persist_metadata_definitions"]) -generate_specs_secrets_mask_file = define_asset_job(name="generate_specs_secrets_mask_file", selection=["persist_specs_secrets_mask"]) diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/jobs/registry.py b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/jobs/registry.py new file mode 100644 index 000000000000..7dfd5d59d565 --- /dev/null +++ b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/jobs/registry.py @@ -0,0 +1,11 @@ +from dagster import define_asset_job, AssetSelection + +metadata_definitions_inclusive = AssetSelection.keys("metadata_directory_report", "metadata_definitions").upstream() +registry_reports_inclusive = AssetSelection.keys("connector_registry_location_html", "connector_registry_location_markdown").upstream() + +generate_registry = define_asset_job(name="generate_registry", selection=metadata_definitions_inclusive) +generate_registry_markdown = define_asset_job(name="generate_registry_markdown", selection=registry_reports_inclusive) + +# TODO Change to a Asset selection +generate_local_metadata_files = define_asset_job(name="generate_local_metadata_files", selection=["persist_metadata_definitions"]) +generate_specs_secrets_mask_file = define_asset_job(name="generate_specs_secrets_mask_file", selection=["persist_specs_secrets_mask"]) diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/resources/file_managers/local_file_manager.py b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/resources/file_managers/local_file_manager.py index 048fe0865b0a..6bdfe7d28dbf 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/resources/file_managers/local_file_manager.py +++ b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/resources/file_managers/local_file_manager.py @@ -20,7 +20,7 @@ class SimpleLocalFileManager(LocalFileManager): Much of this code is borrowed from the LocalFileManager in dagster and modified slightly. - TODO(ben): Remove this once catalogs are live + TODO(ben): Remove this once registries are live https://docs.dagster.io/_modules/dagster/_core/storage/file_manager#local_file_manager """ diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/resources/github.py b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/resources/github.py index c65ef9fc4fd1..900ce7199174 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/resources/github.py +++ b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/resources/github.py @@ -3,9 +3,12 @@ from github import Github, Repository, ContentFile -@resource -def github_client() -> Github: - return Github() +@resource( + config_schema={"github_token": StringSource}, +) +def github_client(resource_context: InitResourceContext) -> Github: + github_token = resource_context.resource_config["github_token"] + return Github(github_token) @resource( diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/sensors/catalog.py b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/sensors/registry.py similarity index 53% rename from airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/sensors/catalog.py rename to airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/sensors/registry.py index e968bb0e7b20..54f87b7f7765 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/sensors/catalog.py +++ b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/sensors/registry.py @@ -3,40 +3,40 @@ from orchestrator.utils.dagster_helpers import serialize_composite_etags_cursor -def catalog_updated_sensor(job, resources_def) -> SensorDefinition: +def registry_updated_sensor(job, resources_def) -> SensorDefinition: """ - This sensor is responsible for polling the catalog folder in GCS for updates to our oss and cloud catalogs. + This sensor is responsible for polling the registry folder in GCS for updates to our oss and cloud registries. If it has, it will trigger the given job. """ @sensor( - name=f"{job.name}_on_catalog_updated", + name=f"{job.name}_on_registry_updated", job=job, minimum_interval_seconds=30, default_status=DefaultSensorStatus.STOPPED, ) - def catalog_updated_sensor_definition(context: SensorEvaluationContext): - context.log.info("Starting gcs_catalog_updated_sensor") + def registry_updated_sensor_definition(context: SensorEvaluationContext): + context.log.info("Starting gcs_registry_updated_sensor") with build_resources(resources_def) as resources: - context.log.info("Got resources for gcs_catalog_updated_sensor") + context.log.info("Got resources for gcs_registry_updated_sensor") etag_cursor = context.cursor or None context.log.info(f"Old etag cursor: {etag_cursor}") new_etag_cursor = serialize_composite_etags_cursor( - [resources.latest_oss_catalog_gcs_file.etag, resources.latest_cloud_catalog_gcs_file.etag] + [resources.latest_oss_registry_gcs_file.etag, resources.latest_cloud_registry_gcs_file.etag] ) context.log.info(f"New etag cursor: {new_etag_cursor}") # Note: ETAGs are GCS's way of providing a version number for a file # Another option would be to use the last modified date or MD5 hash if etag_cursor == new_etag_cursor: - context.log.info("No new catalogs in GCS bucket") - return SkipReason("No new catalogs in GCS bucket") + context.log.info("No new registries in GCS bucket") + return SkipReason("No new registries in GCS bucket") context.update_cursor(new_etag_cursor) - context.log.info("New catalogs in GCS bucket") - return RunRequest(run_key="updated_catalogs") + context.log.info("New registries in GCS bucket") + return RunRequest(run_key="updated_registries") - return catalog_updated_sensor_definition + return registry_updated_sensor_definition diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/templates/connector_catalog_locations.html b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/templates/connector_registry_locations.html similarity index 64% rename from airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/templates/connector_catalog_locations.html rename to airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/templates/connector_registry_locations.html index e6ffb834537d..e6105cfee061 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/templates/connector_catalog_locations.html +++ b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/templates/connector_registry_locations.html @@ -1,9 +1,9 @@ {% extends 'base.html' %} -{% block title%}Connector Catalogs{% endblock %} +{% block title%}Connector Registries{% endblock %} {% block content %} -

    Connector Catalogs

    +

    Connector Registries

    Sources

    {{ sources_table }} diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/templates/connector_catalog_locations.md b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/templates/connector_registry_locations.md similarity index 71% rename from airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/templates/connector_catalog_locations.md rename to airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/templates/connector_registry_locations.md index e42582274ac4..f0c2d4095382 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/templates/connector_catalog_locations.md +++ b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/templates/connector_registry_locations.md @@ -1,4 +1,4 @@ -# Connector Catalog Locations +# Connector Registry Locations ## Sources {{ sources_markdown }} diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/templates/render.py b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/templates/render.py index e1b34c76fa3f..24110ab7c425 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/templates/render.py +++ b/airbyte-ci/connectors/metadata_service/orchestrator/orchestrator/templates/render.py @@ -1,13 +1,13 @@ from jinja2 import Environment, PackageLoader -def render_connector_catalog_locations_html(destinations_table: str, sources_table: str) -> str: +def render_connector_registry_locations_html(destinations_table: str, sources_table: str) -> str: env = Environment(loader=PackageLoader("orchestrator", "templates")) - template = env.get_template("connector_catalog_locations.html") + template = env.get_template("connector_registry_locations.html") return template.render(destinations_table=destinations_table, sources_table=sources_table) -def render_connector_catalog_locations_markdown(destinations_markdown: str, sources_markdown: str) -> str: +def render_connector_registry_locations_markdown(destinations_markdown: str, sources_markdown: str) -> str: env = Environment(loader=PackageLoader("orchestrator", "templates")) - template = env.get_template("connector_catalog_locations.md") + template = env.get_template("connector_registry_locations.md") return template.render(destinations_markdown=destinations_markdown, sources_markdown=sources_markdown) diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/tests/fixtures/__init__.py b/airbyte-ci/connectors/metadata_service/orchestrator/tests/fixtures/__init__.py index 71f6f2227378..1f0a6a24a01f 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/tests/fixtures/__init__.py +++ b/airbyte-ci/connectors/metadata_service/orchestrator/tests/fixtures/__init__.py @@ -4,12 +4,12 @@ @pytest.fixture -def oss_catalog_dict(): - file_path = os.path.join(os.path.dirname(__file__), "oss_catalog.json") +def oss_registry_dict(): + file_path = os.path.join(os.path.dirname(__file__), "oss_registry.json") return json.load(open(file_path)) @pytest.fixture -def cloud_catalog_dict(): - file_path = os.path.join(os.path.dirname(__file__), "cloud_catalog.json") +def cloud_registry_dict(): + file_path = os.path.join(os.path.dirname(__file__), "cloud_registry.json") return json.load(open(file_path)) diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/tests/fixtures/cloud_catalog.json b/airbyte-ci/connectors/metadata_service/orchestrator/tests/fixtures/cloud_registry.json similarity index 100% rename from airbyte-ci/connectors/metadata_service/orchestrator/tests/fixtures/cloud_catalog.json rename to airbyte-ci/connectors/metadata_service/orchestrator/tests/fixtures/cloud_registry.json diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/tests/fixtures/oss_catalog.json b/airbyte-ci/connectors/metadata_service/orchestrator/tests/fixtures/oss_registry.json similarity index 100% rename from airbyte-ci/connectors/metadata_service/orchestrator/tests/fixtures/oss_catalog.json rename to airbyte-ci/connectors/metadata_service/orchestrator/tests/fixtures/oss_registry.json diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/tests/test_debug.py b/airbyte-ci/connectors/metadata_service/orchestrator/tests/test_debug.py index 9a25e7455e18..3aa33fc4989d 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/tests/test_debug.py +++ b/airbyte-ci/connectors/metadata_service/orchestrator/tests/test_debug.py @@ -3,27 +3,27 @@ from orchestrator.resources.gcp import gcp_gcs_client, gcs_bucket_manager, gcs_file_manager, gcs_file_blob from orchestrator.resources.github import github_client, github_connector_repo, github_connectors_directory -from orchestrator.assets.catalog import ( +from orchestrator.assets.registry import ( oss_destinations_dataframe, cloud_destinations_dataframe, oss_sources_dataframe, cloud_sources_dataframe, - latest_oss_catalog_dict, - latest_cloud_catalog_dict, + latest_oss_registry_dict, + latest_cloud_registry_dict, ) from orchestrator.assets.metadata import ( - catalog_derived_metadata_definitions, + registry_derived_metadata_definitions, ) -from orchestrator.config import REPORT_FOLDER, CATALOG_FOLDER, CONNECTORS_PATH, CONNECTOR_REPO_NAME +from orchestrator.config import REPORT_FOLDER, REGISTRIES_FOLDER, CONNECTORS_PATH, CONNECTOR_REPO_NAME -def debug_catalog_projection(): +def debug_registry_projection(): """ - This is a debug function that is used to test the catalog projection end to end. + This is a debug function that is used to test the registry projection end to end. - This is currently the only way to be able to set breakpoints in the catalog projection code. + This is currently the only way to be able to set breakpoints in the registry projection code. It is not intended to be used in production. """ @@ -38,28 +38,28 @@ def debug_catalog_projection(): } ), "gcs_bucket_manager": gcs_bucket_manager.configured({"gcs_bucket": {"env": "METADATA_BUCKET"}}), - "catalog_report_directory_manager": gcs_file_manager.configured( + "registry_report_directory_manager": gcs_file_manager.configured( {"gcs_bucket": {"env": "METADATA_BUCKET"}, "prefix": REPORT_FOLDER} ), - "latest_oss_catalog_gcs_file": gcs_file_blob.configured({"prefix": CATALOG_FOLDER, "gcs_filename": "oss_catalog.json"}), - "latest_cloud_catalog_gcs_file": gcs_file_blob.configured({"prefix": CATALOG_FOLDER, "gcs_filename": "cloud_catalog.json"}), + "latest_oss_registry_gcs_file": gcs_file_blob.configured({"prefix": REGISTRIES_FOLDER, "gcs_filename": "oss_registry.json"}), + "latest_cloud_registry_gcs_file": gcs_file_blob.configured({"prefix": REGISTRIES_FOLDER, "gcs_filename": "cloud_registry.json"}), } context = build_op_context(resources=resources) - cloud_catalog_dict = latest_cloud_catalog_dict(context) - cloud_destinations_df = cloud_destinations_dataframe(cloud_catalog_dict).value - cloud_sources_df = cloud_sources_dataframe(cloud_catalog_dict).value + cloud_registry_dict = latest_cloud_registry_dict(context) + cloud_destinations_df = cloud_destinations_dataframe(cloud_registry_dict).value + cloud_sources_df = cloud_sources_dataframe(cloud_registry_dict).value - oss_catalog_dict = latest_oss_catalog_dict(context) - oss_destinations_df = oss_destinations_dataframe(oss_catalog_dict).value - oss_sources_df = oss_sources_dataframe(oss_catalog_dict).value + oss_registry_dict = latest_oss_registry_dict(context) + oss_destinations_df = oss_destinations_dataframe(oss_registry_dict).value + oss_sources_df = oss_sources_dataframe(oss_registry_dict).value # github_connector_folders_list = github_connector_folders(context).value - catalog_derived_metadata_definitions(context, cloud_sources_df, cloud_destinations_df, oss_sources_df, oss_destinations_df).value + registry_derived_metadata_definitions(context, cloud_sources_df, cloud_destinations_df, oss_sources_df, oss_destinations_df).value # valid_metadata_report_dataframe_df = valid_metadata_report_dataframe(metadata_definitions_df).value # all_sources_df = all_sources_dataframe(cloud_sources_df, oss_sources_df, github_connector_folders_list, valid_metadata_report_dataframe_df) # all_destinations_df = all_destinations_dataframe(cloud_destinations_df, oss_destinations_df) - # connector_catalog_location_html(context, all_sources_df, all_destinations_df) - # connector_catalog_location_markdown(context, all_sources_df, all_destinations_df) + # connector_registry_location_html(context, all_sources_df, all_destinations_df) + # connector_registry_location_markdown(context, all_sources_df, all_destinations_df) diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/tests/test_metadata.py b/airbyte-ci/connectors/metadata_service/orchestrator/tests/test_metadata.py index 7d9c4e637d66..f4f0630d0a91 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/tests/test_metadata.py +++ b/airbyte-ci/connectors/metadata_service/orchestrator/tests/test_metadata.py @@ -1,30 +1,30 @@ from pydash.collections import find -from orchestrator.assets.catalog import ( +from orchestrator.assets.registry import ( oss_destinations_dataframe, cloud_destinations_dataframe, oss_sources_dataframe, cloud_sources_dataframe, ) -from orchestrator.assets.metadata import catalog_derived_metadata_definitions +from orchestrator.assets.metadata import registry_derived_metadata_definitions -def test_no_missing_ids(oss_catalog_dict, cloud_catalog_dict): - cloud_destinations_df = cloud_destinations_dataframe(cloud_catalog_dict).value - cloud_sources_df = cloud_sources_dataframe(cloud_catalog_dict).value - oss_destinations_df = oss_destinations_dataframe(oss_catalog_dict).value - oss_sources_df = oss_sources_dataframe(oss_catalog_dict).value +def test_no_missing_ids(oss_registry_dict, cloud_registry_dict): + cloud_destinations_df = cloud_destinations_dataframe(cloud_registry_dict).value + cloud_sources_df = cloud_sources_dataframe(cloud_registry_dict).value + oss_destinations_df = oss_destinations_dataframe(oss_registry_dict).value + oss_sources_df = oss_sources_dataframe(oss_registry_dict).value - metadata_def = catalog_derived_metadata_definitions(cloud_sources_df, cloud_destinations_df, oss_sources_df, oss_destinations_df).value + metadata_def = registry_derived_metadata_definitions(cloud_sources_df, cloud_destinations_df, oss_sources_df, oss_destinations_df).value metadata_definition_ids = [definition["data"]["definitionId"] for definition in metadata_def] unique_metadata_definition_ids = set(metadata_definition_ids) - # assert that all_sources_df has a entry for each sourceDefinitionId in the cloud catalog and oss catalog - oss_source_definition_ids = [source["sourceDefinitionId"] for source in oss_catalog_dict["sources"]] - cloud_source_definition_ids = [source["sourceDefinitionId"] for source in cloud_catalog_dict["sources"]] - oss_destination_definition_ids = [destination["destinationDefinitionId"] for destination in oss_catalog_dict["destinations"]] - cloud_destination_definition_ids = [destination["destinationDefinitionId"] for destination in cloud_catalog_dict["destinations"]] + # assert that all_sources_df has a entry for each sourceDefinitionId in the cloud registry and oss registry + oss_source_definition_ids = [source["sourceDefinitionId"] for source in oss_registry_dict["sources"]] + cloud_source_definition_ids = [source["sourceDefinitionId"] for source in cloud_registry_dict["sources"]] + oss_destination_definition_ids = [destination["destinationDefinitionId"] for destination in oss_registry_dict["destinations"]] + cloud_destination_definition_ids = [destination["destinationDefinitionId"] for destination in cloud_registry_dict["destinations"]] # get all unique ids from the above sets all_definition_ids = set( @@ -35,68 +35,68 @@ def test_no_missing_ids(oss_catalog_dict, cloud_catalog_dict): assert len(metadata_definition_ids) == len(unique_metadata_definition_ids) -def assert_in_expected_catalog(metadata_def, oss_catalog_dict, cloud_catalog_dict): +def assert_in_expected_registry(metadata_def, oss_registry_dict, cloud_registry_dict): connectorId = metadata_def["data"]["definitionId"] connectorType = metadata_def["data"]["connectorType"] - enabled_oss = metadata_def["data"]["catalogs"]["oss"]["enabled"] - enabled_cloud = metadata_def["data"]["catalogs"]["cloud"]["enabled"] + enabled_oss = metadata_def["data"]["registries"]["oss"]["enabled"] + enabled_cloud = metadata_def["data"]["registries"]["cloud"]["enabled"] if connectorType == "source": - is_in_oss = connectorId in [source["sourceDefinitionId"] for source in oss_catalog_dict["sources"]] - is_in_cloud = connectorId in [source["sourceDefinitionId"] for source in cloud_catalog_dict["sources"]] + is_in_oss = connectorId in [source["sourceDefinitionId"] for source in oss_registry_dict["sources"]] + is_in_cloud = connectorId in [source["sourceDefinitionId"] for source in cloud_registry_dict["sources"]] assert enabled_oss == is_in_oss assert enabled_cloud == is_in_cloud elif connectorType == "destination": - is_in_oss = connectorId in [destination["destinationDefinitionId"] for destination in oss_catalog_dict["destinations"]] - is_in_cloud = connectorId in [destination["destinationDefinitionId"] for destination in cloud_catalog_dict["destinations"]] + is_in_oss = connectorId in [destination["destinationDefinitionId"] for destination in oss_registry_dict["destinations"]] + is_in_cloud = connectorId in [destination["destinationDefinitionId"] for destination in cloud_registry_dict["destinations"]] assert enabled_oss == is_in_oss assert enabled_cloud == is_in_cloud else: raise Exception("Connector type must be either source or destination") -def test_in_correct_catalog(oss_catalog_dict, cloud_catalog_dict): - cloud_destinations_df = cloud_destinations_dataframe(cloud_catalog_dict).value - cloud_sources_df = cloud_sources_dataframe(cloud_catalog_dict).value - oss_destinations_df = oss_destinations_dataframe(oss_catalog_dict).value - oss_sources_df = oss_sources_dataframe(oss_catalog_dict).value +def test_in_correct_registry(oss_registry_dict, cloud_registry_dict): + cloud_destinations_df = cloud_destinations_dataframe(cloud_registry_dict).value + cloud_sources_df = cloud_sources_dataframe(cloud_registry_dict).value + oss_destinations_df = oss_destinations_dataframe(oss_registry_dict).value + oss_sources_df = oss_sources_dataframe(oss_registry_dict).value - metadata_def = catalog_derived_metadata_definitions(cloud_sources_df, cloud_destinations_df, oss_sources_df, oss_destinations_df).value + metadata_def = registry_derived_metadata_definitions(cloud_sources_df, cloud_destinations_df, oss_sources_df, oss_destinations_df).value for definition in metadata_def: - assert_in_expected_catalog(definition, oss_catalog_dict, cloud_catalog_dict) + assert_in_expected_registry(definition, oss_registry_dict, cloud_registry_dict) -def has_correct_cloud_docker_image(metadata_def, cloud_catalog_dict): +def has_correct_cloud_docker_image(metadata_def, cloud_registry_dict): connectorId = metadata_def["data"]["definitionId"] connectorType = metadata_def["data"]["connectorType"] - enabled_cloud = metadata_def["data"]["catalogs"]["cloud"]["enabled"] + enabled_cloud = metadata_def["data"]["registries"]["cloud"]["enabled"] if not enabled_cloud: return True oss_base_docker_image = metadata_def["data"]["dockerRepository"] - cloud_docker_repo_override = metadata_def["data"]["catalogs"]["cloud"].get("dockerRepository") + cloud_docker_repo_override = metadata_def["data"]["registries"]["cloud"].get("dockerRepository") expected_cloud_docker_repo = cloud_docker_repo_override if cloud_docker_repo_override else oss_base_docker_image if connectorType == "source": - # find the source in the cloud catalog - catalog_representation = find(cloud_catalog_dict["sources"], {"sourceDefinitionId": connectorId}) - catalog_representation = [source for source in cloud_catalog_dict["sources"] if source["sourceDefinitionId"] == connectorId][0] - cloud_docker_image = catalog_representation["dockerRepository"] + # find the source in the cloud registry + registry_representation = find(cloud_registry_dict["sources"], {"sourceDefinitionId": connectorId}) + registry_representation = [source for source in cloud_registry_dict["sources"] if source["sourceDefinitionId"] == connectorId][0] + cloud_docker_image = registry_representation["dockerRepository"] return cloud_docker_image == expected_cloud_docker_repo elif connectorType == "destination": - # find the destination in the cloud catalog - catalog_representation = find(cloud_catalog_dict["destinations"], {"destinationDefinitionId": connectorId}) - cloud_docker_image = catalog_representation["dockerRepository"] + # find the destination in the cloud registry + registry_representation = find(cloud_registry_dict["destinations"], {"destinationDefinitionId": connectorId}) + cloud_docker_image = registry_representation["dockerRepository"] return cloud_docker_image == expected_cloud_docker_repo else: raise Exception("Connector type must be either source or destination") -def test_catalog_override(oss_catalog_dict, cloud_catalog_dict): - cloud_destinations_df = cloud_destinations_dataframe(cloud_catalog_dict).value - cloud_sources_df = cloud_sources_dataframe(cloud_catalog_dict).value - oss_destinations_df = oss_destinations_dataframe(oss_catalog_dict).value - oss_sources_df = oss_sources_dataframe(oss_catalog_dict).value +def test_registry_override(oss_registry_dict, cloud_registry_dict): + cloud_destinations_df = cloud_destinations_dataframe(cloud_registry_dict).value + cloud_sources_df = cloud_sources_dataframe(cloud_registry_dict).value + oss_destinations_df = oss_destinations_dataframe(oss_registry_dict).value + oss_sources_df = oss_sources_dataframe(oss_registry_dict).value - metadata_def = catalog_derived_metadata_definitions(cloud_sources_df, cloud_destinations_df, oss_sources_df, oss_destinations_df).value + metadata_def = registry_derived_metadata_definitions(cloud_sources_df, cloud_destinations_df, oss_sources_df, oss_destinations_df).value for definition in metadata_def: - assert has_correct_cloud_docker_image(definition, cloud_catalog_dict) + assert has_correct_cloud_docker_image(definition, cloud_registry_dict) diff --git a/airbyte-ci/connectors/metadata_service/orchestrator/tests/test_catalog.py b/airbyte-ci/connectors/metadata_service/orchestrator/tests/test_registry.py similarity index 64% rename from airbyte-ci/connectors/metadata_service/orchestrator/tests/test_catalog.py rename to airbyte-ci/connectors/metadata_service/orchestrator/tests/test_registry.py index 80b5e5466d53..916ffb7033fa 100644 --- a/airbyte-ci/connectors/metadata_service/orchestrator/tests/test_catalog.py +++ b/airbyte-ci/connectors/metadata_service/orchestrator/tests/test_registry.py @@ -2,11 +2,11 @@ from metadata_service.spec_cache import CachedSpec -from orchestrator.assets.catalog_report import ( +from orchestrator.assets.registry_report import ( all_sources_dataframe, all_destinations_dataframe, ) -from orchestrator.assets.catalog import ( +from orchestrator.assets.registry import ( oss_destinations_dataframe, cloud_destinations_dataframe, oss_sources_dataframe, @@ -14,7 +14,7 @@ ) -def test_merged_catalog_dataframes(oss_catalog_dict, cloud_catalog_dict): +def test_merged_registry_dataframes(oss_registry_dict, cloud_registry_dict): github_connector_folders = [] valid_metadata_report_dataframe = pd.DataFrame([{"definitionId": "test", "is_metadata_valid": True}]) cached_specs = pd.DataFrame( @@ -26,22 +26,22 @@ def test_merged_catalog_dataframes(oss_catalog_dict, cloud_catalog_dict): ) ] ) - num_oss_destinations = len(oss_catalog_dict["destinations"]) - num_cloud_destinations = len(cloud_catalog_dict["destinations"]) + num_oss_destinations = len(oss_registry_dict["destinations"]) + num_cloud_destinations = len(cloud_registry_dict["destinations"]) - num_cloud_sources = len(cloud_catalog_dict["sources"]) - num_oss_sources = len(oss_catalog_dict["sources"]) + num_cloud_sources = len(cloud_registry_dict["sources"]) + num_oss_sources = len(oss_registry_dict["sources"]) - cloud_destinations_df = cloud_destinations_dataframe(cloud_catalog_dict).value + cloud_destinations_df = cloud_destinations_dataframe(cloud_registry_dict).value assert len(cloud_destinations_df) == num_cloud_destinations - cloud_sources_df = cloud_sources_dataframe(cloud_catalog_dict).value + cloud_sources_df = cloud_sources_dataframe(cloud_registry_dict).value assert len(cloud_sources_df) == num_cloud_sources - oss_destinations_df = oss_destinations_dataframe(oss_catalog_dict).value + oss_destinations_df = oss_destinations_dataframe(oss_registry_dict).value assert len(oss_destinations_df) == num_oss_destinations - oss_sources_df = oss_sources_dataframe(oss_catalog_dict).value + oss_sources_df = oss_sources_dataframe(oss_registry_dict).value assert len(oss_sources_df) == num_oss_sources all_sources_df = all_sources_dataframe( @@ -51,16 +51,16 @@ def test_merged_catalog_dataframes(oss_catalog_dict, cloud_catalog_dict): cloud_destinations_df, oss_destinations_df, github_connector_folders, valid_metadata_report_dataframe, cached_specs ) - # assert that all_sources_df has a entry for each sourceDefinitionId in the cloud catalog and oss catalog - oss_source_definition_ids = set([source["sourceDefinitionId"] for source in oss_catalog_dict["sources"]]) - cloud_source_definition_ids = set([source["sourceDefinitionId"] for source in cloud_catalog_dict["sources"]]) + # assert that all_sources_df has a entry for each sourceDefinitionId in the cloud registry and oss registry + oss_source_definition_ids = set([source["sourceDefinitionId"] for source in oss_registry_dict["sources"]]) + cloud_source_definition_ids = set([source["sourceDefinitionId"] for source in cloud_registry_dict["sources"]]) all_source_definition_ids = set(all_sources_df["sourceDefinitionId"]) assert all_source_definition_ids == oss_source_definition_ids.union(cloud_source_definition_ids) - # assert that all_destinations_df has a entry for each sourceDefinitionId in the cloud catalog and oss catalog - oss_destination_definition_ids = set([destination["destinationDefinitionId"] for destination in oss_catalog_dict["destinations"]]) - cloud_destination_definition_ids = set([destination["destinationDefinitionId"] for destination in cloud_catalog_dict["destinations"]]) + # assert that all_destinations_df has a entry for each sourceDefinitionId in the cloud registry and oss registry + oss_destination_definition_ids = set([destination["destinationDefinitionId"] for destination in oss_registry_dict["destinations"]]) + cloud_destination_definition_ids = set([destination["destinationDefinitionId"] for destination in cloud_registry_dict["destinations"]]) all_destination_definition_ids = set(all_destinations_df["destinationDefinitionId"]) assert all_destination_definition_ids == oss_destination_definition_ids.union(cloud_destination_definition_ids) diff --git a/airbyte-integrations/connectors/destination-amazon-sqs/metadata.yaml b/airbyte-integrations/connectors/destination-amazon-sqs/metadata.yaml index 1ad1f92b24b0..cbd1c2d546b1 100644 --- a/airbyte-integrations/connectors/destination-amazon-sqs/metadata.yaml +++ b/airbyte-integrations/connectors/destination-amazon-sqs/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/destination-aws-datalake/metadata.yaml b/airbyte-integrations/connectors/destination-aws-datalake/metadata.yaml index ba55976c37bb..d92471bf7dfd 100644 --- a/airbyte-integrations/connectors/destination-aws-datalake/metadata.yaml +++ b/airbyte-integrations/connectors/destination-aws-datalake/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/destination-azure-blob-storage/metadata.yaml b/airbyte-integrations/connectors/destination-azure-blob-storage/metadata.yaml index 8f0d8064c786..e30aacdc092a 100644 --- a/airbyte-integrations/connectors/destination-azure-blob-storage/metadata.yaml +++ b/airbyte-integrations/connectors/destination-azure-blob-storage/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/destination-bigquery-denormalized/metadata.yaml b/airbyte-integrations/connectors/destination-bigquery-denormalized/metadata.yaml index 0c2a921e3440..f5a14a882b77 100644 --- a/airbyte-integrations/connectors/destination-bigquery-denormalized/metadata.yaml +++ b/airbyte-integrations/connectors/destination-bigquery-denormalized/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/destination-bigquery/metadata.yaml b/airbyte-integrations/connectors/destination-bigquery/metadata.yaml index 3fb9f9a9b81c..6e701c399f9d 100644 --- a/airbyte-integrations/connectors/destination-bigquery/metadata.yaml +++ b/airbyte-integrations/connectors/destination-bigquery/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/destination-cassandra/metadata.yaml b/airbyte-integrations/connectors/destination-cassandra/metadata.yaml index 465935b67f6d..8784da7c8162 100644 --- a/airbyte-integrations/connectors/destination-cassandra/metadata.yaml +++ b/airbyte-integrations/connectors/destination-cassandra/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/destination-clickhouse-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/destination-clickhouse-strict-encrypt/metadata.yaml index 6fd13f76e187..f9728273be7a 100644 --- a/airbyte-integrations/connectors/destination-clickhouse-strict-encrypt/metadata.yaml +++ b/airbyte-integrations/connectors/destination-clickhouse-strict-encrypt/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false # strict encrypt connectors are deployed to Cloud by their non strict encrypt sibling. oss: diff --git a/airbyte-integrations/connectors/destination-clickhouse/metadata.yaml b/airbyte-integrations/connectors/destination-clickhouse/metadata.yaml index fd305e5800e9..3134a66d72e0 100644 --- a/airbyte-integrations/connectors/destination-clickhouse/metadata.yaml +++ b/airbyte-integrations/connectors/destination-clickhouse/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: dockerImageTag: 0.2.2 dockerRepository: airbyte/destination-clickhouse-strict-encrypt diff --git a/airbyte-integrations/connectors/destination-convex/metadata.yaml b/airbyte-integrations/connectors/destination-convex/metadata.yaml index 7eb02e375fbf..fab450ea0616 100644 --- a/airbyte-integrations/connectors/destination-convex/metadata.yaml +++ b/airbyte-integrations/connectors/destination-convex/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/destination-csv/metadata.yaml b/airbyte-integrations/connectors/destination-csv/metadata.yaml index 185773871c0e..10a7f5f1f5c7 100644 --- a/airbyte-integrations/connectors/destination-csv/metadata.yaml +++ b/airbyte-integrations/connectors/destination-csv/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/destination-databend/metadata.yaml b/airbyte-integrations/connectors/destination-databend/metadata.yaml index 509af549bc18..4c524ddc61bb 100644 --- a/airbyte-integrations/connectors/destination-databend/metadata.yaml +++ b/airbyte-integrations/connectors/destination-databend/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/destination-databricks/metadata.yaml b/airbyte-integrations/connectors/destination-databricks/metadata.yaml index ba0e7b5047c3..270871edbca2 100644 --- a/airbyte-integrations/connectors/destination-databricks/metadata.yaml +++ b/airbyte-integrations/connectors/destination-databricks/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/destination-dev-null/metadata.yaml b/airbyte-integrations/connectors/destination-dev-null/metadata.yaml index dc1e72e4ea08..f67272283011 100644 --- a/airbyte-integrations/connectors/destination-dev-null/metadata.yaml +++ b/airbyte-integrations/connectors/destination-dev-null/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/destination-doris/metadata.yaml b/airbyte-integrations/connectors/destination-doris/metadata.yaml index d581c7e2da1c..927c44ca4810 100644 --- a/airbyte-integrations/connectors/destination-doris/metadata.yaml +++ b/airbyte-integrations/connectors/destination-doris/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/destination-duckdb/metadata.yaml b/airbyte-integrations/connectors/destination-duckdb/metadata.yaml index 2289b976da18..daed29701efa 100644 --- a/airbyte-integrations/connectors/destination-duckdb/metadata.yaml +++ b/airbyte-integrations/connectors/destination-duckdb/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/destination-dynamodb/metadata.yaml b/airbyte-integrations/connectors/destination-dynamodb/metadata.yaml index baaa5c5d5082..5f4e5c9e8942 100644 --- a/airbyte-integrations/connectors/destination-dynamodb/metadata.yaml +++ b/airbyte-integrations/connectors/destination-dynamodb/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/destination-e2e-test/metadata.yaml b/airbyte-integrations/connectors/destination-e2e-test/metadata.yaml index 3d3f225096b6..64aae0eb3fb4 100644 --- a/airbyte-integrations/connectors/destination-e2e-test/metadata.yaml +++ b/airbyte-integrations/connectors/destination-e2e-test/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/destination-elasticsearch-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/destination-elasticsearch-strict-encrypt/metadata.yaml index 5d2b1254d80a..54bbe0fd4083 100644 --- a/airbyte-integrations/connectors/destination-elasticsearch-strict-encrypt/metadata.yaml +++ b/airbyte-integrations/connectors/destination-elasticsearch-strict-encrypt/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false # strict encrypt connectors are deployed to Cloud by their non strict encrypt sibling. oss: diff --git a/airbyte-integrations/connectors/destination-elasticsearch/metadata.yaml b/airbyte-integrations/connectors/destination-elasticsearch/metadata.yaml index a74a64308988..abc5cdfd5d64 100644 --- a/airbyte-integrations/connectors/destination-elasticsearch/metadata.yaml +++ b/airbyte-integrations/connectors/destination-elasticsearch/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: dockerRepository: airbyte/destination-elasticsearch-strict-encrypt enabled: true diff --git a/airbyte-integrations/connectors/destination-exasol/metadata.yaml b/airbyte-integrations/connectors/destination-exasol/metadata.yaml index 81d576607408..1f862395a61c 100644 --- a/airbyte-integrations/connectors/destination-exasol/metadata.yaml +++ b/airbyte-integrations/connectors/destination-exasol/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/destination-firebolt/metadata.yaml b/airbyte-integrations/connectors/destination-firebolt/metadata.yaml index 17b6e9c35bc4..4cbf69ac6e76 100644 --- a/airbyte-integrations/connectors/destination-firebolt/metadata.yaml +++ b/airbyte-integrations/connectors/destination-firebolt/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/destination-firestore/metadata.yaml b/airbyte-integrations/connectors/destination-firestore/metadata.yaml index bccad2ba608b..e4afa9a090e7 100644 --- a/airbyte-integrations/connectors/destination-firestore/metadata.yaml +++ b/airbyte-integrations/connectors/destination-firestore/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/destination-gcs/metadata.yaml b/airbyte-integrations/connectors/destination-gcs/metadata.yaml index 8228ecc57bce..0c94e037293f 100644 --- a/airbyte-integrations/connectors/destination-gcs/metadata.yaml +++ b/airbyte-integrations/connectors/destination-gcs/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/destination-google-sheets/metadata.yaml b/airbyte-integrations/connectors/destination-google-sheets/metadata.yaml index 9ba715bc3f0f..12e3217b7a90 100644 --- a/airbyte-integrations/connectors/destination-google-sheets/metadata.yaml +++ b/airbyte-integrations/connectors/destination-google-sheets/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/destination-iceberg/metadata.yaml b/airbyte-integrations/connectors/destination-iceberg/metadata.yaml index 869b34ac4bb2..1c1c9e3adee0 100644 --- a/airbyte-integrations/connectors/destination-iceberg/metadata.yaml +++ b/airbyte-integrations/connectors/destination-iceberg/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/destination-kafka/metadata.yaml b/airbyte-integrations/connectors/destination-kafka/metadata.yaml index 49182965e1aa..f2b06aaf0ad8 100644 --- a/airbyte-integrations/connectors/destination-kafka/metadata.yaml +++ b/airbyte-integrations/connectors/destination-kafka/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/destination-keen/metadata.yaml b/airbyte-integrations/connectors/destination-keen/metadata.yaml index 775e01d78474..19e352e6f9a9 100644 --- a/airbyte-integrations/connectors/destination-keen/metadata.yaml +++ b/airbyte-integrations/connectors/destination-keen/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/destination-kinesis/metadata.yaml b/airbyte-integrations/connectors/destination-kinesis/metadata.yaml index debba8610a92..b9a5e60ee7e2 100644 --- a/airbyte-integrations/connectors/destination-kinesis/metadata.yaml +++ b/airbyte-integrations/connectors/destination-kinesis/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/destination-local-json/metadata.yaml b/airbyte-integrations/connectors/destination-local-json/metadata.yaml index 5bfa36eeea78..c85daacebd60 100644 --- a/airbyte-integrations/connectors/destination-local-json/metadata.yaml +++ b/airbyte-integrations/connectors/destination-local-json/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/destination-mariadb-columnstore/metadata.yaml b/airbyte-integrations/connectors/destination-mariadb-columnstore/metadata.yaml index 470d6f685004..84da6ef5dde3 100644 --- a/airbyte-integrations/connectors/destination-mariadb-columnstore/metadata.yaml +++ b/airbyte-integrations/connectors/destination-mariadb-columnstore/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/destination-meilisearch/metadata.yaml b/airbyte-integrations/connectors/destination-meilisearch/metadata.yaml index 156cf2760902..0c8ed435c4c8 100644 --- a/airbyte-integrations/connectors/destination-meilisearch/metadata.yaml +++ b/airbyte-integrations/connectors/destination-meilisearch/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/destination-mongodb-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/destination-mongodb-strict-encrypt/metadata.yaml index 3c96f1caa5f9..66ba83c6bcb2 100644 --- a/airbyte-integrations/connectors/destination-mongodb-strict-encrypt/metadata.yaml +++ b/airbyte-integrations/connectors/destination-mongodb-strict-encrypt/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false # strict encrypt connectors are deployed to Cloud by their non strict encrypt sibling. oss: diff --git a/airbyte-integrations/connectors/destination-mongodb/metadata.yaml b/airbyte-integrations/connectors/destination-mongodb/metadata.yaml index 2b1185c3584c..d9a178efff10 100644 --- a/airbyte-integrations/connectors/destination-mongodb/metadata.yaml +++ b/airbyte-integrations/connectors/destination-mongodb/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: dockerRepository: airbyte/destination-mongodb-strict-encrypt enabled: true diff --git a/airbyte-integrations/connectors/destination-mqtt/metadata.yaml b/airbyte-integrations/connectors/destination-mqtt/metadata.yaml index 6b9a840aa846..4c303422701e 100644 --- a/airbyte-integrations/connectors/destination-mqtt/metadata.yaml +++ b/airbyte-integrations/connectors/destination-mqtt/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/destination-mssql-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/destination-mssql-strict-encrypt/metadata.yaml index a30d34776b20..e6af8f87ff5c 100644 --- a/airbyte-integrations/connectors/destination-mssql-strict-encrypt/metadata.yaml +++ b/airbyte-integrations/connectors/destination-mssql-strict-encrypt/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false # strict encrypt connectors are deployed to Cloud by their non strict encrypt sibling. oss: diff --git a/airbyte-integrations/connectors/destination-mssql/metadata.yaml b/airbyte-integrations/connectors/destination-mssql/metadata.yaml index 45f8e966c040..65452bc2c0d9 100644 --- a/airbyte-integrations/connectors/destination-mssql/metadata.yaml +++ b/airbyte-integrations/connectors/destination-mssql/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: dockerImageTag: 0.1.22 dockerRepository: airbyte/destination-mssql-strict-encrypt diff --git a/airbyte-integrations/connectors/destination-mysql-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/destination-mysql-strict-encrypt/metadata.yaml index 4f91cf525fec..6d442902470f 100644 --- a/airbyte-integrations/connectors/destination-mysql-strict-encrypt/metadata.yaml +++ b/airbyte-integrations/connectors/destination-mysql-strict-encrypt/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false # strict encrypt connectors are deployed to Cloud by their non strict encrypt sibling. oss: diff --git a/airbyte-integrations/connectors/destination-mysql/metadata.yaml b/airbyte-integrations/connectors/destination-mysql/metadata.yaml index 5db3442b1dfe..6430f8cec908 100644 --- a/airbyte-integrations/connectors/destination-mysql/metadata.yaml +++ b/airbyte-integrations/connectors/destination-mysql/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: dockerRepository: airbyte/destination-mysql-strict-encrypt enabled: true diff --git a/airbyte-integrations/connectors/destination-oracle-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/destination-oracle-strict-encrypt/metadata.yaml index 1eee2c07a676..cd96de0c7637 100644 --- a/airbyte-integrations/connectors/destination-oracle-strict-encrypt/metadata.yaml +++ b/airbyte-integrations/connectors/destination-oracle-strict-encrypt/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false # strict encrypt connectors are deployed to Cloud by their non strict encrypt sibling. oss: diff --git a/airbyte-integrations/connectors/destination-oracle/metadata.yaml b/airbyte-integrations/connectors/destination-oracle/metadata.yaml index 78532e763208..60b4068d3a48 100644 --- a/airbyte-integrations/connectors/destination-oracle/metadata.yaml +++ b/airbyte-integrations/connectors/destination-oracle/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: dockerRepository: airbyte/destination-oracle-strict-encrypt enabled: true diff --git a/airbyte-integrations/connectors/destination-postgres-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/destination-postgres-strict-encrypt/metadata.yaml index 58d8606b9628..45f4cc42c386 100644 --- a/airbyte-integrations/connectors/destination-postgres-strict-encrypt/metadata.yaml +++ b/airbyte-integrations/connectors/destination-postgres-strict-encrypt/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false # strict encrypt connectors are deployed to Cloud by their non strict encrypt sibling. oss: diff --git a/airbyte-integrations/connectors/destination-postgres/metadata.yaml b/airbyte-integrations/connectors/destination-postgres/metadata.yaml index be4270bb56df..1e5ae7e0d2a9 100644 --- a/airbyte-integrations/connectors/destination-postgres/metadata.yaml +++ b/airbyte-integrations/connectors/destination-postgres/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: dockerImageTag: 0.3.26 dockerRepository: airbyte/destination-postgres-strict-encrypt diff --git a/airbyte-integrations/connectors/destination-pubsub/metadata.yaml b/airbyte-integrations/connectors/destination-pubsub/metadata.yaml index 360147f82757..0f67ced5421b 100644 --- a/airbyte-integrations/connectors/destination-pubsub/metadata.yaml +++ b/airbyte-integrations/connectors/destination-pubsub/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/destination-pulsar/metadata.yaml b/airbyte-integrations/connectors/destination-pulsar/metadata.yaml index 41cf809d63cd..90cc025f0281 100644 --- a/airbyte-integrations/connectors/destination-pulsar/metadata.yaml +++ b/airbyte-integrations/connectors/destination-pulsar/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/destination-r2/metadata.yaml b/airbyte-integrations/connectors/destination-r2/metadata.yaml index 8bb5b0f13c00..bd677d0754fb 100644 --- a/airbyte-integrations/connectors/destination-r2/metadata.yaml +++ b/airbyte-integrations/connectors/destination-r2/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/destination-rabbitmq/metadata.yaml b/airbyte-integrations/connectors/destination-rabbitmq/metadata.yaml index 959e2c744566..7e5c3078d1bf 100644 --- a/airbyte-integrations/connectors/destination-rabbitmq/metadata.yaml +++ b/airbyte-integrations/connectors/destination-rabbitmq/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/destination-redis/metadata.yaml b/airbyte-integrations/connectors/destination-redis/metadata.yaml index 2be741a3f9f1..52a47fc91901 100644 --- a/airbyte-integrations/connectors/destination-redis/metadata.yaml +++ b/airbyte-integrations/connectors/destination-redis/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/destination-redpanda/metadata.yaml b/airbyte-integrations/connectors/destination-redpanda/metadata.yaml index 5b8008c6c8fe..bf0f69c37268 100644 --- a/airbyte-integrations/connectors/destination-redpanda/metadata.yaml +++ b/airbyte-integrations/connectors/destination-redpanda/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/destination-redshift/metadata.yaml b/airbyte-integrations/connectors/destination-redshift/metadata.yaml index 97d09a5ae482..18d172029644 100644 --- a/airbyte-integrations/connectors/destination-redshift/metadata.yaml +++ b/airbyte-integrations/connectors/destination-redshift/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/destination-rockset/metadata.yaml b/airbyte-integrations/connectors/destination-rockset/metadata.yaml index 939a91868af7..f87844d63f63 100644 --- a/airbyte-integrations/connectors/destination-rockset/metadata.yaml +++ b/airbyte-integrations/connectors/destination-rockset/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/destination-s3-glue/metadata.yaml b/airbyte-integrations/connectors/destination-s3-glue/metadata.yaml index e3436264d2ef..e1631dfce96d 100644 --- a/airbyte-integrations/connectors/destination-s3-glue/metadata.yaml +++ b/airbyte-integrations/connectors/destination-s3-glue/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/destination-s3/metadata.yaml b/airbyte-integrations/connectors/destination-s3/metadata.yaml index 390c495f2866..4cc0457bcbe9 100644 --- a/airbyte-integrations/connectors/destination-s3/metadata.yaml +++ b/airbyte-integrations/connectors/destination-s3/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/destination-scylla/metadata.yaml b/airbyte-integrations/connectors/destination-scylla/metadata.yaml index 0bce37d35938..bbbda83f2864 100644 --- a/airbyte-integrations/connectors/destination-scylla/metadata.yaml +++ b/airbyte-integrations/connectors/destination-scylla/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/destination-selectdb/metadata.yaml b/airbyte-integrations/connectors/destination-selectdb/metadata.yaml index f5b59100d316..26beeeaf802b 100644 --- a/airbyte-integrations/connectors/destination-selectdb/metadata.yaml +++ b/airbyte-integrations/connectors/destination-selectdb/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/destination-sftp-json/metadata.yaml b/airbyte-integrations/connectors/destination-sftp-json/metadata.yaml index 878623279ed8..4ede5d6c28c3 100644 --- a/airbyte-integrations/connectors/destination-sftp-json/metadata.yaml +++ b/airbyte-integrations/connectors/destination-sftp-json/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/destination-snowflake/metadata.yaml b/airbyte-integrations/connectors/destination-snowflake/metadata.yaml index d39e4cea4ee9..20367ad98d96 100644 --- a/airbyte-integrations/connectors/destination-snowflake/metadata.yaml +++ b/airbyte-integrations/connectors/destination-snowflake/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/destination-sqlite/metadata.yaml b/airbyte-integrations/connectors/destination-sqlite/metadata.yaml index e3adf17f6294..146b57525c15 100644 --- a/airbyte-integrations/connectors/destination-sqlite/metadata.yaml +++ b/airbyte-integrations/connectors/destination-sqlite/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/destination-teradata/metadata.yaml b/airbyte-integrations/connectors/destination-teradata/metadata.yaml index dd3b15d915f2..6a0316f2cfd6 100644 --- a/airbyte-integrations/connectors/destination-teradata/metadata.yaml +++ b/airbyte-integrations/connectors/destination-teradata/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/destination-tidb/metadata.yaml b/airbyte-integrations/connectors/destination-tidb/metadata.yaml index dbe1e10e9408..3ece8085650e 100644 --- a/airbyte-integrations/connectors/destination-tidb/metadata.yaml +++ b/airbyte-integrations/connectors/destination-tidb/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/destination-typesense/metadata.yaml b/airbyte-integrations/connectors/destination-typesense/metadata.yaml index abff36cdd3d8..71a63bb99413 100644 --- a/airbyte-integrations/connectors/destination-typesense/metadata.yaml +++ b/airbyte-integrations/connectors/destination-typesense/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/destination-weaviate/metadata.yaml b/airbyte-integrations/connectors/destination-weaviate/metadata.yaml index ee28f185f819..c30cf03151b7 100644 --- a/airbyte-integrations/connectors/destination-weaviate/metadata.yaml +++ b/airbyte-integrations/connectors/destination-weaviate/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/destination-yugabytedb/metadata.yaml b/airbyte-integrations/connectors/destination-yugabytedb/metadata.yaml index 9388db1e6959..8469c67898ee 100644 --- a/airbyte-integrations/connectors/destination-yugabytedb/metadata.yaml +++ b/airbyte-integrations/connectors/destination-yugabytedb/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-activecampaign/metadata.yaml b/airbyte-integrations/connectors/source-activecampaign/metadata.yaml index 6d2bdc729bab..7fc50827f13f 100644 --- a/airbyte-integrations/connectors/source-activecampaign/metadata.yaml +++ b/airbyte-integrations/connectors/source-activecampaign/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-adjust/metadata.yaml b/airbyte-integrations/connectors/source-adjust/metadata.yaml index d543932dd890..08fe8dd0a44d 100644 --- a/airbyte-integrations/connectors/source-adjust/metadata.yaml +++ b/airbyte-integrations/connectors/source-adjust/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-aha/metadata.yaml b/airbyte-integrations/connectors/source-aha/metadata.yaml index 928d922f4124..1fe299172028 100644 --- a/airbyte-integrations/connectors/source-aha/metadata.yaml +++ b/airbyte-integrations/connectors/source-aha/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-airtable/metadata.yaml b/airbyte-integrations/connectors/source-airtable/metadata.yaml index e492275efc46..5b1445e822ea 100644 --- a/airbyte-integrations/connectors/source-airtable/metadata.yaml +++ b/airbyte-integrations/connectors/source-airtable/metadata.yaml @@ -3,7 +3,7 @@ data: hosts: - api.airtable.com - airtable.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-alloydb-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/source-alloydb-strict-encrypt/metadata.yaml index e1fe7637de17..98f4f0207e65 100644 --- a/airbyte-integrations/connectors/source-alloydb-strict-encrypt/metadata.yaml +++ b/airbyte-integrations/connectors/source-alloydb-strict-encrypt/metadata.yaml @@ -3,7 +3,7 @@ data: hosts: - ${host} - ${tunnel_method.tunnel_host} - catalogs: + registries: cloud: enabled: false # strict encrypt connectors are deployed to Cloud by their non strict encrypt sibling. oss: diff --git a/airbyte-integrations/connectors/source-alloydb/metadata.yaml b/airbyte-integrations/connectors/source-alloydb/metadata.yaml index 94b84628612f..3fbba9bbe295 100644 --- a/airbyte-integrations/connectors/source-alloydb/metadata.yaml +++ b/airbyte-integrations/connectors/source-alloydb/metadata.yaml @@ -3,7 +3,7 @@ data: hosts: - ${host} - ${tunnel_method.tunnel_host} - catalogs: + registries: cloud: dockerImageTag: 2.0.15 dockerRepository: airbyte/source-alloydb-strict-encrypt diff --git a/airbyte-integrations/connectors/source-alpha-vantage/metadata.yaml b/airbyte-integrations/connectors/source-alpha-vantage/metadata.yaml index 161ce824728b..6824e6db7274 100644 --- a/airbyte-integrations/connectors/source-alpha-vantage/metadata.yaml +++ b/airbyte-integrations/connectors/source-alpha-vantage/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-amazon-ads/metadata.yaml b/airbyte-integrations/connectors/source-amazon-ads/metadata.yaml index c90ce9add70b..912394d04801 100644 --- a/airbyte-integrations/connectors/source-amazon-ads/metadata.yaml +++ b/airbyte-integrations/connectors/source-amazon-ads/metadata.yaml @@ -5,7 +5,7 @@ data: - advertising-api.amazon.com - advertising-api-eu.amazon.com - advertising-api-fe.amazon.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-amazon-seller-partner/metadata.yaml b/airbyte-integrations/connectors/source-amazon-seller-partner/metadata.yaml index d36e43e6ec49..13f93fe2781e 100644 --- a/airbyte-integrations/connectors/source-amazon-seller-partner/metadata.yaml +++ b/airbyte-integrations/connectors/source-amazon-seller-partner/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-amazon-sqs/metadata.yaml b/airbyte-integrations/connectors/source-amazon-sqs/metadata.yaml index 4a1e5e5df238..e55834da9109 100644 --- a/airbyte-integrations/connectors/source-amazon-sqs/metadata.yaml +++ b/airbyte-integrations/connectors/source-amazon-sqs/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-amplitude/metadata.yaml b/airbyte-integrations/connectors/source-amplitude/metadata.yaml index ed09403c2f87..64904670c22f 100644 --- a/airbyte-integrations/connectors/source-amplitude/metadata.yaml +++ b/airbyte-integrations/connectors/source-amplitude/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - "*.amplitude.com" - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-apify-dataset/metadata.yaml b/airbyte-integrations/connectors/source-apify-dataset/metadata.yaml index 39716a539b05..0417d2555aaf 100644 --- a/airbyte-integrations/connectors/source-apify-dataset/metadata.yaml +++ b/airbyte-integrations/connectors/source-apify-dataset/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-appfollow/metadata.yaml b/airbyte-integrations/connectors/source-appfollow/metadata.yaml index e12b82cafc9d..861f3a0b1f1e 100644 --- a/airbyte-integrations/connectors/source-appfollow/metadata.yaml +++ b/airbyte-integrations/connectors/source-appfollow/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-appsflyer/metadata.yaml b/airbyte-integrations/connectors/source-appsflyer/metadata.yaml index ad9047ae4d25..d44fbc86708b 100644 --- a/airbyte-integrations/connectors/source-appsflyer/metadata.yaml +++ b/airbyte-integrations/connectors/source-appsflyer/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-appstore-singer/metadata.yaml b/airbyte-integrations/connectors/source-appstore-singer/metadata.yaml index e59b502726b6..cffd12613b28 100644 --- a/airbyte-integrations/connectors/source-appstore-singer/metadata.yaml +++ b/airbyte-integrations/connectors/source-appstore-singer/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-asana/metadata.yaml b/airbyte-integrations/connectors/source-asana/metadata.yaml index afa92e85973a..33d3bc85b679 100644 --- a/airbyte-integrations/connectors/source-asana/metadata.yaml +++ b/airbyte-integrations/connectors/source-asana/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-ashby/metadata.yaml b/airbyte-integrations/connectors/source-ashby/metadata.yaml index fbf616af1aad..69a68d9af1eb 100644 --- a/airbyte-integrations/connectors/source-ashby/metadata.yaml +++ b/airbyte-integrations/connectors/source-ashby/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-auth0/metadata.yaml b/airbyte-integrations/connectors/source-auth0/metadata.yaml index e9d935bbdb31..ca01408423c1 100644 --- a/airbyte-integrations/connectors/source-auth0/metadata.yaml +++ b/airbyte-integrations/connectors/source-auth0/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-aws-cloudtrail/metadata.yaml b/airbyte-integrations/connectors/source-aws-cloudtrail/metadata.yaml index 99674d87b0c4..f57870f907a8 100644 --- a/airbyte-integrations/connectors/source-aws-cloudtrail/metadata.yaml +++ b/airbyte-integrations/connectors/source-aws-cloudtrail/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-azure-blob-storage/metadata.yaml b/airbyte-integrations/connectors/source-azure-blob-storage/metadata.yaml index d452be854424..b12521ab2a76 100644 --- a/airbyte-integrations/connectors/source-azure-blob-storage/metadata.yaml +++ b/airbyte-integrations/connectors/source-azure-blob-storage/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-azure-table/metadata.yaml b/airbyte-integrations/connectors/source-azure-table/metadata.yaml index fe9fa9bcf8ff..f96d07c3f97b 100644 --- a/airbyte-integrations/connectors/source-azure-table/metadata.yaml +++ b/airbyte-integrations/connectors/source-azure-table/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-babelforce/metadata.yaml b/airbyte-integrations/connectors/source-babelforce/metadata.yaml index 0c90c26ac1cb..2e020b822b98 100644 --- a/airbyte-integrations/connectors/source-babelforce/metadata.yaml +++ b/airbyte-integrations/connectors/source-babelforce/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-bamboo-hr/metadata.yaml b/airbyte-integrations/connectors/source-bamboo-hr/metadata.yaml index 77d589afd7b6..1a014f650d06 100644 --- a/airbyte-integrations/connectors/source-bamboo-hr/metadata.yaml +++ b/airbyte-integrations/connectors/source-bamboo-hr/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-bigcommerce/metadata.yaml b/airbyte-integrations/connectors/source-bigcommerce/metadata.yaml index b5c214cc87a9..928398bd9e83 100644 --- a/airbyte-integrations/connectors/source-bigcommerce/metadata.yaml +++ b/airbyte-integrations/connectors/source-bigcommerce/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-bigquery/metadata.yaml b/airbyte-integrations/connectors/source-bigquery/metadata.yaml index 3e3ee88e1037..3993cd1c1bed 100644 --- a/airbyte-integrations/connectors/source-bigquery/metadata.yaml +++ b/airbyte-integrations/connectors/source-bigquery/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-bing-ads/metadata.yaml b/airbyte-integrations/connectors/source-bing-ads/metadata.yaml index 3127634d0c3f..db37b5d37d04 100644 --- a/airbyte-integrations/connectors/source-bing-ads/metadata.yaml +++ b/airbyte-integrations/connectors/source-bing-ads/metadata.yaml @@ -7,7 +7,7 @@ data: - login.windows-ppe.net - ads.microsoft.com - api.ads.microsoft.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-braintree/metadata.yaml b/airbyte-integrations/connectors/source-braintree/metadata.yaml index 18c51b884a2d..adfacc3a5304 100644 --- a/airbyte-integrations/connectors/source-braintree/metadata.yaml +++ b/airbyte-integrations/connectors/source-braintree/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-braze/metadata.yaml b/airbyte-integrations/connectors/source-braze/metadata.yaml index fd6407dce4e8..67df92b165cb 100644 --- a/airbyte-integrations/connectors/source-braze/metadata.yaml +++ b/airbyte-integrations/connectors/source-braze/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-breezometer/metadata.yaml b/airbyte-integrations/connectors/source-breezometer/metadata.yaml index 9e8cedae3c25..f82130803be1 100644 --- a/airbyte-integrations/connectors/source-breezometer/metadata.yaml +++ b/airbyte-integrations/connectors/source-breezometer/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-callrail/metadata.yaml b/airbyte-integrations/connectors/source-callrail/metadata.yaml index cbd72e3a6e5f..b7b6ce6f21c9 100644 --- a/airbyte-integrations/connectors/source-callrail/metadata.yaml +++ b/airbyte-integrations/connectors/source-callrail/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-cart/metadata.yaml b/airbyte-integrations/connectors/source-cart/metadata.yaml index cb472c5b74d4..fac665680d15 100644 --- a/airbyte-integrations/connectors/source-cart/metadata.yaml +++ b/airbyte-integrations/connectors/source-cart/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-chargebee/metadata.yaml b/airbyte-integrations/connectors/source-chargebee/metadata.yaml index b20c655e5ebe..4442f357d5b7 100644 --- a/airbyte-integrations/connectors/source-chargebee/metadata.yaml +++ b/airbyte-integrations/connectors/source-chargebee/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - "*.chargebee.com" - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-chargify/metadata.yaml b/airbyte-integrations/connectors/source-chargify/metadata.yaml index b1a460572d3d..877a1596ebba 100644 --- a/airbyte-integrations/connectors/source-chargify/metadata.yaml +++ b/airbyte-integrations/connectors/source-chargify/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-chartmogul/metadata.yaml b/airbyte-integrations/connectors/source-chartmogul/metadata.yaml index a961f5605102..6f552495bba6 100644 --- a/airbyte-integrations/connectors/source-chartmogul/metadata.yaml +++ b/airbyte-integrations/connectors/source-chartmogul/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - api.chartmogul.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-clickhouse-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/source-clickhouse-strict-encrypt/metadata.yaml index 184ce40fabc4..efcfd81c0d44 100644 --- a/airbyte-integrations/connectors/source-clickhouse-strict-encrypt/metadata.yaml +++ b/airbyte-integrations/connectors/source-clickhouse-strict-encrypt/metadata.yaml @@ -3,7 +3,7 @@ data: hosts: - ${host} - ${tunnel_method.tunnel_host} - catalogs: + registries: cloud: enabled: false # strict encrypt connectors are deployed to Cloud by their non strict encrypt sibling. oss: diff --git a/airbyte-integrations/connectors/source-clickhouse/metadata.yaml b/airbyte-integrations/connectors/source-clickhouse/metadata.yaml index b0c7b1ebe372..6678200b1966 100644 --- a/airbyte-integrations/connectors/source-clickhouse/metadata.yaml +++ b/airbyte-integrations/connectors/source-clickhouse/metadata.yaml @@ -3,7 +3,7 @@ data: hosts: - ${host} - ${tunnel_method.tunnel_host} - catalogs: + registries: cloud: dockerImageTag: 0.1.8 dockerRepository: airbyte/source-clickhouse-strict-encrypt diff --git a/airbyte-integrations/connectors/source-clickup-api/metadata.yaml b/airbyte-integrations/connectors/source-clickup-api/metadata.yaml index 86256039e29b..128ecd34c370 100644 --- a/airbyte-integrations/connectors/source-clickup-api/metadata.yaml +++ b/airbyte-integrations/connectors/source-clickup-api/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-clockify/metadata.yaml b/airbyte-integrations/connectors/source-clockify/metadata.yaml index e8fd0b3cd56c..bddf2dd25ff0 100644 --- a/airbyte-integrations/connectors/source-clockify/metadata.yaml +++ b/airbyte-integrations/connectors/source-clockify/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-close-com/metadata.yaml b/airbyte-integrations/connectors/source-close-com/metadata.yaml index ef7a9c40e748..cac03ed3393e 100644 --- a/airbyte-integrations/connectors/source-close-com/metadata.yaml +++ b/airbyte-integrations/connectors/source-close-com/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - api.close.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-cockroachdb-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/source-cockroachdb-strict-encrypt/metadata.yaml index 8ee1e94cb1cb..849bc68914b7 100644 --- a/airbyte-integrations/connectors/source-cockroachdb-strict-encrypt/metadata.yaml +++ b/airbyte-integrations/connectors/source-cockroachdb-strict-encrypt/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - ${host} - catalogs: + registries: cloud: enabled: false # strict encrypt connectors are deployed to Cloud by their non strict encrypt sibling. oss: diff --git a/airbyte-integrations/connectors/source-cockroachdb/metadata.yaml b/airbyte-integrations/connectors/source-cockroachdb/metadata.yaml index dbbe2ab3d3f7..64efacfa0785 100644 --- a/airbyte-integrations/connectors/source-cockroachdb/metadata.yaml +++ b/airbyte-integrations/connectors/source-cockroachdb/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - ${host} - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-coda/metadata.yaml b/airbyte-integrations/connectors/source-coda/metadata.yaml index 5a9656d9f3d5..6b1ad93d66ac 100644 --- a/airbyte-integrations/connectors/source-coda/metadata.yaml +++ b/airbyte-integrations/connectors/source-coda/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-coin-api/metadata.yaml b/airbyte-integrations/connectors/source-coin-api/metadata.yaml index f5aec07ba8ae..9fa06fcf1246 100644 --- a/airbyte-integrations/connectors/source-coin-api/metadata.yaml +++ b/airbyte-integrations/connectors/source-coin-api/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-coingecko-coins/metadata.yaml b/airbyte-integrations/connectors/source-coingecko-coins/metadata.yaml index 92a500e0db1b..80b0ab117b97 100644 --- a/airbyte-integrations/connectors/source-coingecko-coins/metadata.yaml +++ b/airbyte-integrations/connectors/source-coingecko-coins/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-coinmarketcap/metadata.yaml b/airbyte-integrations/connectors/source-coinmarketcap/metadata.yaml index 03c67c42a1b8..16de5934c9c9 100644 --- a/airbyte-integrations/connectors/source-coinmarketcap/metadata.yaml +++ b/airbyte-integrations/connectors/source-coinmarketcap/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-commcare/metadata.yaml b/airbyte-integrations/connectors/source-commcare/metadata.yaml index babd3625d2ac..2b90fd75d4dd 100644 --- a/airbyte-integrations/connectors/source-commcare/metadata.yaml +++ b/airbyte-integrations/connectors/source-commcare/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-commercetools/metadata.yaml b/airbyte-integrations/connectors/source-commercetools/metadata.yaml index 7349c00efeac..56758d971746 100644 --- a/airbyte-integrations/connectors/source-commercetools/metadata.yaml +++ b/airbyte-integrations/connectors/source-commercetools/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-configcat/metadata.yaml b/airbyte-integrations/connectors/source-configcat/metadata.yaml index ae6fc918433f..112d36c3fe8d 100644 --- a/airbyte-integrations/connectors/source-configcat/metadata.yaml +++ b/airbyte-integrations/connectors/source-configcat/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-confluence/metadata.yaml b/airbyte-integrations/connectors/source-confluence/metadata.yaml index 2c422134d8fe..082c18d17de8 100644 --- a/airbyte-integrations/connectors/source-confluence/metadata.yaml +++ b/airbyte-integrations/connectors/source-confluence/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - ${subdomain}.atlassian.net - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-convertkit/metadata.yaml b/airbyte-integrations/connectors/source-convertkit/metadata.yaml index 2840b889195e..6f0f703e867a 100644 --- a/airbyte-integrations/connectors/source-convertkit/metadata.yaml +++ b/airbyte-integrations/connectors/source-convertkit/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-convex/metadata.yaml b/airbyte-integrations/connectors/source-convex/metadata.yaml index 550645536210..7d4cf4b5311a 100644 --- a/airbyte-integrations/connectors/source-convex/metadata.yaml +++ b/airbyte-integrations/connectors/source-convex/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-copper/metadata.yaml b/airbyte-integrations/connectors/source-copper/metadata.yaml index d4ca088a98b8..ae8ef3447e20 100644 --- a/airbyte-integrations/connectors/source-copper/metadata.yaml +++ b/airbyte-integrations/connectors/source-copper/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-courier/metadata.yaml b/airbyte-integrations/connectors/source-courier/metadata.yaml index f72d847b17ae..47fd903286fb 100644 --- a/airbyte-integrations/connectors/source-courier/metadata.yaml +++ b/airbyte-integrations/connectors/source-courier/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-datadog/metadata.yaml b/airbyte-integrations/connectors/source-datadog/metadata.yaml index 4b20b83fe2e8..22dad0181991 100644 --- a/airbyte-integrations/connectors/source-datadog/metadata.yaml +++ b/airbyte-integrations/connectors/source-datadog/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-datascope/metadata.yaml b/airbyte-integrations/connectors/source-datascope/metadata.yaml index a7239b484277..568bbde6f6fd 100644 --- a/airbyte-integrations/connectors/source-datascope/metadata.yaml +++ b/airbyte-integrations/connectors/source-datascope/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-db2/metadata.yaml b/airbyte-integrations/connectors/source-db2/metadata.yaml index 30b853e455d3..82098ffec993 100644 --- a/airbyte-integrations/connectors/source-db2/metadata.yaml +++ b/airbyte-integrations/connectors/source-db2/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - ${host} - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-delighted/metadata.yaml b/airbyte-integrations/connectors/source-delighted/metadata.yaml index 0de5c61db1ec..ea281af4c7fd 100644 --- a/airbyte-integrations/connectors/source-delighted/metadata.yaml +++ b/airbyte-integrations/connectors/source-delighted/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - api.delighted.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-dixa/metadata.yaml b/airbyte-integrations/connectors/source-dixa/metadata.yaml index 703b414b424b..7e71cbdc141c 100644 --- a/airbyte-integrations/connectors/source-dixa/metadata.yaml +++ b/airbyte-integrations/connectors/source-dixa/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-dockerhub/metadata.yaml b/airbyte-integrations/connectors/source-dockerhub/metadata.yaml index 2ac5f1d80d84..d655bc115b67 100644 --- a/airbyte-integrations/connectors/source-dockerhub/metadata.yaml +++ b/airbyte-integrations/connectors/source-dockerhub/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-dremio/metadata.yaml b/airbyte-integrations/connectors/source-dremio/metadata.yaml index b8818ef39e0c..f79c8ff95b40 100644 --- a/airbyte-integrations/connectors/source-dremio/metadata.yaml +++ b/airbyte-integrations/connectors/source-dremio/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-drift/metadata.yaml b/airbyte-integrations/connectors/source-drift/metadata.yaml index a84fbd4eeb30..dc597c1af71c 100644 --- a/airbyte-integrations/connectors/source-drift/metadata.yaml +++ b/airbyte-integrations/connectors/source-drift/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - driftapi.com - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-dv-360/metadata.yaml b/airbyte-integrations/connectors/source-dv-360/metadata.yaml index 1e67a9ea992a..baf0f1b07b40 100644 --- a/airbyte-integrations/connectors/source-dv-360/metadata.yaml +++ b/airbyte-integrations/connectors/source-dv-360/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-dynamodb/metadata.yaml b/airbyte-integrations/connectors/source-dynamodb/metadata.yaml index 33f5221367cf..4c3bde742d0a 100644 --- a/airbyte-integrations/connectors/source-dynamodb/metadata.yaml +++ b/airbyte-integrations/connectors/source-dynamodb/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-e2e-test-cloud/metadata.yaml b/airbyte-integrations/connectors/source-e2e-test-cloud/metadata.yaml index 8a9d69f285ec..559bd88315d4 100644 --- a/airbyte-integrations/connectors/source-e2e-test-cloud/metadata.yaml +++ b/airbyte-integrations/connectors/source-e2e-test-cloud/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-e2e-test/metadata.yaml b/airbyte-integrations/connectors/source-e2e-test/metadata.yaml index 0ca944ee49f9..c46bdd72f977 100644 --- a/airbyte-integrations/connectors/source-e2e-test/metadata.yaml +++ b/airbyte-integrations/connectors/source-e2e-test/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-elasticsearch/metadata.yaml b/airbyte-integrations/connectors/source-elasticsearch/metadata.yaml index 977cf1d79f73..68a10a96b68b 100644 --- a/airbyte-integrations/connectors/source-elasticsearch/metadata.yaml +++ b/airbyte-integrations/connectors/source-elasticsearch/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-emailoctopus/metadata.yaml b/airbyte-integrations/connectors/source-emailoctopus/metadata.yaml index cbef6b86c892..a0196b3a19c3 100644 --- a/airbyte-integrations/connectors/source-emailoctopus/metadata.yaml +++ b/airbyte-integrations/connectors/source-emailoctopus/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-everhour/metadata.yaml b/airbyte-integrations/connectors/source-everhour/metadata.yaml index 69c699d4aa5f..258a01e4f03f 100644 --- a/airbyte-integrations/connectors/source-everhour/metadata.yaml +++ b/airbyte-integrations/connectors/source-everhour/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - api.everhour.com - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-exchange-rates/metadata.yaml b/airbyte-integrations/connectors/source-exchange-rates/metadata.yaml index 3ab578d814b6..c2533b466e62 100644 --- a/airbyte-integrations/connectors/source-exchange-rates/metadata.yaml +++ b/airbyte-integrations/connectors/source-exchange-rates/metadata.yaml @@ -3,7 +3,7 @@ data: hosts: - ${subdomain}.apilayer.com - apilayer.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-facebook-marketing/metadata.yaml b/airbyte-integrations/connectors/source-facebook-marketing/metadata.yaml index f75f3afee653..2ec5f699902e 100644 --- a/airbyte-integrations/connectors/source-facebook-marketing/metadata.yaml +++ b/airbyte-integrations/connectors/source-facebook-marketing/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - graph.facebook.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-facebook-pages/metadata.yaml b/airbyte-integrations/connectors/source-facebook-pages/metadata.yaml index f853a76d98a1..4587c846a043 100644 --- a/airbyte-integrations/connectors/source-facebook-pages/metadata.yaml +++ b/airbyte-integrations/connectors/source-facebook-pages/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - graph.facebook.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-faker/metadata.yaml b/airbyte-integrations/connectors/source-faker/metadata.yaml index 38d4355fe5a6..448ae43f2c9b 100644 --- a/airbyte-integrations/connectors/source-faker/metadata.yaml +++ b/airbyte-integrations/connectors/source-faker/metadata.yaml @@ -1,7 +1,7 @@ data: allowedHosts: hosts: [] - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-fastbill/metadata.yaml b/airbyte-integrations/connectors/source-fastbill/metadata.yaml index af979546cfa0..5c7c4e3c2727 100644 --- a/airbyte-integrations/connectors/source-fastbill/metadata.yaml +++ b/airbyte-integrations/connectors/source-fastbill/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-fauna/metadata.yaml b/airbyte-integrations/connectors/source-fauna/metadata.yaml index e14e58829b26..b10c30b82832 100644 --- a/airbyte-integrations/connectors/source-fauna/metadata.yaml +++ b/airbyte-integrations/connectors/source-fauna/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-file/metadata.yaml b/airbyte-integrations/connectors/source-file/metadata.yaml index fb09259a9e9b..e852f2f1c808 100644 --- a/airbyte-integrations/connectors/source-file/metadata.yaml +++ b/airbyte-integrations/connectors/source-file/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - "*" - catalogs: + registries: cloud: dockerRepository: airbyte/source-file-secure enabled: true diff --git a/airbyte-integrations/connectors/source-firebase-realtime-database/metadata.yaml b/airbyte-integrations/connectors/source-firebase-realtime-database/metadata.yaml index 24f7f9d1b303..b1dd7e8f0e63 100644 --- a/airbyte-integrations/connectors/source-firebase-realtime-database/metadata.yaml +++ b/airbyte-integrations/connectors/source-firebase-realtime-database/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - "*" - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-firebolt/metadata.yaml b/airbyte-integrations/connectors/source-firebolt/metadata.yaml index e8d0f4763fd5..bcdf9f92344d 100644 --- a/airbyte-integrations/connectors/source-firebolt/metadata.yaml +++ b/airbyte-integrations/connectors/source-firebolt/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-flexport/metadata.yaml b/airbyte-integrations/connectors/source-flexport/metadata.yaml index 82d597ddfbf2..426e909c3fd2 100644 --- a/airbyte-integrations/connectors/source-flexport/metadata.yaml +++ b/airbyte-integrations/connectors/source-flexport/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-freshcaller/metadata.yaml b/airbyte-integrations/connectors/source-freshcaller/metadata.yaml index 402477e21579..bf287fcf5e23 100644 --- a/airbyte-integrations/connectors/source-freshcaller/metadata.yaml +++ b/airbyte-integrations/connectors/source-freshcaller/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-freshdesk/metadata.yaml b/airbyte-integrations/connectors/source-freshdesk/metadata.yaml index 3588ba154cee..b825e29ab731 100644 --- a/airbyte-integrations/connectors/source-freshdesk/metadata.yaml +++ b/airbyte-integrations/connectors/source-freshdesk/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - "*.freshdesk.com" - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-freshsales/metadata.yaml b/airbyte-integrations/connectors/source-freshsales/metadata.yaml index 67d81961a391..43d999ff5d0e 100644 --- a/airbyte-integrations/connectors/source-freshsales/metadata.yaml +++ b/airbyte-integrations/connectors/source-freshsales/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - "*.myfreshworks.com" - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-freshservice/metadata.yaml b/airbyte-integrations/connectors/source-freshservice/metadata.yaml index e7c50ebd9e2d..d63bf152107f 100644 --- a/airbyte-integrations/connectors/source-freshservice/metadata.yaml +++ b/airbyte-integrations/connectors/source-freshservice/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-gcs/metadata.yaml b/airbyte-integrations/connectors/source-gcs/metadata.yaml index 85b0f528fa1e..082d81778111 100644 --- a/airbyte-integrations/connectors/source-gcs/metadata.yaml +++ b/airbyte-integrations/connectors/source-gcs/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-genesys/metadata.yaml b/airbyte-integrations/connectors/source-genesys/metadata.yaml index 07bed56053a8..c1139c9dacc1 100644 --- a/airbyte-integrations/connectors/source-genesys/metadata.yaml +++ b/airbyte-integrations/connectors/source-genesys/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-getlago/metadata.yaml b/airbyte-integrations/connectors/source-getlago/metadata.yaml index 7a9ac51d6cb2..e9b8429e1f63 100644 --- a/airbyte-integrations/connectors/source-getlago/metadata.yaml +++ b/airbyte-integrations/connectors/source-getlago/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-github/metadata.yaml b/airbyte-integrations/connectors/source-github/metadata.yaml index a4173b4cf9f6..90d5fe1b6a6d 100644 --- a/airbyte-integrations/connectors/source-github/metadata.yaml +++ b/airbyte-integrations/connectors/source-github/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - api.github.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-gitlab/metadata.yaml b/airbyte-integrations/connectors/source-gitlab/metadata.yaml index a24a64f8f937..6f692a3c0223 100644 --- a/airbyte-integrations/connectors/source-gitlab/metadata.yaml +++ b/airbyte-integrations/connectors/source-gitlab/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - "*" - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-glassfrog/metadata.yaml b/airbyte-integrations/connectors/source-glassfrog/metadata.yaml index 26060f9beb8c..6e0d9650bb11 100644 --- a/airbyte-integrations/connectors/source-glassfrog/metadata.yaml +++ b/airbyte-integrations/connectors/source-glassfrog/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-gnews/metadata.yaml b/airbyte-integrations/connectors/source-gnews/metadata.yaml index ddc1141fb8eb..ed18f56884da 100644 --- a/airbyte-integrations/connectors/source-gnews/metadata.yaml +++ b/airbyte-integrations/connectors/source-gnews/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-gocardless/metadata.yaml b/airbyte-integrations/connectors/source-gocardless/metadata.yaml index 10d12e344974..1b73e112c257 100644 --- a/airbyte-integrations/connectors/source-gocardless/metadata.yaml +++ b/airbyte-integrations/connectors/source-gocardless/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-gong/metadata.yaml b/airbyte-integrations/connectors/source-gong/metadata.yaml index a0c39502bf2b..4fc921f065eb 100644 --- a/airbyte-integrations/connectors/source-gong/metadata.yaml +++ b/airbyte-integrations/connectors/source-gong/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-google-ads/metadata.yaml b/airbyte-integrations/connectors/source-google-ads/metadata.yaml index d6688657fb4a..1afb338296d4 100644 --- a/airbyte-integrations/connectors/source-google-ads/metadata.yaml +++ b/airbyte-integrations/connectors/source-google-ads/metadata.yaml @@ -3,7 +3,7 @@ data: hosts: - accounts.google.com - googleads.googleapis.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-google-analytics-data-api/metadata.yaml b/airbyte-integrations/connectors/source-google-analytics-data-api/metadata.yaml index f43c5ad7d371..f2d47c34d665 100644 --- a/airbyte-integrations/connectors/source-google-analytics-data-api/metadata.yaml +++ b/airbyte-integrations/connectors/source-google-analytics-data-api/metadata.yaml @@ -4,7 +4,7 @@ data: - oauth2.googleapis.com - www.googleapis.com - analyticsdata.googleapis.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-google-analytics-v4/metadata.yaml b/airbyte-integrations/connectors/source-google-analytics-v4/metadata.yaml index 3323a6adfa68..52ea4ebf1733 100644 --- a/airbyte-integrations/connectors/source-google-analytics-v4/metadata.yaml +++ b/airbyte-integrations/connectors/source-google-analytics-v4/metadata.yaml @@ -5,7 +5,7 @@ data: - www.googleapis.com - analyticsdata.googleapis.com - analyticsreporting.googleapis.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-google-directory/metadata.yaml b/airbyte-integrations/connectors/source-google-directory/metadata.yaml index 52bf820b8576..f79f2ace2fd9 100644 --- a/airbyte-integrations/connectors/source-google-directory/metadata.yaml +++ b/airbyte-integrations/connectors/source-google-directory/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: dockerImageTag: 0.1.3 enabled: true diff --git a/airbyte-integrations/connectors/source-google-pagespeed-insights/metadata.yaml b/airbyte-integrations/connectors/source-google-pagespeed-insights/metadata.yaml index a8a01bc638b4..2e348bf33da6 100644 --- a/airbyte-integrations/connectors/source-google-pagespeed-insights/metadata.yaml +++ b/airbyte-integrations/connectors/source-google-pagespeed-insights/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-google-search-console/metadata.yaml b/airbyte-integrations/connectors/source-google-search-console/metadata.yaml index d153eb576cbc..db90fa88034e 100644 --- a/airbyte-integrations/connectors/source-google-search-console/metadata.yaml +++ b/airbyte-integrations/connectors/source-google-search-console/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - "*.googleapis.com" - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-google-sheets/metadata.yaml b/airbyte-integrations/connectors/source-google-sheets/metadata.yaml index e317f73b1f66..0c43d33fdec3 100644 --- a/airbyte-integrations/connectors/source-google-sheets/metadata.yaml +++ b/airbyte-integrations/connectors/source-google-sheets/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - "*.googleapis.com" - catalogs: + registries: cloud: dockerImageTag: 0.2.21 enabled: true diff --git a/airbyte-integrations/connectors/source-google-webfonts/metadata.yaml b/airbyte-integrations/connectors/source-google-webfonts/metadata.yaml index 51f7236b088b..abbcd5365031 100644 --- a/airbyte-integrations/connectors/source-google-webfonts/metadata.yaml +++ b/airbyte-integrations/connectors/source-google-webfonts/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-google-workspace-admin-reports/metadata.yaml b/airbyte-integrations/connectors/source-google-workspace-admin-reports/metadata.yaml index 5b4879fd430e..f6a8024060bf 100644 --- a/airbyte-integrations/connectors/source-google-workspace-admin-reports/metadata.yaml +++ b/airbyte-integrations/connectors/source-google-workspace-admin-reports/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: dockerImageTag: 0.1.4 enabled: true diff --git a/airbyte-integrations/connectors/source-greenhouse/metadata.yaml b/airbyte-integrations/connectors/source-greenhouse/metadata.yaml index c1fc419327cc..6cb506e75c2d 100644 --- a/airbyte-integrations/connectors/source-greenhouse/metadata.yaml +++ b/airbyte-integrations/connectors/source-greenhouse/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - harvest.greenhouse.io - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-gridly/metadata.yaml b/airbyte-integrations/connectors/source-gridly/metadata.yaml index 858496e1dc5c..54af8c55533e 100644 --- a/airbyte-integrations/connectors/source-gridly/metadata.yaml +++ b/airbyte-integrations/connectors/source-gridly/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-gutendex/metadata.yaml b/airbyte-integrations/connectors/source-gutendex/metadata.yaml index 7fcc0095f781..4827c86ee040 100644 --- a/airbyte-integrations/connectors/source-gutendex/metadata.yaml +++ b/airbyte-integrations/connectors/source-gutendex/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-harvest/metadata.yaml b/airbyte-integrations/connectors/source-harvest/metadata.yaml index ddca541ba001..3d5cae8ca47f 100644 --- a/airbyte-integrations/connectors/source-harvest/metadata.yaml +++ b/airbyte-integrations/connectors/source-harvest/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - api.harvestapp.com - catalogs: + registries: cloud: dockerImageTag: 0.1.16 enabled: true diff --git a/airbyte-integrations/connectors/source-hellobaton/metadata.yaml b/airbyte-integrations/connectors/source-hellobaton/metadata.yaml index 06419e5c6c43..98c6a8f2813f 100644 --- a/airbyte-integrations/connectors/source-hellobaton/metadata.yaml +++ b/airbyte-integrations/connectors/source-hellobaton/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-hubplanner/metadata.yaml b/airbyte-integrations/connectors/source-hubplanner/metadata.yaml index 9a68324e29b8..3fc00452fef8 100644 --- a/airbyte-integrations/connectors/source-hubplanner/metadata.yaml +++ b/airbyte-integrations/connectors/source-hubplanner/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-hubspot/metadata.yaml b/airbyte-integrations/connectors/source-hubspot/metadata.yaml index 5a6ad1bfae5b..9fdd230e76b5 100644 --- a/airbyte-integrations/connectors/source-hubspot/metadata.yaml +++ b/airbyte-integrations/connectors/source-hubspot/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - api.hubapi.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-insightly/metadata.yaml b/airbyte-integrations/connectors/source-insightly/metadata.yaml index d0a4dc9b44e7..b563f86bc268 100644 --- a/airbyte-integrations/connectors/source-insightly/metadata.yaml +++ b/airbyte-integrations/connectors/source-insightly/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-instagram/metadata.yaml b/airbyte-integrations/connectors/source-instagram/metadata.yaml index 1cdfd79840a8..6d14b5f9e54e 100644 --- a/airbyte-integrations/connectors/source-instagram/metadata.yaml +++ b/airbyte-integrations/connectors/source-instagram/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - graph.facebook.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-instatus/metadata.yaml b/airbyte-integrations/connectors/source-instatus/metadata.yaml index bf24e3a9c3fa..2472b25993f3 100644 --- a/airbyte-integrations/connectors/source-instatus/metadata.yaml +++ b/airbyte-integrations/connectors/source-instatus/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-intercom/metadata.yaml b/airbyte-integrations/connectors/source-intercom/metadata.yaml index 8ca75a32533d..0c491927535c 100644 --- a/airbyte-integrations/connectors/source-intercom/metadata.yaml +++ b/airbyte-integrations/connectors/source-intercom/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - api.intercom.io - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-intruder/metadata.yaml b/airbyte-integrations/connectors/source-intruder/metadata.yaml index 03af0a118161..46e7855b65d0 100644 --- a/airbyte-integrations/connectors/source-intruder/metadata.yaml +++ b/airbyte-integrations/connectors/source-intruder/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-ip2whois/metadata.yaml b/airbyte-integrations/connectors/source-ip2whois/metadata.yaml index d293f8f8bf11..4faa3d7c0c58 100644 --- a/airbyte-integrations/connectors/source-ip2whois/metadata.yaml +++ b/airbyte-integrations/connectors/source-ip2whois/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-iterable/metadata.yaml b/airbyte-integrations/connectors/source-iterable/metadata.yaml index ed811a6af81d..e50a94fc37ad 100644 --- a/airbyte-integrations/connectors/source-iterable/metadata.yaml +++ b/airbyte-integrations/connectors/source-iterable/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - api.iterable.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-jira/metadata.yaml b/airbyte-integrations/connectors/source-jira/metadata.yaml index e11e4d4203f4..63cdc33d2d90 100644 --- a/airbyte-integrations/connectors/source-jira/metadata.yaml +++ b/airbyte-integrations/connectors/source-jira/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - ${domain} - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-k6-cloud/metadata.yaml b/airbyte-integrations/connectors/source-k6-cloud/metadata.yaml index d68c06626d83..bb5fde0549ae 100644 --- a/airbyte-integrations/connectors/source-k6-cloud/metadata.yaml +++ b/airbyte-integrations/connectors/source-k6-cloud/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-kafka/metadata.yaml b/airbyte-integrations/connectors/source-kafka/metadata.yaml index d9810eaecaef..5f9e5426fcfb 100644 --- a/airbyte-integrations/connectors/source-kafka/metadata.yaml +++ b/airbyte-integrations/connectors/source-kafka/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-klarna/metadata.yaml b/airbyte-integrations/connectors/source-klarna/metadata.yaml index 816471f2dc9a..6500c097eae8 100644 --- a/airbyte-integrations/connectors/source-klarna/metadata.yaml +++ b/airbyte-integrations/connectors/source-klarna/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-klaviyo/metadata.yaml b/airbyte-integrations/connectors/source-klaviyo/metadata.yaml index f756b0a20724..50aca3045fa0 100644 --- a/airbyte-integrations/connectors/source-klaviyo/metadata.yaml +++ b/airbyte-integrations/connectors/source-klaviyo/metadata.yaml @@ -3,7 +3,7 @@ data: hosts: - a.klaviyo.com - klaviyo.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-kustomer-singer/metadata.yaml b/airbyte-integrations/connectors/source-kustomer-singer/metadata.yaml index e0fe7f1d643e..85b7b9ff0f32 100644 --- a/airbyte-integrations/connectors/source-kustomer-singer/metadata.yaml +++ b/airbyte-integrations/connectors/source-kustomer-singer/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-kyriba/metadata.yaml b/airbyte-integrations/connectors/source-kyriba/metadata.yaml index a69b35690a87..0b4b851bdf14 100644 --- a/airbyte-integrations/connectors/source-kyriba/metadata.yaml +++ b/airbyte-integrations/connectors/source-kyriba/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-launchdarkly/metadata.yaml b/airbyte-integrations/connectors/source-launchdarkly/metadata.yaml index 88ce16548d58..c9f7df83a5e1 100644 --- a/airbyte-integrations/connectors/source-launchdarkly/metadata.yaml +++ b/airbyte-integrations/connectors/source-launchdarkly/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-lemlist/metadata.yaml b/airbyte-integrations/connectors/source-lemlist/metadata.yaml index 89d2c0db27eb..a0c7f3d2b296 100644 --- a/airbyte-integrations/connectors/source-lemlist/metadata.yaml +++ b/airbyte-integrations/connectors/source-lemlist/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-lever-hiring/metadata.yaml b/airbyte-integrations/connectors/source-lever-hiring/metadata.yaml index b89b232039cd..51db74240ac4 100644 --- a/airbyte-integrations/connectors/source-lever-hiring/metadata.yaml +++ b/airbyte-integrations/connectors/source-lever-hiring/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-linkedin-ads/metadata.yaml b/airbyte-integrations/connectors/source-linkedin-ads/metadata.yaml index 62de5e393d1c..0c14213c9452 100644 --- a/airbyte-integrations/connectors/source-linkedin-ads/metadata.yaml +++ b/airbyte-integrations/connectors/source-linkedin-ads/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - api.linkedin.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-linkedin-pages/metadata.yaml b/airbyte-integrations/connectors/source-linkedin-pages/metadata.yaml index 5d1a25ec674b..aed15ac6a597 100644 --- a/airbyte-integrations/connectors/source-linkedin-pages/metadata.yaml +++ b/airbyte-integrations/connectors/source-linkedin-pages/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-linnworks/metadata.yaml b/airbyte-integrations/connectors/source-linnworks/metadata.yaml index 53d7dc4b505c..bba5b699c416 100644 --- a/airbyte-integrations/connectors/source-linnworks/metadata.yaml +++ b/airbyte-integrations/connectors/source-linnworks/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-lokalise/metadata.yaml b/airbyte-integrations/connectors/source-lokalise/metadata.yaml index b8f1b1169815..db09121b2f80 100644 --- a/airbyte-integrations/connectors/source-lokalise/metadata.yaml +++ b/airbyte-integrations/connectors/source-lokalise/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-looker/metadata.yaml b/airbyte-integrations/connectors/source-looker/metadata.yaml index 8d28c1a5e000..d6ccf7199214 100644 --- a/airbyte-integrations/connectors/source-looker/metadata.yaml +++ b/airbyte-integrations/connectors/source-looker/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-mailchimp/metadata.yaml b/airbyte-integrations/connectors/source-mailchimp/metadata.yaml index 2bd773678975..09cc1d85f77b 100644 --- a/airbyte-integrations/connectors/source-mailchimp/metadata.yaml +++ b/airbyte-integrations/connectors/source-mailchimp/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - "*.api.mailchimp.com" - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-mailerlite/metadata.yaml b/airbyte-integrations/connectors/source-mailerlite/metadata.yaml index 97923842dd29..fda26fe544e0 100644 --- a/airbyte-integrations/connectors/source-mailerlite/metadata.yaml +++ b/airbyte-integrations/connectors/source-mailerlite/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-mailersend/metadata.yaml b/airbyte-integrations/connectors/source-mailersend/metadata.yaml index 1fd46e221c58..41067c243f1d 100644 --- a/airbyte-integrations/connectors/source-mailersend/metadata.yaml +++ b/airbyte-integrations/connectors/source-mailersend/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-mailgun/metadata.yaml b/airbyte-integrations/connectors/source-mailgun/metadata.yaml index 74f84d367dc6..2b2c7d03f186 100644 --- a/airbyte-integrations/connectors/source-mailgun/metadata.yaml +++ b/airbyte-integrations/connectors/source-mailgun/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-mailjet-mail/metadata.yaml b/airbyte-integrations/connectors/source-mailjet-mail/metadata.yaml index 80cc33a3f38c..a0b4421162e8 100644 --- a/airbyte-integrations/connectors/source-mailjet-mail/metadata.yaml +++ b/airbyte-integrations/connectors/source-mailjet-mail/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-mailjet-sms/metadata.yaml b/airbyte-integrations/connectors/source-mailjet-sms/metadata.yaml index 9f19918fb8f1..7d497c493e94 100644 --- a/airbyte-integrations/connectors/source-mailjet-sms/metadata.yaml +++ b/airbyte-integrations/connectors/source-mailjet-sms/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-marketo/metadata.yaml b/airbyte-integrations/connectors/source-marketo/metadata.yaml index 17895ff69566..a1e11dcfe266 100644 --- a/airbyte-integrations/connectors/source-marketo/metadata.yaml +++ b/airbyte-integrations/connectors/source-marketo/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - "*.mktorest.com" - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-metabase/metadata.yaml b/airbyte-integrations/connectors/source-metabase/metadata.yaml index 5797823f8489..e43194114dbd 100644 --- a/airbyte-integrations/connectors/source-metabase/metadata.yaml +++ b/airbyte-integrations/connectors/source-metabase/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-microsoft-dataverse/metadata.yaml b/airbyte-integrations/connectors/source-microsoft-dataverse/metadata.yaml index 80d4f0f518b1..9d990c746566 100644 --- a/airbyte-integrations/connectors/source-microsoft-dataverse/metadata.yaml +++ b/airbyte-integrations/connectors/source-microsoft-dataverse/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-microsoft-teams/metadata.yaml b/airbyte-integrations/connectors/source-microsoft-teams/metadata.yaml index 06c11b79c762..f392f8fe83bd 100644 --- a/airbyte-integrations/connectors/source-microsoft-teams/metadata.yaml +++ b/airbyte-integrations/connectors/source-microsoft-teams/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-mixpanel/metadata.yaml b/airbyte-integrations/connectors/source-mixpanel/metadata.yaml index f8b86c512542..2cbbed5bd6ba 100644 --- a/airbyte-integrations/connectors/source-mixpanel/metadata.yaml +++ b/airbyte-integrations/connectors/source-mixpanel/metadata.yaml @@ -3,7 +3,7 @@ data: hosts: - mixpanel.com - eu.mixpanel.com - catalogs: + registries: cloud: dockerImageTag: 0.1.30 enabled: true diff --git a/airbyte-integrations/connectors/source-monday/metadata.yaml b/airbyte-integrations/connectors/source-monday/metadata.yaml index 4cca756180b7..334c488928fe 100644 --- a/airbyte-integrations/connectors/source-monday/metadata.yaml +++ b/airbyte-integrations/connectors/source-monday/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - api.monday.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-mongodb-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/source-mongodb-strict-encrypt/metadata.yaml index 3673db11ae8f..433782a301e2 100644 --- a/airbyte-integrations/connectors/source-mongodb-strict-encrypt/metadata.yaml +++ b/airbyte-integrations/connectors/source-mongodb-strict-encrypt/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false # strict encrypt connectors are deployed to Cloud by their non strict encrypt sibling. oss: diff --git a/airbyte-integrations/connectors/source-mongodb-v2/metadata.yaml b/airbyte-integrations/connectors/source-mongodb-v2/metadata.yaml index 5f91c09a5209..409f7625c6f9 100644 --- a/airbyte-integrations/connectors/source-mongodb-v2/metadata.yaml +++ b/airbyte-integrations/connectors/source-mongodb-v2/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: dockerImageTag: 0.1.7 dockerRepository: airbyte/source-mongodb-strict-encrypt diff --git a/airbyte-integrations/connectors/source-mssql-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/source-mssql-strict-encrypt/metadata.yaml index f18aeb9daf9f..4e8e44622c21 100644 --- a/airbyte-integrations/connectors/source-mssql-strict-encrypt/metadata.yaml +++ b/airbyte-integrations/connectors/source-mssql-strict-encrypt/metadata.yaml @@ -3,7 +3,7 @@ data: hosts: - ${host} - ${tunnel_method.tunnel_host} - catalogs: + registries: cloud: enabled: false # strict encrypt connectors are deployed to Cloud by their non strict encrypt sibling. oss: diff --git a/airbyte-integrations/connectors/source-mssql/metadata.yaml b/airbyte-integrations/connectors/source-mssql/metadata.yaml index 723d7c390be8..55ce2ebba2dd 100644 --- a/airbyte-integrations/connectors/source-mssql/metadata.yaml +++ b/airbyte-integrations/connectors/source-mssql/metadata.yaml @@ -3,7 +3,7 @@ data: hosts: - ${host} - ${tunnel_method.tunnel_host} - catalogs: + registries: cloud: dockerRepository: airbyte/source-mssql-strict-encrypt enabled: true diff --git a/airbyte-integrations/connectors/source-my-hours/metadata.yaml b/airbyte-integrations/connectors/source-my-hours/metadata.yaml index 182e1986cce6..2690751899d0 100644 --- a/airbyte-integrations/connectors/source-my-hours/metadata.yaml +++ b/airbyte-integrations/connectors/source-my-hours/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-mysql-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/source-mysql-strict-encrypt/metadata.yaml index 6aa831a0c4f8..75800615a02e 100644 --- a/airbyte-integrations/connectors/source-mysql-strict-encrypt/metadata.yaml +++ b/airbyte-integrations/connectors/source-mysql-strict-encrypt/metadata.yaml @@ -3,7 +3,7 @@ data: hosts: - ${host} - ${tunnel_method.tunnel_host} - catalogs: + registries: cloud: enabled: false # strict encrypt connectors are deployed to Cloud by their non strict encrypt sibling. oss: diff --git a/airbyte-integrations/connectors/source-mysql/metadata.yaml b/airbyte-integrations/connectors/source-mysql/metadata.yaml index 27e9e222c3fb..0d92166cb1f0 100644 --- a/airbyte-integrations/connectors/source-mysql/metadata.yaml +++ b/airbyte-integrations/connectors/source-mysql/metadata.yaml @@ -3,7 +3,7 @@ data: hosts: - ${host} - ${tunnel_method.tunnel_host} - catalogs: + registries: cloud: dockerRepository: airbyte/source-mysql-strict-encrypt enabled: true diff --git a/airbyte-integrations/connectors/source-n8n/metadata.yaml b/airbyte-integrations/connectors/source-n8n/metadata.yaml index 97619f6f91ac..36ff13607478 100644 --- a/airbyte-integrations/connectors/source-n8n/metadata.yaml +++ b/airbyte-integrations/connectors/source-n8n/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-nasa/metadata.yaml b/airbyte-integrations/connectors/source-nasa/metadata.yaml index 5370ce4bc64a..70c0efe9d978 100644 --- a/airbyte-integrations/connectors/source-nasa/metadata.yaml +++ b/airbyte-integrations/connectors/source-nasa/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - api.nasa.gov - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-netsuite/metadata.yaml b/airbyte-integrations/connectors/source-netsuite/metadata.yaml index a826571f65c2..28f68e421ff4 100644 --- a/airbyte-integrations/connectors/source-netsuite/metadata.yaml +++ b/airbyte-integrations/connectors/source-netsuite/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-news-api/metadata.yaml b/airbyte-integrations/connectors/source-news-api/metadata.yaml index 9c8971f9dac7..9b2d18204641 100644 --- a/airbyte-integrations/connectors/source-news-api/metadata.yaml +++ b/airbyte-integrations/connectors/source-news-api/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-newsdata/metadata.yaml b/airbyte-integrations/connectors/source-newsdata/metadata.yaml index 94e1b153287e..77253bf2a25f 100644 --- a/airbyte-integrations/connectors/source-newsdata/metadata.yaml +++ b/airbyte-integrations/connectors/source-newsdata/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-notion/metadata.yaml b/airbyte-integrations/connectors/source-notion/metadata.yaml index 7ac9914b4f34..4b5c812453ee 100644 --- a/airbyte-integrations/connectors/source-notion/metadata.yaml +++ b/airbyte-integrations/connectors/source-notion/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - api.notion.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-nytimes/metadata.yaml b/airbyte-integrations/connectors/source-nytimes/metadata.yaml index b0969f166eff..eb804d1ecb5e 100644 --- a/airbyte-integrations/connectors/source-nytimes/metadata.yaml +++ b/airbyte-integrations/connectors/source-nytimes/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-okta/metadata.yaml b/airbyte-integrations/connectors/source-okta/metadata.yaml index 4d05e48acf20..3891195ccf97 100644 --- a/airbyte-integrations/connectors/source-okta/metadata.yaml +++ b/airbyte-integrations/connectors/source-okta/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-omnisend/metadata.yaml b/airbyte-integrations/connectors/source-omnisend/metadata.yaml index 11bdbda33e99..b41159eee622 100644 --- a/airbyte-integrations/connectors/source-omnisend/metadata.yaml +++ b/airbyte-integrations/connectors/source-omnisend/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-onesignal/metadata.yaml b/airbyte-integrations/connectors/source-onesignal/metadata.yaml index 04cb2f6016d4..e9842ce5a42d 100644 --- a/airbyte-integrations/connectors/source-onesignal/metadata.yaml +++ b/airbyte-integrations/connectors/source-onesignal/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-open-exchange-rates/metadata.yaml b/airbyte-integrations/connectors/source-open-exchange-rates/metadata.yaml index 9ea553e7d6d8..087522e2f6a3 100644 --- a/airbyte-integrations/connectors/source-open-exchange-rates/metadata.yaml +++ b/airbyte-integrations/connectors/source-open-exchange-rates/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-openweather/metadata.yaml b/airbyte-integrations/connectors/source-openweather/metadata.yaml index 349e2a2f2c95..c1161aa71997 100644 --- a/airbyte-integrations/connectors/source-openweather/metadata.yaml +++ b/airbyte-integrations/connectors/source-openweather/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-opsgenie/metadata.yaml b/airbyte-integrations/connectors/source-opsgenie/metadata.yaml index 43668a85e166..3cac4cf3b6bb 100644 --- a/airbyte-integrations/connectors/source-opsgenie/metadata.yaml +++ b/airbyte-integrations/connectors/source-opsgenie/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-oracle-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/source-oracle-strict-encrypt/metadata.yaml index de3652aeb250..8154654d8bf3 100644 --- a/airbyte-integrations/connectors/source-oracle-strict-encrypt/metadata.yaml +++ b/airbyte-integrations/connectors/source-oracle-strict-encrypt/metadata.yaml @@ -3,7 +3,7 @@ data: hosts: - ${host} - ${tunnel_method.tunnel_host} - catalogs: + registries: cloud: enabled: false # strict encrypt connectors are deployed to Cloud by their non strict encrypt sibling. oss: diff --git a/airbyte-integrations/connectors/source-oracle/metadata.yaml b/airbyte-integrations/connectors/source-oracle/metadata.yaml index 988eb7b72bba..4f5097b03e8a 100644 --- a/airbyte-integrations/connectors/source-oracle/metadata.yaml +++ b/airbyte-integrations/connectors/source-oracle/metadata.yaml @@ -3,7 +3,7 @@ data: hosts: - ${host} - ${tunnel_method.tunnel_host} - catalogs: + registries: cloud: dockerImageTag: 0.3.17 dockerRepository: airbyte/source-oracle-strict-encrypt diff --git a/airbyte-integrations/connectors/source-orb/metadata.yaml b/airbyte-integrations/connectors/source-orb/metadata.yaml index a3d8372ac8cd..fe4c58619c39 100644 --- a/airbyte-integrations/connectors/source-orb/metadata.yaml +++ b/airbyte-integrations/connectors/source-orb/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-orbit/metadata.yaml b/airbyte-integrations/connectors/source-orbit/metadata.yaml index ce02fec308a5..26d86d5b0c30 100644 --- a/airbyte-integrations/connectors/source-orbit/metadata.yaml +++ b/airbyte-integrations/connectors/source-orbit/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-oura/metadata.yaml b/airbyte-integrations/connectors/source-oura/metadata.yaml index a81501ac5cb3..2012fb48ce05 100644 --- a/airbyte-integrations/connectors/source-oura/metadata.yaml +++ b/airbyte-integrations/connectors/source-oura/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-outreach/metadata.yaml b/airbyte-integrations/connectors/source-outreach/metadata.yaml index da355541a58a..f3d2ade8f787 100644 --- a/airbyte-integrations/connectors/source-outreach/metadata.yaml +++ b/airbyte-integrations/connectors/source-outreach/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-pardot/metadata.yaml b/airbyte-integrations/connectors/source-pardot/metadata.yaml index 72eb1e1461da..eec91d9fc291 100644 --- a/airbyte-integrations/connectors/source-pardot/metadata.yaml +++ b/airbyte-integrations/connectors/source-pardot/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-partnerstack/metadata.yaml b/airbyte-integrations/connectors/source-partnerstack/metadata.yaml index d68330d1869d..3faeb6733d0b 100644 --- a/airbyte-integrations/connectors/source-partnerstack/metadata.yaml +++ b/airbyte-integrations/connectors/source-partnerstack/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-paypal-transaction/metadata.yaml b/airbyte-integrations/connectors/source-paypal-transaction/metadata.yaml index 7c846c9c6dc1..b89b9fdd9cf0 100644 --- a/airbyte-integrations/connectors/source-paypal-transaction/metadata.yaml +++ b/airbyte-integrations/connectors/source-paypal-transaction/metadata.yaml @@ -3,7 +3,7 @@ data: hosts: - api-m.paypal.com - api-m.sandbox.paypal.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-paystack/metadata.yaml b/airbyte-integrations/connectors/source-paystack/metadata.yaml index 17deb8ee6b53..2bf72f3ee376 100644 --- a/airbyte-integrations/connectors/source-paystack/metadata.yaml +++ b/airbyte-integrations/connectors/source-paystack/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - api.paystack.co - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-pendo/metadata.yaml b/airbyte-integrations/connectors/source-pendo/metadata.yaml index 56e39761119d..d59d2e86ee33 100644 --- a/airbyte-integrations/connectors/source-pendo/metadata.yaml +++ b/airbyte-integrations/connectors/source-pendo/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-persistiq/metadata.yaml b/airbyte-integrations/connectors/source-persistiq/metadata.yaml index 8aabd03b8fe5..5f027a809195 100644 --- a/airbyte-integrations/connectors/source-persistiq/metadata.yaml +++ b/airbyte-integrations/connectors/source-persistiq/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-pexels-api/metadata.yaml b/airbyte-integrations/connectors/source-pexels-api/metadata.yaml index 5b64c4e4865d..d713c5aba53f 100644 --- a/airbyte-integrations/connectors/source-pexels-api/metadata.yaml +++ b/airbyte-integrations/connectors/source-pexels-api/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-pinterest/metadata.yaml b/airbyte-integrations/connectors/source-pinterest/metadata.yaml index 953d3327ba12..1d75629ede2d 100644 --- a/airbyte-integrations/connectors/source-pinterest/metadata.yaml +++ b/airbyte-integrations/connectors/source-pinterest/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - api.pinterest.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-pipedrive/metadata.yaml b/airbyte-integrations/connectors/source-pipedrive/metadata.yaml index 836decaec4d4..96c38f3a4eb0 100644 --- a/airbyte-integrations/connectors/source-pipedrive/metadata.yaml +++ b/airbyte-integrations/connectors/source-pipedrive/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - api.pipedrive.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-pivotal-tracker/metadata.yaml b/airbyte-integrations/connectors/source-pivotal-tracker/metadata.yaml index e780c47520cc..ece052df30ce 100644 --- a/airbyte-integrations/connectors/source-pivotal-tracker/metadata.yaml +++ b/airbyte-integrations/connectors/source-pivotal-tracker/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-plaid/metadata.yaml b/airbyte-integrations/connectors/source-plaid/metadata.yaml index 585cf1b5beef..2c96a17eb08c 100644 --- a/airbyte-integrations/connectors/source-plaid/metadata.yaml +++ b/airbyte-integrations/connectors/source-plaid/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-plausible/metadata.yaml b/airbyte-integrations/connectors/source-plausible/metadata.yaml index 051dfe70c2c7..78de86757320 100644 --- a/airbyte-integrations/connectors/source-plausible/metadata.yaml +++ b/airbyte-integrations/connectors/source-plausible/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-pocket/metadata.yaml b/airbyte-integrations/connectors/source-pocket/metadata.yaml index 3a27cdc2ae9c..9a86f87b1655 100644 --- a/airbyte-integrations/connectors/source-pocket/metadata.yaml +++ b/airbyte-integrations/connectors/source-pocket/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-pokeapi/metadata.yaml b/airbyte-integrations/connectors/source-pokeapi/metadata.yaml index 1626dc2b4b1d..597e634b0c8a 100644 --- a/airbyte-integrations/connectors/source-pokeapi/metadata.yaml +++ b/airbyte-integrations/connectors/source-pokeapi/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-polygon-stock-api/metadata.yaml b/airbyte-integrations/connectors/source-polygon-stock-api/metadata.yaml index 47c00de25788..0f1b89fac56e 100644 --- a/airbyte-integrations/connectors/source-polygon-stock-api/metadata.yaml +++ b/airbyte-integrations/connectors/source-polygon-stock-api/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - api.polygon.io - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-postgres-strict-encrypt/metadata.yaml b/airbyte-integrations/connectors/source-postgres-strict-encrypt/metadata.yaml index 6e288f2cb1ae..a3a05d4b554b 100644 --- a/airbyte-integrations/connectors/source-postgres-strict-encrypt/metadata.yaml +++ b/airbyte-integrations/connectors/source-postgres-strict-encrypt/metadata.yaml @@ -3,7 +3,7 @@ data: hosts: - ${host} - ${tunnel_method.tunnel_host} - catalogs: + registries: cloud: enabled: false # strict encrypt connectors are deployed to Cloud by their non strict encrypt sibling. oss: diff --git a/airbyte-integrations/connectors/source-postgres/metadata.yaml b/airbyte-integrations/connectors/source-postgres/metadata.yaml index e4152acbd3c9..7c28e387f8b2 100644 --- a/airbyte-integrations/connectors/source-postgres/metadata.yaml +++ b/airbyte-integrations/connectors/source-postgres/metadata.yaml @@ -3,7 +3,7 @@ data: hosts: - ${host} - ${tunnel_method.tunnel_host} - catalogs: + registries: cloud: dockerImageTag: 2.0.16 dockerRepository: airbyte/source-postgres-strict-encrypt diff --git a/airbyte-integrations/connectors/source-posthog/metadata.yaml b/airbyte-integrations/connectors/source-posthog/metadata.yaml index fe2b647d0a59..bca67999d27e 100644 --- a/airbyte-integrations/connectors/source-posthog/metadata.yaml +++ b/airbyte-integrations/connectors/source-posthog/metadata.yaml @@ -3,7 +3,7 @@ data: hosts: - ${base_url} - app.posthog.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-postmarkapp/metadata.yaml b/airbyte-integrations/connectors/source-postmarkapp/metadata.yaml index 0afdb60402a7..eb42ea4a5f02 100644 --- a/airbyte-integrations/connectors/source-postmarkapp/metadata.yaml +++ b/airbyte-integrations/connectors/source-postmarkapp/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-prestashop/metadata.yaml b/airbyte-integrations/connectors/source-prestashop/metadata.yaml index 7fc4b030efac..12f59f33545a 100644 --- a/airbyte-integrations/connectors/source-prestashop/metadata.yaml +++ b/airbyte-integrations/connectors/source-prestashop/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - ${domain} - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-primetric/metadata.yaml b/airbyte-integrations/connectors/source-primetric/metadata.yaml index de35f2399dc3..9336d2a2cb97 100644 --- a/airbyte-integrations/connectors/source-primetric/metadata.yaml +++ b/airbyte-integrations/connectors/source-primetric/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-public-apis/metadata.yaml b/airbyte-integrations/connectors/source-public-apis/metadata.yaml index f792d88a4b56..a140465c5198 100644 --- a/airbyte-integrations/connectors/source-public-apis/metadata.yaml +++ b/airbyte-integrations/connectors/source-public-apis/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-punk-api/metadata.yaml b/airbyte-integrations/connectors/source-punk-api/metadata.yaml index d263a8c05195..1860939a5fde 100644 --- a/airbyte-integrations/connectors/source-punk-api/metadata.yaml +++ b/airbyte-integrations/connectors/source-punk-api/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-pypi/metadata.yaml b/airbyte-integrations/connectors/source-pypi/metadata.yaml index 7d8ae3ab708a..3e8f84f0f44e 100644 --- a/airbyte-integrations/connectors/source-pypi/metadata.yaml +++ b/airbyte-integrations/connectors/source-pypi/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-qonto/metadata.yaml b/airbyte-integrations/connectors/source-qonto/metadata.yaml index 6ed1842f6450..f41ba8225e30 100644 --- a/airbyte-integrations/connectors/source-qonto/metadata.yaml +++ b/airbyte-integrations/connectors/source-qonto/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-qualaroo/metadata.yaml b/airbyte-integrations/connectors/source-qualaroo/metadata.yaml index 8e89c669c3d1..b5d03918d028 100644 --- a/airbyte-integrations/connectors/source-qualaroo/metadata.yaml +++ b/airbyte-integrations/connectors/source-qualaroo/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-quickbooks-singer/metadata.yaml b/airbyte-integrations/connectors/source-quickbooks-singer/metadata.yaml index 2c7643ee7ab6..1854ee43e1a5 100644 --- a/airbyte-integrations/connectors/source-quickbooks-singer/metadata.yaml +++ b/airbyte-integrations/connectors/source-quickbooks-singer/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-railz/metadata.yaml b/airbyte-integrations/connectors/source-railz/metadata.yaml index 80b48a5adeeb..feba4cf9831a 100644 --- a/airbyte-integrations/connectors/source-railz/metadata.yaml +++ b/airbyte-integrations/connectors/source-railz/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-rd-station-marketing/metadata.yaml b/airbyte-integrations/connectors/source-rd-station-marketing/metadata.yaml index 9a3864f0fddc..9e0ec7dbf27f 100644 --- a/airbyte-integrations/connectors/source-rd-station-marketing/metadata.yaml +++ b/airbyte-integrations/connectors/source-rd-station-marketing/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-recharge/metadata.yaml b/airbyte-integrations/connectors/source-recharge/metadata.yaml index dd63f009a6ff..66fd702d26bd 100644 --- a/airbyte-integrations/connectors/source-recharge/metadata.yaml +++ b/airbyte-integrations/connectors/source-recharge/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - api.rechargeapps.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-recreation/metadata.yaml b/airbyte-integrations/connectors/source-recreation/metadata.yaml index 9a9a51d8e9ea..7d6c05d3c797 100644 --- a/airbyte-integrations/connectors/source-recreation/metadata.yaml +++ b/airbyte-integrations/connectors/source-recreation/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-recruitee/metadata.yaml b/airbyte-integrations/connectors/source-recruitee/metadata.yaml index b109a05b4241..2a1fe15bbc30 100644 --- a/airbyte-integrations/connectors/source-recruitee/metadata.yaml +++ b/airbyte-integrations/connectors/source-recruitee/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-recurly/metadata.yaml b/airbyte-integrations/connectors/source-recurly/metadata.yaml index decc883d2d3b..e5d590f3fa1c 100644 --- a/airbyte-integrations/connectors/source-recurly/metadata.yaml +++ b/airbyte-integrations/connectors/source-recurly/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-redshift/metadata.yaml b/airbyte-integrations/connectors/source-redshift/metadata.yaml index 5f042c9790ff..b8b748c83547 100644 --- a/airbyte-integrations/connectors/source-redshift/metadata.yaml +++ b/airbyte-integrations/connectors/source-redshift/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-reply-io/metadata.yaml b/airbyte-integrations/connectors/source-reply-io/metadata.yaml index d4052dfe1270..14e6870452e3 100644 --- a/airbyte-integrations/connectors/source-reply-io/metadata.yaml +++ b/airbyte-integrations/connectors/source-reply-io/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-retently/metadata.yaml b/airbyte-integrations/connectors/source-retently/metadata.yaml index 5ee36d4f6ff3..0a0fd8cd5f10 100644 --- a/airbyte-integrations/connectors/source-retently/metadata.yaml +++ b/airbyte-integrations/connectors/source-retently/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-rki-covid/metadata.yaml b/airbyte-integrations/connectors/source-rki-covid/metadata.yaml index 155b1f756e5b..7c0d4253af65 100644 --- a/airbyte-integrations/connectors/source-rki-covid/metadata.yaml +++ b/airbyte-integrations/connectors/source-rki-covid/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-rocket-chat/metadata.yaml b/airbyte-integrations/connectors/source-rocket-chat/metadata.yaml index a95c910ed499..1a0085d0315d 100644 --- a/airbyte-integrations/connectors/source-rocket-chat/metadata.yaml +++ b/airbyte-integrations/connectors/source-rocket-chat/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-rss/metadata.yaml b/airbyte-integrations/connectors/source-rss/metadata.yaml index 2783ce8c4ddf..32adc2c525b2 100644 --- a/airbyte-integrations/connectors/source-rss/metadata.yaml +++ b/airbyte-integrations/connectors/source-rss/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-s3/metadata.yaml b/airbyte-integrations/connectors/source-s3/metadata.yaml index 1ff27ddd71d4..a9253cfa70dc 100644 --- a/airbyte-integrations/connectors/source-s3/metadata.yaml +++ b/airbyte-integrations/connectors/source-s3/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - "*.s3.amazonaws.com" - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-salesforce-singer/metadata.yaml b/airbyte-integrations/connectors/source-salesforce-singer/metadata.yaml index d76ae5c3a904..0552df09f927 100644 --- a/airbyte-integrations/connectors/source-salesforce-singer/metadata.yaml +++ b/airbyte-integrations/connectors/source-salesforce-singer/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-salesforce/metadata.yaml b/airbyte-integrations/connectors/source-salesforce/metadata.yaml index ee548e55ce2b..de3e0894b42c 100644 --- a/airbyte-integrations/connectors/source-salesforce/metadata.yaml +++ b/airbyte-integrations/connectors/source-salesforce/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - "*.salesforce.com" - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-salesloft/metadata.yaml b/airbyte-integrations/connectors/source-salesloft/metadata.yaml index 74c0ab915218..edea3bbf3569 100644 --- a/airbyte-integrations/connectors/source-salesloft/metadata.yaml +++ b/airbyte-integrations/connectors/source-salesloft/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - api.salesloft.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-sap-fieldglass/metadata.yaml b/airbyte-integrations/connectors/source-sap-fieldglass/metadata.yaml index 5edfd13ac603..5d9a9529f096 100644 --- a/airbyte-integrations/connectors/source-sap-fieldglass/metadata.yaml +++ b/airbyte-integrations/connectors/source-sap-fieldglass/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-search-metrics/metadata.yaml b/airbyte-integrations/connectors/source-search-metrics/metadata.yaml index 7ea73013bfcb..736f35428d29 100644 --- a/airbyte-integrations/connectors/source-search-metrics/metadata.yaml +++ b/airbyte-integrations/connectors/source-search-metrics/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-secoda/metadata.yaml b/airbyte-integrations/connectors/source-secoda/metadata.yaml index 87568f7dfb96..3092a6ebd45d 100644 --- a/airbyte-integrations/connectors/source-secoda/metadata.yaml +++ b/airbyte-integrations/connectors/source-secoda/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-sendgrid/metadata.yaml b/airbyte-integrations/connectors/source-sendgrid/metadata.yaml index 17e9bc54a5ae..579c35d70cdd 100644 --- a/airbyte-integrations/connectors/source-sendgrid/metadata.yaml +++ b/airbyte-integrations/connectors/source-sendgrid/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - api.sendgrid.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-sendinblue/metadata.yaml b/airbyte-integrations/connectors/source-sendinblue/metadata.yaml index 98d72f32903c..e517575cea6e 100644 --- a/airbyte-integrations/connectors/source-sendinblue/metadata.yaml +++ b/airbyte-integrations/connectors/source-sendinblue/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-senseforce/metadata.yaml b/airbyte-integrations/connectors/source-senseforce/metadata.yaml index c5fbfaa6b741..5f52fce529d3 100644 --- a/airbyte-integrations/connectors/source-senseforce/metadata.yaml +++ b/airbyte-integrations/connectors/source-senseforce/metadata.yaml @@ -3,7 +3,7 @@ data: hosts: - galaxyapi.senseforce.io - senseforce.io - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-sentry/metadata.yaml b/airbyte-integrations/connectors/source-sentry/metadata.yaml index ade93d58f2d3..4c54a1486005 100644 --- a/airbyte-integrations/connectors/source-sentry/metadata.yaml +++ b/airbyte-integrations/connectors/source-sentry/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - "*" - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-sftp-bulk/metadata.yaml b/airbyte-integrations/connectors/source-sftp-bulk/metadata.yaml index 349d64507a47..9b898c6ebd42 100644 --- a/airbyte-integrations/connectors/source-sftp-bulk/metadata.yaml +++ b/airbyte-integrations/connectors/source-sftp-bulk/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-sftp/metadata.yaml b/airbyte-integrations/connectors/source-sftp/metadata.yaml index 3a333ec038f3..9e79de171eee 100644 --- a/airbyte-integrations/connectors/source-sftp/metadata.yaml +++ b/airbyte-integrations/connectors/source-sftp/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-shopify/metadata.yaml b/airbyte-integrations/connectors/source-shopify/metadata.yaml index 08456429dbf2..ccdda8cfb281 100644 --- a/airbyte-integrations/connectors/source-shopify/metadata.yaml +++ b/airbyte-integrations/connectors/source-shopify/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-shortio/metadata.yaml b/airbyte-integrations/connectors/source-shortio/metadata.yaml index 0b5c55b93d0e..8f872922cc96 100644 --- a/airbyte-integrations/connectors/source-shortio/metadata.yaml +++ b/airbyte-integrations/connectors/source-shortio/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-slack/metadata.yaml b/airbyte-integrations/connectors/source-slack/metadata.yaml index 810c28b4147a..3808df15d8e9 100644 --- a/airbyte-integrations/connectors/source-slack/metadata.yaml +++ b/airbyte-integrations/connectors/source-slack/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - slack.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-smaily/metadata.yaml b/airbyte-integrations/connectors/source-smaily/metadata.yaml index 5f3fd4e5f261..62d3354cbeea 100644 --- a/airbyte-integrations/connectors/source-smaily/metadata.yaml +++ b/airbyte-integrations/connectors/source-smaily/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-smartengage/metadata.yaml b/airbyte-integrations/connectors/source-smartengage/metadata.yaml index 257cff362bcc..86ba5330f283 100644 --- a/airbyte-integrations/connectors/source-smartengage/metadata.yaml +++ b/airbyte-integrations/connectors/source-smartengage/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-smartsheets/metadata.yaml b/airbyte-integrations/connectors/source-smartsheets/metadata.yaml index 1358fe253106..4f05ce4463dc 100644 --- a/airbyte-integrations/connectors/source-smartsheets/metadata.yaml +++ b/airbyte-integrations/connectors/source-smartsheets/metadata.yaml @@ -3,7 +3,7 @@ data: hosts: - app.smartsheet.com - api.smartsheet.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-snapchat-marketing/metadata.yaml b/airbyte-integrations/connectors/source-snapchat-marketing/metadata.yaml index da268764389d..d878dde07e73 100644 --- a/airbyte-integrations/connectors/source-snapchat-marketing/metadata.yaml +++ b/airbyte-integrations/connectors/source-snapchat-marketing/metadata.yaml @@ -3,7 +3,7 @@ data: hosts: - accounts.snapchat.com - adsapi.snapchat.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-snowflake/metadata.yaml b/airbyte-integrations/connectors/source-snowflake/metadata.yaml index 1a14cf20b548..d9a74506351c 100644 --- a/airbyte-integrations/connectors/source-snowflake/metadata.yaml +++ b/airbyte-integrations/connectors/source-snowflake/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - ${host} - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-sonar-cloud/metadata.yaml b/airbyte-integrations/connectors/source-sonar-cloud/metadata.yaml index 62b5c69e4e32..51a497fedba1 100644 --- a/airbyte-integrations/connectors/source-sonar-cloud/metadata.yaml +++ b/airbyte-integrations/connectors/source-sonar-cloud/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - sonarcloud.io - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-spacex-api/metadata.yaml b/airbyte-integrations/connectors/source-spacex-api/metadata.yaml index ea1929eef5d4..961e73973546 100644 --- a/airbyte-integrations/connectors/source-spacex-api/metadata.yaml +++ b/airbyte-integrations/connectors/source-spacex-api/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-square/metadata.yaml b/airbyte-integrations/connectors/source-square/metadata.yaml index c1c1c48d5eb2..3b486698ef41 100644 --- a/airbyte-integrations/connectors/source-square/metadata.yaml +++ b/airbyte-integrations/connectors/source-square/metadata.yaml @@ -3,7 +3,7 @@ data: hosts: - connect.squareupsandbox.com - connect.squareup.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-statuspage/metadata.yaml b/airbyte-integrations/connectors/source-statuspage/metadata.yaml index a7dbb3589884..d5975ac0c406 100644 --- a/airbyte-integrations/connectors/source-statuspage/metadata.yaml +++ b/airbyte-integrations/connectors/source-statuspage/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-strava/metadata.yaml b/airbyte-integrations/connectors/source-strava/metadata.yaml index 4daf33447d77..45d69e7804d3 100644 --- a/airbyte-integrations/connectors/source-strava/metadata.yaml +++ b/airbyte-integrations/connectors/source-strava/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - strava.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-stripe/metadata.yaml b/airbyte-integrations/connectors/source-stripe/metadata.yaml index b12598299b14..609dfec66ace 100644 --- a/airbyte-integrations/connectors/source-stripe/metadata.yaml +++ b/airbyte-integrations/connectors/source-stripe/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - api.stripe.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-survey-sparrow/metadata.yaml b/airbyte-integrations/connectors/source-survey-sparrow/metadata.yaml index f0079b9d8f19..eb9724eb7ca3 100644 --- a/airbyte-integrations/connectors/source-survey-sparrow/metadata.yaml +++ b/airbyte-integrations/connectors/source-survey-sparrow/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-surveycto/metadata.yaml b/airbyte-integrations/connectors/source-surveycto/metadata.yaml index 26b17b1faf94..b6471507bf5a 100644 --- a/airbyte-integrations/connectors/source-surveycto/metadata.yaml +++ b/airbyte-integrations/connectors/source-surveycto/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-surveymonkey/metadata.yaml b/airbyte-integrations/connectors/source-surveymonkey/metadata.yaml index 97ed811d058b..7ecd0765010d 100644 --- a/airbyte-integrations/connectors/source-surveymonkey/metadata.yaml +++ b/airbyte-integrations/connectors/source-surveymonkey/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - api.surveymonkey.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-talkdesk-explore/metadata.yaml b/airbyte-integrations/connectors/source-talkdesk-explore/metadata.yaml index 0fe2f4bf0f35..754b03a2e18f 100644 --- a/airbyte-integrations/connectors/source-talkdesk-explore/metadata.yaml +++ b/airbyte-integrations/connectors/source-talkdesk-explore/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-tempo/metadata.yaml b/airbyte-integrations/connectors/source-tempo/metadata.yaml index be314d575e8c..d26c720e15ad 100644 --- a/airbyte-integrations/connectors/source-tempo/metadata.yaml +++ b/airbyte-integrations/connectors/source-tempo/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - api.tempo.io - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-the-guardian-api/metadata.yaml b/airbyte-integrations/connectors/source-the-guardian-api/metadata.yaml index 096d3ba9b9fa..fe7a006345be 100644 --- a/airbyte-integrations/connectors/source-the-guardian-api/metadata.yaml +++ b/airbyte-integrations/connectors/source-the-guardian-api/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-tidb/metadata.yaml b/airbyte-integrations/connectors/source-tidb/metadata.yaml index 33d7e8284e33..c5be27ef991f 100644 --- a/airbyte-integrations/connectors/source-tidb/metadata.yaml +++ b/airbyte-integrations/connectors/source-tidb/metadata.yaml @@ -3,7 +3,7 @@ data: hosts: - ${host} - ${tunnel_method.tunnel_host} - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-tiktok-marketing/metadata.yaml b/airbyte-integrations/connectors/source-tiktok-marketing/metadata.yaml index d24cc8d5fe60..5c18ba5c6473 100644 --- a/airbyte-integrations/connectors/source-tiktok-marketing/metadata.yaml +++ b/airbyte-integrations/connectors/source-tiktok-marketing/metadata.yaml @@ -3,7 +3,7 @@ data: hosts: - sandbox-ads.tiktok.com - business-api.tiktok.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-timely/metadata.yaml b/airbyte-integrations/connectors/source-timely/metadata.yaml index 546e368f931b..b42ea0b16405 100644 --- a/airbyte-integrations/connectors/source-timely/metadata.yaml +++ b/airbyte-integrations/connectors/source-timely/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-tmdb/metadata.yaml b/airbyte-integrations/connectors/source-tmdb/metadata.yaml index 6345ba7bf05d..89349e0b1c10 100644 --- a/airbyte-integrations/connectors/source-tmdb/metadata.yaml +++ b/airbyte-integrations/connectors/source-tmdb/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-todoist/metadata.yaml b/airbyte-integrations/connectors/source-todoist/metadata.yaml index 830189a4b399..31e58ebefc37 100644 --- a/airbyte-integrations/connectors/source-todoist/metadata.yaml +++ b/airbyte-integrations/connectors/source-todoist/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-toggl/metadata.yaml b/airbyte-integrations/connectors/source-toggl/metadata.yaml index 714d03b10334..71f493a4329f 100644 --- a/airbyte-integrations/connectors/source-toggl/metadata.yaml +++ b/airbyte-integrations/connectors/source-toggl/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-tplcentral/metadata.yaml b/airbyte-integrations/connectors/source-tplcentral/metadata.yaml index 2afcad7483ee..c09c9d6a4f98 100644 --- a/airbyte-integrations/connectors/source-tplcentral/metadata.yaml +++ b/airbyte-integrations/connectors/source-tplcentral/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-trello/metadata.yaml b/airbyte-integrations/connectors/source-trello/metadata.yaml index e097669617a8..f9a68fa723b9 100644 --- a/airbyte-integrations/connectors/source-trello/metadata.yaml +++ b/airbyte-integrations/connectors/source-trello/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - api.trello.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-trustpilot/metadata.yaml b/airbyte-integrations/connectors/source-trustpilot/metadata.yaml index 56b1256c743e..8fc18f77ae55 100644 --- a/airbyte-integrations/connectors/source-trustpilot/metadata.yaml +++ b/airbyte-integrations/connectors/source-trustpilot/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-tvmaze-schedule/metadata.yaml b/airbyte-integrations/connectors/source-tvmaze-schedule/metadata.yaml index 82f7708ab331..edcaed7ab860 100644 --- a/airbyte-integrations/connectors/source-tvmaze-schedule/metadata.yaml +++ b/airbyte-integrations/connectors/source-tvmaze-schedule/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-twilio-taskrouter/metadata.yaml b/airbyte-integrations/connectors/source-twilio-taskrouter/metadata.yaml index a7924701169b..1942b6a1d40a 100644 --- a/airbyte-integrations/connectors/source-twilio-taskrouter/metadata.yaml +++ b/airbyte-integrations/connectors/source-twilio-taskrouter/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-twilio/metadata.yaml b/airbyte-integrations/connectors/source-twilio/metadata.yaml index 39cd18fa2f04..34bf78dd8d2a 100644 --- a/airbyte-integrations/connectors/source-twilio/metadata.yaml +++ b/airbyte-integrations/connectors/source-twilio/metadata.yaml @@ -3,7 +3,7 @@ data: hosts: - api.twilio.com - monitor.twilio.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-twitter/metadata.yaml b/airbyte-integrations/connectors/source-twitter/metadata.yaml index 703222909a2d..abef82739caa 100644 --- a/airbyte-integrations/connectors/source-twitter/metadata.yaml +++ b/airbyte-integrations/connectors/source-twitter/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - api.twitter.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-tyntec-sms/metadata.yaml b/airbyte-integrations/connectors/source-tyntec-sms/metadata.yaml index ae0a23e548af..0f6867564241 100644 --- a/airbyte-integrations/connectors/source-tyntec-sms/metadata.yaml +++ b/airbyte-integrations/connectors/source-tyntec-sms/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-typeform/metadata.yaml b/airbyte-integrations/connectors/source-typeform/metadata.yaml index 6a0168524499..a12f8ce76ba3 100644 --- a/airbyte-integrations/connectors/source-typeform/metadata.yaml +++ b/airbyte-integrations/connectors/source-typeform/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - api.typeform.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-unleash/metadata.yaml b/airbyte-integrations/connectors/source-unleash/metadata.yaml index 39f95ddcab59..8296e4e02053 100644 --- a/airbyte-integrations/connectors/source-unleash/metadata.yaml +++ b/airbyte-integrations/connectors/source-unleash/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-us-census/metadata.yaml b/airbyte-integrations/connectors/source-us-census/metadata.yaml index ad289e92b9f8..0dfb0e9eb2ef 100644 --- a/airbyte-integrations/connectors/source-us-census/metadata.yaml +++ b/airbyte-integrations/connectors/source-us-census/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-vantage/metadata.yaml b/airbyte-integrations/connectors/source-vantage/metadata.yaml index f5387ba6f9a8..a25a3ce1c04e 100644 --- a/airbyte-integrations/connectors/source-vantage/metadata.yaml +++ b/airbyte-integrations/connectors/source-vantage/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-visma-economic/metadata.yaml b/airbyte-integrations/connectors/source-visma-economic/metadata.yaml index 4489bef325ab..f33bcf989b33 100644 --- a/airbyte-integrations/connectors/source-visma-economic/metadata.yaml +++ b/airbyte-integrations/connectors/source-visma-economic/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-vitally/metadata.yaml b/airbyte-integrations/connectors/source-vitally/metadata.yaml index 1d9da4ba8b4f..8c8cbf6813d1 100644 --- a/airbyte-integrations/connectors/source-vitally/metadata.yaml +++ b/airbyte-integrations/connectors/source-vitally/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-waiteraid/metadata.yaml b/airbyte-integrations/connectors/source-waiteraid/metadata.yaml index 7c436140fe33..d9cd63046526 100644 --- a/airbyte-integrations/connectors/source-waiteraid/metadata.yaml +++ b/airbyte-integrations/connectors/source-waiteraid/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-weatherstack/metadata.yaml b/airbyte-integrations/connectors/source-weatherstack/metadata.yaml index e1fdffbdef3f..99614f070869 100644 --- a/airbyte-integrations/connectors/source-weatherstack/metadata.yaml +++ b/airbyte-integrations/connectors/source-weatherstack/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-webflow/metadata.yaml b/airbyte-integrations/connectors/source-webflow/metadata.yaml index 4d1bd12f393b..b481ffccc46c 100644 --- a/airbyte-integrations/connectors/source-webflow/metadata.yaml +++ b/airbyte-integrations/connectors/source-webflow/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-whisky-hunter/metadata.yaml b/airbyte-integrations/connectors/source-whisky-hunter/metadata.yaml index f3c711f5a763..e1c7c0e0871f 100644 --- a/airbyte-integrations/connectors/source-whisky-hunter/metadata.yaml +++ b/airbyte-integrations/connectors/source-whisky-hunter/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-wikipedia-pageviews/metadata.yaml b/airbyte-integrations/connectors/source-wikipedia-pageviews/metadata.yaml index 8860947e7121..771c9b49b8b9 100644 --- a/airbyte-integrations/connectors/source-wikipedia-pageviews/metadata.yaml +++ b/airbyte-integrations/connectors/source-wikipedia-pageviews/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-woocommerce/metadata.yaml b/airbyte-integrations/connectors/source-woocommerce/metadata.yaml index 65d1ed2b8f2c..77b7d8faf652 100644 --- a/airbyte-integrations/connectors/source-woocommerce/metadata.yaml +++ b/airbyte-integrations/connectors/source-woocommerce/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - ${domain} - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-workable/metadata.yaml b/airbyte-integrations/connectors/source-workable/metadata.yaml index a1d53b837f41..d4388d59881a 100644 --- a/airbyte-integrations/connectors/source-workable/metadata.yaml +++ b/airbyte-integrations/connectors/source-workable/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-workramp/metadata.yaml b/airbyte-integrations/connectors/source-workramp/metadata.yaml index f552e1dcdf5b..d61da2a2ff6d 100644 --- a/airbyte-integrations/connectors/source-workramp/metadata.yaml +++ b/airbyte-integrations/connectors/source-workramp/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-wrike/metadata.yaml b/airbyte-integrations/connectors/source-wrike/metadata.yaml index 9abc82d331bc..b3221d2c09ed 100644 --- a/airbyte-integrations/connectors/source-wrike/metadata.yaml +++ b/airbyte-integrations/connectors/source-wrike/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-xero/metadata.yaml b/airbyte-integrations/connectors/source-xero/metadata.yaml index 1b0d413d50c9..b780d9f43fd5 100644 --- a/airbyte-integrations/connectors/source-xero/metadata.yaml +++ b/airbyte-integrations/connectors/source-xero/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - api.xero.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-xkcd/metadata.yaml b/airbyte-integrations/connectors/source-xkcd/metadata.yaml index 555d44bcc2c0..0a011b9aa062 100644 --- a/airbyte-integrations/connectors/source-xkcd/metadata.yaml +++ b/airbyte-integrations/connectors/source-xkcd/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-yandex-metrica/metadata.yaml b/airbyte-integrations/connectors/source-yandex-metrica/metadata.yaml index ec51262b136e..e341e1eed06c 100644 --- a/airbyte-integrations/connectors/source-yandex-metrica/metadata.yaml +++ b/airbyte-integrations/connectors/source-yandex-metrica/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - api-metrica.yandex.net - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-younium/metadata.yaml b/airbyte-integrations/connectors/source-younium/metadata.yaml index cf1d888da85a..b36a10a9e7f5 100644 --- a/airbyte-integrations/connectors/source-younium/metadata.yaml +++ b/airbyte-integrations/connectors/source-younium/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-youtube-analytics/metadata.yaml b/airbyte-integrations/connectors/source-youtube-analytics/metadata.yaml index 3fc0f9a03a83..271b501a9702 100644 --- a/airbyte-integrations/connectors/source-youtube-analytics/metadata.yaml +++ b/airbyte-integrations/connectors/source-youtube-analytics/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - "*.googleapis.com" - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-zapier-supported-storage/metadata.yaml b/airbyte-integrations/connectors/source-zapier-supported-storage/metadata.yaml index 9c41dbf84a44..74db2251c77e 100644 --- a/airbyte-integrations/connectors/source-zapier-supported-storage/metadata.yaml +++ b/airbyte-integrations/connectors/source-zapier-supported-storage/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-zendesk-chat/metadata.yaml b/airbyte-integrations/connectors/source-zendesk-chat/metadata.yaml index 9be09abdfecf..d84e9a075f90 100644 --- a/airbyte-integrations/connectors/source-zendesk-chat/metadata.yaml +++ b/airbyte-integrations/connectors/source-zendesk-chat/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - zopim.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-zendesk-sell/metadata.yaml b/airbyte-integrations/connectors/source-zendesk-sell/metadata.yaml index 2dc8a50b6b71..82b3078ba3b7 100644 --- a/airbyte-integrations/connectors/source-zendesk-sell/metadata.yaml +++ b/airbyte-integrations/connectors/source-zendesk-sell/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-zendesk-sunshine/metadata.yaml b/airbyte-integrations/connectors/source-zendesk-sunshine/metadata.yaml index c296fe87660d..3363aa7c334b 100644 --- a/airbyte-integrations/connectors/source-zendesk-sunshine/metadata.yaml +++ b/airbyte-integrations/connectors/source-zendesk-sunshine/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-zendesk-support/metadata.yaml b/airbyte-integrations/connectors/source-zendesk-support/metadata.yaml index 7a8dc7f75d46..a344c4d9ed0e 100644 --- a/airbyte-integrations/connectors/source-zendesk-support/metadata.yaml +++ b/airbyte-integrations/connectors/source-zendesk-support/metadata.yaml @@ -3,7 +3,7 @@ data: hosts: - ${subdomain}.zendesk.com - zendesk.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-zendesk-talk/metadata.yaml b/airbyte-integrations/connectors/source-zendesk-talk/metadata.yaml index e4025da0ba02..7e18e964555f 100644 --- a/airbyte-integrations/connectors/source-zendesk-talk/metadata.yaml +++ b/airbyte-integrations/connectors/source-zendesk-talk/metadata.yaml @@ -3,7 +3,7 @@ data: hosts: - ${subdomain}.zendesk.com - zendesk.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-zenefits/metadata.yaml b/airbyte-integrations/connectors/source-zenefits/metadata.yaml index 3d3b3c57a29e..915f5f9f42f0 100644 --- a/airbyte-integrations/connectors/source-zenefits/metadata.yaml +++ b/airbyte-integrations/connectors/source-zenefits/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/source-zenloop/metadata.yaml b/airbyte-integrations/connectors/source-zenloop/metadata.yaml index b9cdc8fe9495..9753518ca4eb 100644 --- a/airbyte-integrations/connectors/source-zenloop/metadata.yaml +++ b/airbyte-integrations/connectors/source-zenloop/metadata.yaml @@ -2,7 +2,7 @@ data: allowedHosts: hosts: - api.zenloop.com - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-zoho-crm/metadata.yaml b/airbyte-integrations/connectors/source-zoho-crm/metadata.yaml index 8394f853397c..1342d0887f39 100644 --- a/airbyte-integrations/connectors/source-zoho-crm/metadata.yaml +++ b/airbyte-integrations/connectors/source-zoho-crm/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-zoom/metadata.yaml b/airbyte-integrations/connectors/source-zoom/metadata.yaml index c1f4bad358b9..dde2528c6949 100644 --- a/airbyte-integrations/connectors/source-zoom/metadata.yaml +++ b/airbyte-integrations/connectors/source-zoom/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: true oss: diff --git a/airbyte-integrations/connectors/source-zuora/metadata.yaml b/airbyte-integrations/connectors/source-zuora/metadata.yaml index b8c73522890b..d1257ea8e4d8 100644 --- a/airbyte-integrations/connectors/source-zuora/metadata.yaml +++ b/airbyte-integrations/connectors/source-zuora/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: dockerImageTag: 0.1.0 enabled: true diff --git a/airbyte-integrations/connectors/third-party/farosai/airbyte-customer-io-source/metadata.yaml b/airbyte-integrations/connectors/third-party/farosai/airbyte-customer-io-source/metadata.yaml index fb424a5b5afb..675e3f723566 100644 --- a/airbyte-integrations/connectors/third-party/farosai/airbyte-customer-io-source/metadata.yaml +++ b/airbyte-integrations/connectors/third-party/farosai/airbyte-customer-io-source/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/third-party/farosai/airbyte-harness-source/metadata.yaml b/airbyte-integrations/connectors/third-party/farosai/airbyte-harness-source/metadata.yaml index d2280db91480..02219428ee14 100644 --- a/airbyte-integrations/connectors/third-party/farosai/airbyte-harness-source/metadata.yaml +++ b/airbyte-integrations/connectors/third-party/farosai/airbyte-harness-source/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/third-party/farosai/airbyte-jenkins-source/metadata.yaml b/airbyte-integrations/connectors/third-party/farosai/airbyte-jenkins-source/metadata.yaml index b9e97211cb9a..95c5acbf8a13 100644 --- a/airbyte-integrations/connectors/third-party/farosai/airbyte-jenkins-source/metadata.yaml +++ b/airbyte-integrations/connectors/third-party/farosai/airbyte-jenkins-source/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/third-party/farosai/airbyte-pagerduty-source/metadata.yaml b/airbyte-integrations/connectors/third-party/farosai/airbyte-pagerduty-source/metadata.yaml index 7734b975a0f8..344c77903dbe 100644 --- a/airbyte-integrations/connectors/third-party/farosai/airbyte-pagerduty-source/metadata.yaml +++ b/airbyte-integrations/connectors/third-party/farosai/airbyte-pagerduty-source/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/third-party/farosai/airbyte-victorops-source/metadata.yaml b/airbyte-integrations/connectors/third-party/farosai/airbyte-victorops-source/metadata.yaml index 0decfc42b940..07d519175b24 100644 --- a/airbyte-integrations/connectors/third-party/farosai/airbyte-victorops-source/metadata.yaml +++ b/airbyte-integrations/connectors/third-party/farosai/airbyte-victorops-source/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: diff --git a/airbyte-integrations/connectors/third-party/ghcr/streamr-airbyte-connector/metadata.yaml b/airbyte-integrations/connectors/third-party/ghcr/streamr-airbyte-connector/metadata.yaml index 925e5ac53207..49772cb43172 100644 --- a/airbyte-integrations/connectors/third-party/ghcr/streamr-airbyte-connector/metadata.yaml +++ b/airbyte-integrations/connectors/third-party/ghcr/streamr-airbyte-connector/metadata.yaml @@ -1,5 +1,5 @@ data: - catalogs: + registries: cloud: enabled: false oss: From 2d77e2bca0eeea5547d05cf7e1624fa0f41d7d3a Mon Sep 17 00:00:00 2001 From: Artem Inzhyyants <36314070+artem1205@users.noreply.github.com> Date: Tue, 18 Apr 2023 23:12:01 +0200 Subject: [PATCH 122/187] Source Amplitude: Reduce request_time_range (#25281) * Source Amplitude: Reduce request_time_range * Source Amplitude: Reduce request_time_range * Update docs/integrations/sources/amplitude.md Co-authored-by: Catherine Noll * Update docs/integrations/sources/amplitude.md * auto-bump connector version --------- Co-authored-by: Serhii Lazebnyi <53845333+lazebnyi@users.noreply.github.com> Co-authored-by: Catherine Noll Co-authored-by: Octavia Squidington III --- .../init-oss/src/main/resources/seed/oss_catalog.json | 2 +- .../init-oss/src/main/resources/seed/source_definitions.yaml | 2 +- .../init-oss/src/main/resources/seed/source_specs.yaml | 2 +- airbyte-integrations/connectors/source-amplitude/Dockerfile | 2 +- .../connectors/source-amplitude/source_amplitude/components.py | 1 + .../connectors/source-amplitude/source_amplitude/manifest.yaml | 2 +- connectors.md | 2 +- docs/integrations/sources/amplitude.md | 3 ++- 8 files changed, 9 insertions(+), 7 deletions(-) diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json index c71bc15fae00..03a53ab2bc5d 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json @@ -8967,7 +8967,7 @@ "sourceDefinitionId": "fa9f58c6-2d03-4237-aaa4-07d75e0c1396", "name": "Amplitude", "dockerRepository": "airbyte/source-amplitude", - "dockerImageTag": "0.2.0", + "dockerImageTag": "0.2.1", "documentationUrl": "https://docs.airbyte.com/integrations/sources/amplitude", "icon": "amplitude.svg", "sourceType": "api", diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml index 4fe5b66cfd8f..637829dc686c 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml @@ -103,7 +103,7 @@ - name: Amplitude sourceDefinitionId: fa9f58c6-2d03-4237-aaa4-07d75e0c1396 dockerRepository: airbyte/source-amplitude - dockerImageTag: 0.2.0 + dockerImageTag: 0.2.1 documentationUrl: https://docs.airbyte.com/integrations/sources/amplitude icon: amplitude.svg sourceType: api diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml index b8e11bb9eec9..bd2404c2ce8b 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml @@ -1344,7 +1344,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-amplitude:0.2.0" +- dockerImage: "airbyte/source-amplitude:0.2.1" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/amplitude" connectionSpecification: diff --git a/airbyte-integrations/connectors/source-amplitude/Dockerfile b/airbyte-integrations/connectors/source-amplitude/Dockerfile index 450d0c50f4d9..7c300dbd7233 100644 --- a/airbyte-integrations/connectors/source-amplitude/Dockerfile +++ b/airbyte-integrations/connectors/source-amplitude/Dockerfile @@ -34,5 +34,5 @@ COPY source_amplitude ./source_amplitude ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=0.2.0 +LABEL io.airbyte.version=0.2.1 LABEL io.airbyte.name=airbyte/source-amplitude diff --git a/airbyte-integrations/connectors/source-amplitude/source_amplitude/components.py b/airbyte-integrations/connectors/source-amplitude/source_amplitude/components.py index 3780fc77114f..7ae88ec95db5 100644 --- a/airbyte-integrations/connectors/source-amplitude/source_amplitude/components.py +++ b/airbyte-integrations/connectors/source-amplitude/source_amplitude/components.py @@ -100,6 +100,7 @@ def extract_records( response: requests.Response, ) -> List[Record]: try: + logger.info(f"The size of the response body is: {len(response.content)}") zip_file = zipfile.ZipFile(io.BytesIO(response.content)) except zipfile.BadZipFile: logger.exception( diff --git a/airbyte-integrations/connectors/source-amplitude/source_amplitude/manifest.yaml b/airbyte-integrations/connectors/source-amplitude/source_amplitude/manifest.yaml index a6625ad47e64..a7deefaf743e 100644 --- a/airbyte-integrations/connectors/source-amplitude/source_amplitude/manifest.yaml +++ b/airbyte-integrations/connectors/source-amplitude/source_amplitude/manifest.yaml @@ -138,7 +138,7 @@ definitions: condition: "{{ record[parameters['stream_cursor_field']] > stream_state.get(parameters['stream_cursor_field'],config['start_date']) }}" incremental_sync: $ref: "#/definitions/datetime_incremental_sync" - step: "PT{{config.get('request_time_range', 24)}}H" + step: "PT{{config.get('request_time_range', 4)}}H" cursor_field: "{{ parameters.get('stream_cursor_field') }}" cursor_granularity: PT1H start_datetime: diff --git a/connectors.md b/connectors.md index a1cbb8e57612..cf08ce529f57 100644 --- a/connectors.md +++ b/connectors.md @@ -15,7 +15,7 @@ | **Amazon Ads** | Amazon Ads icon | Source | airbyte/source-amazon-ads:1.0.3 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/amazon-ads) | [connectors/source/amazon-ads](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/amazon-ads) | [source-amazon-ads](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-amazon-ads) | `c6b0a29e-1da9-4512-9002-7bfd0cba2246` | | **Amazon SQS** | Amazon SQS icon | Source | airbyte/source-amazon-sqs:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/amazon-sqs) | [connectors/source/amazon-sqs](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/amazon-sqs) | [source-amazon-sqs](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-amazon-sqs) | `983fd355-6bf3-4709-91b5-37afa391eeb6` | | **Amazon Seller Partner** | Amazon Seller Partner icon | Source | airbyte/source-amazon-seller-partner:1.0.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/amazon-seller-partner) | [connectors/source/amazon-seller-partner](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/amazon-seller-partner) | [source-amazon-seller-partner](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-amazon-seller-partner) | `e55879a8-0ef8-4557-abcf-ab34c53ec460` | -| **Amplitude** | Amplitude icon | Source | airbyte/source-amplitude:0.2.0 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/amplitude) | [connectors/source/amplitude](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/amplitude) | [source-amplitude](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-amplitude) | `fa9f58c6-2d03-4237-aaa4-07d75e0c1396` | +| **Amplitude** | Amplitude icon | Source | airbyte/source-amplitude:0.2.1 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/amplitude) | [connectors/source/amplitude](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/amplitude) | [source-amplitude](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-amplitude) | `fa9f58c6-2d03-4237-aaa4-07d75e0c1396` | | **Apify Dataset** | Apify Dataset icon | Source | airbyte/source-apify-dataset:0.1.11 | alpha | [docs](https://docs.airbyte.com/integrations/sources/apify-dataset) | [connectors/source/apify-dataset](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/apify-dataset) | [source-apify-dataset](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-apify-dataset) | `47f17145-fe20-4ef5-a548-e29b048adf84` | | **Appfollow** | Appfollow icon | Source | airbyte/source-appfollow:0.1.1 | alpha | [docs](https://docs.airbyte.com/integrations/sources/appfollow) | [connectors/source/appfollow](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/appfollow) | [source-appfollow](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-appfollow) | `b4375641-e270-41d3-9c20-4f9cecad87a8` | | **Apple Search Ads** | Apple Search Ads icon | Source | airbyte/source-apple-search-ads:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/apple-search-ads) | [connectors/source/apple-search-ads](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/apple-search-ads) | [source-apple-search-ads](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-apple-search-ads) | `e59c8416-c2fa-4bd3-9e95-52677ea281c1` | diff --git a/docs/integrations/sources/amplitude.md b/docs/integrations/sources/amplitude.md index 400b64e9d3b0..4e02fd92c35c 100644 --- a/docs/integrations/sources/amplitude.md +++ b/docs/integrations/sources/amplitude.md @@ -43,10 +43,11 @@ The Amplitude connector ideally should gracefully handle Amplitude API limitatio | Version | Date | Pull Request | Subject | |:--------|:-----------|:---------------------------------------------------------|:------------------------------------------------------------------------------------------------| +| 0.2.1 | 2023-02-03 | [25281](https://github.com/airbytehq/airbyte/pull/25281) | Reduce request_time_range to 4 hours | | 0.2.0 | 2023-02-03 | [22362](https://github.com/airbytehq/airbyte/pull/22362) | Migrate to YAML | | 0.1.24 | 2023-03-28 | [21022](https://github.com/airbytehq/airbyte/pull/21022) | Enable event stream time interval selection | | 0.1.23 | 2023-03-02 | [23087](https://github.com/airbytehq/airbyte/pull/23087) | Specified date formatting in specification | -| 0.1.22 | 2023-02-17 | [23192](https://github.com/airbytehq/airbyte/pull/23192) | Skip the stream if `start_date` is specified in the future. +| 0.1.22 | 2023-02-17 | [23192](https://github.com/airbytehq/airbyte/pull/23192) | Skip the stream if `start_date` is specified in the future. | | 0.1.21 | 2023-02-01 | [21888](https://github.com/airbytehq/airbyte/pull/21888) | Set `AvailabilityStrategy` for streams explicitly to `None` | | 0.1.20 | 2023-01-27 | [21957](https://github.com/airbytehq/airbyte/pull/21957) | Handle null values and empty strings in date-time fields | | 0.1.19 | 2022-12-09 | [19727](https://github.com/airbytehq/airbyte/pull/19727) | Remove `data_region` as required | From 439d0e3426e40964775fd953ac180c713147f1b4 Mon Sep 17 00:00:00 2001 From: Cole Snodgrass Date: Tue, 18 Apr 2023 15:04:43 -0700 Subject: [PATCH 123/187] increase postgres heartbeat from 3600->7200 (#25304) --- .../init-oss/src/main/resources/seed/oss_catalog.json | 3 ++- .../init-oss/src/main/resources/seed/source_definitions.yaml | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json index 03a53ab2bc5d..b08e75b2ac89 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json @@ -21419,7 +21419,8 @@ "releaseStage": "generally_available", "allowedHosts": { "hosts": [ "${host}", "${tunnel_method.tunnel_host}" ] - } + }, + "maxSecondsBetweenMessages": 7200 }, { "sourceDefinitionId": "cde75ca1-1e28-4a0f-85bb-90c546de9f1f", "name": "Postmark App", diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml index 637829dc686c..76c2cdce038b 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml @@ -1632,6 +1632,7 @@ hosts: - "${host}" - "${tunnel_method.tunnel_host}" + maxSecondsBetweenMessages: 7200 - name: Postmark App sourceDefinitionId: cde75ca1-1e28-4a0f-85bb-90c546de9f1f dockerRepository: airbyte/source-postmarkapp From 1bf47a7f76cb1d1431a6cf425e2befc2e4201437 Mon Sep 17 00:00:00 2001 From: Augustin Date: Wed, 19 Apr 2023 08:05:40 +0200 Subject: [PATCH 124/187] connectors-ci: fix java connectors testing (#25268) * connectors-ci: include destination-azure-blob-storage gradle project as a destination build dep * fix integration test return value --- .../ci_connector_ops/pipelines/tests/java_connectors.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/ci_connector_ops/ci_connector_ops/pipelines/tests/java_connectors.py b/tools/ci_connector_ops/ci_connector_ops/pipelines/tests/java_connectors.py index af7437995244..29b5227578c5 100644 --- a/tools/ci_connector_ops/ci_connector_ops/pipelines/tests/java_connectors.py +++ b/tools/ci_connector_ops/ci_connector_ops/pipelines/tests/java_connectors.py @@ -102,8 +102,8 @@ class GradleTask(Step, ABC): DESTINATION_BUILD_INCLUDE = [ "airbyte-integrations/bases/bases-destination-jdbc", - # destination-bigquery uses utils from destination gcs "airbyte-integrations/connectors/destination-gcs", + "airbyte-integrations/connectors/destination-azure-blob-storage", ] # These are the lines we remove from the connector gradle file to ignore specific tasks / plugins. @@ -273,7 +273,7 @@ async def _run(self, connector_tar_file: File, normalization_tar_file: Optional[ tg.start_soon(self._load_connector_image, connector_tar_file) return await super()._run() except QueryError as e: - return StepResult(self, StepStatus.FAILURE, stderr=str(e)), None + return StepResult(self, StepStatus.FAILURE, stderr=str(e)) async def run_all_tests(context: ConnectorTestContext) -> List[StepResult]: From 4341b7dceccfce799591948dae1e9fec0d1c0917 Mon Sep 17 00:00:00 2001 From: Marcos Marx Date: Wed, 19 Apr 2023 07:03:39 -0300 Subject: [PATCH 125/187] Source Stripe: add account stream (#25136) * add accounts stream * add docs * lint * fix * fix * fix test * fix tests * fix account schema * fix expected records and schema * remove account from abnormal state * update dockerfile and update docs * Update Dockerfile * Update source_definitions.yaml * Update test_source stream count * auto-bump connector version --------- Co-authored-by: Haithem Souala Co-authored-by: Octavia Squidington III --- .../src/main/resources/seed/oss_catalog.json | 2 +- .../resources/seed/source_definitions.yaml | 2 +- .../src/main/resources/seed/source_specs.yaml | 2 +- .../connectors/source-stripe/Dockerfile | 2 +- .../integration_tests/configured_catalog.json | 9 + .../integration_tests/expected_records.jsonl | 3 + .../full_refresh_configured_catalog.json | 14 + .../source_stripe/schemas/accounts.json | 827 ++++++++++++++++++ .../source-stripe/source_stripe/source.py | 2 + .../source-stripe/source_stripe/streams.py | 11 +- .../source-stripe/unit_tests/test_source.py | 2 +- connectors.md | 2 +- docs/integrations/sources/stripe.md | 2 + 13 files changed, 873 insertions(+), 7 deletions(-) create mode 100644 airbyte-integrations/connectors/source-stripe/source_stripe/schemas/accounts.json diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json index b08e75b2ac89..4e68775e5dd1 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/oss_catalog.json @@ -24565,7 +24565,7 @@ "sourceDefinitionId": "e094cb9a-26de-4645-8761-65c0c425d1de", "name": "Stripe", "dockerRepository": "airbyte/source-stripe", - "dockerImageTag": "3.2.0", + "dockerImageTag": "3.3.0", "documentationUrl": "https://docs.airbyte.com/integrations/sources/stripe", "icon": "stripe.svg", "sourceType": "api", diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml index 76c2cdce038b..65a964d715f8 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_definitions.yaml @@ -2029,7 +2029,7 @@ - name: Stripe sourceDefinitionId: e094cb9a-26de-4645-8761-65c0c425d1de dockerRepository: airbyte/source-stripe - dockerImageTag: 3.2.0 + dockerImageTag: 3.3.0 documentationUrl: https://docs.airbyte.com/integrations/sources/stripe icon: stripe.svg sourceType: api diff --git a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml index bd2404c2ce8b..66354dd7098c 100644 --- a/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml +++ b/airbyte-config-oss/init-oss/src/main/resources/seed/source_specs.yaml @@ -15169,7 +15169,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-stripe:3.2.0" +- dockerImage: "airbyte/source-stripe:3.3.0" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/stripe" connectionSpecification: diff --git a/airbyte-integrations/connectors/source-stripe/Dockerfile b/airbyte-integrations/connectors/source-stripe/Dockerfile index 8c924afbf3db..e8f9d81c20b3 100644 --- a/airbyte-integrations/connectors/source-stripe/Dockerfile +++ b/airbyte-integrations/connectors/source-stripe/Dockerfile @@ -13,5 +13,5 @@ ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=3.2.0 +LABEL io.airbyte.version=3.3.0 LABEL io.airbyte.name=airbyte/source-stripe diff --git a/airbyte-integrations/connectors/source-stripe/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-stripe/integration_tests/configured_catalog.json index 1c16a853a4ae..f4050a222346 100644 --- a/airbyte-integrations/connectors/source-stripe/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-stripe/integration_tests/configured_catalog.json @@ -1,5 +1,14 @@ { "streams": [ + { + "stream": { + "name": "accounts", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, { "stream": { "name": "balance_transactions", diff --git a/airbyte-integrations/connectors/source-stripe/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-stripe/integration_tests/expected_records.jsonl index f38ea0bd7b4e..5115b46bf495 100644 --- a/airbyte-integrations/connectors/source-stripe/integration_tests/expected_records.jsonl +++ b/airbyte-integrations/connectors/source-stripe/integration_tests/expected_records.jsonl @@ -1,3 +1,6 @@ +{"stream": "accounts", "data": {"id": "acct_1Jx8unEYmRTj5on1", "object": "account", "business_profile": {"mcc": null, "name": "Airbyte", "support_address": null, "support_email": null, "support_phone": null, "support_url": null, "url": null}, "capabilities": {}, "charges_enabled": false, "controller": {"type": "account"}, "country": "US", "default_currency": "usd", "details_submitted": false, "email": null, "future_requirements": {"alternatives": [], "current_deadline": null, "currently_due": [], "disabled_reason": null, "errors": [], "eventually_due": [], "past_due": [], "pending_verification": []}, "metadata": {}, "payouts_enabled": false, "requirements": {"alternatives": [], "current_deadline": null, "currently_due": ["business_profile.product_description", "business_profile.support_phone", "business_profile.url", "external_account", "tos_acceptance.date", "tos_acceptance.ip"], "disabled_reason": "requirements.past_due", "errors": [], "eventually_due": ["business_profile.product_description", "business_profile.support_phone", "business_profile.url", "external_account", "tos_acceptance.date", "tos_acceptance.ip"], "past_due": [], "pending_verification": []}, "settings": {"bacs_debit_payments": {}, "branding": {"icon": null, "logo": null, "primary_color": null, "secondary_color": null}, "card_issuing": {"tos_acceptance": {"date": null, "ip": null}}, "card_payments": {"statement_descriptor_prefix": null, "statement_descriptor_prefix_kana": null, "statement_descriptor_prefix_kanji": null}, "dashboard": {"display_name": null, "timezone": "Etc/UTC"}, "payments": {"statement_descriptor": null, "statement_descriptor_kana": null, "statement_descriptor_kanji": null}, "sepa_debit_payments": {}}, "type": "standard"}, "emitted_at": 1681342534089} +{"stream": "accounts", "data": {"id": "acct_1HRPLyCpK2Z3jTFF", "object": "account", "capabilities": {"acss_debit_payments": "inactive", "afterpay_clearpay_payments": "inactive", "bancontact_payments": "inactive", "card_payments": "inactive", "eps_payments": "inactive", "giropay_payments": "inactive", "ideal_payments": "inactive", "p24_payments": "inactive", "sepa_debit_payments": "inactive", "sofort_payments": "inactive", "transfers": "inactive"}, "charges_enabled": false, "country": "US", "default_currency": "usd", "details_submitted": false, "future_requirements": {"alternatives": [], "current_deadline": null, "currently_due": [], "disabled_reason": null, "errors": [], "eventually_due": [], "past_due": [], "pending_verification": []}, "payouts_enabled": false, "requirements": {"alternatives": [], "current_deadline": null, "currently_due": ["business_profile.mcc", "business_profile.product_description", "business_profile.support_phone", "business_profile.url", "external_account", "individual.dob.day", "individual.dob.month", "individual.dob.year", "individual.email", "individual.first_name", "individual.last_name", "individual.phone", "individual.ssn_last_4", "tos_acceptance.date", "tos_acceptance.ip"], "disabled_reason": "requirements.past_due", "errors": [], "eventually_due": ["business_profile.mcc", "business_profile.product_description", "business_profile.support_phone", "business_profile.url", "external_account", "individual.dob.day", "individual.dob.month", "individual.dob.year", "individual.email", "individual.first_name", "individual.last_name", "individual.phone", "individual.ssn_last_4", "tos_acceptance.date", "tos_acceptance.ip"], "past_due": ["business_profile.mcc", "business_profile.product_description", "business_profile.support_phone", "business_profile.url", "external_account", "individual.dob.day", "individual.dob.month", "individual.dob.year", "individual.email", "individual.first_name", "individual.last_name", "individual.phone", "individual.ssn_last_4", "tos_acceptance.date", "tos_acceptance.ip"], "pending_verification": []}, "settings": {"bacs_debit_payments": {}, "branding": {"icon": null, "logo": null, "primary_color": null, "secondary_color": null}, "card_issuing": {"tos_acceptance": {"date": null, "ip": null}}, "card_payments": {"statement_descriptor_prefix": null, "statement_descriptor_prefix_kana": null, "statement_descriptor_prefix_kanji": null}, "dashboard": {"display_name": null, "timezone": "America/Los_Angeles"}, "payments": {"statement_descriptor": null, "statement_descriptor_kana": null, "statement_descriptor_kanji": null}, "sepa_debit_payments": {}}, "type": "standard"}, "emitted_at": 1681342534089} +{"stream": "accounts", "data": {"id": "acct_1MwD6tIyVv44cUB4", "object": "account", "business_profile": {"mcc": null, "name": null, "product_description": null, "support_address": null, "support_email": null, "support_phone": null, "support_url": null, "url": null}, "business_type": null, "capabilities": {"card_payments": "inactive", "transfers": "inactive"}, "charges_enabled": false, "country": "US", "created": 1681342196, "default_currency": "usd", "details_submitted": false, "email": "jenny.rosen@example.com", "external_accounts": {"object": "list", "data": [], "has_more": false, "total_count": 0, "url": "/v1/accounts/acct_1MwD6tIyVv44cUB4/external_accounts"}, "future_requirements": {"alternatives": [], "current_deadline": null, "currently_due": [], "disabled_reason": null, "errors": [], "eventually_due": [], "past_due": [], "pending_verification": []}, "metadata": {}, "payouts_enabled": false, "requirements": {"alternatives": [], "current_deadline": null, "currently_due": ["business_profile.mcc", "business_profile.url", "business_type", "external_account", "representative.first_name", "representative.last_name", "tos_acceptance.date", "tos_acceptance.ip"], "disabled_reason": "requirements.past_due", "errors": [], "eventually_due": ["business_profile.mcc", "business_profile.url", "business_type", "external_account", "representative.first_name", "representative.last_name", "tos_acceptance.date", "tos_acceptance.ip"], "past_due": ["business_profile.mcc", "business_profile.url", "business_type", "external_account", "representative.first_name", "representative.last_name", "tos_acceptance.date", "tos_acceptance.ip"], "pending_verification": []}, "settings": {"bacs_debit_payments": {}, "branding": {"icon": null, "logo": null, "primary_color": null, "secondary_color": null}, "card_issuing": {"tos_acceptance": {"date": null, "ip": null}}, "card_payments": {"decline_on": {"avs_failure": false, "cvc_failure": false}, "statement_descriptor_prefix": null, "statement_descriptor_prefix_kana": null, "statement_descriptor_prefix_kanji": null}, "dashboard": {"display_name": null, "timezone": "Etc/UTC"}, "payments": {"statement_descriptor": null, "statement_descriptor_kana": null, "statement_descriptor_kanji": null}, "payouts": {"debit_negative_balances": false, "schedule": {"delay_days": 2, "interval": "daily"}, "statement_descriptor": null}, "sepa_debit_payments": {}}, "tos_acceptance": {"date": null, "ip": null, "user_agent": null}, "type": "custom"}, "emitted_at": 1681342534487} {"stream": "balance_transactions", "data": {"id": "txn_1MSI0kEcXtiJtvvhSvODONEM", "object": "balance_transaction", "amount": -2200, "available_on": 1674211193, "created": 1674211193, "currency": "usd", "description": "", "exchange_rate": null, "fee": 0, "fee_details": [], "net": -2200, "reporting_category": "payout", "source": "po_1MSI0jEcXtiJtvvh04O4oGd0", "status": "available", "type": "payout"}, "emitted_at": 1677521307744} {"stream": "balance_transactions", "data": {"id": "txn_1MSHy5EcXtiJtvvhlMY18GCN", "object": "balance_transaction", "amount": 800, "available_on": 1674211029, "created": 1674211029, "currency": "usd", "description": "airbyte.io", "exchange_rate": null, "fee": 0, "fee_details": [], "net": 800, "reporting_category": "topup", "source": "tu_1MSHy5EcXtiJtvvhlHP8Tx0l", "status": "available", "type": "topup"}, "emitted_at": 1677521307745} {"stream": "balance_transactions", "data": {"id": "txn_1MSHueEcXtiJtvvhvUxFDRK6", "object": "balance_transaction", "amount": 800, "available_on": 1674210816, "created": 1674210816, "currency": "usd", "description": "airbyte.io", "exchange_rate": null, "fee": 0, "fee_details": [], "net": 800, "reporting_category": "topup", "source": "tu_1MSHueEcXtiJtvvhbnThZCY6", "status": "available", "type": "topup"}, "emitted_at": 1677521307745} diff --git a/airbyte-integrations/connectors/source-stripe/integration_tests/full_refresh_configured_catalog.json b/airbyte-integrations/connectors/source-stripe/integration_tests/full_refresh_configured_catalog.json index 0572846d1b36..d20b624cce1c 100644 --- a/airbyte-integrations/connectors/source-stripe/integration_tests/full_refresh_configured_catalog.json +++ b/airbyte-integrations/connectors/source-stripe/integration_tests/full_refresh_configured_catalog.json @@ -55,6 +55,20 @@ "destination_sync_mode": "overwrite", "cursor_field": ["checkout_session_expires_at"], "primary_key": [["id"]] + }, + { + "stream": { + "name": "accounts", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": ["created"], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite", + "cursor_field": ["created"], + "primary_key": [["id"]] } ] } diff --git a/airbyte-integrations/connectors/source-stripe/source_stripe/schemas/accounts.json b/airbyte-integrations/connectors/source-stripe/source_stripe/schemas/accounts.json new file mode 100644 index 000000000000..1b7769a88a73 --- /dev/null +++ b/airbyte-integrations/connectors/source-stripe/source_stripe/schemas/accounts.json @@ -0,0 +1,827 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": true, + "type": "object", + "properties": { + "business_profile": { + "type": ["null", "object"], + "properties": { + "mcc": { + "type": ["null", "string"] + }, + "name": { + "type": ["null", "string"] + }, + "product_description": { + "type": ["null", "string"] + }, + "support_address": { + "type": ["null", "object"], + "properties": { + "city": { + "type": ["null", "string"] + }, + "country": { + "type": ["null", "string"] + }, + "line1": { + "type": ["null", "string"] + }, + "line2": { + "type": ["null", "string"] + }, + "postal_code": { + "type": ["null", "string"] + }, + "state": { + "type": ["null", "string"] + } + } + }, + "support_email": { + "type": ["null", "string"] + }, + "support_phone": { + "type": ["null", "string"] + }, + "support_url": { + "type": ["null", "string"] + }, + "url": { + "type": ["null", "string"] + } + } + }, + "business_type": { + "type": ["null", "string"] + }, + "capabilities": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "afterpay_clearpay_payments": { + "type": ["null", "string"] + }, + "au_becs_debit_payments": { + "type": ["null", "string"] + }, + "bacs_debit_payments": { + "type": ["null", "string"] + }, + "bancontact_payments": { + "type": ["null", "string"] + }, + "card_issuing": { + "type": ["null", "string"] + }, + "card_payments": { + "type": ["null", "string"] + }, + "cartes_bancaires_payments": { + "type": ["null", "string"] + }, + "eps_payments": { + "type": ["null", "string"] + }, + "fpx_payments": { + "type": ["null", "string"] + }, + "giropay_payments": { + "type": ["null", "string"] + }, + "grabpay_payments": { + "type": ["null", "string"] + }, + "ideal_payments": { + "type": ["null", "string"] + }, + "jcb_payments": { + "type": ["null", "string"] + }, + "legacy_payments": { + "type": ["null", "string"] + }, + "oxxo_payments": { + "type": ["null", "string"] + }, + "p24_payments": { + "type": ["null", "string"] + }, + "sepa_debit_payments": { + "type": ["null", "string"] + }, + "sofort_payments": { + "type": ["null", "string"] + }, + "tax_reporting_us_1099_k": { + "type": ["null", "string"] + }, + "tax_reporting_us_1099_misc": { + "type": ["null", "string"] + }, + "transfers": { + "type": ["null", "string"] + } + } + }, + "charges_enabled": { + "type": ["null", "boolean"] + }, + "company": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "address": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "city": { + "type": ["null", "string"] + }, + "country": { + "type": ["null", "string"] + }, + "line1": { + "type": ["null", "string"] + }, + "line2": { + "type": ["null", "string"] + }, + "postal_code": { + "type": ["null", "string"] + }, + "state": { + "type": ["null", "string"] + } + } + }, + "address_kana": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "city": { + "type": ["null", "string"] + }, + "country": { + "type": ["null", "string"] + }, + "line1": { + "type": ["null", "string"] + }, + "line2": { + "type": ["null", "string"] + }, + "postal_code": { + "type": ["null", "string"] + }, + "state": { + "type": ["null", "string"] + }, + "town": { + "type": ["null", "string"] + } + } + }, + "address_kanji": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "city": { + "type": ["null", "string"] + }, + "country": { + "type": ["null", "string"] + }, + "line1": { + "type": ["null", "string"] + }, + "line2": { + "type": ["null", "string"] + }, + "postal_code": { + "type": ["null", "string"] + }, + "state": { + "type": ["null", "string"] + }, + "town": { + "type": ["null", "string"] + } + } + }, + "directors_provided": { + "type": ["null", "boolean"] + }, + "executives_provided": { + "type": ["null", "boolean"] + }, + "export_license_id": { + "type": ["null", "string"] + }, + "export_purpose_code": { + "type": ["null", "string"] + }, + "name": { + "type": ["null", "string"] + }, + "name_kana": { + "type": ["null", "string"] + }, + "name_kanji": { + "type": ["null", "string"] + }, + "owners_provided": { + "type": ["null", "boolean"] + }, + "ownership_declaration": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "date": { + "type": ["null", "string"] + }, + "ip": { + "type": ["null", "string"] + }, + "user_agent": { + "type": ["null", "string"] + } + } + }, + "phone": { + "type": ["null", "string"] + }, + "structure": { + "type": ["null", "string"] + }, + "tax_id_provided": { + "type": ["null", "boolean"] + }, + "tax_id_registrar": { + "type": ["null", "string"] + }, + "vat_id_provided": { + "type": ["null", "boolean"] + }, + "verification": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "document": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "back": { + "type": ["null", "string"] + }, + "details": { + "type": ["null", "string"] + }, + "details_code": { + "type": ["null", "string"] + } + } + } + } + } + } + }, + "country": { + "type": ["null", "string"] + }, + "created": { + "type": ["null", "integer"] + }, + "default_currency": { + "type": ["null", "string"] + }, + "details_submitted": { + "type": ["null", "boolean"] + }, + "email": { + "type": ["null", "string"] + }, + "external_accounts": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "data": { + "type": ["null", "array"] + }, + "has_more": { + "type": ["null", "boolean"] + }, + "object": { + "enum": ["list"], + "type": ["null", "string"] + }, + "url": { + "type": ["null", "string"] + } + } + }, + "id": { + "type": ["null", "string"] + }, + "individual": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "id": { + "type": ["null", "string"] + }, + "object": { + "type": ["null", "string"], + "enum": ["person"] + }, + "account": { + "type": ["null", "string"] + }, + "address": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "city": { + "type": ["null", "string"] + }, + "country": { + "type": ["null", "string"] + }, + "line1": { + "type": ["null", "string"] + }, + "line2": { + "type": ["null", "string"] + }, + "postal_code": { + "type": ["null", "string"] + }, + "state": { + "type": ["null", "string"] + } + } + }, + "address_kana": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "city": { + "type": ["null", "string"] + }, + "country": { + "type": ["null", "string"] + }, + "line1": { + "type": ["null", "string"] + }, + "line2": { + "type": ["null", "string"] + }, + "postal_code": { + "type": ["null", "string"] + }, + "state": { + "type": ["null", "string"] + }, + "town": { + "type": ["null", "string"] + } + } + }, + "address_kanji": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "city": { + "type": ["null", "string"] + }, + "country": { + "type": ["null", "string"] + }, + "line1": { + "type": ["null", "string"] + }, + "line2": { + "type": ["null", "string"] + }, + "postal_code": { + "type": ["null", "string"] + }, + "state": { + "type": ["null", "string"] + }, + "town": { + "type": ["null", "string"] + } + } + }, + "created": { + "type": ["null", "string"] + }, + "dob": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "day": { + "type": ["null", "number"] + }, + "month": { + "type": ["null", "number"] + }, + "year": { + "type": ["null", "number"] + } + } + }, + "email": { + "type": ["null", "string"] + }, + "first_name": { + "type": ["null", "string"] + }, + "first_name_kane": { + "type": ["null", "string"] + }, + "first_name_kanji": { + "type": ["null", "string"] + }, + "full_name_aliases": { + "type": ["null", "array"], + "items": { + "type": ["null", "string"] + } + }, + "full_requirements": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "alternatives": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "alternative_fields_due": { + "type": ["null", "array"], + "items": { + "type": ["null", "string"] + } + }, + "original_fields_due": { + "type": ["null", "array"], + "items": { + "type": ["null", "string"] + } + } + } + }, + "currently_due": { + "type": ["null", "string"] + }, + "errors": { + "type": ["null", "array"], + "items": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "code": { + "type": ["null", "string"] + }, + "reason": { + "type": ["null", "string"] + }, + "requirement": { + "type": ["null", "string"] + } + } + } + }, + "eventually_due": { + "type": ["null", "array"], + "items": { + "type": ["null", "string"] + } + }, + "past_due": { + "type": ["null", "array"], + "items": { + "type": ["null", "string"] + } + }, + "pending_verification": { + "type": ["null", "array"], + "items": { + "type": ["null", "string"] + } + } + } + }, + "gender": { + "type": ["null", "string"] + }, + "id_number_provided": { + "type": ["null", "boolean"] + }, + "id_number_secondary_provided": { + "type": ["null", "boolean"] + }, + "last_name": { + "type": ["null", "string"] + }, + "last_name_kana": { + "type": ["null", "string"] + }, + "last_name_kanji": { + "type": ["null", "string"] + }, + "maiden_name": { + "type": ["null", "string"] + }, + "metadata": { + "type": ["null", "object"], + "additionalProperties": true + }, + "nationality": { + "type": ["null", "string"] + }, + "phone": { + "type": ["null", "string"] + }, + "political_exposure": { + "type": ["null", "string"] + }, + "registered_address": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "city": { + "type": ["null", "string"] + }, + "country": { + "type": ["null", "string"] + }, + "line1": { + "type": ["null", "string"] + }, + "line2": { + "type": ["null", "string"] + }, + "postal_code": { + "type": ["null", "string"] + }, + "state": { + "type": ["null", "string"] + } + } + }, + "relationship": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "director": { + "type": ["null", "boolean"] + }, + "executive": { + "type": ["null", "boolean"] + }, + "owner": { + "type": ["null", "boolean"] + }, + "percent_ownership": { + "type": ["null", "number"] + }, + "representative": { + "type": ["null", "boolean"] + }, + "title": { + "type": ["null", "string"] + } + } + }, + "requirements": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "alternatives": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "alternative_fields_due": { + "type": ["null", "array"], + "items": { + "type": ["null", "string"] + } + }, + "original_fields_due": { + "type": ["null", "array"], + "items": { + "type": ["null", "string"] + } + } + } + }, + "currently_due": { + "type": ["null", "array"], + "items": { + "type": ["null", "string"] + } + }, + "errors": { + "type": ["null", "array"], + "items": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "code": { + "type": ["null", "string"] + }, + "reason": { + "type": ["null", "string"] + }, + "requirement": { + "type": ["null", "string"] + } + } + } + }, + "eventually_due": { + "type": ["null", "array"], + "items": { + "type": ["null", "string"] + } + }, + "past_due": { + "type": ["null", "array"], + "items": { + "type": ["null", "string"] + } + }, + "pending_verification": { + "type": ["null", "array"], + "items": { + "type": ["null", "string"] + } + } + } + }, + "ssn_last_4_provided": { + "type": ["null", "boolean"] + }, + "verification": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "additional_document": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "back": { + "type": ["null", "string"] + }, + "details": { + "type": ["null", "string"] + }, + "details_code": { + "type": ["null", "string"] + } + } + }, + "details": { + "type": ["null", "string"] + }, + "details_code": { + "type": ["null", "string"] + }, + "document": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "back": { + "type": ["null", "string"] + }, + "details": { + "type": ["null", "string"] + }, + "details_code": { + "type": ["null", "string"] + }, + "front": { + "type": ["null", "string"] + } + } + }, + "status": { + "type": ["null", "string"] + } + } + } + } + }, + "metadata": { + "type": ["null", "object"], + "additionalProperties": true + }, + "object": { + "enum": ["account"], + "type": ["null", "string"] + }, + "payouts_enabled": { + "type": ["null", "boolean"] + }, + "requirements": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "alternatives": { + "type": ["null", "array"], + "items": { + "additionalProperties": true, + "properties": { + "alternative_fields_due": { + "type": ["null", "array"], + "items": { + "type": ["null", "string"] + } + }, + "original_fields_due": { + "type": ["null", "array"], + "items": { + "type": ["null", "string"] + } + } + } + } + }, + "currently_due": { + "type": ["null", "array"], + "items": { + "type": ["null", "string"] + } + }, + "disabled_reason": { + "type": ["null", "string"] + }, + "errors": { + "type": ["null", "array"], + "items": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "code": { + "type": ["null", "string"] + }, + "reason": { + "type": ["null", "string"] + }, + "requirement": { + "type": ["null", "string"] + } + } + } + }, + "eventually_due": { + "type": ["null", "array"], + "items": { + "type": ["null", "string"] + } + }, + "past_due": { + "type": ["null", "array"], + "items": { + "type": ["null", "string"] + } + }, + "pending_verification": { + "type": ["null", "array"], + "items": { + "type": ["null", "string"] + } + } + } + }, + "settings": { + "type": ["null", "object"], + "additionalProperties": true + }, + "tos_acceptance": { + "type": ["null", "object"], + "additionalProperties": true, + "properties": { + "date": { + "type": ["null", "string"] + }, + "ip": { + "type": ["null", "string"] + }, + "service_agreement": { + "type": ["null", "string"] + }, + "user_agent": { + "type": ["null", "string"] + } + } + }, + "type": { + "enum": ["custom", "express", "standard"], + "type": ["null", "string"] + } + } +} diff --git a/airbyte-integrations/connectors/source-stripe/source_stripe/source.py b/airbyte-integrations/connectors/source-stripe/source_stripe/source.py index 34480243f051..60df44efcd2a 100644 --- a/airbyte-integrations/connectors/source-stripe/source_stripe/source.py +++ b/airbyte-integrations/connectors/source-stripe/source_stripe/source.py @@ -12,6 +12,7 @@ from airbyte_cdk.sources.streams import Stream from airbyte_cdk.sources.streams.http.auth import TokenAuthenticator from source_stripe.streams import ( + Accounts, BalanceTransactions, BankAccounts, Charges, @@ -60,6 +61,7 @@ def streams(self, config: Mapping[str, Any]) -> List[Stream]: } incremental_args = {**args, "lookback_window_days": config.get("lookback_window_days")} return [ + Accounts(**args), BalanceTransactions(**incremental_args), BankAccounts(**args), Charges(**incremental_args), diff --git a/airbyte-integrations/connectors/source-stripe/source_stripe/streams.py b/airbyte-integrations/connectors/source-stripe/source_stripe/streams.py index f724a534dc47..c5649b213537 100644 --- a/airbyte-integrations/connectors/source-stripe/source_stripe/streams.py +++ b/airbyte-integrations/connectors/source-stripe/source_stripe/streams.py @@ -45,7 +45,6 @@ def request_params( stream_slice: Mapping[str, Any] = None, next_page_token: Mapping[str, Any] = None, ) -> MutableMapping[str, Any]: - # Stripe default pagination is 10, max is 100 params = {"limit": 100} for key in ("created[gte]", "created[lte]"): @@ -683,3 +682,13 @@ class ExternalAccountCards(ExternalAccount): """ object = "card" + + +class Accounts(StripeStream): + """ + Docs: https://stripe.com/docs/api/accounts/list + Even the endpoint allow to filter based on created the data usually don't have this field. + """ + + def path(self, **kwargs): + return "accounts" diff --git a/airbyte-integrations/connectors/source-stripe/unit_tests/test_source.py b/airbyte-integrations/connectors/source-stripe/unit_tests/test_source.py index 86d7b2891bfc..3c73ff21f1e4 100644 --- a/airbyte-integrations/connectors/source-stripe/unit_tests/test_source.py +++ b/airbyte-integrations/connectors/source-stripe/unit_tests/test_source.py @@ -36,7 +36,7 @@ def test_source_streams(): with open("sample_files/config.json") as f: config = json.load(f) streams = SourceStripe().streams(config=config) - assert len(streams) == 25 + assert len(streams) == 26 @pytest.fixture(name="config") diff --git a/connectors.md b/connectors.md index cf08ce529f57..3c74072c175d 100644 --- a/connectors.md +++ b/connectors.md @@ -231,7 +231,7 @@ | **Square** | Square icon | Source | airbyte/source-square:0.2.2 | beta | [docs](https://docs.airbyte.com/integrations/sources/square) | [connectors/source/square](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/square) | [source-square](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-square) | `77225a51-cd15-4a13-af02-65816bd0ecf4` | | **Statuspage** | Statuspage icon | Source | airbyte/source-statuspage:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/statuspage) | [connectors/source/statuspage](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/statuspage) | [source-statuspage](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-statuspage) | `74cbd708-46c3-4512-9c93-abd5c3e9a94d` | | **Strava** | Strava icon | Source | airbyte/source-strava:0.1.4 | beta | [docs](https://docs.airbyte.com/integrations/sources/strava) | [connectors/source/strava](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/strava) | [source-strava](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-strava) | `7a4327c4-315a-11ec-8d3d-0242ac130003` | -| **Stripe** | Stripe icon | Source | airbyte/source-stripe:3.2.0 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/stripe) | [connectors/source/stripe](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/stripe) | [source-stripe](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-stripe) | `e094cb9a-26de-4645-8761-65c0c425d1de` | +| **Stripe** | Stripe icon | Source | airbyte/source-stripe:3.3.0 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/stripe) | [connectors/source/stripe](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/stripe) | [source-stripe](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-stripe) | `e094cb9a-26de-4645-8761-65c0c425d1de` | | **SurveyCTO** | SurveyCTO icon | Source | airbyte/source-surveycto:0.1.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/surveycto) | [connectors/source/surveycto](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/surveycto) | [source-surveycto](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-surveycto) | `dd4632f4-15e0-4649-9b71-41719fb1fdee` | | **SurveyMonkey** | SurveyMonkey icon | Source | airbyte/source-surveymonkey:0.1.16 | generally_available | [docs](https://docs.airbyte.com/integrations/sources/surveymonkey) | [connectors/source/surveymonkey](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/surveymonkey) | [source-surveymonkey](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-surveymonkey) | `badc5925-0485-42be-8caa-b34096cb71b5` | | **SurveySparrow** | SurveySparrow icon | Source | airbyte/source-survey-sparrow:0.2.0 | alpha | [docs](https://docs.airbyte.com/integrations/sources/survey-sparrow) | [connectors/source/survey-sparrow](https://github.com/airbytehq/airbyte/issues?q=is:open+is:issue+label:connectors/source/survey-sparrow) | [source-survey-sparrow](https://github.com/airbytehq/airbyte/tree/master/airbyte-integrations/connectors/source-survey-sparrow) | `4a4d887b-0f2d-4b33-ab7f-9b01b9072804` | diff --git a/docs/integrations/sources/stripe.md b/docs/integrations/sources/stripe.md index dbaf05602b75..514b371fbbd9 100644 --- a/docs/integrations/sources/stripe.md +++ b/docs/integrations/sources/stripe.md @@ -70,6 +70,7 @@ The Stripe source connector supports the following streams: - [Subscription Schedule](https://stripe.com/docs/api/subscription_schedules) \(Incremental\) - [Subscriptions](https://stripe.com/docs/api/subscriptions/list) \(Incremental\) - [Transfers](https://stripe.com/docs/api/transfers/list) \(Incremental\) +- [Accounts](https://stripe.com/docs/api/accounts/list) \(Incremental\) ### Data type mapping @@ -83,6 +84,7 @@ The Stripe connector should not run into Stripe API limitations under normal usa | Version | Date | Pull Request | Subject | |:--------|:-----------|:---------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------| +| 3.3.0 | 2023-04-12 | [25136](https://github.com/airbytehq/airbyte/pull/25136) | Add stream `Accounts` | | 3.2.0 | 2023-04-10 | [23624](https://github.com/airbytehq/airbyte/pull/23624) | Add new stream `Subscription Schedule` | | 3.1.0 | 2023-03-10 | [19906](https://github.com/airbytehq/airbyte/pull/19906) | Expand `tiers` when syncing `Plans` streams | | 3.0.5 | 2023-03-25 | [22866](https://github.com/airbytehq/airbyte/pull/22866) | Specified date formatting in specification | From b7b2bf58a9d01bafb8bd4eb9aeadcb8398ef355d Mon Sep 17 00:00:00 2001 From: Joe Reuter Date: Wed, 19 Apr 2023 12:27:23 +0200 Subject: [PATCH 126/187] remove session token auth (#25142) --- .../connector-builder-compatibility.md | 25 ------------------- 1 file changed, 25 deletions(-) diff --git a/docs/connector-development/config-based/connector-builder-compatibility.md b/docs/connector-development/config-based/connector-builder-compatibility.md index fc83b8c483ee..16f903a52e03 100644 --- a/docs/connector-development/config-based/connector-builder-compatibility.md +++ b/docs/connector-development/config-based/connector-builder-compatibility.md @@ -5,7 +5,6 @@ Answer the following questions to determine whether the Connector Builder is the - [Basic HTTP](#basic-http) - [API key injected in request header or query parameter](#api-key) - [OAuth2.0 with long-lived refresh token](#is-the-oauth-refresh-token-long-lived) - - [Session authentication](#session) - [ ] [Is the data returned as JSON?](#is-the-data-returned-as-json) - [ ] [If records are paginated, are they using one of the following mechanism?](#how-are-records-paginated) - [Limit-offset](#limit-offset--offsetincrement-) @@ -129,30 +128,6 @@ If the refresh request requires custom query parameters or request headers, use If the refresh request requires a [grant type](https://oauth.net/2/grant-types/) that is not "Refresh Token", such as an Authorization Code, or a PKCE, use the Python CDK. If the authentication mechanism is OAuth flow 2.0 with refresh token and does not require refreshing the refresh token or custom query params, it is compatible with the Connector Builder. -### Session -Requests are authenticated using a session token. -To get a session token, a request must first be submitted to the endpoint, generally with a username+password pair. - -Using [Metabase](https://www.metabase.com/learn/administration/metabase-api#authenticate-your-requests-with-a-session-token) as an example, -Get a session token: - -``` -curl -X POST -H "Content-Type: application/json" -d '{"username": "person@metabase.com", "password": "fakepassword"}' http://localhost:3000/api/session -``` - -Use the session token to fetch the data - -``` -curl -X GET \ --H "Content-Type: application/json" \ --H "X-Metabase-Session: 38f4939c-ad7f-4cbe-ae54-30946daf8593" \ -http://localhost:3000/api/user/current -``` - -Example: [Metabase](https://www.metabase.com/learn/administration/metabase-api#authenticate-your-requests-with-a-session-token) - -If the authentication mechanism uses a session token obtained using a username+password pair, it is compatible with the Connector Builder. - ### Other AWS endpoints are examples of APIs requiring a non-standard authentication mechanism. You can tell from [the documentation](https://docs.aws.amazon.com/pdfs/awscloudtrail/latest/APIReference/awscloudtrail-api.pdf#Welcome) that requests need to be signed with a hash. From 8d1acad542775e095d823725b093f2df3798cd06 Mon Sep 17 00:00:00 2001 From: Joe Reuter Date: Wed, 19 Apr 2023 12:55:02 +0200 Subject: [PATCH 127/187] Connector builder: Tutorial (#25153) * authentication documentation * some fixes * fix broken link * remove session token auth * review comments * first version of tutorial * Revert "first version of tutorial" This reverts commit bbdeb997f2a75240ee3d6f4fd62189e2b5269e3c. * first version of tutorial * review comments * improvements * improvements * review comments --- .../assets/tutorial-global-config.png | Bin 0 -> 110559 bytes .../assets/tutorial-new-stream.png | Bin 0 -> 54203 bytes .../assets/tutorial-schema.png | Bin 0 -> 211588 bytes .../assets/tutorial-sync.png | Bin 0 -> 159418 bytes .../assets/tutorial-testing-panel.png | Bin 0 -> 118393 bytes .../assets/tutorial-testing-values.png | Bin 0 -> 95707 bytes .../assets/tutorial-transformation.png | Bin 0 -> 57786 bytes .../assets/tutorial-user-input.png | Bin 0 -> 87641 bytes .../connector-builder-ui/tutorial.mdx | 226 ++++++++++++++++++ 9 files changed, 226 insertions(+) create mode 100644 docs/connector-development/connector-builder-ui/assets/tutorial-global-config.png create mode 100644 docs/connector-development/connector-builder-ui/assets/tutorial-new-stream.png create mode 100644 docs/connector-development/connector-builder-ui/assets/tutorial-schema.png create mode 100644 docs/connector-development/connector-builder-ui/assets/tutorial-sync.png create mode 100644 docs/connector-development/connector-builder-ui/assets/tutorial-testing-panel.png create mode 100644 docs/connector-development/connector-builder-ui/assets/tutorial-testing-values.png create mode 100644 docs/connector-development/connector-builder-ui/assets/tutorial-transformation.png create mode 100644 docs/connector-development/connector-builder-ui/assets/tutorial-user-input.png create mode 100644 docs/connector-development/connector-builder-ui/tutorial.mdx diff --git a/docs/connector-development/connector-builder-ui/assets/tutorial-global-config.png b/docs/connector-development/connector-builder-ui/assets/tutorial-global-config.png new file mode 100644 index 0000000000000000000000000000000000000000..f16a8e3c065ef7502d9251e7ecfb14634ed9f69a GIT binary patch literal 110559 zcmeFZby!s2_CHP-2oeT}G$NwXokK`Tqez!@hct|UNJ~mL(jY0_DBTT1BM1zQ)X?zV z#r16Zoh-i?1@SFy^H9N zrx2xh7lEgSa&_f3)kD;0{>*r<=u}iRzLkA?@ZLaFS@f>?-7k9I${!=@DFXbe83@d? zYq3ZgH|uw2c&&P4S!WY@FS<_;PA|A^Q3>f%G?M&HQS>`(?tT<k2l3!>Ji@Cx1^z>HljEv zmNZM8iQ!b_3ju^BcU3$I1&9`gbv8*C7ARYP`0A!o9TBdfgswbGd4T^ec;gCJRq87` z+-Y*X>#-_Nn+T!Tw({~+bpyXtzxHlvXC~|JlR1}48g5vWR$9D^si4SL8%;@hB2}^& z+vt1&hab*{Mdpy?=y*JV$lN0FSIuKw&}z+-$L|WG@eL_@#dlYr*`)J(%q;?g-8yioP(1;NAa;f!)NTc`SPg5Htm&}Z4o+mHOI4k>>+Q;TU0l7 z@UD>fc}TaTUd5oqOQ%4W2-e^He*fw@-4UNR8#}#kQl7s}*Yg_9- zKRUIMRR>_4>||T1;=h9pczAf|rPYV7pocU$!xo$!Z`x6?_+gI`fz|CrW(f8q9^&y+Y%DA@x2&efI_y9jThPXx z@@zzj!I`Ng1AL_@n%+?s&;^L9DIgbCq2D3?$KhQs16f z2Uv?%zSN*DxCZkw`!?NN_Csrq|A)WRqa@FYCg{B9HnY<$Hx9R3Zq)T84cE0p1biF( zx4s_CH{2n-;`*NcnGAwwv44~Zr!Et-M~rNO zoQA~IvpnjgN9DJ8{aqj4mWbAu+Iip|?v+mRlG5ak3Hi$1m1{Wxd;Zc?#2*veJr+cY z18XBRBxj`fCF+GX9~~&LJzlztE6F7)9V@OXGcIA0s*z^*;y5SnmDJ~Z>~V3jn$PId zM&k3`Y+??Zca>ZLe*Kpd7=(NAh=a7jqS}M{=j-q4}~eIF;c!eV}PZMS(mwnX|}i zqD{{{3n_(zC9NK*xW2OIY6NPiYP$Jo`J`$_WjwK5 znNPy|?lMO+JF@h#)~JX?QA>T5G{P@Il&GoJO{h)WDb*{3n<^V8_gfnM7$Y!8v@(EyuA0GX0YWuOP@`(>1)$%E=~~Q zx+gBSd*!Q%FerNz`>1W6vH8H5upaqx+A+uR$K&07$7Su2EmkHr43J^yB{mVqW)UR0`WCLx0hXxb=G)B_k5sn@IkL`m8fTntrV%0 zhe47-*&-FKPh`l5d9Gxx`lyImfxXW@!P*)}c2Iy!oQ!u5yZZ3xh>~edOSuJ!PQnS- zcxC4s$BktNz8Z}h(;6ITxogbX%ady-upd3GG{M@u^#-So*YEjC`zGSxl9rJOlSK1y zaM#-xzq!q=$Te+a$aS3u&dbTu5c`@}h(%}33(6oJEy2*G8K+raRbBN|!%PD@)jbt9 z#Zfc8SX_B)Dsn1d^NORu!P|o$o5>Ijhz%c(^XZBSJa(=MwtFPfvW^8 z99jmotqrerM_3*(BW@kPI_BGF-^V}M+}T)C-5qp3aVk6`Ilb#Vz1Cc0FaU-+3?W3A;9nPlzG%{;80apL%;^sBOw# ze|G;)f0ho1&WEB*iRJWAiM2~ zdh=MbroXEKdZuN}1bdHx+FU8`5Peo(qMM1&OknqY8pF?hcYFB~M4o?;nuy<1BxK0D zi=f5|V_$ePW$Dbqi z)>}ykI7l=V)tFvc(`ey*mn zm8P%;mAb7_e%}OyI*!_zI&tk$ey(<(s&?u5nNKV+L!|8E>GF@&FRH%O(dFg62_Mg7 zkFSr)ikvO@nVUVG*Wlc;6r$d&ZfU+htya?WT7A2mQ9#PQz5-$lbfWxKUmTC;J`e2_HTS9`G}wCQ>78$f=G3?DM;q;V{AA+cyR z+AvaHQ=Yv1bF1>0ZFQwd_659aw#5BnLh)zdc3$aZcFk(l(C!b22Lz@q?K-gk^1S#$ zagIFB-Q3M$|F}K5-d$@WXluhI&58A=!y@mrW6i9b)9lo}frAC%QQz|r(PTS;jic_f zsU7M~DaVV1!t_Fe*}MjJSKPC6V+ym^f()-Pe8o^nGL0oMzfMl01YSXT#33x7h0`}I z{Ql;}^_#a&X~>dle4Fta%&-dsEVbJDnx>n(UE z$}yjBcpV)bM11=xcR%UJ#o&PeeRlDA&pB4k(TyL2pUcAlg8g8iB4H>agYpy{W1w6? zB|^Chj!?miAC>s8V=>gnDCob=qoJVqnxI_y=QXn66ZsbkUdVg?@rfShgK`~wyA57W zpV0nw^|i)N=>IxK9|gam2q_3lNPtfTJsSf9OIu?rJCa5@8gSx<^>bBQ6chq#;ymd6S5;MWyA z;23$D@d3rJOYF=b4^(92DTJ+T3@A7lm>8HI@MBU?Q1IF48}hsq5&P%u;2Y$Dv7MbY z4+c`^G;lKc{Ul4hbotgxKmGkyMOy1k?8%G3vxPyODbe(-w!A^kZO z#ZwBxcOD*?Zlb87w}e(K@#OKYpswIWY;G>O!C85lHmAnxpwO)unDgn`W_PSxQq|O~ z`|LqN_`=R&uFf+d6x1ttg8%0mMe~&~JTGsRfE_Ljigzez|L0pKiVz_q+W-AKxKZ#q zCTL2(WJmu0Y~|MvS9EI8|N9k`PXzG@!g@M|DgRrSFz~##asF$kF}%`IgjAk$(BgXk zm!V-$2;#N!{?{i_;Dw=G(V-mAct~8_te-(w~2Pi*S*qlTJqDPE|S&@hdKN9*8+< zBYK%D@rL@U$1ws%&#I>F1YD16@8jTetbf3->DdeUrXCWmuyQg~)+MOg;FdL2`KGDf zuxf|epwSD}W_#WsN24k~fya4tYP9kVyR*BXI8=b(0f9=5Lk*jGzm(<7O;$%Tw(OeW zf?ez8>&4eEo1NxdFtFMk+c$rW)}#6HC++l*Q%j#fB6canCS+bRl*ItkWMWTZWjMz} zzawtIK3R>uCg2*6l5>p}vB|)^i5a^Xztr7AMp%JnMIZZ8o8y8|8s`g*=opt#ZriA? zq7()FCLdCM@)XGto53`3)~X-D&-f2+WMcC=Zblo*%!W~k%lg#h-&2D{an3jivGuQy zZYV&ZpI<%EZ)#0`DEeW+ffVcfs!PLpMj$Eg?97T#n(|l-^VxNT5=Hx5yKwo)D;$`a0@NNZ$ z4hVE_JMqj0NQ6K77_DXcP_u>|QKt}UzB0ax70cw7vNrwJpq6(e`K^2~8H5^F(d9*f z_C-a-7*$9_beD5k-<>zfU)>p(HK{%J1ULUVJ33WYFD|<>zsU<9t^dNSj zJ63TpQ^vwly~Hp+khtP2;Wd_MHp^45h4zmv{EwI!>9lIq)Ea&k$b>TM@u*g~1=d;8 z8_UUVyx?-5*?Re95VF(Fswe^-ees9PE0HpkkjBF4Nz7NSHI6w83j;$Sw(OVl$FkXe&PqYc~N~iW(DV0kr6dJ{Iud!C` z_BLwS=N%GYuwm@FUMs)s&jp#V@Vu_tu320Ch6|KbMFw3AIY)b4T7BW%wl1+e_MfJd zm@1U(3f^+-r`{ytn#grqE`nvKm7Q!-SSG&|rnrOja+FOX%%!Rl_$^4MX8;d`bHgC5E&0O~tM!THMy(v&YSzxSuE3 zz%(nQiuENRj%CqQCwZeD%7t3tC$yzutVX@+ieV2WZr|rPwRb+<#&k$5`#EW~mSGTZ zE=Gvh!h5ead)&e^m?cMR7HyrJC7TqvzvdWI04vny)Ub^adR70HyK%!zaeczR|E+^r z-Rp0BhH~_p%9A6x747F|;u&v`coz|qyQ($g$vn+VOFiyg-_YAKlnWWxT{I8Bd-jHL zYCDt^XjFxTJ(79K?YtAX%xfIE&=KB+jyq+L@8Y_;uS_>f0S)5lOoEh5S(N4@9t@>! z^=<#i+Bhql#>DS5D=>RksoQc58qW|x5A~g<>Y4a7H=QZNo3AJl_b_L?sq?e-#6nlJ z0_MH*10rJ1^@v$z%dq(tD^_9YHNv&ssj7gT=z$+EFNRVNvQCydBS$7$&iURRdaX}Y z$q}5@s)+?Bn84N=v&oO+)+UG*+{H?{wrJJMyXRa?;&{&w1h%)eoV1b+{!&P=pbnMa zQ3P_L{{emi=WPHPKv3OV$4dJ?k>5D6gJo_8k#AeD4>5)DA=)hH9DOck+;nu^H%a*KbBQr%)tW0#CKIWZnk#m_y=Fu~FhU{i zTf8>BO?5(4-M_I2PnU`o)3Q&ZMZXppQRpjImJ8%c6+qx_P^gYYw7j>$tFhFpN=a1d zOn^N}=8|1nyYD~@qgb1EY>2cHm#)Bd-XF;v%-mod%wNkYHXa~1Bs8=bro4ImZNCJW zYiX^bK`%3`R#h814Qp&n_I>{G!IA!4qvBwB&k4eksIlN|h}U=|NUyCo+JiiV*^?D& zq?h96*_Q5p;ULym{f)(J)C!U5u#ps*R2LV&2HYwe+Q1_Ohh_|`V^PH87yY@GM^?n? zCPV7G;VVDit5?Vr9lV*S9m@R@nDaH@9v!&XD)NI6gQLv#V#V085h~mT4Qk=K9C7K5wk(bj=#n zRLbWfi&gN?9ndYuy$SkIqkW$54Usq-0-?^W39?EZ@tnSNnjBN>_=Y3g0u`3i7FRr* zYCkue7H5s~c77hF*gAS-6$km2$5SCkI`|UqI277f!X=E4-B@}(=GqHO(WcZb@qKn* z+u@C_sQmC4oW^UoWVD{wgY0W+RkMWFd*V5NP-9G1**4Ir*0$Dj_EAWCRwY5s;Y0-! z*9oy=Su&!xf6PYfis3TTf4Sw=asbugC%o{y99L+8Xhe%7@3Po-(Zqv}vVak#v#Q;G zU)x_@ZlstVO@--eSO3KaTPvDM+|t{`~>QjxF5JE zLB-pijXWjQ?@JPP*tjG2ipfWG-J($3K*$&8ZHl719^uy@E#I}bRy+|&C0PkLuH0^? zD0&#}bcpj_3TbHK#*FJ4{{|_9z%Hgy(LIpOtkiKd5R>p8r^b7gU!`U0^T&%dEO;P8`Vb%4iL&1|6GygTN6sko#k0n+$>u8zqn z;^L2RnGy9p6C;k&CC};SjG73`mQ7Tylg-mEFk{SHj__+tA(FFah1(Suq-bxh@#z_K z-sMEgTVr`M-?y_wES%r7WCXJe$}oeqIwS%)W6MDlUsT&!JQNLBidGb(7;3n{(5o+m zAegI}-VFM-p2}bJ=BMk3E_Pao!ljElLm8nl@PYj`m=z(VG~;-Yj&GUjD$ISD(C|w@ z9oaz11TPPPZICkYf2wPpdAlb1MDcSGomS}tA&+eov+s!838AJ+ zv3@oz!Nxc6Xy&Qn+X1uW*(mormQJ01?~6DX>uCfoPJLm{Joc6pGI6h>yJK0~85{E0 zp_(S|R#oR8U<|FT{Pf{5UlJB;kDI|DvB#;v#Fy;oPYGX4!xbN|cvWr3JfsR29b$1m zmo%~36WODaigu+>+O44f1#PTzE!fsI0kDBnF4>3(sW8>uo3l*9yyPcte*tj#f#q8= z(!V?fh2<5t*ZrTqm7IP#hIT~JhZ{vo6E?{6pY4ek^1wUI_3BgUR9WLj&KoHc)urKt zyL8$_yZ2W#B$5^vqXoiE6x_e$vIQP3!gLV*9=#NK)^oKiwxdS6SFv5bYfm0XZcG$9 z?c)qNC%PP*SKLeRA@IdbjtHmeZSPPpqV8U{f0bd%eG*swX*X+y&roR~)Z+X-W1iyn zK^{Uj_-X}r?)gEB+0NcjBnk9d{pXbFGki6d{ST%yrzR_tg+VZh)*y9?!ULjt#jJt} zEZG3oR}yh-{>+?X%374sh(VWfOWZ=+n?%E!rZDHRf&hQuhVto@%d3=6xS_l&SF_}_ zO}ljv{;n39ez_FV@YbP}`-zL)vAZ_wVEfA z=*+jgu1-RAAhgN9;T8tPSCT*Jn&#@SgBfe-qPz84up{Sz=+u-jqX8|kiQH!G?VJ6l z-oo0h+%Ndgol0Fl=c%%Gtg_Eeu8lUvji_gMFuzSTQa#+od-C#Ovg+c^Mi+#sju*K- z#E~;vy}}K)-lA_|jd)kQ3K6hR`r>&#q$4xPy$kP$o8xI2Y$mU1j$Zo>E#WQ@qEPTv z(q6f(*^*@vqab4C-MkOOI}>G-J(O1t1s_V4ZP@9W&zU2?@!o&y`C88yqi?CruzT`tNftRjq8v2 zMsWF7tJI}vSC9_NI3$NAxt6^`wIL(dqfehkO z)`Ncrk0`o3*+{zSh~}1n#a3g|?7&O}qAb zdiAz|-n2!!kzB`Z%mW@r%g58&M~*6DMtDo3=u&;K&j#+cD$mxYcr@l{3;C?_Tc6`C zk#M|_t2gX5ZRVlX|r{;B7$4@Nm zQuYs`pc|XP((aRmT!H}pFWynmF_-i71^(sY@Uqad1NOGqo6qcuWq5$o?%cwM) zVB7I|@8(K^(AcmEIdM}Teu+bwK*PDq=bKLM>2;eoiAqb;#+}`R3U1_9{=y3G_ts*EN)Ko~)W=@v>PQN6}qa zc-C2!EU~9+HGUF~W*o3#rm;UvULqJ20V->>D( zSbta$UE*qcLC-atKL#SQjXG*dfC59RJHM}l>Mspyj(x}4j*MUelbHld z#XlATNAqB1djgIyOgu3jx6+$R<)t_UhM-Y%^=OFXAqsM#_cJDIWQPGqx~5QI*v zS;y;{u2&wUgJ5lm0jN^{cjdsNuZ?{pd%#~AbjMVUnk)wMVs@-^dv@>l#9w@L=|k)h zJz`SG+}nBGQj?+I(b($ly?})Lk_YYwFi+j57`8m=a>=6!==8uTBkFkWxt;CHt&GhH zm#7KfwV)#HdQ@3iD(Mh$TzcoYUP={lZjhY?x8nbcA zXH%ngf%b_CQ;6%<=rhmby1*IT$-EH^IL6S?!e(trQC$NAm+u4V$fw@s(;VMsXyl0@ z-!pp2yYf^k-g8?NzRdVQSVyuIstbY>ff{1e_0jyAjomgeJOcAA@3SJhOQ`7`iZIpA zWeyqd9vYANCmix+)rnG9F)jDH45P@pw?A63ol{15Qz^X_6Y8o@uj5Pq;<}Cnc-H5ObP5Az!W9jBH6CedRpSr0yuvGg(Jruh|}ZwRe1 z+^#G_(Ffg)mgTw|ibeN@9@`dCx7*0`)pg8yvYz|LbMmD@%I^aISm9?QWNmeoynw8caBs1G>y*CTVCCses$WGCsTdBiX}op2VZ0nG;fExHN7LKs)DMS|!0aVqvBkd)P)Q zq_h6Sp?aCmSZRQ}o8X*J1j!^Q?XR7by}dZ2Gb?$Oqb4gB=+xv!fIV34a5ikV+#GYW z(P49nvCPb#6CPe{)u_VcJ5ZDBHwCqN!|kwMnx|GJA)CkpuL|HMpE$g+6)>SHiq3#t z%_lWvDCh5E7R#E&2{$~^|8A@|Qx=b4;7LeF6c>MJkZ+j~7f7@i%dtgwUW|lqXioW* zpIRJoBKaODxn{q7nMM4;22WjInR{?KOyEdA@aEC{=ufX|O67vQoiV)wiTby#p$T21 zT_5m?H_q~}8sUwmwOusUDG+@g;cV1$%`)m$c?4iy5e}z78j)8bkF!!|wACEGjZD(c z$MGZ=U2KlYa#9M~sM)wInYBcr7#!`KCKVR~(#B$&MJP2ixEq1@@m85Cz^_StjVzb_ zpC<5sUm8&P1pYcHn1IOzAH-akC&H9T-u4Ia)wtP#-+QJ+$2Aapc4o@BLrLLgEf(3p zM=NE^lOcJ-LWP)pBFz0QcUl#dqSuk7W>8wMfkeA{dhAbZ=@TXJ&~ZIUU(ZrW>1#SJ zy%OOB5`{_HPTmTmWp7I|*T6Q$v{Lpo0tG9;g@!M2!u-wabSL1yWV@G{$0Lqmw3@&x$AZ{aQ*D_tKn z{I;XTmF#K%mnNfLxm^MvzOJQf(j|zmb;XU4U46#c$V;QajrMTco{A{-?XfB+jOkG- zg>;|u&cc0@;i3>2iG(F=Q0w&saknY}0S9Tvk|8jD5Dv@oII_d`-RzSd^&K_X)zbml z9?Wu9k)=V}kMDnr_3={jUjgmp!rXIq+fthrMPJ!rbh@2Q#(fK!tmnzohcTcVjONWw zaZK9tuze2^sHa*P$|_s4qYRZ7JqQ56yD+1PpxjJ=Vu~rOnqJtaw3W}QuzlF1p?%M! z!88(dCPoS8c%A0xbob50=J!KwQn4LRTwbY`>*|y0sdv1p_8*nXnbR$wWD8{){ahmO z3L@cFm{}2M%yo=S%F^$6#$tw`*p2WgRV}K$w}ibba2d6~2C3NX2bVk@9xmE-9Fp*4 zw>TplD#yL$CxyKIud{Vq245CxDds4i=nU9b+nBen;-_={ zO88)^s0?h4%d==@NZ?~aYpCE+r}N$N`a9e|3zH+u4ab6>BDA zB&(4nc3L*feYa;6z;VkjJHi%u)6^XAnIKhK(82T;meC^EjB%1^a*E2A$v_=)vzR7v z7fW09QKRFfwHz_t-e}j8V5f~RYBRAM?TZ(BNu@5SaQi61XZVmu44zDNNjUJz_Lx44 zZ|@^hw~UvhS2CJOuV%bRqv=k$U1NX3)(GZqw``8Z2w^i``6kO*mh`+tHc>pikC?H& z%nY`0j+t-ASt3G%F?45{#Ia7BT(=a?KR_WFfIu_bd27EiQ|DiMuvvjbS0!2(ZS)vJ zE*n*c=g`>>z{jp9dERHu3?DHQi?vO-I$`+jr`GbW{3W75@Vho34`!}h(&2ek!KPRc z)pS+a-V=cWxZ2_5c#4hLE_Gjh@`_8YGKJ=hbghb>j!rt5g#XF) zpp^Xr%^J(zzDP!G#5)LIAO3n*@9TmSTA6fPxDUV8$>~wR(p$R;+AiB9_T=j#dQB|> z(FP|7NEnBOsjU`cU&>=DTQ!R&2o&eyfHjQ1b0a2ZCZPSWnDH+og@X2m9^~m^^BTB+ z1>VR)0}K|A5qI-QQn8TFu29^rnL6=w1^Bh4qIXFZIkvruIfGiViF{_t?uhZOmvE$K z{v%#O@pyfQ0t8Y7b8eUA3AkT^<)ITPTR-u&VjebwE&lw4`jbtz+$cI#svm9i5ds%e zmK(Z=TD9tRGgu1wMxx4}RS)y3z{(~Ozw7!9rIE{Ho4&}Xk22?^+sx*8FaK!rbUM8E z+eo3iy2)UAb;IU&cERJuO-&p@D*UpMQ^3E#rBWkZdPK@0N3-Q z+?VI|VQvR{RF@=%L4kJ@aChJOF{jY~JbeWXnM_z2itdbfBBg&(Pi1rX^M*teUCv#4 zHNg+}8e~31SIQ8vIVH^Dd49^T{4)(D4aUYqgLw8woyYA&K^2u4!V5W&69`*QO1v(1 z>1U6AJRs#DhlMA9NcoS6L<*1u^cDwC>DHgZ{M$Xxgu(OKCO&5U*Q@ZXLB$5Qpo-|F zZv5Nx@G!7JO0C~mJPGaJf4kKDS4u&=B@`X}|9TMx+ZBw)XKAF)m+7Lv^&R=u7ey!r z-AnP(V*U4v{wJ_YqW+)2{;44UAJH%h7qoi}8ev`0h0j|9SExbmeSr7A_@9;zm>%TP zGXDPN@ny?%O8aRJHc_Uo-xZZ;v%kt7FWOX8Y_JspqG-v%bcqcYg73(naj7+?)tLQ z`aFjB&D~yo5V;xeui{E<&wIa3@}}sf!6v@ERw>%SihrLcR7rYiG2ae*=cAn_-WN)% zTp-yICb|IV9OypYAd~s_d}OgvpU@L|ijd))-E2@=@{kgun>VxeS&>+Ou@l=6mu|x! zKe>e!Ln`uV2Aj!C1(3pBbCJ5DQ$Y9X@_+^L0N}c+lV&Y-357kp>j5e$I(rkL3+0nL zlKEO-L#7vE zEJ&8m3usbq|DG`byla8OdvEoO?2^s)IK0&_Z`kZ7VaPRH>ue$MvGJhD7Zim=a@)E^ z@@_tUAjkJ&V9h6lT!5OG^PC!bKo(YF)F)MKXVP6H4ae__=gflD^IVJ->HJ84{jK(8 zz8ZB&#rXM|Z_igzC?h_-OFZA6Ja?g%(Zy+rwqcLj1AN-3kEchr9aarzCOG5SDIait zsAP60+Q1Vlpqg!J1JKD*6W{SPnJs$N;&c%3$%5LN1Q0W|O!TbT!V1nn5}#qbVyoX> zD3o8$()n<1$H7l;IvnQF3RozUbo(_It&xx0UwU)<;sB?p`ej}YnL)q%L^PaFSd@z|b}lZ?K)0+nS6ML>hJuJ4W11kQR)X|AoEmeDM}Wq#345a8 za-xxBakQL<+urC+yYT&6TB@)K$cj%BG8ET>qK=+Y?K0Ce5{OIV6xiG%mZP@s))CDZ z?aE*#gx-KnT;5fndA-|q7xJ(+B&hoOkqJR&3r0<8^d6v8Lr4 zcqc6!0&GW&ho29GDAl-Xtw7gMUYAtgTbRfJ()K$jLoczaeOM0=K8L%tmA+vz|+d zZ={b9jch^`y}ARD#{kDJ7q;1ldyK|D{-~TOl)GN=V0Msd+2+z9AzVu#kJF&>m)2tCC zbNa4TwN+p9z*RF**?g*!+wl3z5<~nnn7rEw36Ymf0#_f&gF>CAtZqCBPPI9IhI@=! z?I6+I!<{)d2zX@{^x|?0;)y0QwYgBT-FB*j4#+`7zi5fETq(7bQmoK`Z6Cx!F&=hb zz%6)OSO%RDTPH8|TW8??fS#igJF%2m8TcQc%d+wH%{j` ztEut%RnBY0fQFP?Y4bm}R5t>SRes)Vw5#Xbzz3?s!pdeo_EVy8=9Q&T%(agSS?A{0 zwUU~M8B~fi$}LXBOX1Ooy`lN>sEJ1t97+RgtNUffa@B(wR{N6i92-U@6%&A~q+RTq zb=fL~C-sVF)m=3kt!0-oRw78=r;eE0q`qV^XD;@mD}m;3PhtY9E!ck)F% z_m$Th6CrVP!uoQ+u93y^I+|2kxATPfm=l$+Fu5;wMzZ8Wn!-6Oh{lAm)!L+Ei{{BkTCFmH*rT6+H5i) zDC5aa`d;4m!5$sYRwP+k-PE3Q-aI2l$>z8FNvdttM=E`v>y}Fo6!kxV^sQdLpd>mC zc2eFvf!7L$1^LGGVgg*INf^6>54xsmkt0lFYMoP8n`iU=>#bNmXAf0awY_Vh1rJSP zuZ(i>!bWNnml~kh?=Q(m^u)uqC$uZp%6xFi8OMtaa1L-(+IIba3jzf#1?ffOHaZn9 z6++{!p$%X+=IN}jj^q+pGBDLSllE@bY(0wKb%X2=H!ba|%=zO~!SYl$toyQ?=2x5{ zP&d`NP$P^V&fmLZrMl-%N*$xGQLE*B$~769Xw^`^k4(VXR|-ISOOyvI-;^vKZVwHn z2^2HC7euLFmsvL*&(P^%cdca|DjO+|-*eIIvsoQhy$^AzhSeIu3Rb4x{OEC9?4Y5A zZdx*ikn&C@Fv?7}t%@33>0he%0n1GZ=!brM)OF$C4v50xYF^Rf&%#u)acr{*ur6Cd zVK^x+F-I@SJg5z;UV22!w>|QsgNUrqW^u=6tL_3P%Lph$Zg&Z1ls$beEF3{FBrg_# z5F6Bz=m?`ObHF;tq3k1dy!(+RDcczFn3%^dk2^Z51g2Vv4tWaL{ukT+%c>9tQp*9r z0wm_mXz*0T@y8>kc7V^d&J-qEJ=JduNoHx1?!%gPP}j;)Xye7OHIt&n=mI94?_~W> zQWjnXMfa*uChxInNjzs$w+^d%sZ%SN>Cjs9aRl5N+f?S9sTpYO|t0|Vk3E%ILVo8 zoe?A8gPi$Q9iHeooHHlD0G7}z70x{L#U;PDkz?d72}%`exUZxlnun@J>^2#5v%9ii z3~Bg^1%e#QQW>|<}t#c;K<&uY<&m)tFI0C?}2K+(-5sOeYyHGx~o0Nx8p6`nCc znHz;l`r-}ioR=QJSo`=MUBz5rF025+W5Br;tWJi3IsC+y)i;Q*=ovw-n;e{Nig@Mr zYXZgAb2dn{!rZJY0nhjMu{+M2*zI_Vb*~^aU;To^=N#Jo^YGw)z6B56>_l07&x{3+ zNSb0EMV?xjWNKX>pVX_jy0jQWCp<2D>En0k6hB88;_@e+bg^QbtYoP!S^HT`u>G_d z(6g@;A$`wM?jtsA2AKI*14+*LY9s7E;?kLlTB5$M?Bch2%xErGx(HG%AYUN3lRnq6*cF|jRkyk% z?=qU0%xya}_2~8^Y+`6*Ip?oz2`PYmw55BHT%2*1Ij z+&qhu1M-h1Lj**W@}?$Jl|G=du9aU5Dxa_NrI*d+bo+xt-8CbkPmv6+zI>NPvL*8NJT>Ju=tQ%%EF8Pps8pcAn5$$F z@jw*wc@Poq>F)2d9xAtxk<5J-WpivdidD>NXtsJQsl;y9EEsR^1&Y0GG;GrIi3p|Pu5TYa@Ajp0}}I~F7kHPgi9IMEBUk`YPqvQR=( zIUajDd5Q}C?wFa{0-TEqF{p%0 zXH*oIjL&pt(gWQ$D9KE@#}s?FGonhNGn#SnSQ=mrCSSDSpHjkKK~xh*IiVKN1I414PP(*fOC|+ z^^PoU?ibF8*QLTx*ovg(jDg^R(8a(jN5`iHG0IkwDkJN-X9AbZ3o8Yv$v9mi%KqgyQ;|?YMi58*UnlzF5EQnLA+M{0uqg-}mN$vVTxZqQqh-P4nbsI>yrE!ptw-ItO`yABsrTzWwoQj)GAT-g@m> z^Rco;M>tJ1umtxns3RXr9OiNm`~Ja>3!-?4FyavqJOaE6+j)&nV7kpTiA>A0ju_@T zaNB^|KU_VEkSc6VXX@WT=)Ji0ZRH$ z3YZ#IHX~~n?uihnp^LA#UGA*Jjry|k7G4b+QpSkbKnU6#qIma00wVtcyS8Z9v_ymTv3y+ zTnwekhr1orz|(KP71tp9Q|C}T`fpV_ZHH;pI85JcvVr%C^%eD-s3lzi*!npzU|vMw z;>b`o0nHbOl-1Xa;)-qOV=#o_|MXotXSV?hH6L7N7p`?Z?Qw8}ETKr$dYO zJ4k(+yJGje8RW@g_d#`yfozfWvsb^8ESKK!Y|(g(#=Noa_1szNiT9+utrr}{iu6AN zpk69~gOUcRB=6fu4IkXJr{WC!Vrn&hFsGBvHmHU)d30H@z*!MjNUq-l*`>C7sP*x=Q->55!py9S0B=BTh;sbsSrxI+;sj86=K=wn$!}SCwAXq91@H=2@-gf&Pb77kwm->O6xErz*ATtT{ z!>Sji`AHD`+mMSXCa{k1K7bLWjD6<216nfm0NKX4zT_tgJ|Y`moBoZyCPy>sO<-kI zFM2(5Sjh(yLH6-dPU&_vn6zhBLYw4&E&&Qk&|B(-(H}Fn1S#%<75VIoqVuCGc+ZEy zv;C`&oSptuR1YVl7QwH5-vNVo2U1(zsEtoSU;kLmzvld(Z#R&sMal}Y15mn`@))?; z5BZ%y9R*X7)qBG|eSaTGGqRe2j}s*t>5G3S*gU)#0IAon9(wXOAN{-?bo55mex)Nw zu8M+HCvUEpbOUH<8E7Zf(v9qIYn~zr4065-wUQ6?`a8(;*}f}6@+%MRz`b5G@27qj zn*17p;4@@L+wKJ2fH$h6?^To6SH zQqX$@3+I1J7v4th#C&E6*#zYq&ydxgchw_}o&mEA^2brx@yWh_8?c`d=%|w=3PT9! z9~X#2NGS401p)5IXnywv!z8hcPMCKna+c@MSLooowdM>WUwnana!`*du z5FJ+NgRoI50W*(OmS~Vjymy@z917L~S+qd!SR=Q(3w8scw&c+m{WD7TXr{6TM7+t) zRD7`>$L4qSfBi3jwt8#aM38{LFQD^op(h?P#qsnXu<9oOdAq~Es7OC|(7{71^i8Dt z`@H~P2p1Rh|1my_P`@i;fiVoi^)cU%n+t1?Yxyot!wV*}r4!I<9Ld8##qvjsNyKxX znRgrw3AK3E)e&s!e7yjWx&` zAgiBLnU+fCTk@YITHk7=7+`^0ve;$ABS&T*p#rK6Q($BW81COzP#*$m;p9 zr}(JiTnQp-U);`cOkfDtAFfrK)bgPI|L8cLKa9`0F;2=7x!2Hg9j(yli_!;tS_=Cl z=jLDj84a1PM)BADWt4z00))*OkielC*;9?jwn6f@xonqePmkA=*Y`YMp{=FJ>GIXxbB~J*Am^9t9MFOaa-- z)XEQ)nzs$-78$xNP~DBwZw~X}G<|X3JSSZt0MRMp^H3z{YbS2n31F$b8!gg+LQVla zpVG`m;{SOh5naDf#Q+o!PYM`_FIT!ugk=Sx?m=V_ab!g}*wIQo*r!~qud}i%MvL5N z`H?>g{S>P^{-mb%{1^|GSgPFm-dnrUG9aK6S>_8i^#+$ox$c;7vYH2#VO<&bmm?9N zlH(f~-!A|W3UvehMXNn=Bt~=TJH)2RNO8lO$q=ZXw}oR9oY_TX_BBwem#^C>wN1Dn zcZnhrguXbq$&$o;9WS|;4(fbeH#PE)(RaRGPkd_`l8bG>h6shU{tU9raNLS|+3-zI zD;|f03y=i0o5$|=rr(GQvEG!5qSM*8+jS9C!t)abn$Fd{^b)zAP{4RmDZXGKmt-ig z54T^My(!$L{-mvja66M4uQ{+TwG@JSL15|Cc3U$dVGsQ)9mhaXyg^&9YXOW7>^}f0 zCKH&2e|{K6o<^#P4KNc!!$KFITwUCs*e>N+*U7o3i0R&JEWI~eY_O)8KbRpyzrQN5 zT1_AE)M~1d5?9d__}0pU2jENG-tsuz3^{i(h%|qOQr>Y+$P?{~1B(wh zDl1S8WQ9A5)ZRm+ciAHNevBN*O{A4zdYpyDjY>LEpgD<}>fS@DK;6$+d%S-lmML@A zvR^DWlKptA4))DnT{rh31{KDTV-lH;{|1e~d6Kg4^4rypf>en2bZ5<0c{Gunvd!c} ze`bt$_BBrD-Jp~LGVY)hVtDV#l)ZYkV!hGLIbM_bRO^roNT!(EMO4I7#fMYnl?8s1 zcn*M{&DkFADxlN`fWn}$85LA9_g1>yE$|h550JN%wM;8E@DF~V$KFopyG}s#he*+D z$L}_KV1ZcvRUGFUEhyW^I{k!lunsDtOU)NA3e#^iqBZ^MHm5fQT~YEq#E1HK2)6+( zCQDK1Im4;5pMGz`Hw#vw7-4E=P+>^CzER=Rb$Uc=;k~yqL?nDtj(7GW>ha(D+#ZE29vmouF1-G*WP?}$F5zO znLTIEL>|u2(R{O$sRBq4qqajbP3P_>h1RWLhmC7aO3w6Vxbe@tcU(rQ^1;7B(7+_< z-Y9?4yGlsJ+?$=|ngRyrGB;7Cb<4G38l-^wp8E#xPjS5PMM1j&5#RPxq|g0E4FsyO z@ogIU64bw7vdK}$b-w94-2 zw|3hGk3(nvIv|LS8U^mM7l7#o3Ha8OcQ_ZBO<#|m>b2F;v;@p9nf*WZ-ZQGnu3H;b zK}C_KQl*NWDn$gO2?zp$BE2KMBLOJ^B3%UpMS2INH|aeJB1rGON(nubkkAs&x_#cg zx6kvQ*YAvR&aX4}zl0I)vgTZK&2r6a!oKW4VDsgH>fP}p0B=@!eg34EJw*l?z+Ck+ z5YSgeq=vtQ$+d+^bi(RhV&jteEsCzFtREbiJBfuWfWQ)*CYP;knE|foyg&HtYkAEc zauG=MfFe0^V3qVvOc)ZB0O)LGzk8n+E5XBXS)@Wv#%!c`r+5C7kGQKYc5LWH7;~Zo zXlrQ1*5miR*@0Co9ulK{L&L?2uA7=HX=OCHDfhO8OzdML+{(yxx8;mUR$&A%Qt}1k zBUfAtY(Y2oTP^xld3gJhVJOR;04=^?0Ep_KvuH=4)ITe!Oc|#ST;Xt}T5JqqpbVtdI_!c7yw& zmxSh$5#(CAGvY8*CpSHx%;EZq&!A}jn&&Xx9W}VTd1rz_@g=)N4owZ{v>wT~FKGem=g_>3mlm)wKt545ob<$c|()e5|qw=6pY@ zU-FtEA)x^E+V)ct&SAE$J9z@Q8;Y+*&&I8xMlKDCpgI!|u5zwslr8VXN+7slbc%(o zBpR5+@fzIJoqpG);myAH;`$80%k#U){a$6Acl|0~J(XT3dSM7o_Rf9V+jT;2YDpM& zy2d`()(n86sqjj)oH23$Xg`Ca;nAx!tu<`c!vRD{_6YwdEFC4vYqQ|MXWehx)nU*! z`yGiYOX4$YmB&2`4xKV1c$0&pkYkj6=+;o-RJeqO-8=mnia5k!+R+1zJm)aY8`W?e z+w4?|%^;fr$cLNnENicq^)v$%=#c5`_e7`u-HM(5Y?#xeB|Ba$=V&432s`)V8fZ($ zJTHa2IQtd>Ql~3SqMnQ1&(g7e6e17HmMM0}J5Ldxhaid15JYa?KuhlcLtSQRtfR+PGVv}n6I6kh0P6!F z#t^oONvAQclB+2@p6@gfmgRfs=BT{(y{e+Uq`rA`||{z2Sx=_@krG#ByRBn+1zC-_ZT0O%%Ky#*Q>0zbi&LR<^{gt ze=Pdk{<>S`bSY51F?9h*N2QVT*m?pDL^l!S=UYTL>o zsMlokpafl3Vlw~2q;lrW1y2f6t2O2^WZNO0QRDWc5YwneoA1fox$Umz*Qb6a%?Hq0 zKSV_{jH>sXiCvALBMtU8;EK4$^S;ccJRV^?UDW~8h8r%S*E2ejijUCey4LL5daC5` z_@`wGr<2zVKK~Shn(D^66`4+u&;jFHdkQ+L9D$KPsR?%!g1(f3^DOOA%bELXDN(nF z0=5;oR-Tl(HXoimBCWh0?46n|_GDb4+?Iarq39j-oN8^u#S@wQ6@pSHJF zZzqF147Tlg{8289$24qnXye^YkV!nB=#cq**4i7szI#y22SSNrqZ!(Q=mFk>HpS$Y zt@%rO6*gv#fe#!p)ko7UsIT7xE6E!$1~fbd?1j!Oa~`^*@z1wDgoPv-3xi);e%h|B z47lYXNx}Zo%9i+c{TnP6zS3b_+)wi8@>78#_i_XErNR8qi_y#VZ;(8g9j`smL}K2u z-zhrPTAGdA6$#a>!zvuiMHHB;$QP1{YdBASnQ6?RV;km7HVzAumi7DgAT%lb#aeRc zmZ%-@XCg|TW`><0R9TPYWH_&nccWdz(7Muxu2Xo843&d{l2KIgsRa?eJS^uMd&&%n z_+$#^>*=BHH28pp&iEc?ZdB`-aD9hcG7qs9YSuhs_{&Oq;E1GU3Z}GkNEQQ1&>+Vq%q-%90(<#j)flJ zO;OegJ~JU*+O{2V_WI0a>5AuNW4 z@y=E2;|OW?TkR=Q6Z122t>3bq*q$=pH`|()nr&z1ds1gb#-W4M(jBcRq}`y^CS54} zQ169|0+=3$?e|mX4G~D<1K+leh(vC9YOKLh<$Og?V-aR{$mm_mSQ6{hBXV zJyhjBk)w9jTpi*XuZi4=%>}Ks_)wltnWyM{wTD{l&avP1ZaAPKcg>N0x3iA_1U0&g z2q+|L#LTZ4A<(7F2hZX~db5mKkaZu&JM&YE17)bF*KUqXSSqfO(Zs4YE>dIHYu3_1 z;Xfv)kz$$G<_VXG+E0rI4opl7g4cqP22VT^yH3?{hTS{ACqd&_Bj?MD1F}H?*$DTu zDiN)r;%n#m^Fn{H+RnE=de9;;Y~jFB;o72|*_h)kw8e#NRDK{t5)b;eYWooW+r8Lo zazE|7VLPk{DG9412>Di{PC^hvNnU`ZJ}J%NNCAC02l*xPej&c5fnNWYm=4rX>~rb#z7$@C<#fCAK;4Ykn-8R?>!8zQTtqTgv( z?VF~eBkO&OHfL#DPZQOHn* zOJYv@Rpc`kiBm(F)IWDe3wFFhC~Z3vs0lC5xak5v_hZ2A56QZlIAt5k7Xx&@w!PnE z?SuC7`*`6k(PDExr^m;7M0TM_A%tEre?Z=gfDYE22RuZ$5#7$I?pGrH`hBRWEm1lB z6rps9Ms_4ZG$r*0kys{qUsm0mXQX5x9mXZEB#E_Mj3l`2*ZD0-qG*G0jI%p;w4D1* zjWXk?UVLiqQM$#Ri(&NHN&`4i7~@{KFi+-~6oB7c_HZynPpASse*0Q)KU?@B*fi(y z9LJ#CNh~;b!v#qyAjS?EKw-mK?aRoLa{_RI2nBXrqMMo3-qu#n*O`p*OMmQta4^PJ z?pp+KqL&P(5%cKYcas^g^xaF>o}jX<$Fst^9$)RH6(D!p&L2$M4ipYX@^DOmKCs-? zPn|^i(wD_tv8%D6NiZ*yk3tVU!RBWaA^Exc|Mx~ajrSLNg2vYXBQ%uxI|22OLpOzf;Yx@x}=iPh1+_aJ5Yzcipi9V z#@NdKc2D-K9M;2>)|qYqhT^8f(Rz#D7K;W=o?i~wJN7y+S7(s>(aZBZHAFv=LE*~0 z=3MzZs!}}d40oF4lf^W>m}Yau(l&-IXzjP{g<(rOT~bG zqB8C@bfNB#6%56+jtenA-Qlg4?;Qi&f2V_*v6rk_7Z5UTobXx=q;oA zr2Rsurs|FT;{p;Z7(eX*qK^Fs=xR`Md9XCjr6bNo@W@L9^_t~=?+#SSTjoAPXKzj} zk%Uz5Al$@msq^o63bcW!m2f z0#iF49^u&H1nW{4?`A>v{rgkf*Dy>2;Wwiz4-6uXtlzyq~YRi<7o)Vz0b^E81dQ3h?pR&$Nb9&0ICv^gxb`@4)pa*iLSZVa?{@WpxGM5!NyR(#_Rn8 z?`3SyBx*XQEy7 z@fd3VB|R_Dd%s$hJ5)^Q@i{f)u?CS=6~J`>B+?w)(j%d_q5l1FSmL{P625L_kkO@n zoxOPHj2K|V5pp$?mP5wnj%9RM znk;Ed9a|V<&w-bc2(rK1`)!uL5@Er!|H6>_0+rQNLBSAb(tRZ7BX5~hA5_z)setHPO z_-&V>W+CC_x!shA6|ANK{i;xm^;mg9DSE@U(gf6duj|+B64Dfd<}Lvmvu&Q?#M5#D z$d(|Mx+?(E{dI*GVW{D8%6K%XBLta;6AX$xMMosDv`~>5KNLWu_4)=0>GVZ$*I48< z!W=D_EJ}B&bZv*pkwXNqshxC24{ zGm?7^|EWC51bFaU&sJQ$0-plF5OgWk&@GkC&Bd>IeNg0+#I*tb1UE7Gf$;MX7Id z?l)C+Mr6S3_HOOZ*9Llb78^H`gZ_PF$*9f5P`5dvV1nB&l;?}X_{IdOvdSDlSQ+rd z-vQKxTsE?(%%>(5-CB(mLQ{;(utm+p5=GSdo7ZVDmL()0e>$Rk_SKhX{Elokcj{^5 zB#L~t;dqC0J9)*?f-*^>Xc%Dcy6<_&O*)5qjK+;v0bV___C;l^hGU8O40fTzl7J_i<2HCf}Tn2qL>F;-jeaX*fz zd$$v2N6^C8;ZGBFnrO?h-iC@X3xlW;Q1zk%$CK}8^~&qOk7H#3PF>HJ*=`xOBCFY{ z-rOPD@4Obx>7dM=pq)IKKR3zOL?o`_?8l4u-OavUv(K0Y5)q5hgjjwH$GYoe$5zC~ z`sfx`(^g)r<){M;;j41(#Rgz{*dN3PRfq z*}u#?*ybrT5!0-8b-4T}UTj{QdToA}yrDEG+MB-G6>U6Z(c>tE`q{f@Q7RN(0`haR z8FXv&du9bFajK43%sVQ1E4tO(T~hHfizd(;4rgL`LK$^g)@g69&wi_0`cvK85)Ez; zxp(@#SpIO(Z9JN8viF8+a2=aT;I!33J}r$-WX?@y$XhNRNbj8-`Mhy}j{j&9v@sL6 zo?&>lP;V!3C>o`MMkfxgF?f5~VD#F}Fhwwq?NFXhIK5%Y!L6>r+*^QN>waYiRREcK zZWO;)BhxP65p2wC)iivxRW_36O4@+IduDXn6f`fDyyXkLHIQs(C<{+5cfk4Bv}8*G zA}Z;tpc%NHoT8F2pn1A2Em^Z>z3}Tt?6Z*U`;;#f`Rcu+WihZU*ImdJ{cM8Q6l zd5bLq>(Nhngh3pwYaJ2vDjl^a;YhzJi9kz`htCu8XsC`Hu{ zdUD8fa0~}WdtM#oNB~L4Ng(=3<~*o|y9xDfPH}-$D#%IGK{;vT$I7(tPl$XQITB~# znf=b?NJe_X%M#zKi+s60TK0}!T*g@sXa$qEGLjLie(K!f6~L(ZWyrk5JEw>J5j=YL z)>N2>?s|PqR-N|I3BqQxNUXH|nw46@RG!f>Jc%}fOyEPmXg-R>FY z+BPSlKCcuU-e&}WactA>Lp0TsUke$Xn1YGIKVbX^OSY?%YHVM54 z=bsIZ1n$2V-_|bj10)|?r@zkT4LBw%Mw8JdZr{jIkdY=-?W}I&lvliV7JHN!Bs4qF zT-FX6hSKR`wwS0(0+sN}S(|}X?$L;E`HPNu7p{>zu0@)yv9uIr*#pNmHNuOWjlKm* z?}2}ALJKVC+hY5sm8XqQ$Trh-MM{q(H44U8Js6k@o&)|By$ab+?}0T0Wj!%{0|v`NQQCUmz~?zyo6Htv zL)C-qSId2ygg_usP19C<;rr9cpDQ14V%kXt~!*+~hv>zKu zAAARQvcAxwYGr*a6o;}KGOobHyqXM+%C}aC<_`5toGeHd_sV7zS!AxiH-&jv*nKyR z8DJ#q3XsJOBzO^*!xj`b#8a@hHNR0M)=jq0yi#k*;&td}J61i0G6oEf+@sr_B{CRg zn=e^X>Buzcp1ru}he0`q_H()hK{hw`zTjuzueC)73iP%2u{JjO`-hDD-xtaFx?LS0 zg!WX?E9pQCC7wPs3(!_h(X|eWUa5H7gWz{2uUMo(G&a$2#*8hBJq+U&nq4FhrDH+1 zVT3R53m<-=)2NKQUF(=~_1gUm$pV+HIc*c>f=_Ao^>4^gyWity5R)c9nb{ebwc&0M zaYns;s0Z=+d~k}V*?BMnkcqDv5TX2~z_DK zS)U*8}P;!WCi1vV;Q z-aTkp(stf010;Ied0RSzNqJm4`xNv$FR9x?Q$9zaQvm2b*C0Q*i%m}u5C>f=8>*|! z_kS33_}Mym?3z2~^A?|@k>-%yyKD^30l>;)W#PCcwN$xbt{=O*`Wc#Gi>_^eE%O!j z!@1ILGA(oN`Rw1jR>^0lUf_k+hI^hmEp|U2sX@OwEb|K6bnx1hxUzX~aIa=;l;#31 ztIofyqNwn^W#!t6+cFi2I!LcRw$n}`1=WEZAiVo_!s}3j;|A1>OcZEMeBxradn872 z0~Cc@0TTH(l6WwQ&*uX<)AGak@~++SfvM;MpL0Lv9EPhU1H((~m4Y<;Q?tk4bT(o3 zjtt6#_AdQYLdEv-Y?xHbV9Y)tSJZ_Fafp|jn)uJ^m(MnoGVz;*jOyJ?6d4Lrdx`t{ z5|C}~1{@c&&ew_jWQaJbLjbh%1M!O^+kA0GP z?Yq@C?3%AX4=A!sTR&XIR-=5e+`Vk?o>fDc#x$F&kK(@31#Xg6RVZz~dJ)=-ebo?f z=7L1{m_rxsCzu?Tb*)OPW-yn^+dU4D?)C`ll?DYPA-;*FJ`~50eyLn+V3J3{QHkqy z$2*Y-#%9EKtzxt;8`YYX$}5G@r^RxwTXo7Q%~Y`Y_dm&}+FrHVs|Y8_S5vqu+j9Qq zfd~PGYfo626h)0!@#8wj&BReVe7NzFdnjQvs$FRUeXr|6=ha@RVUQ&=?fvFnY&|eq zG@(&SY-~klQ9ix)L^bt(tN>aUu`p1(AT{KE0`FH;dLmhXhwj_)$lL@r7>b^?D+t`gc0u*niGmY`o}V>Nk$XOL-o0D_a@PB=$Rid@ zO+nf!XCS{f9}dfG%NV`myeJSW;qW|Xt(r|tN(+Fq=R!x;8?Oo*u)YfQ5zjmK)0zL= zq;0OjXgd42qQFVxOG5S$8ISf`KbtfYO@gwP@chnDkbGoG+v$7Uj{!jqH-7abAR9CM z!q;2F&&aZvIbiZ5UoHmgClY_=O}O8>AvZeo>LYvvHx<&^nGO?yi8(>IB(!^@CAG(+2vdw&y13&*WxQl$*<16#UY*t&)D!wJT^0gR_Ls)5)N&0vWZiJY9 zS{|XE`?+kJNL$1*Y-7+r*>bV z>WMzira6x#y zp!84dee(_26_1oDE^TW6&`Sr^wb;0A$AnD(Z~Jv|tY&SI;jI>l+^9suhXwWfC$u*P zRke$ZvT?>qJMHHhdYAQc#2Se@B$l$TaFCet11n=YI6V$O( zB+m1;lljE{3<0n#F1VF2iA=HsX2{%G@rqDDv-b3k-ROGd!S_prAE?+9B?QO?Nmj-z z-g_F6^(>YyQd)@gYx4$sXXUfli*gZIGU|j8ukY>jt7S@eln0+Co)a&ozA8}^*U}**wp{naLQDso@_Y7qLnE2? zlMbV$Rnj67z2D#wv-_hgceEtfPm8Sgg%YGYwkdw|n{Bg6ZyXC(e<~IGW{r}AKsP!n zkEEg3W3s>QVV}n}O!e;19MI*#os2yrp!WF)ZGZ4BgnY^}xvYQ{?3_qNb;J#r7= zlLv(%EK~Xg`LNeV=E*pbknt9(LWTE@ht{&eH1CxY8TJ^H2ZQVxY9Aq7UUCxVR$ey7 zEhT6Hs8d8k0O{@rmezPnk_P9=>OfZqBlC3L)O5UC8B?Q*iLBD zGT=oG0d{YkOV9D%-O$jPa}AiVWA>Hx5i8U|qEk%d6Z?CuYuy5KCFn_fiwN4i#?yaHs$Q6KeTmp((r(Lq&o9oJvY=@11>{rBt zJbW@*amk)GdU@xEx1Ef{InvUPJ3fQCg*wuV+S1V@!GY{M_KQ$=AMl)NC;JvX+<(44 z?ODEuJfnurwb8o~acyTy_-c1hq(=(Y6ZBS9JFoKI*T~ng8BDD2FGNJ1W9b>O(hMw@ zm8QJo-s>65XXayq7aVViJ`&j5K;$ywY|zaG6XU4&He=YE+W0k|w+t%C+{8WK%&ulz@p?x_Vwbm?x2xs z39uFO6;q5K3oiDh9-Y{U8%G|c2u^7Zz1+?cK4}cN+uzd{))lJDmsNThB`<&B9Nic; zxuBG_?kr3;Q8r|AH_Gvpu~k5V>!h~sDRQSHzti|xVtiG>6sfYJIS$BFRB9!H9@$np z{+CoQiCG7>$L&buE96{_fsqJ(wbiEW!{%}eGY<~+R9s-TlC1Hd zj%3ysh$;suBWobgv~sH~ItXJ2LH$Fjo@;oLE*jRY7$R%9K!0C(!+T|?^{U8m^4nuO z(g)&R*Qz@UKb_uL9Z&%MooKDjX(^tnPW1B;GgQlm=yB9`&xxJJE?xWe%lke#0GQuY z*!VV*Tfg0^!nVv~Nx*)*S+HOAG}F%(#M1Vz%wDo$5g>0@juo@8{F2&P?Rx1t$YSOr zJ}-FXYE&pxtk-{40*BbnM+Z&h!cCiI?8Knh4mJMEq}@XsdC7|HgmO7h0lia;N@~te zS<=c`9{n--WUAXkW{DcOqtwFoM{jn+l`)kCzy+HF@0#$ z(p?&;-rmj%+VYII2BIZ|2M;iPimjr-<3|Urn^*2!4u1svv*L%+uy_C{u*~PPKXE$>yvr3(nQaUs!2=Ku5`~ZSFP{2<)^+@&_+xoOiT4v+1DTb zl%qGp3*wMR>)Wc>54&4-;W!EFH*fTBh;ggvL)?@%KQaPK_gn{aAcOjn ztBdPZt0}WEh?Z+^`D~I6_gngktElfd`!Rkmf%Y})>H&I4apk~^NVrCIlwVCEe9(Yg z84yWMwV4c#+uDm=*-5ZG+kmkcdbGoG`>S6ce(??yvj+UkGAtG6HP>=`Z)fPyHAbD1 z?|ag4ba4V;<1B1+wFe!bxYQ&Uyg`CUKJo*HWRJ?7Z68c9_9qyB?}&;ZDD@n(T?50jEu2yeN_7l$q_lJp zdVDYRgqoA7CS5|mp^GsD`^|#FJ`WGLuFL9ORgL_^uh}=~#cLz_kw5lg2WK4NR&G_c zp|e%hxB2~wBvW(Azh+B6F9zPbHLwi**K8r+_hqQV@Znz-3R9>;aVWYANWVSIIXGwdA0IQM{~ zbamb9fn1v@aUAnwC}P1)A>u)vd2-)K*A&0sk+yxuZn$V5-&!?Ki|qooWJV{vTzSzeJ00le2CusXua zRN0zng=R0G1@vc??iox0a^~!X@n!z1-m|a7_ZJo6t~r`(uge!Fo@Y0-fMa1a_<_W* zi>?61vJXq1EbO41aF;E3Qrq66tt!C(g?rCMf2+h3WH#nQ+J-wQgNGa`y#`TM6X`g2 zz{b(pmL=9Y9tE)aibUJ|vy4?6X}1Ph*ylIkC1uhA1SCv?=B#*2&WAh_#1egU_Ug;+;i1-4*pt zZnVx}#T0>)qMT{DdJ54z?%w#+%Pp&!c%Qcm8Dcc064R}3Z3ut8G7~R^4mW?4Oqob@ zOD}jVJiuqY%Wn4;zNp}xplQljf{+f%(bI@F8;qiW3E20`l`y# z_~`F`5q@>UE`ZXZPEZw87}sEL>w9dQ*ou-?Z*{BRh2wTFcJy` zsqx8phH2rBW?H30dt_Y{r%vhkW;ak@yqKd&U1x#uCq!x;OT}oO)$$!uOvxm)G^e4H z!NVS@dqQ8R4w!*$(&aKt*b@wekaN$5Vo)QQ`SSz%_(_p{!%R30~ z`65S@@3KPJm|WF%7{e+r^;dmH)!|zAcMx$iM2%FQ%i~5oDqg*}or7g4GjPJL>(}{K zmo#e~gcn`Byp^@;u1tuhye(%{a!`_Zj2^f8z|rCnsD;9x{=up~6Vb&bU%$xIjTk4|Bqj zzH`zYrZ*LnWSwF$WkE~D^POzfUikp0)0Qy8GUh;3Z@qZOO zE*zF>*q-d*Q{&>2qYn@O59+j5MIq*_+0DX=5Sdti^DBWyKpT8mIQVl?z>F z0@O`G)`0KutNsH%lzF+JyzpuzQzg zxneVfUqKrtwZrf8W{P|Jjw(Qm9xdUFQ-q@umUA07K`@qbj`{F?9^TlmkL`(|T#V~U zAsw;lYL`p2Mb{H>n<8psuc#6~?O#>@WS@wo2N~0QWM4}yv{F*l>k3!O3nYXB!xpc& zZ+%>ET704GQSQ1Tq8!DIAKd&Px}If6rhZT~TW=&}{s5S+(<07v%#Q1FNBc`G_UB3h zH`Kd03N6==W3?350O3Ye;lP)a`EtL+*0Ges$ zhj5Kg)YlSW%CfOL)v#B_hUf^D`uCZEN{?_}fJ5~0DRPgySq8S)vQ^DBuKt=KnUTs( z9{AJ8g$$RSmqwKsgzDLhHfUOdB1czLg5(czhNwO7(zHYo!T049cSv$N38!VjfD3`z zaoNFfg+e8kX~Rd!xH`DliU>lpBaXJMq)Ti8R*SoYCoDSbi0ffTtkE4-1uM9q@{)4b zl&S;}^DdEDqO+JMt`jo_TJbQD0k}n-+Io$HQTs__tQc~0KWJ+qK3NC$V9m*{xn@1b zBp`(gFvQKx9Fqoc#mfx$-d++_H18s`lnq7dnmNli3{s49=j%>I%^Vxcw?(gUXcAZx zMc!g2=d_2)kERh9?w_6E1N|~*mmgYinv@-s`Ggu3?_c}) z()LP`!;}>NTo)=CaXnWfpW2JXvd7)8QxwgaZPgJAYut%Goj}3)Sh!jR{t)!=#TR4x zzyS42WDVw>4Ci?TdW)S2C1K+G_ZPZ!Z389y?Cjgjq7&J1T8-xo90sNkH^eGn3FRwA za6`|{^!9k%YZr=KB7zJ2lfwK*!Xr&Zzf(gB^fvZ6rBRP1@(vf%dGb@%wTId)!(I*L z?TzQC=Pr7LjJ?exZ|L1;b=uD*QsNP+*k8s10z5O14@;*Pl-q`%PbgK+mUc~+8#ik7 z4WhaC^{{ByBk`U+yXAozReNN5l%AuM*@5%Wko+m*7oR4*aIje6ZK6H*i3jkAu3T{* zhUGGlmjR6N4%jAZO7p20Y{T9{yo*LmT?g^A(-e#}c=3F_`E%LN@EociQ@pa=L8hmK zbj*0izQ1aPhWn6nI>C$~K`mF~D@Mn9u(sZkGIAuCpk&iio4j)Gz5TY{N!`Nsvkj{& zJi6uIlgqn7I2co-~~`NwPb9;w#K7?*G`O2yE8M0BT03)I_m2$eUPiRVI76<``& zsjZPJxB`uwopypg%`%$i=&XeR2+06Pw}&|%hd-&tNpztpaT zkK_`+N5Vx2_XMnl?6ck)Ry~C#W z&$eWo7*(`w4CG1^dxKpau^=#sIjNo1Wg)Ra-^6E1x9lM#8E-{<8)Y{NShG4#PqXps z8O8E7eFP)_==V1?+xBe6raoJ`nW!pVjCPH4VE5R5$KXNRO;jmVZ}ZV8 zEc>VyJy^9nX>fPcMSe)_x{ReC;hx4A(;)ig;YsC)J{2CTdZCh^2ddJzj`)h;Q@PD5 zS7KKHlVC$_Ml}0*WLvLpvm;}n&m3;5u;RqhMDf`ENP4PS(;Krqgc<)l&c$QdQ`0YL z3zggn%MsswOtduo`H9DySuNt?L||phZJg}sfL{YO`m|npwG8<+OVpt6t&pzyU!CYL z#@P-5R-i!U*#(5Vx0A*qRX$Yv9v)zSe7z~q*qOvC5*I1z+C(~&J&CS23<1E%G|=d2j{m$D1DzQ{Dyk=|!ur z;4f$pboQiDXF=T5ln+2?$NNn6UlXrya~7HY5b8}oaBCKAiRLL(N*q+l(a4{!G!$B9 zd^|UaSai-A!8VY3&As91 zf=#friS~c7D&Vcl1kqG*C$hy?^4?jcBmu(=CGBZ9n?x3?%XXvVGnHYXpn0AH6n0m> zLSs@{d%>=KXMel^>OJ>|c5QpgMd(Q({57dkGNC|;?&v|BYsy#U*XLzrBq~KcFm7?p zfYf^cb3<`kk{k#%hHALn4vcT@Z~jc1g=J0znI_AZodB0(1zzxz-8U-eVj55q?$ezi z2nkRu3GPE0UPTPu22ibBcKrG63`laK<{OXl&+3M9sNGXkbH${L-#5HYQ?7*<@6UVz$^XZi3c{5wM~4m@2AsP z+%jEn>Q%lhwS#90Sm~$$ijv65KHbs{GX7*pB zloLP^Qq=4#1N5+DkVWo3+YfOMl0fNey4yGZ8tLnEmljZcWkFeqJsdj8OEpDO{HAJY z%EdB5274g*U0~X;X5J#ex^Tn+$m~AUx^K%T-2;Q?LT7(h0mz<7vdZ|d%e`%#X_Wg2 zYN@KVZto}+XPqHc@qy?~0;J#ZL7#7&zw0<1zB*dgj5*b3V9fcK>O*$nU!TGSPmEqt zf(Jz2c+$_1Jzttvbwl$nMh1wKBs?e)dcV~(SFR=k?$L_aH=x~dDnyYP?kW}f55f-0 zS6s&v3*l4sL>avx(_cnFB)Hd@AuPs-&KG9pC(TzR)=FzfMt$S| z!Q&yx%0W!d1ZF?3nrnT_>t0}h9$*7(hOfHMuRyxZ4@N^VMIZ_LWBr;za!N|=^!zTF zY5#n&Z*eclgR&YgFRK>lJ^T^Lp_w;vV&@kJf(9^;_VH1dq>uTma)Ut*1|v1DNIuiAy$d_+jawM&8KK|MDTM0M)amy)=Ll--6-LfuKIO9dSG4Jjxl6H>-qU|k=@vo zxmKWF)%mN2;@6f!BVVK^{o}Ddvpa4~vjH}Y%0&z@qydR zE>gZ8t3cBv7De-N!o`Wk1^-K0f5}a9;mk0b*8TgwA8tNPV58y>i+c|NG9g|7vzWIR zpwGh)Z8`v??S-9bbdLE3G>O+j%T|D?>=yyfU#8^Oxu|+P@xtoH47>SV8M3bmk+-ga z88~lyM^%3jTEU?!qOquT@Ko_6V7{w<4MDK+$}-oABiTO7;y%mDzbh1F!ppanX$VIT z3}|`uB^L=JU`IE-4)5Myb7L>vng`M26 zpTQaTx8;+3L38x;^>5*)ZWWR8QiYQm1V8^la>PIs89d-SKr=)Q-ZUM z#^s;O^7mCDfxIfqTjc-HoWDOl<*TdU?AEg8TKYiuRjE{jZ|^rjtJZt7yM(#Q(KuzZt*(?=4ze+MtMg@4hg#QvqlNsN{r$)m z-dG~hoUPt$ENc^X{bUSm!^)!qeNz!!j4Qu<#^B;>jh+_*EJrhUG4FevxM@|3fwDG0h zU?S}iB8Hv)UhK*W=EAPR<{cAY$D$Y=N4{!y`ZK-{=a)Kv9+NC?TThWC{n-`@#eerT z{`U36*@RNxS0At7qpw_7z7p#qHlucKhUMiRl0wUKeDw-Ro6*x{B6FS>tmY2AL7ca5 zXYR>um~m|W>1>U?no`xYIeWcb0$tni=6h|!ZL-#4%^)V5SElJx~<@%hui?C~~H%54LRwyWvol;BDNkCvxbKAve5FdJYt0-mCR zoE77r9*V>?=?fs8SE9JRb~1|b)kvYoBlJ#tuJlL6Yb2z_Cq1Qk;mk#IpqAzihp=^6*EzkPw>|r8nb09nar&_8oOMFYuSs zGc;qw)Y6y&M+)EN8!zZ3vT~AXR!}OzeQz^9V{lvjeQer4^uQ;Js@wQ{1Uzu*(C7!u ze}pXt&mb5{_EZ+2ha{8Ee#Nk^k-boT|6V!n|G^7gJ-$YrQP+6>{QE{;w0pzP+vnIx zVD2Ija?(o7XM4!O1am6Vi+4NbIq&?F8S^(2063PoiV#O^NM_?7b&a*spBL->rfuXX z7oNG~2n}bue=QY?A%7hs>YCQ3ZTp8e1DR0W>BXKow)1NS#)CIrU!&{OY1S>|_2mt+ z=s^m_oHF|HRf`-{qYE49|GYn*$$^-wQNv6nZd#G(^V7PotCPl`VLU$83X}^ev*VXI ze=MJgYQvDg?gl*i=QjUcX#fc=h$WN&rHXk6b=0(w(lgJUv+N|>@GEt2KPy)ABSi&; z_r52$oAje4kz*(jss8@ozssG(l<0Ve1e6#AbOtKCH9|mY2b6$W)oyX{lG25q!##SM zp0MDG|9k;fkRt=*G-=jIE_T&5kTe`Jcg`^zRd0SA*!>~afDr^p3ZQ`%Q$4kR^v9n) zod)VRxbdnvpOv#pCXAaUbvRbf#3_Yij6Ym!hkoS@$x8JjF^O0XTli+xspF_^KS)TUSD{a zeWa-{G!+)txviE3fMgRt$l6#nXml-7F?h{&P{P-Ylw`5KY{ zgV?l1#wYMhVP)^MF?QVO1)WA7FiM;fi~avIv-WT2#;=7_CAFlCy2qL3TF7hTD3c2e zk<7E@l4lmAQd$bSCqeyMPHXcg;C9^B`juPw_Y3^B{3H*IaQ0|sV_{W~0ANNYSTz@gb7*otkvBo-ig+W29HCY@MAT4rL_ng1*R5`UFxHR!dU-9I7L(2#ja_UcLU z24yXnKlR(RQPsbwj{n2rvpV}s)Eq@52*Y$>epLPe1@uiiH6 zMgRB0m;6pFK%yuwU(`@UysZ#c6e9cpuMKjuQ!;9Q3OpMizFYHdORl%9oI1LJ9)G%n zIh0F}vi%ULNJ(QxcHiX>`-8O)M3#JscSQj2FAdY0B-fvQy8Shoh^)cvsa zk4ydjm30&>SXx~`gPH^=O-ZSq`-6^s3jx`Qb^&!u>Z>HA9bqMZFfOcED63G|!KY^8 zTXgR8^YeeYY!SHZIUxg&9A(NVX0Eq?ut;X?7}! zANXH7N|V%AZWIksoCKX0MU71o0@|WWl@E0BtPo`wioY9SP zZy9pp?W+|4XC&HKu}ut=DL;M~z*;2h8=R#UaY@R2`GFek^oHi<4Wa&;hNEyL_rlbn zE(wS8qQu)sc_&s4txjQ-(vg1cf70~gNboLqtk&Jg8?ftQth9#Cg&=F+-WSKAQG10t z{}@NN(@&ZAYBvyaDbnrrz;$RD5abTOzAw%it*65^ut}KDJ8)P2vhl6v<$T+aeBU({ zHwPy@9_`{+dQJ}o-K{N83*#~G-!^|+`5v;r%x`>JR#7~WQ$1H>gYx7`5{G75e?C0+ zoY&~cL`}kWXYLiyh@608h%GDj+;dGjC@xI>8qJNxkB)T-XI?gr3H|yXQdXvlK=QV| ztDB7eP;Uihc`r{zQ5>tKxHMQ-)ph4ch;Tgk$omL)l5`E6Sv;fl%SAJh+@1D#rbe=$SjQon;P`9Yq--iEaWwrh4`)Q$=!5eto`VAPKovFqm!@pGku{Xtj@;BV z9QaPGDU$hgrr{(6B+gK$trP8JP~K28nxE?bdWw@lQqUSxNiA>3Cp+#f$K^f~AfEKo zm#Z1(JETw~^`=u+9UZ8gHdR#3=?4Fx_q@s7;A#`v`hk}p)PiSKY1~M|?>t{_S98u0 z>23GPD=3h8)o82>cK?*-s$`p8mNZ;m2L4J0-8L+Jb6I?i{`-H5QB1G@QjO6~27j@G zRYrPo+iI((ay#^gUb8np`lJnSqgmXh$!(PLvE~y?iXJDTTtGwM&a%t@#ok*6M7ecg z!-}XQA|V1wgMmmZAq^s^AR*l_AYDqs5E254fJzGtf|TSS9Rmsy5|TrQO2;t3zzof| z=R9?u=Q!v6{=e@(YBu-1_u6Z(wf1#gOQhMR`~4rZh?`QgUaCs^57b`Y-27;J)3#62 z)v6oLn`JMGPiMuijBqy`*68~m`Q-!2A}ye{0}U!QZzkK({jz=lnsM>U=;Q02PK)$D zE78d6pKUzLEy1$f@Mzv{Z=-{Cwp+$Canc2qr!9chqP-D2b=32I(t1D?AZm2hB1NTR z0nRJ2X40)6b<^EIMh)5D?+=gZt2Pfa^Lb}j%vW2P*zb>Fr@h1>n7Yjr_4{y5kRKck zSe1+8=e`0NFyjddogdg7Ij>fRilR)~Q5#A@W6(U(fh7Oy*OWQrQNkuE&w~e?v*WG| z9iW@&LqWg;y8&*mM3xu1S{o=9&uFwn!;BRp-$7q4On!I{lH%fkr&iaSpIVqEfL>GI z)~8$ja6nd6*{QZL`^@Qx3tS7O-TtM&uoytxY7L(_(LPyJJX-72^TWd>X^P2qvbAn) zKN&QLmsIN(hM5)_z3BVsYLUNk4RGC@V6N)Lm$uI7Qe{h#FAqMT&=S7C4@ED-eR6UR zBssHOn^${hL9!81I#1!cylxq0yGf?ZDINCv%ucowRE?W`X-;{bSicxjXk07jly{VS zyhmNBiOYDk?n9U_wyWFf0LY27pW7-DSUxoEV?+#8)kH4NX3p9yc-Shj#ZJ1^Ex&=Y z%@&=Kn$0ivznRmWD5h6byLuCo@o+n{iE~Nd<)reRI~2Wa-6le9@1*8!#n5GvxNBH( zfGh_>P|DJ+bKPmWK%#p^Om(U|Nutv_N(eR|!C!YZ_!RPSgS&5`#w@uv9=Q&#$Ty4} zqE7EPcIG-)0p(KvF%I`4M{Bz*Z0P~QBOd6wG}Wo8?d?qH^f;f`!jV-_VN9T^$d(}9 zu)ki8{v)sn)B_UK5#@9pW`5Ixkp3QpCVFFWLuBOcrlaGaDR3y87<`bvbI%WhB%$g` zef-f|__Num06ZWn3g1$&>CQ9tPvzdtQ}$^WpPJi(ohQfW3$a0$KxC^sD9vv!qe`inxy>FQ3mh7^ua4s`#kE+*#=B{ljJ$x9; zndU3IWY}~}Cs*B|{^(FN>9D=_CJc9P?#a1h!jMf9Kvzt1vyo}+L}eqR%2veP`DxK| z<>t-!!Sea`XqiJNRlv(p!nn9geW?FQ)@TL53vL+cNv(YUgM0#fR!W;Z`#|!vwb|8_ z|B0JsgTkEZ+?FaaCH}?!G>hu*~`F`Ega*YO5DNc~IiemkwpeHSX zs)ul^!^CdoK;F*lg>kb{3x~tx%bH!BIDjcvfRzEVNAq|Xj;wYe};%1?(f0`KDN=n-(pn`)Y?u=a2zC^I~n5mK&Kn*FyRy{L*ZA zQ^ix4Z0G!5dUoe=ra4>&G~{XI7{O@15Cphi#Q1m@rNzcx32++aTlSy4t}J8B3l>FS z4|LLYBIzOUjKv0P4*(Rl6c&;tT&e35gphTO^mckhEY)ID1rhPDO!oeoNMKAgZkM>R zbN=Q|dnK&~fO*&D2eInfP22Qcxl~%{fnM4GN51slR%F0u(98KG;TCuPHhOV$$TR>p zxvUhEy#;#66-mp*1c)vB!!6=srsgFpMJMH6Qk3Vqrh4nKVS63ZmRIOsUMWW)lFR0VU>mZJ_Fh`YmxqQj zz032f8{@wfEKsQSe$wO%DHJET3BfuWPZIIOk_1oey6iJyC<&+lD@MML&fZFkoBZ`@ zmcL!!I(5~(l0!UasF}VzcDgk>xo2s)*fg%s(l?B36O@C=o_O`=uAjT(-oyDhL#5LyWy=cQzU${Fq?BEJ4%2YhOt9aDwTfmQIeJJ$}1AK*d9c z;9$yU`}8qhfXpU;q{@8HhqR0{u0O+7XGHl3^vf{b3&j~?msk-CuY)J0ssR?yac%^( z98Ot`bp1#>d7JleHbeqaTD&L~t^0=Kq$N7KSUHL*Csfu5xvT4qKx@Kx3RbY2!h(X2 zit3gm^{aoK?zR5H1?fi@*L}KwO(i8Qk2A%1FjCay>g9V_}T)PWjpXIk%J##$4S6rWfRTLYL_}mv+j1=i9RnuiD^`Wsl z_OWAY$ds?R>ponj%VBNzmvNNg>qU33P#ttN5(IOJI^cG|$l_8S8z-@({}G`$&>Ttg zJ+E04C{@fJ>!0S5k_Nc$c;D?u8%%mQ@5AFDIOC}$_dA!BvU!S2*Ldfd!^o$8Bmecc z55SI5C_QXt4fw_@>RB>ZDsD4r@8vn>D6HblXDqW^;9?$XB025REA|!80$nq<6w=~Q zQ->VfI)`jizDQLNo^!+S*Sce}S_x=taQr^isfzDU0nB8IjpgEicUxy@Y9d07Y9+_ zppZT%$t!Gc?2xwVt&-2w9mrlVj194+c4}hCrVSa{JMr9>UF(e|k@Pw+7eHtuMzha2 zH~+c{=~w^pNf}cb3Xz09TN4zJX2q{{84J=d!AdReY60^0y*S< zy?w~^NPQO%`;wBsm)#&P3$W;YOoJKTGWs=}hNaS$N~YB)vLB5|uP{d`SVe5ngztO^ zwqX+B?qhK1(Bv+L-Gjqck~DVS;HP+a*lOe1{I)&TSNO%ioad)CqXH&wZcMJy>SWxd zrU~6iNS~swS@1tnd5IFQZQ_z00pv<^teLUs|2={*#!D`vWm&*m)zfDPC7@E z4F>^gW(-J~MO%S9v>pg(&|=bqK(XOd(Z}`o4r3J^<4x8bCTpD|S@H^_NPjE6rfp;E zbMx~JJcbpD?}Yst9dH=xY~)vvf3Y_>4|9~;>559V>~}k(?A`bLc9p{8)c=#+!3S&3qqqo8?l9oKI3FP0L zYC6`%*h54;_D(U{*xtrryOY0Cd?V>%rMpvpo7lZvIDtr->jYoZ<}(RGj5(pNfxObr zER+JxR>)c<#nuPI6uu5)VX}+rg+(K^RdxC!wt`0=TD$h4HN~)Ky1oys$eJa6q3gBS z?<`hrcPF;L9Kqk5+e=*mHGYwbZpkru29dh&u0_bck|v1v9=iKscY$2+ z*n?yd&*9oW--82up+==DtUp4HQko#30Q;^kHvLLNdVYy23O^-!zkYw?Ubjb%nLr}j z!?PD3Z+(LGE;;5X?`&i#G~L69ErQ(g0@W}2b7f`LiO8yx<~}LRpbcovxsNuOd7=}h z3nt9VQNLmDWf)LnqC%&CPzKfg4fN6wQ&n~U? zHhRO&S+u~yH9>`?Y-pqs#ER7v~=q71E;E=WZlx0aZjgfz2|gY zC9d^&z;fj=7AruJY0?xYU73CXeNacNM7~a_(PDU0TmsgqLLwQ2 zbumtd#;1F0Afs93CZHG1#e#Y6tD&4IM!pfczs@?RipdH_O)pI-d~1>wkITZ^A#Xaq zS)h6jL|1UzOM{Lnpe56b{*Q3SQSPN3dX@yx+1;mNgxd#=Lx)Ag&sJRE*0~S&&JLUI ziFBIxa!vzsCzm8V;?;&{ky9{Zc>%O=Vq#)HtW+Nmwfck8k_5)c`rpE)Xt^}hf#%OQ zvWsUkZ?rlaKbh{NRgKXd>YMu;j1>)A&;$)b6Bc+s9-7r;psf(~LGgf(OgY znr4U8W-A(w0Ahn}iJ(R8{Zgy?rlV@%*|*K6${q11I-StGfa!2c<^2V4fk8+n*Rmde z%+Sc6YwpXmm8$*`G{b)80HZsm*L3GxE#Y3s+7p1Xv((b|vQU1N?a%3jJb`kF**S#O z_kG!HJ^ABKh&eK>NqammyRf~4Y>4dS9(s#FeF6-{?prbmNaKm}%7M>vl+T&I z@2@qT>YaqL`Xc)JmA}_V;jC&8cRMm8QHH8b8kJY2 zEqnVxWQQPQ(DwN#w$8nqIQ4Lk1)}}we!M~|Yyfy}r(5D9-t)RHA^6mytWi=rF z_NHIq*5bKL%N_5&LObih?x*9iI(*r%ay1r|Lcdkd>%;(KhXFQ} z8T4OjPiCiMrX+_>1Ng7y2lq4ykCk|uR<--K_7__LH;MpSzjHl~*!c?jfDvGXaD!W) zkpNis8Tyyzq<^Zmf6W4QFe4HBrDRY!c5I|066g_@JsikPA-0`NyC7T`IK}b@Mo#QN zo!x3S`*#W3KYs>3DyMfW#cNc7icYQY8}fgL`qPc6tN<|MFV~yD2$Djd_JofU$XI{+ z^?yBYCgBFd*r)_1Ag8xd!7NOy3Qd@SSA;8{PTsli;A*D&+J{Esqq0$DfTs!+$eP&otz%&dbQBsOzvGm z>uin{{eWJOU2giTrrdv_yDwvcclSSajOqi_LdBw3NckuRT4+c$U2;v`JQ@l%N2aCdGJ=; z&(RhiDn(}mxu_H;u_Fsy&2o{H^l*dAU(I*YyJV4Dpco%Kf~WGU8GsOdvA`A1*O%{6 z^qN3>>%iTh>vBkmlSg=F@h(5tgQKh805o8(+-toNT4%5wA?`Axw|zG2F7ZjCf;?bT zgB!7@rj2mYgjiNQiH%jGqPu!dPMGMtQiWdz#@r@i71b0L4S(f8n=!ovth$$CfY_}T z*n(aJ^sR&a`H-w_nh*t?+{_a3-SUS%)nmgrHlF4*Hl9zE9J<6eHyaCZ^&De)q)@Iy zz?br)swQ?QfE}<-pjnLQT!kpFb3!6kg4<9;vLb?my+?S-iW_ozFJsQKI6X#JiuT`z)X*vev|+EN(RB(QAGoX_{LE? z2yr0*JdJd?5pk?Spcg@a-XZ`0k|}PPMpZhG@lFLan2^!6^9$PA=$5v!=5CJ6rRe&-a$jY?w6W?mzlPX5T*<-GKk5P;)N_g{u#a)VX zc-rV}TPCxnsmXQCY@XLXq9$BGAiO&>|FLQbxAc(-+}Gt(EU&J{HPw}?3NJ6L8HHPq z$$ugHy?=ci2o4xJw$oLla(ZMGa)}ttzRK<^-qVqkDr(tDrJ>uaGsfy9p27>ZK0rBf zNQGfsyLBtYEZUWqjm9J8_M0p8rUQ2epsb3cVUMh_vp4*nZ1@1 z<{oR+wFKk)T8d6LBLdO;CvWkDQ4kx?Nr3FcbDg=Thw#K4|LE!{p}Cg%0GZh$Ouu9D zb=f%Pn&0Dt;^f&t5zn>{(IQ);G|Bl#hqb1B4Fz#2l3W|j3H_OOUvNZ;o?m$y#c93K z!nv#ZmXPH0)vhoBaj?WIS7zE~xI>G#y|Hv1F=`Lv0W_&?U-VuZkhs~nz!GIWrg@Rj zk@vrj_kVsXOVGl%J!ZM#1h#-#kiZltFB9}jz!5q@Ij>UaWW!CrXN0_`o_^iObD7t8 zc0Ns1X^#Sbzu2U(4)=9#X%AEU8kE7>#en1`1}QVSbuCEhd-=16lk43wM-NKOpWoWK zk)&C7s$>T{9|tfiyGCqG-4$wqb;JTH5&+#e`T1LrF>p9-q|kab!`qEPD@-9H$d4?( zxq+MLy=VMIL$zknSn=m5s*{cD4qmA&`A|E$;pn7P2VdEeaA2q7$Vz~^*9geWw z%s>yQp*>)*ygh-RSJ%Y7KE=a;rCTgeXLEP-EE?3k5{zDmb**{p8hO`WF<4IL6Tbo) zUP@dkgg^Phl+!&IZ6A=J65y1;Jm#tVCgbF65SCjRWk+k2zcaSm^~tZ*>DHAGIHi6C zn5W;-g!8AT{UTht6(L#;neRYsJ+R`sYo72Z6X7nEUwEs=;ZsrNWL|eXuY}5&&6p{; zxGj?BJv_j(?93*pyye#At8TYbGj=Pw>6inAWT*?rGC0 zaL2S08k3nhlW75mslw!Q4**I)L*t{ykLm%PqHPn^D_0+ke7Xv{EBB}JIZE{}&*G;l z+w1*K&lHrZib|cG2pt+AS*hr=Siv2-_Iun?8-)kpALOV;YHYo7t$Wh0cwllw$gt<< z&~I(Fa%+LklSY=3cmAso*&J^iNN&}1iVvIZu*`2o)mXSp)5~nJvQvhtQ&R!^>j}O) zv(Xw~b|>psHe59i>UyhJ28$-xWPFd3caq-A@RNvn-)Q^2-_Qp~7XScJB!J97jva#a z6R&Fux^(Nba+)-ay9vAscecv!;j+~|~ zzmwsCW_)SVWDwEL{l;jf94L=t&yJE}vFCCus6M6t+tV(bF3?OS zIYP_N6LZ+TRQ1~IkjliA=DbU|e?{JrTZ!pq?FRK?Wzd`BJ~#)jkFXZlLtIKw9lv(I zVYBYPA<3ri4FnhT{IBH0q7q}=RQXfKI!wwuU-`=x%3rplylK42*bKkC0w76(tf9-I zLl#ok5)YIU{OwJ)lvBkM-npaC^cM#hc6;mvZxAlT7%B=4D|V^*vR!mUO^xk;!?OJYMMpq| z!`p|}&dZ|$b@t&2&b<+CgM!zzHWW&Y3OSe#66z?$T*L z*AI$aufN62B?&Bd6q~%M^LB-K*kiu7MDBV8F{6LxO10GQ%vtAK56iiN-GiwYRRtBo zA7W~{D-|`1a||v$WT8M~!=hdk&@bOyzGn$AIKgC%LZ6pV%lc{~^Ke*pHT{9f-g0q6 z7jDccpUa}fLj@(F?1@{DHktHU)+CGyI;B*OF6E+tT7v)YT9T4X~|x zwaK#jhH}wFoI$7cNweKfn;%&X&(Z?YqqmUt+KS|9e6$5{D*(F^LY@RFTb4!nrY0$U zx`etu7XJJD%YO9nU4B}b<1Ivid-F=Wl)T@{UAd2K!m)0ySTHM}96iiBZY~-_w zd#(sHlK;%M_TSoaqq*UoaDG*+afPy7SgV(^d5_Xdok6%}vR__N<~A!3cd5fq&Sx{I zN;%Q-8aM^fqK^yPx;TF{uC1Ae3mMstS%oj|WXW%IrEJCS{4hS-e+<2pKiYP9@GbCb z<8uq6u(K<}PeXjy4wbmo*UmwZj&4#tPe-{I;V_>F9HN)~XQ(vli}m%p%oW8tHy9U> z9pg)Sa92)Czn}Brlc66);(uHn{zBvW_XcY6HSw!>pU~I==y}t$t#nk;tuF7b_VxpD};-GfT6^`VXX^N+6WI}B`}x+Jzi zUD|zUURgO=TqEVUb)jxzNqCXD3>3SOMcex@+XwH}uuv+rUR^y0v)W87>U;mC9FF1jJC(+86SbK;AmWE2<3~gJ(O5Lb z`5@^-lXAU?#cS(C`7K-QXS1Ef9GT8rPr(xOe^~n&hPgS^lQxyFdt~SHVyVR1u>0%L z;rt{ws{UH>Z{x+s&p~XhbG_Cy7^IG&AgX0AkZl?Dm$Hdy8xc2d0{2yY#HK8PBtO`g0m3R8s55C2RBO0@B|7d?iI-7QzD zig31YUG!E4D{d&y@5Q(;7A1`|A&8(SiB0=`^h00W_Tc1ZmXp`Sm`&#h2FhzSW%8mH|NnTN_Q$Q@I-dv=b34>Yr88rrv_}djPhKA zSmV6OO0YZR&bi0|8*m9JE!DAd^XB;wN5?jhxxNT<;@7 z82P+^qY|HfP9Qt?#9Twa&FZEskL0+{@S4`Qg!s7@q|y*J!$YaQ*>ZCcMDd3TfE>lGKeBj}m? zN))i1U504pJa)uUMtad?!}rB3I^&JS$7$AgI{HjrGaN2uK!4^J zpA%Z1G@a`_)ME+Q7o%xeeDa#1rsTJ20+sC_xjI;UkgF$Rf^7(1 zcQHkKbb97PG^dY`uQvtc>1-`#Fc~hjD|e)8+OTBck7zxa7v-16fb+#8of${aIr9xW zgZDo=opW9+v%&D77qjKU1Jtg8op}nXIR$MITOlQw8jJujvBeJ zZ}!ezJ98B_0vX327;}fD+C4A9nI`}&Sf{jTkNta}W!J3k1U`m`qf#|18=>U>`arDk z+*UkK(#jbd_uH!H(l@Pp7)!(6v9(LL9&L?|QYOPa{B|pFN%==rj0vXm^7A%0y5<5TzW*cGncVC%2@!#+bImA1&=3p}p(vW-4-e%s|JLT^way}t5 zkxKB``Te_BA^v0#l3&UOZ=XFTHQhcY7sP%2k?e7~*GyOP&1A`Q!`W`MbDyGmu%V=( zWBKhYDN#Fi3)vuUox7B0m>y7RC1!m%U+tM+NWm|2xIc((pa0fc zaE6La_Sv!HB&3jke^I6^OEt*1)9wcZ7!N^DMS8&_sMOrW-QMW#JQ+PKS15Nax% z5b@4bPEV`vu7XN{GWpZ0IR=RYS2LBAD&0}fhQfRm{`zg$Vl2Nua-Rvyg|6+^ne7Qi zoeCZgPycBiUX_@H5z!Y+F%d2aH^oQgpv46PijAVnAV+S zuiV6F-nqmGwvX$2ogZmk?G?8Ar0^y~&Yu~FULbC)FwB4M@T0}f`e6-CUuC(y?rwJgT%{IMZz)Fl*eNC$ae{J`o!Ni8$lKGM znbwlK!Q#%&PN(_x9>jRvWSo7;ZLt5N)NUJK~UPA=+q)2p$Y9&zyXo$tu}pgh?|MGQIiUwD5uZ)-Ts>cu0q(G~-mU0b)O3)zoRUI-DUNY;ay zI0Rr|l{rn)2XQW*q)_Vc=9`IZ4o+zjtFVo42|3FA)g|3e;>uC5$_anDo$m^JdVJSO zx*(h8FFc>VpRJxZc__#_0-LI}t2qqS%vU)*rVCr~H>#PAlF3pL(dRUFTmQP`ZaAT5 zIg8fZcVc#3kyg+)!b0V-ly5N3l;6_2$q659Cr$WgYH zSGOot#++)Q(ptu68}lxR{AZW^Yi&YbKVvIErm{np*Xcu04dI1{P$aXQo`r(SL5!|6 zx@`LErpys`$i=A?VqlkWadP!nM7^$7+{9bZ8ua6+yruB>qFN_-)NL31ac|QN`KEvD9i-Af&LYcI8uYUy_2mzEP!z{^K_#wzF|lDLN*W&2E0{ z%;t;y5JMo~+gCo6ss-~&Ll>ubJBrVzILFaiK25DF+ohPnl`lh1eDL84J;*0yZu;c9 z_}wx&YH<_K3AO&s#ap|batZPUxmK_rUl{Y6FenpF=c%1!SYJ`CPUzhN=01K?3svsM zQ`qtKhoDi2&FIF5xaxU3?zhsS>vbD@E&GOo0Q>9G&SlC!)jH}|Iu_;0Jy}vmo?ZNl z!4O0#ZWyV6WzDR(Vws*AkG4i|M&D4#nw3>9lD791JqbPWQB3iF91#_pK*~u{C>jkq z;6yjD6&xx!Y*8+wA&nJ$p?CL`1cgRrJH+iV`V@~mKj&P_yd1rMw?T!~XKkHBpthL2 zD`UfMX<*TE>~M~234f%#DUrCRQyZK(KRRXdeCwa;Dm5d(~VR)LTY z+CG7A-sa^G4w6@TyJs8Ci*g|0rwk|#19Ea$_kZZx7MANgm^%D!i^?vnKY^n05m~LC z|9L^~G5ODnv<9^+HTniHG^+oG!V`RpD4#B=;pL8a!70s<>nF5Bg#C+KV8*UpU5mpO zeAhjvjy`Xp)?7eE?u)die?_#@QyZTjf%p2sb+K+|Z3SonnC(6|d07fSuDn>*PoX5S zQuV;epva!P(R{K-C%*TCV!UhQY=!HX?#@0EC&@nHzsK4Ry>4;4UCdYqHXk*M`QDp0 zaoKMpW{kqi2R`H&!8@pCDuHRUGnCVdYdrN|9-m;#vSDW+jiY1fK?s%rIlY63;U(6= zG3t=QiczJ-(=r9*VY){HacbSt*gJx5K}m?Ues8Yff01F_SZ zOm%bbX!`bsFaiE~EoW2Q`YabeDL15fOgLiQK;H@>mLh+rtci*-rZx1@9;zhK3Z+KjhlxRsVMW5*f@w7i;S)OaQR-6JM-ctyl%$6)5)uI zT)J3IVyoTl=kqBpj5k)T{vD_&&2FSGiRW#A_gA&t8kdzDeon8#6P8~9A4aS{=QoNi zs@b?_`!S17Ens^Zh5F!16LJn$jqT#E-fr1!<~K13@h|4euW+hGuL8wS&N#n|@=|>D zUVf(IdgPexMfgu<3;&|T9DCJ-YIMGDno&tb=gsMU45pp~|Wg|YZZ8mo80Hs6>ZemIODDUWz< zgVOfkneP+d8VK%-l0fNF%`W?+$CvvrHTS$IA-@oEPRMA&B3dd=WMbz1C%eV3F%;KB zFO5r@`WMYZBE*LM_r@AB9Vu(!;Rdd-GRH zPMSX-G60F}z^ya?s@<%tTWgFhn|T|tB{sfg~QpXEUqj!7_``H(0!)0n`$NlF=^3iziVsSpdA15$Hlh=;? zfrr2H8xJpj7sNx8Q5QnCw$C;$nSRwdLP)DqiCDDcFB;qX*D-N8|N4sTtKV}p4v2ZD zCfKdni7#7k!6+vf`8@1;GuZ`JZMgLC6h=wc*xgs`u9lv8;J6EE7ULx%0g; zll5?+VCmyfJ!fa3Y`l)aqfAwo21Wn_;`!Xa^tl-LWb7is-9k$(^0DgOCrJr22$q zbbv^vH5O@CzX=&Vn{QlBekJg zl-HD$HBxT6q}AkgQT6WJ=9}n(WWFlIc@J%V1Bbh9UOjTAsxs9(-(B!vrFDnG-LwU@ zOtrFv`2caiyJqt(W5>kPv?^1RxoZ%{71w!Kt2m|bZD?c5Vyn!diWun(tu9M~d0UrN z2Pb~dyk<7OR$~*jC7Pn~eQ0plsZTQ|VyP;)T_i2F%6bCt2oz4=OGkLZKAfYxzb>&6 zUs)$Tv3+oBSBqLPIofe&akK5RTKv@IdNq^PT1-H{h#~8v(8~4H2H)K;JL>LImhIe@ zPjcG(E8(W+`Z69J9?*qofBXNlJ@=tf-!EQ=L`=h0pZZ>6X_nNrPVu%e zu+0+9d^+8-d5MLuJLbX>TZ)F3T%jrXgWGmmx-Zj5H{KqpvuJa!pWe%j9d#Vy?E_&F zFLI;3%WAw`N4J zpf1X|p_V_@d#-$uKfpVayaqVUW%q#GqvB}h_+ONVf*4e>zuyBfCXknTHoy$U_YtLi zwNpr!-S3_av7UH+5YFii^B_0RFDjc#SCI$(su!FZkZQ(D?B=?*E9I`P>d#7nlaFKn zrMduo`E#(x^#-Gw<-BHuI=*C^}OLCzB`Di?0pGQbt*bP=8i}A&~T9(clvTeUp`w4 zYfiB;Jy;U$u>ZOiC-}+|eN$9!*etDf^>C`;GP6(HC6w{H)UVVtF;*Se?uJ+oo;ht; zRqpjyQ*pULhSsU5e5jU|hRXi<&g{BC)fW9c>cEM7KzGOg#Fl>9i>V0a3YnUHV@SW6 zpIz-QymjO+{FBEu_{j#^^l5xPM!7Vv)!7dl@3z@HA73f4{Uf#S@U(+2b078_=TWM( zDQRZq1TIX-fB%=lu&15R-q=(uYoXEn6vhf;E)?z=Fzfm7`dCZDRYHVVZM>J3OEEsv zbUMD)Y4=N#?G|dv05&Z0mxK0LULbrDx7fYQ z`$07lZWrlYUA7UnRW-E&04%#NmeO)b07fQkHHAX#@%(;?5oiIQS%&twmz_Ap&HpHp z7OG>i!P-8(-#`~Q(CzP`>wP`+{wp>ph=6A2Azz}zeef5WctrT{Ec zlyWQUw;~m)Htz0(;fCo0a%GlRn)`p$)`W%8$bSb7t3 zgc~2F>%NIEX43HUjy3OVt*2T@m(@AwkWXKf-)NSyO9-3{%&m!lZkUgNdr2jXuhXVH zc_}^0wd8KV-Gz0xN6qnjqPs`GA{ul<`3_D(pPGex%W=^n1wjD4xc;!1!FN6vV_M%Qi-I zMzpTMVx$7?&s&Sl^xQ))1U3iyDVA>e{*v{J!-%P;&5AT^H)Axla%QK7n&}KP$xF?* zTl6y2D5M|fT#(as5aqM>o2|L|{?)-coRC;q-j}lN>z{4-Sc1vRk5;oUMjA|iywSKD zJ}mc_0Jn#WBnW}SWwI5tno{W;aa4dMzir_mr&qSKReWTm6>OBq@%6>kIkE_`CWeGu zhMmrz*7PVP%2@e=X4V5tHNM7cl+pa5Dz9XIi1G=#fwsMeR|?Aq zZ!Fe0rx@w9&xi=}n3Kb{Bc0(!IvXZx++l3eK(4ArG#?OB-e#;Ks7;QZUrZV679w&}Y*ca&uoA zW)wi|3s%nz#i-?Ns%eeQUVU|$YSc2JtM8q?uWyCi@a3bui42m}pBba8D=zozeN%I9 zq#zDj77a zRrh{z^hhyoaJ@C)(_*cdy6G$+(R91ig3QEEd~d}$HZIQFGz4@OtTEpm2vEDvda!WH z+q2)jlh$J-YpVDx&j)CTX&4>5hi|l%G8*Ga>KGaE5}`<)_SXVRXapgole+pxNY`~l zzdmAZ`cSY^oBV)IPBB1Pt6x&T^D;PO`HXd}XFa+O)mgqYH&M!%n0P*?HPQVp6+71L z#4LYG`fxjw{^n>)0-;@kC)92``}Pgy z=BgRfu69E!=4vP5PIc>>Elnr>`}EX`~McAsMrt!WQ3$-`5#FM z48&fmlROan*}9#HYk8*ThgpeDOMS}Gi+GR1ie)^B>y!5lYz`EBy%pKOM>xXXS68ja zausJ%`mH_tl!vLB#w&xO%&d`7GuLmbED*OK!onf1|FLl8cm;>qRe52^7z{(x@7Pc! z!MwNQ*JlDd&}}fyLU|mRm{Cwb8t0DLOAARIZ07fSo7Scm*wh^)&}UywFmjL{Z@&6h z+kjAAr1)dUzx`v!4^GmT#MM%wKn*3p{5n#Bo>}4tBA~FszS-QvkrY}=^A6wYTn|Dk zNJoRz{#`-NVT{HfWLy*5se=kQUes0L&y~A>r5B-*gcmXXhXwxoMeJus=-n9QhJ)zT zY#Tl9Wyu__e_4vG9CP~M*8cG{g&j-9QuA*@AdrPS{E>wNFef1kNAjCeG-{pSfL@lTM8rR4wJytiKYfjR`!Qea~VIKecJSE zWO^!kI;!^e0haaX0m#B@%2s{svsFZmt@R{p!>;_*24u|+ff39VV^)gzAj{O}L%LSA zpQikG$?{(>4xviaJPvx;z3dvp0h>{i8?N&!F^VMi$M+wAz`hbh_tX5K13|>X>hG)q zjQyVGj|tHJ*92tL()^`r`o|*#s$QT1&9rs@Q8~rchp(#s#pVCw4aFZ3k_r>rKaz^k zJ&qcQzXl3_{AA(oaXCF0O#A;m!s-qn4h|)sru6Pu(ZaB-)(Y&bp-NI{p`zqbQ#;qUQHKr?weB*o>F)`7~yr8OIG?H zgZ&>vl9y-8`{H7W>ha2`R|7>w`@T1@P#6_mYQ~L%%cd%(FMt11q3NHW+VIr3xw-``-<;* zNdzhNv;q|%A_McJ_N3=SgkQQX%rnt7i~HBqPUqBeK3r1m;FGAAZ>TO-AhO~Ro&w-Q zpJ&dWgr0qHZ|@zE|Mg5(Tb4>EYhmS_oSrql*!do@;WlZhLbik#+oXaJQ7bycrWm+x zSy?KPW2&6Y=R@2zoOk(%{$FnJcsjA-?<3g?PKfvF{?8Ks=VNpC!GQOSnkq}!9JX<( zoSeU%ZQusxRKXv5IyJ5G$PFWwZ&E%a_A2BW;1BPA{^?S~=1{d6JO4X>`p0MI;-0ZN zm^`3ZUxqY>dY$%`Bx)h>v%vd`E%wyCXLGQ@MdWZ0eaJL0s)8q%BShmuHN(KiOy-1B_TPjm-$zL9-=xmyxzP9366A|N-+w0^F* zr7IYr|FO2VHW#w2s?1yNwZlPP>^y5rY;BH{be-fl@>;D<0K|Q!P;KA_uj-kIHZ=B3 z<#QC|L|f5^@YZj0*scus$~WATVkc$`vhPm@+V)#zCYbmrPz?s55Y8G}N3SfoY>8xyp)+(CM;yWHfA3HUtIS54{V?g>ORh48AViUQUaq95o>tg7XKq@k z)B&NE0o8jIajEID!GBxCpT|pOqiW)qBfrv3NoOyo$GPd$jCE1UF=Q?v~4x$zciw1+G*g+zJpn z{;wPnuY@Jdms1RguD!e#Td0EXY@Ds-F`YAwim_vHYy~3Zj2Wiyn_Gdd-#IM`aOr_) z-!~H@&)0gcKvDyY$^JXy0Wk}ty68^=t^(7{%j!n$5Jg3hCUXt2{%gyTzkhWsjJR%c>w_}Ycq2I*$|8yzjQh^Dk@c8V9-dSqGdLd@j96WIGim<&5j)Lsd z%fX0&Tle%Rnr>)Adwr{CTRiX15Ba($6WvC4*r@c|`qgAi{rl@tX2!zU;4_WltM0iM zLb`4!ABW{Pn)@S^F2>K3F-my2G06C@N9`TfQxP+(o)Hp&cGh?&;;5)1tfwo+WUj0G z#}ks@Xu3?{d5#u(PD=00XLIWiQ|g!6gA)_f;o5nP=E&_|5!uajj6+WvHO=jisk)s-1<5OItRi^j~C=^q92uM@Bf!zzxL^?5)d;31| zMKK`J%u!YAmcpA~3R2k8#UR3|pUv7KCVx^%K>ZO5z*#oIh8?`V9yTHLZ5OkiL(hds z6StZBYY)vdgP!NchBmLgQ0BYTbcL^PM#+Pk zsN)&s1h2`x_?+JS_E#myV69UMV*xhr%N=8?!I_EtLNa@4T|J5~K4A}y+I1w?B3tY;2~BuL8c-qNLhf&r!GBV@QVlXbQ@B2OTU3vlnRbtE*y1~$@l4|` zyORm6NPeP3f$08AJA@H4-QM)9I`bf9?ga6nsoS*89P*-uYmPZ_K$cHem)zh9DjBB#qU$geYF57YORw&31g{7mZ_PrL%cp98C#Wbfdy+MS zLpoDNjI{z(R5Y_6@|M0bTGZAb3WIu^YWZsi6&sz5AHvSO3H_=-3O(T_@2ssS^pdUM z{4-QBH?4V`ACg@^#Hz%3W%!Y8XQE(pcdn4nX70_4`E^<+#)sL7PME9=$s3uwYr-Hh zwB6m@PJ(Bvz{<(XImVZmHxT*b3G*lONzJG|ngw3Oxuey?Qxi=gjk}=V)T&pK`3rXk zoxwPDo(k?b=z6s%Rlajf_eYbGI@QC+Dnv~&ktVR6$t3PYor|_Ersn*Utx)4?h62w3 zru_Yxmx#%&6v@^nHrx>V^aPIKms#hZ%)0wsjBhH2v}|}d?)d`AqYZ;u_}9_mbkZB+ctKhO(5xjUzc4Ah?0yLz!hPUk3Hm!gTJ^e|<=S~KY+ zlo#h;Jx&^)aBmbtGd2e2hvA1HE#{qhydJE=9G@zri3S_bp zW|%SK#?7Pk<^>8qHHfS%IoGbYr*7#h3>)FB9iPOVD1kR3KHcQuOCFn zZO%%}?5Rk$XrZ(4rJ~7a++kM8<@V~h_rRj$^eydwZWpsTP#qXCK54eJlbKg9sOKmU zWn%p5n5sm~ym)3v#8${cji?7}jh#^B>BB3oE6e)|R3enSRU*eCI#8izI~&NoJlIC) z->ip1pdFXqNPWd9w{Dd1YW~sqFGumrBsK>YkH;2l@%$5vL6=AblYurDk;pfgHaEn) zE4XNqo#r$w;iqpsn}hV0NkICrZ%t|kQMY;)`D`tJ9i$$@FFSL(k=oFwC*q*k7bBKL zB7x6$*m@)+&9Qcf=g;0Z7hi|iQ!9Z6_C!46vA~~K*&vK22Y(lEks1)n6_Bh;#8yl8 z+2^(MAQ&w^+$baZpN^C8f~eXcgu$UyztpZ+9iNVS=1BCxK0A;qYDGscOcbn^_Hwg9 zmdg`!4C8(%{}5JtWc-TQHoquqcK7@%6c*CBBz0=*W5Zg0CBs7jk?UrhL{~+aB+dmf z_cKAA=RGM@xVU57N#vASS5Wb!-wxlM5*{c~pH+54U53uw4>HJe(Xi@-pqySlMmxr% z>jXmSb6jw7Q4uwvSTKO1m0ACUYIv{0XHQRb`pjel^%bakCzxd>Z09;xT_jW&BH0;E zAX>UlnABTPkTuSI;+{U)0nYc0BCl_Xkqr8Wkor$=iQ1|_11U$P*A^;iR?X4m(OnDS zpL(R0XLY|s0sk>o#pKg$>sP7CaLY>T(zC9gmcm5yNk}J6AmnSdT0nW7j`ONEV>rsG zJI0V=Bm$&*@9lR_nU=N-@MsL?9s{A#CXp5xsBUC zyInwywXSofdy>)?yw45iAS3h8;t8NFInEJuGVaEE61od#ulL2;$(z!?$qQGatqs3$ z(&0Vi#(nBVtT*7v_c9R60WKjCa<)=udCG9Zl}{fDCc(uQGpjSndl zntKPx;~$$l+oF-_F!C1q-Hhh<%+Y^L)(>W&uZ=g1JLo1gV+dzv;1H}PNQyuAzSe|4 z)ludXM0*QJcBeF6BhEmklKp&(ppG9~Ru(*H1pUa~bcJP!c`hmWTXqI1l>PSiNigz= zOj1%3=;yX5JM{T=zgNWX*qQ(OnU|t0HrlurCmtk#J_GdGOHHL*C8)WTsOav{d=yQ* zmSG9@q&bA%nK<2A_VWi47;c3g4T_9iL#ad9waV=r;sah?s%kI3oOAh#i$qjoTS6or2tHo4?hwKaL?| zl1$_Suy&9Xrkg-EK$ zKcCKZ&bi)i=*0}rv*KR&y6<053prtf)hKm)>^xYIqm-pgN}(LGYyRB?=~A~2eF_x> zkcIZ|=r#XF`TG2&8g}5I$2LF=1P2b>fLcG@bm8kukSW{gk3xmM9Md_}K4``<-a-`y zpF%p8slWE=Kj!=2|M_YOtK4RiL6CPaIr%#8CE)k)vN2%lmD4HlfpR<~dXln}%rBBa z#DD*9Un~RjB`X9CJh<|BSH8UTj)vKWC0|G9kx}@KLVZUe8flL%LG(O(vxNR;Zy1sE z(slB)d@50o=Dq)Eh`E#I7U!Dg)TkukqHPWmtj+6cm0S|h&NP-5e`m1JhhsH5i@Y8+ zyGa79XF?J(-u2zQ?kK<`7TtY)5fruPI#m@P8vo5wrhDX_D-kUs8;!y#xma}f8gvE% zBn$bkNvq4N_bH*F%JnB zXUkJ8e*2(6x`O{aUW1CNY90s6P)$EQi|xC7u^_t6J;euDe>XJEfX~f&+0pXFC5VkR z`6{re{O#Y^!bnEIay!}?aG;vLkE#D|6siIDW8%%^3ygJh>BTbf-)V^eC5o>=wS}R( zO1$6!q1wk|9jgBrlmGnSRp9QMd#?A|Z1^PzR&qD*-@MpII-o;wRYlBu7_hnN_+WqM zNTd!p#gz*+ z?y3a9u$IY5rxElxK?Mbtj~H>FimH#VpFPCiuPxtT!}u6^H?Vz#H6j-bvjm7 zU1Sg2wSo)I?_SA)0l&fCtpnL|Aq7&d$*T=q>tc5fv&F_1?sIdia&d8WSuV7b=xA8} zE@HH?*nO-2VpJ=#f#KT3#=a2>)i@2|S-h2GXAW1m6j09)7<*s+It1)CD=I1Zn>g1<9`^5Ff;=26 zoFF}OC({6{%^kbBCwtKtUDo))8*+rCwCcl=z+0&5PO{{gOX-FipmRx{;+*>io(}r_ zs~spS21MJi0VA=lJgLbu3D0-q!F&6cOjfR8>}zLqx2wU2>U?MflIS|=@ubh*x_2L7 zK9pHhIYb4f-Trp_!1+rMSA(6Yhu|o*DB+Qx|Tu!6gZ! zCe}M9&s0hMCJh27dpU*UI}mR)UK(9#n4Md#QUQBl`1aE?rHH&Gf%LoDGVS?uph1h- z0{LJI5Ds)ngDp_$m`Qo&V(?c5@zkzd$eCIXJX(#sX9bbpf_g9g60x7_UuM_8u2+9K z@F7B8zKU3k@Atb0u7cpR%2rcCZ|FMRtz~|3M*bPX-T=JZ z_tl!H0Z`P*2|2v#V8(v@Mb< z?6o|+P;}LPHET%9dFzZN`Z`8j0t-@N>ctBDw5%*adq&0N~q|a7U=zt-!RJ6hCuoV69!^CB}Tdv+~+$5^KP@QKd<-Lm^h8F7z({w zb9F)wXB{YVr;T-x|GNRIAlorMdr| znw-zU=U%Nw(WheM{{Ghv__$Su0MxUc=#}~RG{waUb6qed=Uz;R$B!6L66!isadgkpuag)t951U@k7Cnh zg6Y`55#HB1Eo^x(W;UFxQ)$1w)spl;u+xfG$SJtycw62CU9-~-JAd(V>`@o$wi9V4 zX8wQtWBvtjD1}glu0N8mODu}Gl}2G#m*I|)7VsC;p^|aQxu$MRSIR?I2D3Cr0!Id%Z#|?&ziat}23dZ=iT$C#OIm$~4in(Q0#O%?7A}nnxL4wU^>qFE{Jssys*! zWB_+zwz^NX!8B+G2{nP~VMLfb@B{1%WA1Oq5TH=X>GI3X!8`iO zjR%A%gtl$_DSCR%+uh~+myP~h%^y9x7qB&%op2&!W0@G^36B|^*B#3sjREyDV^UV% z>LmdEyVBbl_2`yQVGOrvYe|o&A)97KcMM_)CY8tT0xQj_&%xv^vjZHLAX_gSb+g*2 z{CMF9*JH%I9)=xUVWeV(){5-5u$Y+!Pvg>xKDoS0YyD__3LfdO=BYixd>f3%HbM_* z`V%aQGQy{)S4BN#M%?vK<4h&!L9L<24ffWMzVh+rkn#CYF+{uT(oodk;0K>v``QBZ zOrU-o7te9ARAKy8$IAx%Q!Wpc0!wIr&6`>y#U(&BUW*4-W;y&e;297^|DaW7q4{Mb zP5?2E-*9WMd928=`WQ8C%jK|4s99nX0*+(J%LFt`rU{N}k4Lxg8y36bm_voP3yqA7 zTH6?tZUK&I_y<;PzD)d@7e5Vy#(-F!XnsC3ucmKdnI%7X)G6yKPFmM_h#J{qaj`)Y z#hjS+A)#gPr0VPxY2Rfge@>hrAx}{@LhI^wMKCfsk_LVC^6EXCZB3K%vS7m>M5}Cc`i5kx_;RrTh0v!kEzeS;^4>Aq2^m;E&FcF!KQ@l=KRz=Oo~@h`c7M`eaBHh}m~VloT~ zjD&G_XI|gnIN0eaE4G=uQ?fZ95n6JmMtCBZU2{9bYO+d|=Wz`GF#rCrz|vs&hKN=S zT9!t$ZMUlETF4DQ^JxC*SfSjfSwt$+vGVd4;bt&e&)zG7!*8YliH627U%kv?;dRC- z+yZ_KKh!Td9aPQ1&QIItwB6__KCPD!*q<0!7%>dR)ozX#5PJkFPM<^?kZG2~r1mFR zpbo*SoMkd5zAsRaCbIiZDF3a;qbPOw2|89hgM10_%rZQf;PakR@UB1!7YUAuRf}4Y5L= z5st@C5KF;~T1f;nlpBxNxN|o1)=y*XLxsBcHPuEg=7j{2vX+XuiSWAEPt~e13 zK7BWH5ptn!eiNJJ7s|VCLx(B%hpcEg3WG{*Jjyid;CrguO=Q=k2ncFy5y$rAe7WPv z`--%Yu4>=XI!u$`cir;}Q+GTr8t<**c^f*UIjvJ{cSlcohcTIDoOZ$V*}_HPr|fo{ z-G;F`UPZf}Rl0Ox_8aaq{zY6r{9l+11hI=41@Krw)oFnym6&3I;L(W1Pg#Mamq-NVu^3*@Y@#xxghNVp1Ano)q@e;{z@oxDcMB#BJG~XDViOq_>_J`k5w16 zNaZbTRL5PicCI}*Tx&wWYuV~fH{37BA6X3EM+nwM>UeobEt#|_R!biR2fuVI-dm5| z&pXu|p>bgKK%F?3DLrsYy0Yx!q-7hwP+{R%COlja;jnUC!`rtaOq@H~0%O;gxr~d9 zU(iFM1>itJ;MU&dft~fr##?(oiW_;{{1;NYJby`5T0_Kd`EpQSE_xWzTnx7QN`G3; zgqx+j>w4MyZPa**f(EziHuk6|rx4)0_+VX2)vmzCZF1jK496Vv^+cg`Rs-pZ=^1g| zs%puS(rYEz>Og~R)!Q;ayD!o5;$_@0V3&pM!I#;R2*QFI+TG~NS3$>BGe@=`PgV!B z41LP&7FNr}PLBt!l4-|HDvM3Z=GXM^$3Rl&uDKm0inwp<_;VSz&mTNFqipiN}BU&O3cvbeQVqYv{vRWxYjnsV^*bHhJvG?jj1|fh~ zivHe6fFNrWiYaamCTC=fx0C!hp@9voG*%u5GpnC4q{+jguG8z4%KVW{@>%aQ37%)^ ze)MIvDv+Y;0YR{G*MjpgY=VJfudlOfCUG9h`1V@^M92FR^ifRxcl5qk7}K+c&~nVVbHK}wDq=ITH$^Sy-@ z)&ca|+Wf90MbDLq*0H+te+!Fq>R2I<5k8P#8C$^G2_eU$)t*9$VJ;t?-(yNlx?o## zqD6P)bj?>^G)3a&Ci*K!J8@Iy>UVFKi8!r~(X(plm}5DUX-tm@jQM>)CsG=tBA6Aa@N}E$2xlgh!;$A%_010~9Xq_k8 zjXQN_+!iQWa86dZ@7oOIu(7f#3OZKxT)plAuXRX*noreaEr&%Y#_F(#ijECbb~vud zM;*s+3J&G#GEN(tfocIKq*Db42zrLkPlQ4@KHF+%TM}Rzh(_gb;|R^Z zew*F`!=GN#(eqlDavh^sRVGWwvE0VKm{7gYFE7~omc+7?Z;2xWB{9~KZP;?cWu48A z>t5xoZ9a~Yad&=vKTTqc(iT-*#gIffQozie?q!*<6F-{1qXQU`cS|;o(`O969VzC{`Qq2QP<30nyU# zt84>`uJn4yoBY!+HG6q^94s9)Tf{{qFG`pmxEW+9bs7x=ee~m zG{K@Q>Z%+in3hI;gWB`)#XK(KNA1PajGEJ5ZG)krIH?sDa*9Y^2G zJWEN=6{8uA%kZ7<0TW#>fyS(oZb9kvoW`ZiMy@<*-@oZA19Vn6xha3nrpZRtcIYD z%MwfB({xr}UpuFHiA~cU=H$87^E}0^0AR0S-1AvSl1a~&xHH#}$BXwH0?HFMDUBS5 zPup*tuC~hN+4k#LAyR;P7EXt`O#xuok9P5rDkj{&{OhHx5Q~V!Pce2kkwgxU51#Ij zDY~9z%r01m=;EI?laX}WZp)bWI=yy6)h5aoOJ~&))zzP&Y^(X%E_nqDHK+1B*6m@^jYft1>UGM~nUU$Y(8}xrxN)E93i`F`R}~I(A?D z5jPlmu<_&gZS!}R`zC8>#XLXlrLE6hJaRA|DNIK2+$3IzHhfnk^oHV^_<^>J)D7_XN?}|tC^2f@`(Hxo%61fkxD((GS8LRC=Q8)T&q^iK5)S^KyQnn1|uYP_}GM`M-*fk!+E-HUV0cp8; zwMOt~VpDKBJ!gUg7dNJ2##^0cSVLHIY1iuCZ;zGR!6^}a89lUPRc}^uGBW3^*~rA_ z98XfCwV#VXd@di)&F^?-yivn{K`23D1X#SB z33O$V36Igu;>y{!i#2x`6J5-TA1^uDSLgSjn(@Yswg~FvZF5W~V|ghRu7{#(24c_c zMSYyzrt}kNM11k34I`}xNcyhY*cD+hK^0wXwKeOU`e^7;I$O8tKgh>Giie~Q>AI& zRnCl+n8a@q+B1o8psb7eo@uK;Z6?=U<*+`c2~+}a@2&BNB})YgIAbB!=@j^vIo@^~ zZ%)C}kMSs9CdsbUV$--hj^!sfQFv6*atmj`9x3hau%e?cxIennLr^Z-agFADyQq?W z+5Uhc|A9qR|oH04KcFCo%HWGP=$UVdphNN^P@QP=|=oy;kck|4sxYS8}qP!j83gYXEN) zoszl}Y%a70Kiyg~TBGfqO~*AQBo$Oh5~x3A&iKfjf!0z;wKNyckVs$?WSQM2*~E5( z$Anb=Nb^oceKFRD+q_GP&lC0Q}y6# zhUB&Od&}+SUQWaP0^JVz+`8H7Vp_EcYjMO~RwXEE8IfkT%)0ULn$CbQ{q8Blxn?nXn2t&h)%A7mKi0WP?MLgi-E9hx z0X&^xbvor2)l1Kn0-O$`#@qj{8q#%Nz#{j9AFeVZc5l|ck9vFKo`Fa2=28FWov8iI zX)>4btN{--yTzkh&d*cIW^o&|O3h{_jQuZ5r-9=dv8*JkEmGVabiXG$@kS0E5>!wt z+^m4>mhJ-}39VnbmM>&9oUdztxKg&T0MjpWJ2G0IxSpa3QZ1fM zn+Cfb(|YBG32p9nQKs+st-OR(nGtZUKXgK9nzn)HZ&2>KuC4^psFCDwWNM}Bv|&Wo z=n7Gq5fl|0%g4|SPAv_o`*0ML>#(gQC`d#@J+sWnmBi2w4(120O9aYNO70>L!h=2C z0|YAQd<$D>+%>0Ycqa!_q=T5#G)rV8_K8+%+Jg-4mv2p;pp7FQT>Ul^cLhZX2R2+#F9GN|)Pb zObsNf)#J7s@n~0aQI&XOt-xrhD_t`Q7dBRA8NFwg^yT<6qtJbf)LaZ*Qu;@dR?IrkB}DHJ*~0xY*oY?) zjgWE=98Cc=Aoa0eWZF2qiqOxsY{6c06SSswFQQA~-g`7XoRc;&jp24pAWUzq4Fu zCiV6hg+s|XtGhD2X$@WHvyN>o@$i6W`!Gc`Qu1Gd9I_<7R8j4_$>!MiO2xO`j7;RT zREsrNEYn>oRd;6=*hI>?q^`v9W35mEBP8LQEzj#;gBM8JOKCnJILZOYu1_c(QyA$Gq zx`RN%)-saC8y91wUG2iAb^LB+)qHbUJ;74Joqgr;%PPNX!toLs!}+Z9?`1u7eY&o^ z(?7s#h+;#_=U4Ub%N~^uD1~Vz1>*=+M3wLPV9Dogw6M9-Q*M^oyKcwNRBJ_p#+VhBjIQaHk|m)Q2N+6g zMVy|IqvUeLTQM*+-%$(&F=$W^J(v!bR}_OEU{})++W+HgiM5+bjVTD zqt?zC?mU5#cOTji6Z(SKDyh;Jz1Q-q5r;l#n=8X9?bpC9vwd}>2!0F-wx6Jp@PkEd z`-vAV*pr|uR8cHyc+_$As}0vq5Z1aw&1i{f=so)I(J0oqJT99;QT?vcfDkHk56^vX zAe>#K<2dwe8|1>&46e>Y_>Dx@eX>-*rMy?|p}c%W?OG^M+`tYVL(26 ztXg;v^zO43+ue;L7;r3KuKRA!h1O1KdK@`@s2($#hC4L}SN4M*)nz63cdS1)@;-_= z393hSYo-AMGW9q39+^_>E5(j$N_~(&*4I|b?IcFrH$B-1ggG>v(pV&SEcbDD9&1*?w;ajZEDQECDaV?Dx=h=+b+A@w{b;j~emsV3h54hIw$-DyT z!-V&SCu|_myvnRK8OZ%;lur#m>+#7T3EpOYXN)qaQ-aPwD|*FITgl_RtiQzm^9*J?Uv1%u-z_ zY{V~FtctZ*oGuRCk|a!b)UES`^XiWzsC}%Ew;0TXc!>V+k^q9mp`7aiQJ^K~aU^Q$ z(S{~EBE48Z@p8g_Q^aJWC|xnG9fZW_~3zsp`0A)6vFGuxz)TT0blIvKEWRZa&kRvY{&w>0Q5j|P;@Weu_6d+en zKN2Z!EQ?uysBH(Y*Z0cf{^G0lv@yF$tcHFj;01K*bpV4Y!rWMqsB+jUao5vJ05oaZ z^=Q11B;>pnv1m1mL@h8a)zc@#&{e9sYJBinw#bQ7RNQd7<)?1nZ5OWaFu!WqU2#WRM90KKc$$LQE%D0J zvhJCHlFqD`BFZpOgsAQRdiAp!mcLHbx!F1M5RAC7?-7l~d`mb!(-+i7XnA>PL-^%Z$G_w1&vf+~2e((YkA3?{!vnz*D%J z$o0FZPK!UV$%eb)426% zghY=sUi_z(@&Kl3j|!f`u1YQkGyVh11wnFAt52i3BF$PAwPUWYHS6{hO%+|{Ca$~X zXTa;~x;{)>&>Xv{2PNX*`te zg;ecadrju95fQ3qf=H>1!Y9v^!j{o;$o#^XRHZ&v4(D7Z#Je*-u@_8Yw{d06rcMA9 z=j_+=)QyE?qiNz)tEGvbnin*p))TpBiapT1!)viRMveqtJRQAn`aTpGHwoelaPi`f z*SN|)ACa0|)ZsZdKx616zBtixhFKLMv$xA-2!U|#P^{pbdzK#h60nlgdHM{|^Tf7l z<#JzTse@;pX|8KIvPm8!O0J;hu)R@T+rvxiQJS$Q4V|8NUd291Az36FYSSz`y=Fi7 zL{<~hB4L>w-n9sSHxEoO^AM)NfuhR1LR5A5RQI1pj%$<-e_+egp0>g38fklRDW~$f zojeFHh*Q#Xpy=Pg;eLa+dd|C>EZsX=ofM?PrB6lIVsIr!u$HFjF`dcxE|Bl&JIk*F z7CP8TwNB588RHL~ieqX?H`w)9?6UE#_jgqbw5RQUaP|&lKZ<;`{k&p)-iiD8+cFjC z*Fg9`o{p#UM^Qf>%7TV>9=m9K6D+#gP%2JcY||R{VtcFeU@djP6bQMPGUB786}QWd*S1z9||2CE7I z&9mi~+D`2Jlj_ArFM$7RL@E@vXx~JFhivrKbCm1I*G+^m$e-X|O=hc1P261@ekfWo zhJK@0D^Syb7n13}Flf_v`B{=@RsGeRsmP|FD6F9;7X_#rRF>$VqEM7XUleU9U1z>; z?U>Zfv1Ax}RXE@bA22$a3tLwkKuP$nV%(IG$4SJ!^>ODgp^eYntE+WCW^u^HJmdFV zm0nmze_c^2x6*{>5BqRXcjrq5q7bHU>SEmcZW1NHXHgrImR&bd0Sa+^Lx&9q`L9Cp zV_at6@XntcZNl94y78?-OAQDZvyOP}2EV;$u)P5C!(IH{I$Cs%_C*f#OI2SLU7p(_ z$KS7-xG0u6MGnvLDjXhd?wKUA!A;S!92G$)QrW1r z+@z}rzaU`s-odr0p31e49A&RN-VUs^>56U9CgzI@axg0&H|() z#nK^JYrC1!wmI#cf7;^;EXZp93=D-k&{v&{)9GheH7PH38^pyR5+8p6G~?l___fji z?o6**0B%Vb@%-k{ke+c@9Dn5cc!f4J#1UrF73)v+WqbnXGbhf#At)R5P@LE&4QOiV=WuuA%6$kfiba5Ic#<)21$s{y_CGO$>TF%74*0xyzHqf@=0_*enR(0du<%%@W zs^Bv3pReZ#$I`k-pg)l(5gl$bRnxe8Rmg=ygia@2;bBgfJoZ$zqd#3|9xL&j8?Ybz zt_PAGK+Cz#)RzjE9`imE=uN24^>-Kg@i~vg{ zqor<hgT2e?{sxBHO{=Id%}0zlh0 zw_zPckJf~!KCANbSraPCq?l|SBYh>Sd_kWiCbjsrBlWXvl&Yut9*G11}A2a$C-v6j_``5LF0U^#~{6+O&#>X37upwyZ zAK=CuX5opRW{HJF3~%L|-Wuyp5?zAi+a!)Wdq>CO6!qaZ!2TkD5)BHWPrDuXYTTFO z*;JLIX>adq=^)bg;ClPH>O9zYlfp$gRKUiR<=&OE7lr{n7*a~vM-TDOvtNQ#JFUNm zyAxchS5;A&2iNawHO_N@TtKPKfbR$#PA@V^pUp=RuLVnZyQ!t^;hk?lzGS-gBDjJl z(j728W5R+vk5l?^RFuiZuLA7O8P%LW5%u1}0Q|ZT^Nu*;aXoMl*3zm12I$;!z^3sv z{fw;&$Pka%XVe{MumE&)+AdP;I{8+?^Ea}=B`6{_B_~Q;L_(`Px?Q? zpq#qk#vS+%6%`|INvm{OT3EbIP5t4y`?hLh0c^%;K<(1=4E_yar48f78o%DIyPycZ z$<{^yv+5%rha5_ow>Y~ zLHW#O7O*8Jh7|4{?Ps8u@|j2!tN{n3IU(ma%iricy5Z!D@5+0E=L8r0AAAHr(eT*V z**DdIV4}`_-S1%Bm#$Nn;7-|Z%>RzU_h^AxKT%yBd2dE3w?cp@k9RH!}eC9Y_ z4Sa>V+R@p`18+q3@LX$2fWrKx#ihvb43Of@LHmk?i}`AxAYBoNmX*@qYdP@^f1m92 zlnXfJUEQ##3>$M<7t0M>-61`DYk(E&ol5w9Y-w*7NB(UK+fp3ZDxW$kMjiHzCH+?bQ>1DJ{(@|Alk2e zN#*wh_Qct(SQH+ z6ISnBMge9<1g!kM=PGB<^3O4<0mOj6X5jBv6ebxV1DM%~A&X0p6BHPfVc&<=zaQuC zz|uOpS}O#^BpNU%ZX8*7XCHZ($JYZq1*m$?|9La~Z;=0EAN+5S|Fr=Bx03%AfB)YU zF8G@Sy#JvE@W0RjV&MNT;`3Hw{bJX+V%pvwXeq_gZcbwH{?6Kdn-OH4Vs#ox;H)QO z0N{cY5?$B2lPZ;6Ss1`ADRm3)%u^{(eBV^VR4^Amw@0>j7>9JXZBg;l05&EC2Bn{F zkpZf-7Q^{7%@!uwjCk-U)+22sAC6O|>Wwxm^%9KBk--npIGT-FStV!dG zaP&p&TKdKSB@VK>{VB>+=OiZqwRuoNdbEa6j+yHgT)Pn?YAE+^>GRgBVf~}WiJpg! zs%4;aB;V7rVQB8fwV=Jbug!FGBjhci?}qcXNyP9tq*s3m=$4o_&D@IW{w9EYdL<7q$duECA>5 zY6DUnFmeJ>VXskyZ@M$uX&yboU*?*j8y|N&%dNCkaW3i8ptaPH!=* z=fgnj{dKo_x}%(;;`@ot>rqiok86)?vU2s{5~WJKmNd4D6HNNG3SZrhcL%OQd)(?P zml8p}j1|zFUW`Qpx{Z>>clU_~v>K!6YQ`d6kGt0b6y2#%FZ*O%n23oKIoD zQ3D8L`8h`q|2aqGJ#@$pcCv>_Q>Tm_u!3%TsA7JdhMU-=5@3>iFiwKctQC-Hx6}a8 zeB$0Q1@F5^8iKO$wE|l++QfxtQpvSFwG5}nCHKtqC#y1ADQ$&sf*x^HM&7pL%0y-5 z?n@+F3C*G9d``qd8thIRpu_t(kua-0-6-i^8`~o#w#Qm8o#L@P%imV>o1QHVt)lwC+6MO}kumg+Z`g8#^} za-Y+5x?n-3y-ssVKQC;FFB5NUfYJc#rs68QY5WuVj*Vog=8lgN02EJlFWkb-aFnu4 zeYo|#$ii4N*;w3#0t&sol^vOH9?OsRR%JU_D|Fc0P5~680fU#`EpMnnMnxzIssW%M zlW|AXRl!bjKRnt#sVb5C4@v`L;q!br9r+b7T@$5(Zav71TgZZg=+Q3>xj(P}=PSVV zzcR=F&+J!?gTO=>)F#`%AKno$Izs7wnt2w8ub2lpwJANE4e4iKV35Xut@Eo^b+SzH0)Nbfb{Nn4^%ynyDR*uG ztoeuOC^)6VNq?GGTiLKMAx^^Tu$ZEaja!UPe_=jLS-|ahPPF#HH{XI(g_!VS(;iP% zrO$Lg563puF!21Ro^;g5enYm((!{6PPxThN(VBWxTZzkM4tU7RRdAx=ibd)(X8n$> zqitk~ZLA0A=EEkO^>=!2bsoJ@dp?{u{L^l~3b4g?rG6h%Ac0`0Y1_HVahmg>VI z{DuI6xVslG2lF+VlF_Z4ckHpS_Q}LhgC<V?fzeh{9k1 z+q+ym)3n}|53KVZ>HYE2>l+7H%-$a_`?~5P=@fc;@+;JNB%(cVMH;rpDB=TuLC^g> zkZnjYH+JoEWZ2-~Q|_U#+EpB*F^R7mw+-s5Mun@Zz&+3rkTBd8W-EFC$t7&(c}0|f zp4HTZ{)0f$L55OUKuoB;4QLkE@1}rqiuYb`BoKihc3brt1g5Q;4m7MwpBjl*b@aqe zOC>#ztRt_~0;MNs8UqA?mwvcc(p95Zm6FWM7>zIchxy9>#9h~|rv1*1UOHrW!1@AU zY+hFC+7LwwCU~H-xQth?c|+qd&_#CPC2U(0uXP11=UBChvhg#U7 zW&ucf_;2EL9NOJB2*PaB&u;tXusP$pV}oSg&0*EW&%JcHQh_I2j_v#cQPgkg^aI)I3-J{b{o0Ic%MSEC5mekmzaN3n)umrm>2@uESOt9 z=5$8@)^RAD#Wpn7#wPtQc-fQ5XjBxFX8$mKu4xYp(35KQjDh+_dsztkhilzpQc78x zic0rq%(4uyAX0(BFbUu0=wdMX!Q{}ib+|_ts+UG9nPg?}N6t1vTeWKuJaw_WQ2X{m zPM0X&0MC58`8~*xet|hVSmW`4%RzzQ$e`<-O45xs8BS9F*G=a?e)`Y)3rM!e*Zx9; z*Hv_NmHtWoys6Hg-t)!0Osf@8z&n3r&?>r$-qk6-Hed+?^oz@oATrj7JBn3t>kI9X z?~Ut@-f>b&dQRGR7;dk}Cv_sggO*1rw+`#G^Bw7Vp*e}0{o@no#sOE!O`=+TWF}Dk z2415iSv6VQ27xYe>bc+ZWUiXCvoUWYQ0IiITmD&F!W_upTjXIU4C=b0O%t8w83}YH zqU4Y}sB3T`>rJd{QSJ9KsMsT!A_Thg^N2yU}44S@jDYw0BKWDt6xV+!5u$aYyeFEUaYc@gEgm z+by@9W?()&l*Qm79>Lhi9TEVx%*}fOwc2lIHCkMEQA)&w-%Fzx@B8lxRo_2iYCaTy z)qJpao;QOYboJ-O)uV-_q*D(5!9$d#QT?lKO&gotWpWc5j>*0sRYCJ*!)~#L_y828 zl~GRUA+quLCkh60XiF^h01OPSS0?n$3V>?vdQ@Nswtsz-w3-c6VI)LPXN^HqTuLN$ zw?*gy{kYe`l%XtW*ehsyoZ&jv0G(nyZ9jbo1*JK z36Q8JW*jK~`%JQ+!AAMe5-E;qmG=QpOZRtvC)MPli^;-S<^Gw4&t3OJA8nFWPEjP< zO;#x`rc>|=%Cgnf)DGsUtCri0-sCpzj(9O=@@8@oL{YvYEAOZZRQPC#*Y^a=gy9-j z`YioZo`Id!I03Qt4t7PZB^l5$J%sUCu~$29avPiBpu}?2N77)4tbhb`kK6PmbKPmJ z76x9cmUq}fMNHwh(ky@|)2eWL1Y#UNL}v#Cg#)rdPWXu0DO_)gf>&{|3*8i7Aa&hS zX#W(5y{Rn1Pu{8%n&{WltoC{q6o9m!;*|hQPU@auD1`d#%Lk#{WsJyC*)2>_5&8HZ zWpwFAe2<|-5gWZ46m66>c_^Ji#|hw2e`+MNnXDS9eHx{{zA`kIjOb76V3jyp>^hPj z19%4HSQ(>PHCo0u51b-QNGb@56STL*$12ur-J(Xv;|s`iG-PA>;0jgFlqP(E*BTsJ zcFm!wAWkm2IwWrD3@1|u5^S=;G`*9cZ=4C!hx<9Kb{46S=a%b?#+KJ(Mym3;2GNqyDt(FC@kEhGxn_QE601d!=&hmDT@VH+3%iR#+@Ac22 zE~#`1&K8-d{-B5p(C`@IT>XU(7^lc&;>IMORquz_pwA!l_kI4K88hAJ&+Mq-pM_fT zjxjLk>WJJ?I)KaM-th#D^A8WpQz`?x`}R86y`p!kO}geVJjK3vQislT#qln}*FcJb ztC1q0TY%KTj?cCf)0)@X30RK=X}wamT3&otAM&?)Q+IJdk=^HU=u1T(jyhl`F(2qB z@|*JplOhl%fG&}P(i=e_w!^MS7?mmeZtcIz+W*pM39I>eU(^0ynf(&s|0=-$k5_=P zj-H#CoG=2RN<@#BL51`e#Os{1Zz*7D-}vxv8fTeq^9xl#>*-0*v;gS(Y74#WQ%4v1 z#suTynf~l}ZCU#N@c~(OS{Ppu52_=pojzwL&|oWxXNm*dK9DAT-`kb%@s9@G1zE>( zUs=3cd$MFlLuKCto&w!Kf(L|AjS)l{lh_35alM>MO{y%v35>7AiT+YRbDLGdw0ac& zj3DyIz7LfPzs5nO|0CV{>vj(QuRiC3-U>NrW#wap3Na0zHy#|0%MaJ_n*ZhvN-qE; zvwL8r>rIdatr7n0u(1>o+<|`~TI(A6*S!A6Pu@m^-z5t;FdZ|XlY~i8<&nNIQBiE= zt_B62zxx!Bo@5FO55LtERPCPs^TR;s`~+1fMeZ>~OI^kOZ`x-QL-sezw#K|PfL1AP z<;AJr<@i91utfX~QIoxB=DET#D|9@m@w2}I)>`7XuCvi%XXT3`TFEy%i3K@7IXn}6RP;18mI%-LfEs_+cJFB<{E z_r;Htd{&V=J=NniNgPE5JZ5%o&uM>iLk3#N7qR<|Hm5EEpLOiv~9N4qVt?2k5_#!t^+{DFOg#x^%;^?gN{y%3Csa(iNglNpZG-Rx=^h z7S3>+fnhfJ%A^D#sWvDPjkr~n^Y|2g=W3_{Sq+(yqqf%856Yr3w(poVi$4!$JNi7$ z(-K%+`?@9$p0gdu?;!@t(yse4l$(dM;*{)_YkCn9l$`vyPv*msae3{`oXzFn@0lNsJIGzAIg9Wa+Ff#dIQyBmpWmB63^ zfYrYZ>Sf5xjVlceS%r9K4xug1@$n8V5Q3874*mut9tGFv5!hhPrZBW>sWAJL5&Kd4_N9~S**KzOIuUMuUzu(IX z@Hir9eaQPRB3t&L3Y8C9BA$olmB^7=ZHyQcPvJ?l5r1NVZu3?PEkg^fK7(DBnQ!62 z4onWnaoi|6d7Nm9mKd@P@ng$TL(^mWZl#@u?*#f^rle|>rAQKRZ`Pqvj619(A{&0h z#hacYJ%@%c2%1x9HIqJ7Cd9BIs^tuQ7jX7pO{oWRRc-mY?(@OiO5wolp6k{Z+q%3D z&vFpjN#oQvL4}uU>od}6zMMZ=S542CL*x|H)?)AJmoAL~9j)S^&h0AeaizW?33*;^w>nb^S_s}Ney^zU;!!>sN zv7WP`H&;vQO_MxK1F#159*!I;Feo^^>SzU{*YMI3y8l{d_*bic_J29Um->)z4IvewIAk-=uP}Ef_HdeH+SNuhL*Dfl(8IF(+Ay@8jUI?qVQ614 z{a7Q(!t)oaR1KAbi_KSRU3E3;x#|8*7%PM`JXZETi8!ItraGR z)NCoMM(gLH`Fp!#Sm!pX_YG6(H5yJ z)uBFl9QX&WuAn0Y9VmV<0&{mU*K*sIkCRTX(9zwF zdu#`CCeRj!PaXGvwfA0OO=n%(xTA=n2bCg7u^>uEM0!yi5NSHJ&zVlr@AVyhC*RD$9O%r>{_VZ?TKB3q zZ7diKZpJg?++vHhx#8CR!d%vL@pB zXHuQSK0MH81%<<6BaZ-if&={>jgMfK>JHn71PiZQyY}@uG7Np!QN`nfPk~1FwLFWO zNbQu3t6wg7Jv77woG_UmI={ZNI(O*C^L)ag`Sg_b6N#_*Z{6>=eJ1iY_&ool+V3}M ze!FGxlwb4aHCwtrgZa-r4}KNA0ipl%`t$R0OOSI7s<6uwJeI@LMHv|cIwb`qCBqV{ z^b)fvukKm06?)>6+g#!2$Q}Y=jpw<3 zf`<;n*M`=v`7E`cs7vLNJi6xL*GPCm8@;9#hNf&J@OTd@@=o7-q@t#mt3LDjPaMOy z1#5ei`od9BKhFzSU?|Eo6@CTw$N*}zW?#_8aQPx6TAxOFfxBhqrUtB+5AbT+AyZ}D)1g)mI@89fo0*J&n2fx76yzSyIaiIV50#Vh-!D&< zV28X_5-;^Rq6=7i@RUT0GZ+rvrS;@((l=W&M46@0L5zrZflf;` zICbkVd_2MUx_W6@=_T*pZqUtlZsDPnlS_Hu2D}%2il>}J3JXPV&@*7CNhy5=bXYF4 zRKFwe1-@()FCwUNwSOS~t7*cp-C*Udh$$$ZJ}ionzG7&@dQu2dV0-7A;Hvy75LfML z^@z-6Bg`g1YF+C4sR?HqMHua(g;15S2(23$Qfj?5} zqlUbcPWQ!;=?3oMq~m90Lq%fG4%kF9sh!NT+l!I$)%kl}I%_X3sK@c1xZHQA5Q@v3 z&VFaXXb0sS$EsL8QH>zzzp3jn=Mc49T#6n5{I>bNGgvcL(JyQHV{E~49{FpxVkFgHS>0?&EnqsGGeJdqQ@56Vf$XK|R?DXYTqL+);(D=jonGys`=FV0IahEPWQrxY0oeH1+mO^|Y#mvMv?3C*@ zJG%#s5G?g@XK+Dww!jP;SHr&PYvveV9=++_2s!K0%L#q&U@Eq@rz_QySOm9 z-+?jejU2U_y68GMd8g(Uf(|<^ED9+=+1sJcL7bc&rcZ>or%DTIznssz191zmHy-zh zNEn{3T`FR>&-AoSx&nJyJzr6;P_uY@wtQG*tEb5>Z8quTW^?P2sO`1k!T?Mn|IFq@ zkiZOP)2sDuS;x#y`<);nC2pz%MKOYl4KuajA9L@lcW_5|`|!LtxjDDS%;G<{j`5oC zfA@fR7$2dpS9kWr1urn?G?mdaHmiLEI=i`ZUlWJ8oh2BEPyAKUs%9M)I#fi_nn-hg z=M_b6d|V>mgimY~z=Ymumo{c5A@v8uOJz0`JU#0vk5lY3*3A~BdP*%cuJo2VNa562 zl;Ud{L|xVhYpy+0B&*KLE0*A$2m{go`=JaWcJ$$yb$Z&EhS`c8S)?f^Yxmd1slfVY zwadi?d90&5s&4h8f;`kLcGNn_YM3ilZewt45m7t7HUHVW$Q)xR3XU#RLicyhB$?rt ztgF4-Z|6S>qaqeYTiDefrLz%MR~N=fO))G%-`iSiJ}a-}u|&FM-oIY+AVC4-zL>$t z8a)E5k+0%V&`P%qu6*F+i!C*;cIn&*;i5{p6!rUYEN*EJR8>CE!7^b6MTYbtFt;V?Yh>BfJ!2G;K z;0AJxcfm42OAnaHK3Vcyi;7pkBKPrQf<^JQ1;W&>$0oK zOY}RCcAcEFGeVH)iIErK{(&~RXmYL>9kp;PKS0oa`rEl@BrdKBUL6=JV$! zRcB2sTK3ELkRut)pkrN=5Y^MSA}m@y9P|e<@Gef?sehscoSFdpKehMBmmwUpk`!Ix zh|CEkziTju>~XcNmNT)*rmj`)#4|ff8PMT`ZbK-$hQ5*o=iF9{3VT>Ko3Z)jMqfAK ziFKtp$~JaFc}*ocMAQMwF7DB(sY0hxzm+qV3MO@jz^X;eE6+E6HTNFghWVYZ9pw=| zn>8@I5(}Tt7hYoHF_!Zcd4z|v7-^3PV$U#9_8A zH1Gtjx?%S46@mnZF<@~l*9NxBh778Wn&uNwFH3sebQ<$^&Sh>i-H~tT(%m*my3)(4 zF?S5JoE;aTj|p_I+?Y1|_};XZ>PIT%ja8hECvKC6PtS>!FQ0=%!;J$v`hZSMd$RSI zd^B2LAV=$D-|9Ab=OS>)GoM?FDG>$-kM~%3m(7=<_>Pwo{6?4W<&s9@cCJ)zS|%<;JaXPidi%0siIH70v6VpDt!~>8BSd&=-$fe+LR9 z>=(^W79bbPvG;zkDQpL1>3+(re>H#q^G+lM^NvzCa&rRAw*MBe*%~iS$6?`P(d!dm zhV{e;R{ZF2*n`v9+JSAdjUP!k1vAac(2j>WL3{c)j4A=1zw}H!JiC(zbr{Z5vyA_m zgY|H5Tfw)NcvxM5-7feF&ii>ld~7IMph`DU<(Ni7o&Ba7{nBwg20_Hqcl2;jjcrxU z#vX)({KpPf5H?gFs&otjfP|wg+*X+F0z>GMwhnHZI@O&))~)8Jmlr6y1At^O*W+2! zbK$6!?|An-WmG)8__js_0DNz{l)(rZ@j-wKTi4UQ2^ULCOFjC_QF_T-#Tcym-`-3p zy4kO#CUC7rg+)bi$GBDHuJ_=2yoBAS56#}#y_oFBw7+Ng^Xgd|zoTwAg?Aex{B!FN zt9|uR_1m*nr*y+)96J5d%eC~DyYHfxH_B+?WviP295b>gQ?xl1eQx$T~! z`2QamCTdpv#5d;0XKnRBm3M?|D#-h;FWBPoLNFJjcVk>E3yq07_a(%3m7n5QKxA zo~&uCDT;xD$DIVX@`(&GLvA`Xd#vK}$0II#fHVFtc@10Z3|Jm-#go8Kc~SZ(1orak zy|E9(=)fPC%?yYeM(&IpuNwLi)C>tHHh=-kCO$E(%dxuM<1phZuv&5$i!u+psH4uD zG|&X-?bS5)(3&4!YpwvwfhfYwhqUevj*d4l{)mptV4jb0jwKm__0vg?V}JmRpNl*U z2Tp}0rK5fr!nZxSiH%ZO%xJb*{yH=w6$oH*IHGRR6y{P^5g}U9FI&5_y{&MkDh`vs z7kTWYehBC?kCMG8LQ5-oyx(hpjtAp+mR3W&cK*Ik_PkV;@6wNml^#;S3qvampGZ@$ zZIVl8yBEnL6~}qL5RH8YAM!LN%_mLVzPTEuGMMx-nhcH3Y6je+U*}A>i_ZYmP|c6T zWTe!k0>3T0)fC#(>qd6nOL2}FS_6uYh-bIjEp+`k>&;%e&KFjgs%dFyMOl@ha@EcK zXAQBYPKBMsy4%(qNz<&>Jkpkx_u!mBRy1-qW|P71ECUhrvs-lpuOLw!+5>a*KBM}p zgatRKvO>eVE1v)RU;p=T{+~S)JL*=%DQUNv^r4tvbkWb_Srq#6?b~rs+MDENC zrTk-O{~?n$;rP&Y9sTVVH1Wor+oBNR?kmuqdX_sU*?Ri>Q=c$vIeo2Hy6?RQ)C6i` zQamIlCuhvUy1l(U1tAD4d&ZA6eS=s#3>VnB6!3^d5oEGs7ky0BcH#twzGIZ1Rx<&b zqFphuU3)1Rpw9V|4*G8TZgab73x~(FpNg&33TxrK)~w>LiLVk-pV=9#TB>`McK{S7 zlg=QA_gh5aAShPs7UqLcxfx3iVJ}kwv`>g4;In>b2y9IrZz$SXDcNton_N5( z`m>FI*RXr0?^dj*nSMoDKmX)I7MM_AX86~Ywe^JM$?UhyIIvA;L!Ey&`R_^o-4OmO zlR($~`*8lFp#Q5q{#8N$D)V2Z0s{TNU~zU+6F#>;F2B(SK~aX9xoVvXo+r{LxN6aE=iN3JPq${@H_`7OL^?J}ZX@ zaIw7KFYDe2-H~t|!NMBY<}^uhX{H@M zkuOn#g9i>s8E9U+Vj#z^hK`%_HBVOZcYRmiCT13uX?f4)uB+?xvXqGms~XBab6exO z8hV<_eyF$@UbkX|Qnt<91AT=&VNhKC@aMfLfu-k`%B%B#qK8A&p3iQxoJ?KFkSX`y zjTd-(%UpqJUWfJ!Wr0E9#^wu~_huv~%4&#THOSntijJ9HE&1O0hmg}t-J4k&aS&t6 z^;rprl9m4Se2lIY4P3l#c^JJJ6-$q*Gdd|<*2K;oX=UkogVU6=ED=8rGJ|F!2cq8_ zo9BlWuk@Jda3zSV9Iy99G@J{#f zpAfa}bJz(D%^`1)UI$zr%9I4i!vhzo0)i8B#20fMI5@P5X z=fs50IZjYoEso>i1KG(4D|6-2%^I9u&|>%ExMQ8}`XM&%A)Oe`T>rt%V}g;Or%7nt zAb_uTMJ7N7S=zbCX55PZ0YWs-JY*xS93VYIGH)3hM-+PZg!FgxzjsDYM6`)zSm{rU z7(B|+WV`}3>Kg4ttB0bGmhmIu9p*_g^5ohA+*GbbYN_1hD<$k>H?zwx<=5?7slOeW z;nhtExc+YFtCbQRI>UFv4W66MtRq%3^0+NBim$3Rpf$rhck6YhI*5D(G-Ku?q_9l* z9XSV{VTILtd`3#RMmIi>fEar=fwkJ%xbZNnbvGeDCgtWoK$*6Ke}3sp1TkYVzG2sz zN2f5yb~D*&Gw+XNUI2YgE>*X>)w%9^Uham=3)sm2ZZqD}m3Mr!O7`NXJpxO?s;e}P zCzy=-NGe0p)%U&g2HC@H0SP_&4<$fq;v+G+OyPE=Si&$8LL#xy=r$0s zi*IoJ@+x*BWmYq|8-xpCh`P9_6sd``cnp~ujT0(BCOfZ<$+sR6qD~7zHi4F*SD}7& zd)~8PVQowu8GsiQUe2d1kEHEJcPKqF;v#7V<-LJ%vsf8Ds`*j&oR-_eGHJ_Gi#07p zHPjlS1=&7D3X!gx1m@~fbZIMSQOk+Yg*Wl9c zHs1Z8kMaK<;Qf4ElYAi=v~c@$8Jj$WF$j+!GP*y{2|Z8 zkqlO|N@>G^g?;M^G^w;-RnvT;@MaFAe>%Fv?f{kw}};^7@9=U;#98gk7& zQ!UTU#4i36qkt@7wQ@+dGk{eLa_!-3-K}i69VbGs!E?DrV~s65g{xSDMf(sJczPc~ z(X@&#LxUq}5zq8gwp(}36*4O=j}i+61J3nfCjTViG_7_t-)$2?t}Td?HTryZy58@o zwGPPlI9I+WvlZhJMUM(8)<94mIt6a!=a8>?~xrG)h z$Zl$EY*2wve6?~%Jn8H}0-`-xQo*_Qt1|q3XhcK@6MdYrmoLmNMKVFBdT7qE)VP9A zO!_TwpufH?HbrIe{Gv>OB?vt8rHd7wqkcSmr9HlK%$O}aVTJ~-MTK^c#!CkH;cHe| zP*m?5_p4M0i(%;Zv`%LSP?!z7i$hk7&m&p*Od&2skSuj3tC@1}u!H8qoUjhLRFNw6 zm+}(2r;^2#s&qF}JS=#^11A)sBH{vPC=%YT?gqxjXG%Mr8dv;>A6)mLt|vWLvp-%` zOvdmb71P5Vtti+jVuj3c96G+<_ns`}d)$kGTKmn8C=N>>xxSsD82hM4$M6?2qq*zX z+g*rgwdi5riS!D_q^+4ZUK2F~dG^5xw2nC%GrB{*d&CQ3IAo{WN^rMX#Pg?`kDV(E zFZs-KOMf6_@WZ!#NS1^4a}Mgdr(kQMZW2A@6pm&P&-mNgC6|> z@}qjX<)c;;8UBW{qswj2x5WdeMv39aRN|d;5j-B>FPw@sh;BQ~@e*2{mLs`sUR~sQ z19xd`8c2YA)1Ukz-DT%~dG-8Hc|tO@<0^rj$5M|lx9d)9=7F)AL80Waa-hWh#9XHHb6 zZVZUzZpEgHP6X9MZPITs7TW}~g&{vD>Ilwpk36jEHu5*CoFGJhY_|+r??!hg9*Lxw z12McoobwkupP44@P8I>b~n5;ht-*s0VTNA-LnXgv(KXsMN|DxPJBw?IOn|B3O$rsxwT%D z87Yl7uL5-0HSf+jzjK3u=<-ohCCYbOcvFSwK#`7TaQEDuBMN+*lvv_SNt`oBXp>zx ze#!;9`kuu#{YmA-_gC~q3G~5_i zzAQqz)pBVM$yR;UK?5*Kobo#f?ZHwC!`4A`Q{G{CblUO+D?qST&>ln_F?VfSy>g}J zi2t{c-E8z0F|O&U;I_5fLF6)*`%oImKsQD^Y}j6OQ1OMzD|+t+LL2aFsev+!;9GPinpBbuz;deP;q@UGkrp(lTC z8a({XW`j_+n@EX~=@o_^fw@wj`9Jf}RhzC2`Uq2thN0W~7kGZ&Fc z84<`j!G@UY@GKd89wYX0uXPMG_bk$!*MDXm-7=>ksIS;O$`j+P@E;5pFcW;pizQcE z`OV@{rGDz*``pOk?YX%zsfr_OiiGR8KM))p4>Ki5?B*cXp4bDxQW2PcdLOCM3a-{l5(D{UtyL z$8YXGlw#ra=DumY8q2m1WtuMYLdAbSWJ(MYy|(_91;L{$H$F0!7)HxPkGDYBC4+*( zJ1W$bZ~6!(h5C95p@=hQXe(-o-9OI6nIp4r7YrjyKIil37IO}O&h|iJ!yychO#ByN zTKKL>X{CbVhNs%cQf5SmR#R`$veTlG@NO-}wvp$tj|&ttV`-0t8s_)zA$w0nLpXyh z{90@0dvVcG)(J}Kz)R6i?mfDya_{aqD0DCbukGDmK!2qptZJZ0BXYL_r)qty)e4d+ z_g&4xYpj`@Om_s~b-(jm?8zEn>R;rt&w$JG?IM`xCW7&`PML!fB;scUK22BdVGdCp@boMXZ@2;CyyZ713MDAAly{j3BBJc!lbfI!`KavhJ z&_7tw?UmWBR-vo2k&wRK3_Oeffsa)dZkPS!^MzN5efB%7ollVkYf&pXR?1qx`ZB={ z&l$dP1$%l#Z8M*IXK=(O6djxKn5u9NBHYJ-<=TN#S5T<%S;BVJShJ{TJCUd%M!q+8 z)3yV!)@0VM2}R1euXm&LSU?xM`@5mE1Hx6RQ>ec_lW>k2H@~gG!$t79ZF(OM7*&MxRDyT7|#c>4_a$$^#Xe4qyOp;d5|ez2trhkhk()m!6disbSV~w%#CkH+BN~r z{C&!Ys5m-M4=c`BK;XReR^X(CPY2*ypEV53uig0`))CG^cK7gA(QTnj-cE`FwW<2b zMsYD7`M8fx+4`q*vg$h@r0Znw_eltvk?ZIzW?|-QlP)Zu<=w8qxQ0)igOFz9^@lrv zh-QGqCjcnsE}*oReuvV6c%Cz?K$=Id5ft!?#rFmZSt0=;sd}duh*uDcTTl?SNXEJD znmQr3!MFS(1St%kC`M3J3>V2nCqwYig?SHkKi{Spzq|^{9Z`(+^-~!1JtB5-0TB2d zCkU5&QFKATJch~a z3lpu7YD`U*@LtOPsYVC}f=z6`1>emGZU2u8>L;<1<9%?!*VWOH-mO+rG+^~rD^VQb zD^&HJs4>F>hyc6lYAW^iT2O-j@U)z$4gFaN!)|y?NA6-(tcr%KtE;Zvsb~^#&Bi9$ z7VJNP99POr08{$W@Pwx{aA`%+)G_t%m7_sW*Xo4~Xs*Fa6~vWJvaB?5Xw94xB=IxS z$gi{Zz#5QCy4Ee;9h32C+fzkf1Md$ZEx$bki6-^`CYqLYzgwiu@=>?R_%;p`-|=yr z9s`*+4e0MhN$$OtguXpK8J)+vrf~0i?@q((go+dM1K@NLVEb3M=N|Y~ts8!( z>rDSm*X?sa{Qu?@|IN0uA&;5U#Q`8`Yp^dEqrQQsm3d&|Pf}Oi0Ep1D3=;GcZ zsImJDC4vu+bWDwQkh%n@FO{ja%580+et`khM7++dmP?%v)3n3m5d9V4$nVB#uv|T(~7jg@f-K@IMnaSvM6x#fk6m9vwY@1(Uv199)=K zUYJ;!I*QQEj0(5{O*C>ofLh`W2XQf}PiZps=C37ht49)XQHg7NmdX9p#DT&RpkZmZ z?t4)ul9}gda}2j3p<^VH6>fsO!MA*Ye5Ds@@&NlO<-x~`yLjSui`}M5(S7^ zNaI>qwy)Zj{BB1QBd_B5u3>Fx;?&|d)Pt$86Zi!^0)drXz!DMYxTsrV(6sz8FMQ7$ zd~iXNW+BrKth-^q`)x6#fwUgtbSPS${|E8tp;M4Fxd&d!Adr!wz#>i*_U_s5$UhXT zGQI!>g$7jGGaAecfcEx0+1^tPn%MpETa^`9XtzD<1e=kjl;84037barN44_3oUmQ^ z5+YB(>xKe;@0uaD(VtCAq-cH-5?j9h4lSV8xR9fl$u=_I_R)5WQhX|wxnvJ#?k^a$ z!uBw$!6wd0TO+M_=B zFOh;CwkekYVKOiM)6JPp;uV9vUj|=pf3;pvfMEZ`{()wE!7q}SzY!6z0NY}5TOV(s z!<~-Yr)mna{0ILJdi~tb5Riy-_Rf|)DiRB6YXe0|TG@Vm9U;fVe}5dCbN$H~9DrlC zsg0J(!pgdPcsW3kX;rAcWOfIspjq|M-=8V!JW4jY2}+e1=T}r2ur^gWy6Go?Pg4&Y z2hB^Y>Q6Y!d)<%xElcD0h72?e zeZ9+slU*aKNkT*qCq*)FOxmkqYImzj><>`_k59pNUFtDun&@FQsF6kcZ`CR{!_csz z*c?smHqK$5%N~>8CGLFqF5xr(>Pu(mjFQcT*nQ+wB;lZ>)UG-ZfuYg!%;>`reR%fp zOB!!!TSq+}CJckjPo89OMb{D8B2dcKL&=r){W9tYB&3SEDw!9nCf!9&A&F-#?Sl+n zWgZ?;ji(6xS=&(yyp4$?dABO`4*eOz75;k*=Vbd!Il;!8dnRUnS`(2JRmOUNIeAml z(voHlp4b4=pw=|mRwM!%yQVp!9(+!blKGUbpmJg%k#|p5?&tN&gF|EIy6k)%PScAX zlUC!Y_&9tEuyQ+=UsJM74MpF0MO^Nv02;%)xE+lIx+ zJ9rc%0nA}6Tu+%p(Z8AWG}V9W4 zWX|F2f^?Q;pR~ER*!DSzA8uH7&Kfo#cWPl0McgB>XE$P zmrP~{^COdjeb*~N3x7hV-aa-@^_3+Ei1}&SZOMnCpKx4X+joQ2pe}k^H?^IC9{bLO zqwe&cE&w>h4P8}ek9T=W^*eqM{qZj+_Wj}Czz@^%+Y{MC(IN&{`1bu_b>J#+5dUtu&?u5#qHga=xVP0 zWcq2~Z&zTeP6kQ5^w??ap`lKuXt10kR2 z8u^jnxm}WxVWVCWBmsK@-DwoCurC^w_Im3uH@NQB-Rq?)Lz0I$F#)SBzt+V2T_;&2d2Yf}R*?z(htlDx= zawl2d)9wO93x^)Li}pARtDd9K_o+BugXO7%CUB4?V*x!)pM!p1dAgs_^WO|>sP$#o z1v^S>L*nY!t=Yxh0GQJ89s_2<`_Uw z1%LDq`aDb z5+YevubN#!CikEa6LzEq`ed%W)yA z-hNY3bE&L*4E@!Zv{74sr-rdIRhpcK&m8s|U+uVVW89IQb!~x~7eeqXo zNg6GU@FvTa*;;Y+a6qegyJTTUHs3#n!#0XQ+0&6I&;!I&NhUL}{sU?J?TH>T zv)(OaA=Dmb%X*(0KLt%oyA4Tk6l~zdBT$~kbh{u8RH!L@KibWb!%Zaz9n%)ka&n0n4xq@J z(89X$Fmq$w2wCV7U@H`4x#cITtnL1YRB2+)p;laJaqpAU8_%LZ=A0}4cvxZO@k2!( zL&}U=;3+-H9!Qw&>Ja3(QIv2})4OngT{Hw~JWx=mDIZ#J@!JixB9BJnLDZmbNA7!* zT2sZ#H$hV*Q-bIZ>scK7>dC|>Gp33ZAzJvwxsF#g6)Mjzvo%J z%cm49^;q2 zxq_RTy9Z{&P$SP57Bg@|ilVg?aTVM&+4sk6VOs zMW4$HP>Sf)7>F6x&xqF8f!~OWGw}&ybdt`%n~CTa`Rdmq@6NEb?7QmuFG1H}_umA( z75#ogt)$#@p`_`Rh$~0fyOEyGg$jNohi4IE<%q4&TGvhFHjtEiNREn?Tl+mJ>kAy$ zaYY}V#zLG1bjyWuZqD3Q;pL`8^COw1ix?Y5#)Z_-%Zn~8A2m9eoc3EJST*M0_-kv; z&5vI#r#=)<-=1A_s%<~ua1K&%`&7Z9;^j`4Q^^;g`p5QN;Z?=KrklvoR|PH~8wmt~ zj!cg5m0K(F3{4x8Ui$+?k(Gm3)U*b0RYW^AHg_!)(-TJ08M~zYRI^ry>cH|to;X@F zdWhrJWAJ=lU)r-5?=M91A!(P|b>)A7VFyCE4g=(L)nSho+yAJOr{chTV5YMx{%OPh z^VdJEh%~_Lj^Uk8_62IH{8j+|2Xt$>?f*1r9FKzrLP++BeeGs2V0Hz>zWGUn{cR!S z8)*0`V7(!=?`{O5qM>-*e&-Cn^zAKhEoWZX{VyNAeiSgQ7Fhc259au9f}SFz z`uX<#UIX~jMFG&CWL&qr$Fz?BoaQTaa04+nQ}@LxG=Rky_!=m`DbfGs>|($T{3|fO z#^nALm|xFi_fLRU{8wQ1djJ0l%)bKjAKm=_tVs&lIWlWb`wAK3T7Cfhqxrk;wW6!m Gq5mKGrKx8C literal 0 HcmV?d00001 diff --git a/docs/connector-development/connector-builder-ui/assets/tutorial-new-stream.png b/docs/connector-development/connector-builder-ui/assets/tutorial-new-stream.png new file mode 100644 index 0000000000000000000000000000000000000000..a4f766099feb3ddf29583b81ca5c69712a08a1f3 GIT binary patch literal 54203 zcmeFZcQo8z_dhzrC?QHDLevS7L_}}VOM(bNl;}ncqW9jDNOYn{5Q6BU_aPCY6D^{Q zsKa3NVK9Dgd7kh0Bc6NzyldUN?qjW)d3(=!?{m&R`|R`DZQiJ~JrKdNG3yPm>>FN6&AU1}2CY?@EWs9X+HzNHuY5LZt-ih23=Mx> z&vn)IQzI$Em-XiDX)%Ys6n?~ev6G%7%+ZO63z+uq2ZQuC&q3y$&R1e({L}VdJRr}f zcWeRCC4-6O#+{8GJfJn^GdBqm^yrk?S z=PXAKvcI(`{QfN~^L#jM#TA_pS}D5uVUu;n`T6VZbD^eLtOv9xP|ULI2NvqUs5QvF zx-8AR6jRJ*L@7FVzS8;-qKk@jO(QK;rYU|!s?EA< z6%LcWduEGN%xN{fVZ(v5d3g&wy`nM-62)ej7gpv6RFIQq|cCoDe-<&l3n1ze-J~ctFz={489vAd;67O8Mw=Yel<{{ zjG0^ppCOdr5nR&ZR!c_lfw6vuZRZOSQi1Zt3m(dwS>d$T7hiMEzHq$ca07JVK1(d* z#sx(=^Vd|mfp_nR#ZrA_7?0AtP86H{{n|X$k5`ilqA^VKoLdCnKDfreq|3aD^o$SR z8c-9UdmojXRWT@D2{L?{_#pu)S;-_3VkF~`y@ph(q#(LS7Zu6hKK{G*o+KAT(rcww zcE@l>xmtAtwi3dz7dEX^ZB=tdza{71c-~A8srl+N8?wpkdC6bM|B^pjGXtCm7A+MD ze}itp%)&3zLi~a`TSK7Gw#(`lT!>%3Q2)Xu%lKRTx6p_1ji84&%HJeD5H{uE4N6u? zQ#DYWlr3UQzgc}r?2X?ID#avor7f11Z(n?5P`_?{*_wIz$}(Yo_|6+;R{GfY--G5K zlt(ni8$6m;l2mM#S-*+V5V*Z~h2qgYIpq`u-N)mK)>#JGu1~P}shUa!G=izADu%M0 z*`sRx8q7}+gH{5UQ^o8^9zW7o=E!EuH2ml`AURZp6mpgHqcc>5$sry~J%+0WbQts8 zrEQLQAWv>aogLwXQcsIMw0p zDM8=F?(MQuz4Cs{M=()v)TPMEcJSwYGiGEqRtOu5-QM*;!bZ^iJOadgG4!^4_iQ%0 zV(gGM$@aC=8y`)gFAaU4c=)_>8W}%G8YL9k(K#RQ)aT?Kxf>Z0nb1BFsULax`0is< z<;2wCRB@r4ROiPU%46?@-tDDcOL@$vZ~WA5uO-d2Pf(Q~VKr@v8~pNvrO&iZF65hw z5~EU(MY=`R0xQR>gy<35!bgSrqYrFK++OWoMWKW~MTS34ef+XlP=9!I>iQml9;e4JjGZ{hR+1`!iP&aNs+7DFx9ZRuDb+l}~l=8c7Z2RCr_nWvkVz=DA zQ#>y;Rr^%=xHP_P4A`^B@a|p0YGTEA1$U_r*SFRdb+>-U_-Ilpiz_)Fi_tvmK&BbUFBb$QU7lnwI!M@EsY4*ZSYT z#JGIe8Td4?HIQc_WD-`EtBCvQ9dqOYov6(*l z7H=6F6-&yZpOyTCKYLH!@AY1|5#upW`yKgfLkxvXVw}}?_RP`(3=|D~j`sIoZfaBQ zP<^}*`Q~HW&o;w1ej50>_Q}5ldoA>SSBedB=Jmh#w|+Gp(R1zAvx5FBed1{k9)>CX zdbguR%T;t`kBu}=_!cH?KPxgT$rQHf?G)Xnq|UOeviXQz(JOr=p`NSiR`0E1fwhEq zZqB4;MG6%}B950;+{~k0`kBEqyQ?A`?5I!5N{QFSgu5L_Cw1+d^}Rkc`c-$Vl2!On ze+V-if4H}^+RkuQh`~@xk3B%mecpTN>AZjHWwE6VgWkIGI_;(L9(~?YF>W4o(!u^g z)8Y5_E>QW%hAOgY1+1Wn@tZ5TY=a^x(Q z$!DV`8T;Ma*KH489x9D+H5q zI?+ilDcm=?1NZu!I5V0s@z$Yc>P?*sdcCq?4bz56NAx$IEXu5h;6lThFELR|jCvYi zADk#IIE=zasvD{^kQ?Y)tia0hSCuDA-H3{SlV4gJ5t~Jo6Q3GZ>V~%GB!VQyV9I`j zyXv^|6RqFOsR6eBcDvZ`8O;GkYmw+R?`%*04fh4HDUSw(swZNSW)L%fe>4;qEtlac zwRX^RJh{cTuHB?xmJ%zS|+AI5fIQ#q5Eoi z5{+jsp;En1znwv&WA?cYteR z5ClvIA^@(yz)KQL|G(Gr;M*YlKlcIb8)^-L{JV_`@Ok#v?Pf*_x~=MB#9M%Mj5b<4Au`+HGxk+%1-~l z{J`7oe|?@_YeLGoILtvHX^`Rr8BI^{>XcU_*)DU(W`7mi3#u@+?{REll;d|QAHG<9 zX{*a&er$m#H)n5HEw5qMdsrQIH^DGgEsI58H()zug2A#c%>|w2)8EurXSD5!?D1U^ z>-O?@2$gwBXQw{5<2hVmbp5bzP%-yIS|9T_jY zFr;)`AgQ=!q!19`tM%7tp`D};8|4ld-R7 zkNo&3fe*a?N`vJu-V#G&c<`3`VKEwceO(y=>G80Dl`uWbcx)-XO|yX zBxzf`cf#nnDw~?l@rtF00vvwOi&e%LW0^n)Vn?^buq&LYs!U!VZ%pCL4pGKZe{)$n z?#jRzk>sImwl8LiY3|Sq&gWR=Auan7e1QsL;D;RB3yVXpakS?>94WAfFajOCHNU@= z^Otl2B19~2yuCP8Zu*UIP7o~7wZa%vW+MGPBrsVv@K+T__ms!d#r7BV=Y{l!bx@NJ zMOT&_$7Rlo#MYFQw;=sAt=5*G`V#*}& zWv@couHb3rtB1*e=XUa1WX^Rm79L2>vfp_NMh_D<`5Fiz#w&@skjdWOgjr1JVB+v; zs-#C;KEK`Wk@_BOikgMB`n7NN@jx|0h+f?wuKh(n^PD&nA3yi;J3YM`|5xMS*`r%6 zLFYSs8`yV~$K;Eth|3}~+>G!A%f;6ol#YUsf!sIbc$LZu;zjB?0;LcG)qu~w+JB2g zkSFN_ILk(Y$acEqzJk<|4Mh-=t=UAHI3%#J3A{7P_pGsVm23myw-t0w20(aR1eMw? zZ!YKI3hgNHOROnpR>>U4mGADTaA@7Ro})zLen6f7>OY=JY|(}tLkpkU@d;OT_-ShL znMnvV;mwY)&OE0yMw4YOtW8L9EdR*)+>D=bZlc7{8TFZ+-+ZdR_&S=JvK-n%Lby}mz81;`Yfj^W(~X=LNa+^sKayfK zxRef+_5nY@KwdL(KuenNWUoLBgw`=D!$HM*BXPm4Vf#*vf{U3Y{ zK7Al{Z6uKA0^TYbfY+Pg2LBzSA#MC3=uA1UWMFa# z0TtvPeKghi!30y+(m{|m;6ZTUZvIkOcVN(UPeJJr5NkM(Iw% zN*EjK5P-3IfjHFEyH>pWKW5V)e{*Q2{wfjyBO;C1x^`=Zu9+@V0#t;d%Cfu&C9W+w zkv-TtC#ct{H)tTV+z{GQ$OG8TK^Pg7nArNzneY6FZGj_Gh+OErC_VfI+*fSyJ8(Zo zm-r{3O>7x#&(9;Kl7JX5&i!y}?L4Wn3zU$b_kNx`k)@&5q?C{wYkLb5=hPk4_%f8Z z%&F}BZkPUX6-xZ@*IIYY{c}fo%S~xY<2hsezc~g9`p79w8B;lt!9U}Ol{dG5tkgJh(C*u$C`&yx}Y2ZQK|=+ATSh8;LK z@Z(gouh@A~|F2z$wt%_Gx`2h9WtZy9a&m7by=~<6b#3WsxD4Vi-%=4PU{g(3wy$Gr z%1*;OKc`7zN=WS!lB~XW4qWjv_<3Sc$>MdP;TUZcS7!X7I_~1{MZxau|HnmIWxKsEWP}ig>DIr+FPX!WEB?fh~wOf(G)6gfs z2wo8UwQj^30JABDl{2Bz+}p_P9CK{MNnJgQOdvWwuxCNzRVa;FL$wB)N}lWdhR+l~Y*Cjei>} zCf?m>mDM_9pQ_S83B;aHXx*kV_i+kt_t9r}Cbf zv4=}8Y`!_Ep`@A{*35ECH9gLC`NzYqc=p+ysmrXy``i8SULR8T`tNUVsVZT2tS{RR z$Vvpfy0|<$f3-&jAi;|>(rCc>jI`44IvBvkNYBbQ1lWkgwwLoH>_Y}X zr$LqT+lvhM47Kf)HfIm!cYib5T8y@@jJ(SUfLo8|F7fN{>02!JNT%DN6VULJCq^p* zT@Bw2;B!%TONew_8IEABgV_OHhiE@`Z`efjS^^-DZ(e~#>*4;G)po(HsrMSGf~8z9 zNfyXm>8yu00=6a`0#Xk>)+f<5MqyXj=hqutJom^LM^)D0@IXtS)t>}g(+x21>f(gf z`$q9`Z0OkR_5+0`-u_P&dN|x+L|udX`%sG=WKwZKwdyfbA$Pe3-MO9iwRX=EC6~){tgpDesG2fHvg46Wv^@L{`zVq+-P&rP$U1<3#yM>V9z2U#Na8g! zik+;hAS#d*IkOeU-UIso^*ixoK*LNe=U{*2D6w`Jwh0pJG`JU5+6!vpupIUJb#rZC zl1B-5Zp__seOsjK;57V6^K;~ZQW-j`Uy^G3ueY!#)7}_D+}{0Izh-D;=D`Ea*gfuxD}sk|b8e{G|2lzgrAv-{MQ?9eaZd@Yn#o#XGU zDvp^vm8DPkuI;;mF@d+95uM@5r8|Ijo_$4n1%fP12{>~4u^PATr|1VenZmpZcdx=2 z%~C;-_vbH1!{=9ie?Qb4^-j2xGrzWcQXwRfQF`nUcTiZLHv>CZttn~`~#3bFk$MbFRWUoA;S>pk7;#|FX zf4Z)uk)$3VaWf)vvV>qxeM!bLnwJigJZ4zF<-s}5em{bSA9<>z)+Pr1h^$h&VIFTb zTcP^J4mWE=bBQYomo~Q{Eh8No)!(I=J=UJW{~04b@OEXNj+wTJG`OxqyFoCPoH5;P z@-o30r#7Z#dLUcms+kXKbpm*N$0a~`6}yDEjTJnlAt3xBZlaakRT!f zGj8F|5wJ6;E>CkH>wL7Yc(7XG5aELxMc=o|Xl}=M2`{ARVHAtlctH*Gult4>UUaXv zO_2)-s!n8*ct^MARrL76&hx;$;0$Vqr3`=3yIM?kXp9z-pTbEH5lPC_2?ev{O+ZK8 zI>azLrSaPR8ZKW6zmR1Tisl>gL^S&d`yA@HxvqwUQKOR@wihVj82$|E0G*LVji5tmG7L-V2l!uKj*uL zvP_Hq94z5Ew#@!w<6;9+><6}_vI;^EiJ-4hBcw>RXIwuRwqGZuA&bQ$aQ5nQl|z); z|JWDoz|U!>E5mlb$)YeD%|gFMXl&>zsNyr;T}L@gR~MvY+z;&$nC?t>;MkrXSYJk* z@Qeu|CuYADe!PG9dwQhD?Ko$DMEm{R<$HIqSFDouZa&8D$A^jBn^ll6%fz4Z;tncO ziobmu-GpxBmJlkbAZ)t|ne?(0@~VGEux%o#U#;I;Cfjf#wQqcBJ5kVlu z%=;rxOX$%(%(p2dG<%*h0dVON)?;vp`0;ZIjZR+)x&HB9;v0AbT;9s9!5*C(mlz{H z3$0&$&nq1go!qYcv)s)+0^e*!ME4AOuVwm!f4TttqmjEu#n=gBuJ%RPjS_u0X#c7) z?u<$GxPtsGpj|RyeoVNO=}p~L6X$nGKHeOO+bS$&oSd_q5i9-#M+!Zk_oZbJEoypV z)azdItEwSI;)3nV_V${0mR)u=7F$=weCrE+w|m|DtKkXxL*Cbd9$xD&S)W40r|?T| z+3ItIU!{oUv&do&Eanr=aDX2N?W~BjKB>ZLP;^4f7$5=NWhNEorMxW7k`FDv$BZTi zbG>a9|^+MpPjlDRMYBsbgU-XHC`zd<41 zuH~M!grFAy^!K9nk{K!9j&qQI(^$!`j8fkrUs^H%*o9_1*Alze{KkEAtOUo)iMeWL zb+qF9<>|spn&%G@{+xCeqH9wzt^BqY^}Hsg!udwW*DDMfp3!`Vjir6*eKJ@m-7sNO z<74Bs6YKs=+SCq}Cy87xf{4D7E$de39=&FWB@!VYYMo7_M<1g?Tzr$%h``6~zIUu{FON_DK!#2*AJE z8{E0Ctj(eukjhk|*)P!Q4el1#?0N`i9P$kg?IO=~p2zP#N29;Vu!JW}c7)r#lF0C$!;dZ?HpQW1^G zHz-B<>`)|B5M3K>#SZ9xnDxs-Jn4WAOjF^Qq>HgZlJ^-Q$RaYO2-vQfp6k^Y3*Ex^ z3VKo|5VVKT(Co>EncrP@3ut)1Crt`IcDcpBl}nWMTeK8YqN>z^UM1!wTn1M;<@Smg z&89{-U2@6ZJAFlDX^@oYY$li`^*zh1pes9LN;@|F0cG4R zj{#6N?2*arSNR?hdfV?Mv}rTS|I}FWSVE70-pi{X2q;Ff@Tcu21*Y6Z86%3VVhN+H zFN9z1wTUVzO;CVuMp@DLpyim=6(W+&=zkj$`AmFvX&&E}L4ZqPrAe6Ui}ivvjb@?U z!At2VjtoESB~(_300NJdvIdv1+t1;V&`cW>F{P06NP|zO5Q^8KPO>3hzlD>PNHVlNli$ zdhk#XPJQyLWQ@Kv!64YBGybO%?Ndcw(>MXZC^4TsXRj)hP6s10-VF<#+>=}4Zo>r! z?ybG*j${A%jm==IW0CK)Z;d>WCVL`Mh59#Y$8r zg)}3WG@z6#&`gE?r5w8nQQqn4V~pUXW1|mxjrSSQE-QsBL%Dv?3QIrRs7o_V{cEB! zf%@z#XS^6O`=<~<=v0oCP{=*et|oNW(E9`Tg;7ypA~dNKG0{@)?$6fn$yj{SEPXjD>h0gCoFr{mi^K>u^o7^EsqgWLbmtPI0*ZJu;SRzfViXr=mmx@X^esH; zqvHqf>bl?IH2t^G0X#o0Qur=KlxmlTMbM59x|i(R+9Ggo5A2V_7GNnMR4bY;_K8H@ zR}%u2_Sqh_3i;Is9M@Rj*a-imohkSAx?e(; zagf*oj*4I&{nqlMMqX^x3It3}MRMjeBc}fY7Uarg0*xdGpwDsky#PLbw&QzE)HOHT zn|bbfsa$s+S!G0@}W$VGA{f0s!qiEH&|0H-%(*rz&= z*JAoD-)ZfG_wZUt>ZVyH1DqX#vRGg|X>UBkF~-Aq<`@wCm?} zygTl%N^dpr#pV*k6^+a7N!yH_lO&?>f08PWd66ytGgw+<_i@@!!}KDfKJ;=fo%;z& zV(@b`v_(c1e8w0sVLjFIxvy;~9ao00%~1zc1H%597X2MYnVDUSdW~D^JGK#f%G|E) z$1B-hw_GLMifFHLQx1-}_CxVi#BxOF#>Ff&=1^bqc*n*ICvw8t=rb0unDU74+3E=F z&@J%=5wmY=Ll|P0MQ*EWi@MK=_~mF zp~MOh7)j)O=OMP|hO~-UJSlJyI04Xld9-}W5S6IP4os$>Y0d(>L&4ZE)ks(7KjopG zr{dA^`4{Vbg{iS|+9S?i3jyC}mg9uhBI8=E=60@SO^A-YubJ?s8vZwunP9IJZb@$n zkI<%2|J79-DQ#vz3DJ@DJril8^#8Nf-qsR=z3FYn>=V5E_u`VLO)xYNZEe+_B zQLTwA*00<;_kJc9a7Pv!2w&wkVq^S8;SsMNawOtTOOU6U@m3Zy{5G718#}SaPA{=Y zJ-EEwm_*bqkdzUC>uvb{dAh`qad~>qOTmkW0LNstyDvSokY5w!P-Zt_)L|hX?XUZM z%&AWT_Q989yrv%)_JV1$_|WA?v!7vyS5YwF4G?{4)=AZW@LnYIN%nI-R~;V|U%KkC zeW^R+Etkc+n0Q?dI!CJk6V9M7F}?cF6i16{bVkH8=!JZ_$>@*z)1D1z>?25I0!xV} z&KOBAqEGGS2^LA2!09fVlXo{XavNzjN&p}sb+nPa$#YnaAlf-PaOs*;jTc0?^`}dO zubwQI-8HNiorw<#V)8G3SD;l<=zCmsoMdK`v728?0OaRZR9XAGqxN!pQkPeMts5#5 zEph0t8=iA5kPN8LTA5yie9-DigkZ-7TY90b}3a+4OBIrHLGeMLD=6k{ojZvDGs28b7LY zUU6vAAGpo1NrvY-Qx8BtS_&ulep7|COyE;;S3CGE5;dIy&Fi|Ao>ndPi{3wx!qc%P zU!M`&3wd}7=`Ay&T~^1~$=wRRN_U_7L&e6^-{H^roD;{@_!sJHmpbC HUbokF{1+F{Kw&mYr;8b61W#KcE zXP#@q4*N%+%tgOd|14`WIB-4J;vkGy{o_L>)dV#N_|zOG-1X_W*PF2v?Elo&yZ!q8 ziLmAqbdwd&*8F8|`ieWN+gwpjelsmX{ys2DNZa>zm9qwC{;Aj=+y^WQ&PX~D)mIc5 zYqbr@!JxuZ$0F44P&t;A#?(I=QBZ0)16!Vy{#9Mf+WGcYMHs&SN{Dalm)(W=&LMx) zsguh}*exKOkm1ywhv2%f>l&(GvmWbi2TM9WjNWfbhs!cLmfBA#^rnM;RY~P8B*CH{ zRpcI9gkBPb=n+y_b39HJUms@-gG#IJq2Wt83Yg8UKCukXKE{cz;+kjiW1$`~fa8&% zr~qHJU_6W(Mo?t7HqerHKh$y|Jy^TrTG`$uhz`~Nl}1tnB2lQ-AwkjZL{1-D4~eX_v?5j1oJ4VB=V!$hskPGTlHZ1g7Ki&k{`_)IoxH;cThE; z`}HLkbHL+=bMNfZa!|w_)g7&e+kDuI8%QC)siH$QS4$}RRaP!rLAEeaFlR=>qpmqk z@*b*|95otnEA*lZdYT;jNIFktcOfSU<5!?hYZ@B@`W%+y?k6~)ChKgS(p#-j8a5ohxR0qY~U9%Tk`^CXmz2lf+AOXoX>08utdfonu(%$R>s`tLN(vHicRah@Un6{<5T>HqIr z{L*DerL8VMlDp$S6dcr;CRxBb|Ax|43tV_u7}miuUZ+sId$r?RCAFX{GJ=CwYoi9; zm4LjTB~`S`;e6n{BNYq^cpiVoD*u;KN|SDbfSY`TDc0XT`OhR22E0q#&w)^X_S)_L z$XBoe?8nT`d*?&cLEovN#IGl-=lag)j}Yqt*#uU6JSgOIN zfz{Lq{4-|jpNC%?0DXVA6I*9E8#xAA1!V%Hf^W`&&QoI12KsiMh!RscH(uy}r|~xr zq5oZtzZvrXj8GBl2hDY;CS!6lYNk^Mk7%leyCctRPRI9v&2Ympg!y<)^k zaJ~(e_fhTlqQ0 z&{R)=Ef7?OSrfYfxE0!54;-10==(CE7^t9hUx8_tdOhQeO`fzSXB$m_NAM*N_>j1o$Hx4pACPx>{W zHDoXT`tzFOL3a^xcnMu-{{%F7TJ%+aZttnD|+?LYV_jw$HF8yke?66WLHgxrc6c=_& zwSV@`fHNO!Fx`PE+ry8aR!kmBt<;$udpK{Q`PHETTn1q4F@lL>*C5<(KFwGiIS3XUut7;6ohR&4da4KAj{To!2gOKUIV6!|M-&Uc6b;uH_38$GO?in@WkOM#R0(=2PJ>B>07Mt2f-s8_KLMbw92YCNk1Y50nM z6T#6M#y=-e8)6#xjOGk(xBvwJxan}iwj`@%Kh7*&uo~Ke$N{VkR#nN(IJjYYIT`Hn z+cc4i)CpGkp4eE{#Z*+beAA7(ZS$n14Ad=bOhNZ$)%XO(w?4^$@dX%XEDp_e4|lE) z`V2ae{HiWwWfUDI+t2(&QIRd*_qGOs8`%C8>_+ZaHi{yn{i$~(p={Z|_d<8Kq@lbM z@So&3AlUh)?nS?%8U-wGqZIy{i~}|Q`R}|HV{I733DRps7L{=O$-t`hhouY8@{g5; z2epM=#~Zy8SI2$SjJyuWM11#?mjs?Xd7@su+QhfEHXSEq_gu9O^T>c~v~+AtzCI=I zhYZW%t^?cS)ScK}RP(m4)O*F*{JgI2GY|d&4!HQ!FUEuE@m0hSEASV>i(0#WQH+-MZ-XJM6_d^T>9Y_ z8Q#su2G1n}eeUe*4#M6g`R%;gmo$Iwxbgj~-2%Xha>g8ZAFP={;%4xAEdn{t6VM9X zP6|MWP0O@|+u6LMsGUA6-gRCG>wNL1w2QyWC}FCBLhoC3|51CUYlbhM&~1G*)EE~W zv?aSOBTo^*U%jnIZxIPwwCrC;Eejeabab=`6W{Y#hn*$`xjmm);wTk}S163XZLOLRX;b2)!IH@tqZl>xv)cgrumAm4cdWl zBYeq`@dsxhMG)nwuZQ@DXzyelhb={|T=-%Fmm!_v0STtg+iFA?FN!hTe}GGO)(cfx z?lk1u?>$>gxA<7!xs@thWi*KHyKfD~l329ZXQUU8*}Ulxv}*|BwL@&0E)rQp5W z18CE6M#-H9ueBT{_{Nd9q^Y^Wc9Ij?rmb?F5n?5Lu(Le$J)Ci-b68C8iBLsw!VkmF{J${Dy1x(X+_9Wg60l!t-Y#it_X z8yEXIsNP0SvqaN3-3!*0JpefzOKf^e^KeQVo`HU|w*XBbB?VXTSP}T)Tedr$kDf+- zjRM>?RtZEm^s9TO8;(mFuH79FBOW07`unR`SH&)qTbgPEJc(oCi*M~H7dkxY;#3U{?_&^h`w!WN@F(LF2yCNDh<5pHNG zG~5Y|rkmrNuitjp7i(`pzVHiKRVkPseL- zJpCC@3|n_^`#$lIxS5LQ7-{8twGw0uHKVKLeJbJAmipgRo$Kt<~V8 zIT^H_3#B+h3E6Vu9o$0n9f6dAW`#R*Tp{d|4VYw=n8%%aVqJ=n+Y}3iaAD-eVJ`1F- zy>ikVflZ?8D_$L>H@#wnGlZ?1qCX)uX4+4gGbWfwD?#N;+8b_k)0FsgCK*>8DLMAUcCkp*L@8s2R5p-IwxT@UH?vaM)!H$%6bgL2A<(K0cD zX*+DV#Bkikp{MXEWoDHrwhHl>(s<;9f^^T~s@y-y5*mLhQo|9y4X`SW%>i)RaZxXH z6SrJmNJXN2WI^YE$y)K_eoG)g3CC;|zty^pc(k`BW^O0S^hH7}f*K{^$GC$&rjYkU z^X1VQ)H!Dt8Ps(m({U9}eK7GMHgD|+cH#jp^dUtf%5cg6Lyou8gmFXN5?gt3hj_nb z-$>Lj8_p)=LFPGY3Mea0f$8xK{u=n)*0hXt2%**jkbTSG21H;wqTa`tVuW^v$Ao~q zD@67yrus_Zc6Q|Gah+ONxh$-@s|0V46X`Ebda1oCFV36 z4}|Gn&vVBp{rIT3R+mxDP0mjwF&sQzarh{wi%tBnh?+4%jficSjeYOmyj+^3)nPN5!$oIZFtrD3!riZ0-TpQ-AuHrYW5iR7JS$uTnS4LST)H9;|a9 zjqP%j1QP;qZ*X#ZDVBFSfzZ}`?z zrHd$aw%3mG)OEk5R(I8Tu}3Ovh$iaVVc2kiR_CGfA~xLaRcgq!6^Y%ou}7(bh4zU) zFa?G3u}f=BNfnkSu{Ya?-ROlLz*l0fgaq!>-2k%uC7QBcJyA*|PXMBqUcw1h`Vw0Y z#avn*G1fjIdU03%Ms#u11Q}WzvXd+g->{M3fRyzyA`|dzr2eWj11d0q3=(%nG54U0 z*TlcNj852h-=L5(P+#w(IVP`;s)YL=3!Pd!c`Dsc1tX1T2>Pq5e&lS^rigjGtn=z% z)cvS36}kXea4Ff1`fiQPDrR(d)lj8|4O(=9zP)MG(g6e|8cQbZ+s02ileqI3jt;cF ze1K$YUeZc2jHns5*>%}ofV;|iNF{$$)6zx44_moqI`J!OdlJa7dn#l%$vzZmR%1V9 zv#weYLeM@2`pDdY|j5b^v-?rxaoZnrVV~C$uz>qs~BWXpAGkgA2wDo||`;e_2H2SxRRrA;0e1 z`0082y8&@RigdCS3}3)E%rs_gF(nHe!qo}^>jjL5+T^&QuBVTaRQ7n(EhO&nwbRN? zHypxMQpVbmoS7X&dZJC5uv{Q13yC67{H!4DOGd>(Jg~P6WKAf)+mp%6o?b3rHWOzHI9UV~K5KxmUt+J-Vv{~<{DP|R5JI}H#B<9#OGg5Tthe7GTXa`aAwq|qHi z{w>Rl?zEb5aBik(zW3eNq3)L6x&XBP-g;a58{*Q>cTx%pmKxO3Yux> zyT8Hfa+idW8+!kh>sVL>>aXL2_B6dkhSibutPGs`Y;Pn2o7_~U!>HIMG3*nqPSb2cjapDm9 znX7-gJoEPOF0kNjaf_no$NM4(7%!~=Ud?}m&`eK#T!{i>=S$t87lHA9$-GocaDIwZ zO28C9f2<=vKVFklo1ZYUh4cIrV|0KizG3TiJ2TWj{2|5%#>-;`u?L?8ai>#kqXO#c z?pl|GoR7|&F3AlwR)c2W5N1{`5a@E->2CqZalx8xj~ZCCOAHh<3mx_T9&?b*bxLY# zw$8X^xcTBzRc&ak(OW3A#F>}DV{?|R&UM-OqTtV$fA)C>PxFQ9 zff|ExQfOP=g6lcqwbvXD;ezql4eeD(DUBQT(evG`&EIF<_h z7vJNC{^oe>oy>|0A0JUqn-Ku=i!4PU0=QowmD33S<}x&nz`pjng$_azaE+ygLZJ_0 z&NX@M2viIvk$En3QCB?M39a(~mKLT;G>e*QsO#o8eD@sqWrOzjg=e=62=6yg_&8H8 zM~r76`-JRVheZG!GZ3PX2~@gWaCVmitbb7jggCkvuM<07kP|$&d}Tlg!f{+20_OVg z>0ISBTLi(NQ5=3h+PwaA(Q)Gd{6XR*4q35CX|rjec%+7hBuVJKDxc;XCLjZfa*f^&orJx+RO|Hy2I zDcNj~yexy$8x<|3Lf1sJ*WDVTu<+xXQXHqxGp_;UO2Awskg3fqfz4Z;@=+78LJs)X z*1-=*1wYEZL^6R-tMk_z`QOdm z&V%ix^7pHNPb8*hTJHwwV!$)Wk3MJsTF6^Z?(;7HsQL{2REU>5r%|JNy(`n)_@1Hl zczNz=y^+J`p7h<%5!d)(QOr^%6G@VOddrh_u>w{)oW^P&I$T!-)JIDX``nA{0jC2@ zK5FGgo%7WCPldA?m&8y?l~Xy<4}rFjQ!7($d@FFs(XGHOUKlNUZ>!9aJnq7G>~{R7 z0~W`s5S3y9q$edEqPd~E<&$?$lkXVrZ4~O3!1pk#t9edqI^VdiZqwc(%ej8e&w2jFO*JMnJJx0r_)>jHm22H?OgW9)zoVhlbPf0S796p+;9&-8 zK<-kG<*K1}iLK>}zaVJZ?7I44wmY@$Hl#p)1mRv1DXe)jRy=oUz#j=;mYxefCsia<&U5LeZ zDqGT()VRHVI9`QkpCc+e2N9gJt6;(f7?4tWcPd!<&Oi}fKmF%#g(skS5UD+dQvv+F z;GzI3A@b~`gpE{ZJXv>ZfiUnvT&-#nC$dDukv?1}^TKyOlvdh_yLeNdwy48zQpxnG zu&mTGTBn!>AKk0f3{={_2J>XPm(4b#$-%89m+&?C5eI$^(fo=$TX>3t&kxx6fCUfe zs~sfD#NXI&h>n5y$FTI6yx-|oDM-Pxqn#Om6~Bw$@RRl|l5%fSORBB2A1+srtX+Gy zLt3WKTy>%65S!;6I%*f-rwc#LcZl8lJhQagosk&1F1PCC+jAN!?eJYiPK@VZd3=ee zy(~;8claE?W?K09PML>?O}5K_evj!LZ0Fl&lvytS@^2wPZ>Gc{U3Ob-vR(>%l_1gq z?^3rVY3N?}?!Zfv(GmF1mGRMb>h0?6uVN67-3rtinA7oHbL!jC^~S0r3>iI#Q2nK) z*I)X%l4%)Ve=BxHv=*BB#@uRody7N!$Ovz$65HD~wxz4aj2Bv={wGfC%l-cCW{;TB zQ-h#LqG|}S-1~!+koQAxi<5Z+%%{C5`3=r#>VourdH-|ic7nr-6IsSEqn` z)zZUBap6IZZZ6d_UaINpz@F)N&WF&T5jb zoR+A*MB1ZPmmUS3{8Y&>v)@wP013pH#@jvF0es0!S{!=GoVy>iO>f2{Nm_y>!I%n3VxPE>WS7=|%uk{={ zddEY6Q&6(~A?VSsc`1#PMEV`^p0y{eG?sLKB0D%ozkZ=sF!pgb>yHC6bpEBwnoiykiSe%XeziC6VCH7qEBD2rGK7%}tX^fb{yPbR{M}c|)Aep^@$k2>@}=Bt3Ao~H4tExi9}V$Ju+?XN zw@1O}N`}8Ptgw^F&e1QqTj|DOeP4TfgmiXC_NRzmQR{oG$!E_Idx_2@ML!YY-x=Xh z7V%%&7x0hv`R{UP_sI(zRbC8}Uh}&bJKX4e1~6hDzc@dg%?7;B88FBua=0Qn{Ukb* zmi^+k*6r8ttr_Tu#GqP0i8XIO=m0>F$6vnPcLHeMcg8g^{=g$|vyoX&sm21)I#5ix zLsf=cqP^m80|C`rjUNnD}CO_2Pp9lY*Ikx!r60W=ayQr@6-B5le67 z1L2W3g4W)TKYMn_y3ZzRmz?&#StnOtze)A^68-pfYQcRWEbJu6_sVS!@5NW3vng!8 z&-TMbfO2~V5DqciZF!6LxDQ$*4LJbFV_}fa0jBa)oRaoHUlatO%-yIfK{>`X*G*Uo z8fJ;39kY6g4+BeP$DT^w`2_mk7uw@CC3t2_q+RE=lE&*rYEOwFjz7`cT8Oy?zg#W_ zzmMIxxIXQ3rpD_v{_w$!eCAne8p*2xC9@_^Swi40OGsU7 z)ZlxgjhAd~d;rZV{%G?fDJp5E2ad_T1?PP-yzOYJgu2~5;(WJ&F&jyXr7#Ik5I6ylF>}edhK*tbOreBwayCPR9L;CQ=1USDc3)^UH>!4 z_`f!H`9C@_``>PkbxyvHu+ILKctp7N%AX1C+xIXntw<2joXM%xrtE6+>J?pBPZ+V^ zIL6yI-+KiQKWha>?CB2chUHnx+=O2adnIewCJcYQi>Y#7H&Knr*c36YJ{K))bRTW) zba`L6L*>76>`uINOv;@%($#jYGjSW5 zE;Q4v@ScIJusz&Iz}mx>&Rqn!+EcFR{QdqL>gSgaJox^mpkKhsxrYFzIyYSI{Rc2X zP3H{&4ewk1xBp#G`}Gs_0Du?HjWfdnCod)2V?v^_e{)8yNST`2B?T~`~xgi)%cnqK@cN#+5bpOCRz=Sqn z&vc*egO2y$xwi!XG(2W!i24IOp`t;7@7~{}`3qMJe+rJ{t;6KnpMuM>0{E!^>#GQ7 zk*}kG*|8J~lp#LhU$Z?Iu#6vAdk33WEuvGOpE=mA4Z9UW&vj-iWOH*6vAj6=l_BI& z;|OB8CfeG*zY6k5o?bn~FCZXNXqk|3t>s+YV~gSe6*uz7Fq^kASFc*2u5#g}ot0X? zy>Zvp6VlYywu$IhUO}}A2%1u!F-eubL!6WP^F|;k2Vb3ZjEj2rZrhiamzRkh2>8cw$_2&dH{~HHcAQw_(oBx!b zM1Oh+o#>@&!GB&=VmJ*Q&B4sh!asSvPfVz3sF@CTjPC;rK|XaMh05RW#=Nu5pR473 z;0J@z20CB+^TB_&@rO45|MWI?F^2$cCs?8jr=ct~P9fve!Qk9~V_W`SY*3bPixG*D zZFE2@wi1{3$f(LKV->>VeW?k#>zUPA*2Gz3TQODnwJb9$tEib9A+vjZQ>E=)yU$di zVwiAWYMVx8_GE%4zPRxSm!6(p@ix)7CvFr;Y8>%i*YpMd)3rc8P{*>X2SdJWH~e%P zjQd`B087l>oa;I3%9gNChW#ZEu|P7eK3qHEHvI6p&-VDq+Lh9w;6WV&CZ&$>>7JvC zhL1a?$)#}TdV0lyT}B(OPHlB{%QoS4-__26k({LfNP0qPZEhKoVl|+FU*9Ybwq5WUu_H-Xij zWAwRj6AFv+rl$@_Q9`EWQB5|He;OR7^TfFOe}q0@xj4!8?>hiLebWYNnCHY%n!OD3 z)91KYIeTVz)@n)4Z0#_Y)RrQGycxDgTIM56nVFfnHJ?_n?P+KDqD-(qK(|oQtcJkl zcJ6q}5&Lgh#*x|2u&n%yuqR&0yum|9J;Bb`80P?k8C}1#KLe1ZgV6m{xcoVcc!ch; zRkxf)hqTm~pYsCNH~yJ@DS@hrv^2i@_9*1Jrl`kDzr-5}nVG&_yilwrB~j47FVl?b zz`hM+WCH_Jc`(feo&oa2 zrn`h0LoV_ZUVJI;K%OPS0MsXL;YMnT;krFxfG1!->Vq#1<&kT_e_S4}sL8EfTk9*f zz}-+0vD&(6q{_LSQKxOI5j~=cI!VEM7O-WX(rl#_Wd#p%`uT7X<+42+- z$uA%+krRx(=4!;9rx#3mwzCDc8iRS}18G)+mfF|a7N4w73qeGbynG2$%|lBFoAKyW z1{%AH&3jU-Uj!F3`9_Nf>#U>)kKeo#fBX&Q);}(Felc5|CxDL_qfh$;Uf)k06Ti(^ zPp40hz8zov``w1$1+sKL=2SGhBufF&iq!wvvX<0cyVhFLR|Z$5pup}dJ|O*0`|eC} z(Dw?A6*epC#4V|raxWB;)O0WJN?Q(@w=4NT&pzl!`4}M9GL_$^>E$RxO$bxbrPldA z=lXq0Fo#4W2e*do>Sq@Gs<}vXQlv8p^IN zlHA0V{}7LrJJXL&yB9NF$)H8dqpnYUp$m5|;<|XLPeq<&jjfF8wu%dYqx-5Nn8`^<5971SkK`yI)1q>1<44e_vk>bFjq87Wj?u7PepQI&I! z$*nL?*q+JG_xfgxSTyCjI?Y%$+40cMp}Kbhw_!e9exP(9O_5-B&?Uo(`;|Y-cOQh1^0sSnNyq#4YgJ)Uzz&k&}sKS&dC9koW9gph!OX4Fhwrorv+k=$K^7x?=CUh z`%1poA;6+h3k{v$JPj#dX-KwllwdIlM>=DvnkxA)%QaGi=rgcP&-E)+Se2{&;XRDc zXsOfVOA`>WwFtE@DHzk&s4wvz6HK)WD`(w`iaSD>>`r#1$WsE|9Uh8hHaYUx;wWL*a%BGkPM4t|gE~^#y z_p>o<hpN{oWNoMRN>nVuqB6qNNsN)1@88dJU;*_7EJbGV-V;r>`#ErEq@YBab^t z6KAd6h6|$!x2%{Fb*RO7nV{D!yR{IcMUjQ?SM$Qc*uw{tV5Cf2Xrk&U_ttziCRM0G zff=>Hcof|#vvtxY+6ZYl=pA!{!JjI(6Nt4E6#7l!rQf~5i@y;tsr)m5rASh`^<8%s z2CHl>3>gXc_j4SbJ%AwYZon(&=*mU}bUqoo4cy-vA(iPykbxvG3|QPA=r5G(2i2Da zB1IJsUVmbK&poe%i7w@}7>n#Pfl);s*FyN`p{2MXHr)>_#;50eA`g0pr{~oN+@U|i z`g>%$g9DM_Pr?ZZBhAKRB=Bav9#0#ORCUE8+#);O|8|XE(k6NW&~&n{OZvV}_f&(zOvThAj=-1vgb1Rs<}ml#aw7>bAD(S*JK@k&qM15Gq6Q&iU2NXIN=s|yX$qmE^C13KX~=TgqHI{y}=jV)v3#AjeYC zx+N0p)aF`Trifh_&Gt61aeU=7$v~&25&kInv_w%!-@HYe$Y?u7Q!o(gCe=8?u^H6a zbCQO7e2F?Hb`x_P0_n3j1V+Xq_ZQKR0>!=w%TjrF)sSbaYRS99K1qFAY|y)O1GLrm zTaodvEj)pRw5jt$u6C*mtc;@;yw2q7P=A!<)%}vZz=!NQHS&~}npxHbWm_P>_MB2L zyo|zKmm+WA$j$N~+6t5PdgDv!)t$6$t8XUa=dY~%)Qr}VV$2=hrQ8oGJNe|WKULKA zCv4%CT`>AXk)LJ7=yRzdG%2ks9KTyxr@b&P+wj>Un7Jt<^>b`}M_(lwUl%wtAc^}j zU8GvpvQlhcXkh2roo|IRr``V9Q>79`fZoci6YQLhJH1HkQQe4JtikKJt@2Ws+{WQx z?UsT1NFZTb!_EapUV5AUn_ACKyI$&nf0muT)HLFH_2NRMa*p;5pRl7Wr>aX;H`z{gxxA1MhYoF1 z*I(WjZ&A}F0rT`cN$aI_)Z6EN^$yfW9blySY+1Q_G!HfZ7uWSQyIKpC zA$(JuMCEykGO2UCmCzw&|7g!Cz`1un#ceim9h+oMIYjrtp@D5{MInE?{n-(jZ?C1T zW>$oENGpY$0xT>`XA*Bb_G-xYmS=%p@JJJ;ulF+EFY<$63mKt0U#dA5>}EdR50$Iv zGY5gSgUT*x@JgFYQKuXQgb_9$+GDPYpqis}jYq_SYtLnh`RVkf(bP8j-Y*Q3<;3AD zzMi06?5OGpS(bB^qm+>u`l@p-qGYjg$%ed@_OTr|XOrhi>IV{Q{`vy*3J8+H@sq?=+*ybe=^uBZ$$8(w6hq=55E| z>~u8f(-SC?V!tush|0mIU#?b4;PT3{u%0smrL#%74KEkp#U*@pHWYl3mGz(iYB?o0 zRHB#T>izDii$9nfm0&w$i+D@k=*hnu7tHwZ;$tW*NaK+Dm^Z zEW9$lbN?QUfE_^J%711n#xk~vk(*C=tQsd-tiRNYnYBeMT<+f*v{vqk*l^)5p-B*8 zNnGrefnn()b>Kd?5Yq!~WY#S-dHb-~&NnfZl}S}qq9fID2!|X}W9Nc$Io~=X_veqN z5erLce)5$YJL}7X0~T1D+Fhc7cZojrLM^4#ZQhbpHP$+nCap9_L#?0J2jTnZky=BT zwm=2>zdMcma^I~_j}d1p-vn7fu>^F1w?NFjzSH%tW01`3Iye+gy<8anMr9?~ZA+ z{k&|7EO1*KBrZ|s>X$%tZXub5+gf7>x|Q8GsNa0!ia7eaVPbib1g<}JHpq6ir}a4G z$*hxu^nR?te*t`;h*Th+1Omn9YLEA$9S1K0IHis~G4oVB45nG}_5Vp>KZ(KOp#x0&jyY15 z49M}gJ^j#q3WMFeQ1r+4j+g8`iw^$pvwe9EQOp463Vaz`W*s{hK+dpwag8j-J;K{4M63 z_e`e0>uq7(kne_hoA8+%H45`;}&WMx>y^dBz}4JU17-=J)oC48oPAy4>xt!2EkrlzW-F`DPa} zCUpVyhp?XCi~Dj7^uV;wtEU^1rrXK`z4Yaw&@&hP{T9?_Ld)9$YlUM7k&tWi<@wnn z3p+aNOdHXFmysG@UV=D?yPR^%z_picA+IVpJ;!#C2Pef+Fl3iL{fEp)|jg<9Lvtz)#brSMIrXl&vW} z`mr3;9+h@0wWZ4> zWDw5qTvO#ZKzH-$IhOF#R&7FIu53Xs+$KZQ2gZajE%6mcb8CUPd+`qSR(+xwb_${pnfjw&wMC_Gz;v%YLyVwAQVN!-DD&wa%&K0hnG zHgyW$epWA;1m4{$ZEkni?EBK9N`=38^2>^2-f9<^Inze_@1XcJ_*lge2(m((4 zA=>*cS1MtJjF)S!qD|2=vQ-xrqBZY~pQPm~w&*NrZB-hrd^j13$=QPbWreZ|%9^34 zqd7wZY|>#d*ZF%~pF8Atqlpo!%XhgBv{k!0=4FDtIL13pim(B@kK^p>0@?T||0bbo z;H1Dn=%-hql%c0rf1$_U%Ic!wNc-BIEA0}=JfcscUe#}95Ud174~bM8Xuh+;F&;5& zaWBp(O?pP}OOY8J@xd#P(whXay(=}Yd8bl!3+-(wkrx~U){}G$tY>q3GJmLr&xmdA z?gBg9+X4U?FUf?NQwDYwc1S2H^_~8i#g1B{RW*6FIYCEX!wN)wR)f;|+pCK3p=!dq z(aplBJtXBb0ZE+G-GfZy#24LthqZO|>fad_sSH-@zt1bWY~2S(5jr>KeEa9KH%r+J z6Oy{S-@YP2bY@35)_a-7A5I*PlQerKH2%7($XfFAqvZ|wvB4#TL}E*1=GA-R^(H|8 zwJT7Si(ee-VT1=vK1TFH`4ha?Ldjr~9*}>=G9M9K|7G!Fg-X-Zp=hE+ zi`PV_=8lz5i{+(Tn=e}15=)!%LQ5O{r5SYW(7_4}H zsikd=Eb&QBCiB4cM*9*#Y$1@bKAkJuNQ_aLZxinLFngAV8?Nt%SCw^=qi|AMOGNt6 z?2pMB>zR&4qlkhjn;0|6Ti9wH!cR&)qp3|&)$U87zCoSE(KfG**+&48Me*K@yiBtp zm)Ku(ZNR)ec5>Oj1Y^vP6nT0`)OYs=X*T&X@&}T11fMUMUtP^~U99g6%00wbjrY_C-GFDJ1M+TTWl8`sZ2k}hU%SiDDW2hh_8#c?RGLd2;4{SuT4hFkpKTWG*=8*o>X=XH^sN@Y(E`e@yM)yEmzr*KZwfiz@Ydo9(sbN` zySQG_C!;=Pg{-QBZMt?1f^e@nTB(VZL*yjEe94y5QDoqX6~#EJ4(l$}SSvU4q0wfP zTza=PS+1y4deRHA-u^%{WkpH*QC=l6Qgcn{U(duN%JW6JJ;o};O`9&(9wNx? ze)+nJotiHJI3A(Z*jtg`zUh@uhJJCe4gTvht~|S$4~PeSetx%S<+f_02fw_~jCh?^ z*X1^pYtIgMvT3^G-pz1S?(v!~Y-ZY^qhKb%mk(#+pY?v!xpUoZT}8E$+WFCL{ijW- za*(Wg$25{Rz;p?TArrDfpiQr_>jGawREwzUc5;Y5vlRReVQu4GDgh z1@&k&C_3%sM7ktl4yV@Mt=Z)KRP!)j6nX1m>FRmwCOKTF`JLrv&-8fXficND&I4P&u9SQ03M-(l-3U3_#mj%SXDL(LKw=Phx9`Nq*38+uX0 ziiE^mTASxKsA`B6W;Z{ON z0$Q8Y6_+Ox0(?QajB?H>YO5u}qTFn(4}zKk9%Mi_0B$h{whoT_eyoI6-<~IW=XY&i+)*ti?qk>Q3T7KmGQCfDiR6tTKpKF zPo&Ebr8({g?V*Az?d1oS2JhoZUElKekbK)i5f%xjrwr<5i7jxp2~e%8ddI1`K*rxj zU;>Yfi~ywOf^mFh^$(eIaZsV5nqr}17e4%FWKL}`TEHaQNW55Cq()*ghdP+s2~|U! zSF9HvX0^t|He%aYhrgdBCcNv`rzH+z-4jeJ)1zDxGE>7eBn`CPfQYj=Ls4I{>=tK26kA!6U=%sy6w1Sf8(W zK8q8IcbJIZm1HDrW|5W(n;+HFVnx>CuA7$D<_A#V9~_(f-M)RI9I&4ropIWeQ7cCC zf4KAX$GT{R$P~vwCLMR*L&9$hkE^en4f`9YKZp5oznina8tR$oNOL6>1ZB1fol`(C ztr&d!D@Yh#O5^DFEUmfGf`=`>EQ-Unfo94+oFDROeM#*%hpe(qedx*SB1_rg^v`1_ zmdhLYQ30v5{VUE#HdWSLcS1sx5Q`;Yi?z*$6M~{u3zacO-mAV5A!+A_3~Z3ExQtx# zGBxtjJLNT4M;Bu5{Q_E@Q zqv~dqD?NXQ-14`SJSwZw>gFYj*p6knr5C#ZC=dVa!vg7AbzL@^Y~|s8x{Ay9EowX> zGrCzqYOY)0hm;7|?Ye5e@-j@?irpPGM4VRAPpoTa!pKd>MP{4%r^)` zhjy{_e$G77ZL8>zO0PK&^(IJ{kK>B`%z%NtkGYqmcZv0nPf$OBU?nT0&r1Ca;RHjQ zNbP6l`*WO6BbF3h<@>F0@~B&i*E~{>VwtaRdnXuSS&L+j9$CKHLy{QXMx#S++*M8K zyhf%P<-L{Q+8*yL{{qZh=n#8o|FDvKE{(Z*^0kG{mx?k=R=MovABxNKwAM&}(x*{* ztTK_iY9%Sz7LP51=zN7Izd9NoHaY7j_RFMNL1FS=ZOg8Yz@@GmI=9~yuX9B}(s;Yw zzr9g>_1S%d(2zi>TK;-(f^Tl*=Ay6fVhQumR5W%OpWDY{P)V&3SpWJsOnq#@bta2a zFH33A-mA{8Jlt{D&%>*sube*}&ipr^aQp$(ieAnNWs{y<+u8fEs5Dbph$cyAC3!mA zcEGts6$(w_^!M9P^BT-a?})Rhe1~-#>avPKmwBKwI(^`4!8{dR8&8GBG6_3B6u-tk zxBl!NO60yjevqOpVr1%dh6uv;0rNQSxrDp~m+ld_jmuTfBpg)zFa(9lHG&RIon))DDl zW1~YZ!d^wP^B)Z&PSGgJnCTRp(@ZF+^vb-XPD71><1>7n@^lVZz4$S-Idfk{Zg)F- zvAT!FH_Y;>cW5L}%Ic)AV^n!Exmm(+mkB3j=>Q1|-6RD3mt*S4nDarZ#6 zeniF%{z zH<#HLLi9{PHc`9Hev*2sOIUPwo}_v*R?#j2AHu%?CHuI=_^Jdv?VJqxyV+_wvi@0| ztyg5`jr8<5uhtm;%wsvihp^F$r+mA!s^!fT$lD2C^WC50a4n;LC0lqLH*)*NsOUA@ zro)Evof~Ne}pkK7XiW7Jopw zG`e`k2ntmqwgth|6CVfFUKge)39*(e)ny|e z>vOJV>e25ULNr=*1i4B|)iKnrJS~xETNsuRJz>6~%lyUQRPQEt2nd_Z9{m$G1+jEB zrh`1KlSk43+`3=r5-UVEzeo?YyX`ne4*<(%TeXO)Fmh4fXTVBo2OEW_U*0NdBBwE@29C+)5rWYjp{Yc^?`0lTIP+bR}7Z~n#b!8(Kg%A-ZdY} z@4L0Cfr_P}o~PuWIHHtQm&%2y&v%gn!8EVjx0Lv8T#IkGORlRufA=szj@;hk1U~g0 z8<*b-sCM;X(*N*8?%?#}SR(~o@0FWEH?6oJYR+D+ZP%KaywVXGLd@M_G5OX|=)9v9 z@&1nr2E3Ln_@-wY#c_)_MlT<{eIXUca5VL8&Fbx7lKh!488>%Ljw`7S&>5_|{d%$a z1$(3APZ!L-Yn^}hcQIWJLQOuMc%nfm&Q20)`Vne{%9sI-Qt*n}0dvgznvZcDPsZw^ ztiMMKHQGop#8mPK%+;H%Pn%g5E4D|wO-hS=*O6#j|Kv1?g-DE5=oihyADy~Z6SgQ^ zc#*iIeEW5Ewt&~xgZnhpy1xAJx?^KKUnqk$scd_Ydo$7*I**Vqe_UaDxL5c(1h{JiM z24eY`1xBm(mG&~$g>)W1l6-#viN7DJ2~A8(f9(~UpH7U;m5*A4X0`>!CtA}XLc_v^ z7AtXcC~t6^v|Dn`_*6`(n2}t`uA1{U+VND9B*Ro&uksKm|8~Kgq?V6YiJ))Xz|vmf z)$S909f0y^LXsUcte>-EO(dEt-yN%my&xVlG7Xh2EsaCyz;|MAT;k!M9Z4!mZ<$;n4^4%X?$azTK+go}qVfk3~1` zMoq3s$#WuBDH%O&G;(ZAXAy&Y#9dgnw&Dm6gZj083O-_Az50T}B~SYZw_I;>ILqOB z^7J8lP53f^vm%)U><*uJPt|i_YTh|_7dPJ=A1hqFa=&V7nopD6f}A7!bACBqICG-t z$FtyO-OSDkhIwTb&H@$M2L4Q%s7yWYdAIRSF>UdH>H!*Rz-V~IrM4g|mthbN&*#*- zmt1O%a#WE?iv(o0*!=7RYqBJ}#k6b6?+JmaI}mg8J4|#tGje>S^soE_#mHf^XcZs1 z4XCD;;#B_2=+ZqF0ZJrN&dLjc7D6^Xci7!4I9ca=_8YrvqUoa=Olq3w%j;Bd8S-av zZv#eoLQPj1D36ly7K89hYVgVv)I=WKT)NRr`nDGD^$()cb*+N=ChZ21g!;vK05&!6 zsgwFZF;jB+dvV-$vCN;odFoGc4iv-f~{!ey-13mdA%+#Lcp7QkM8Mp)k$!Ssal9#_m`#Y1xto9-wXe)MPpf zx(M9M@uzB2`fN3wvb7T4{V8~_D_PXcy+UV!(x-o8mf0w>-`$xukl?jt-&D|Q1`(h% zpi%76*BJA)MqKcr?=WJP`VGm3bxLgQ0AL$XV1|dU3kO~n{~U-Wopnv0Pf9l51R*BV z(@aNc^kJ3t0c&HD%N!@Bay+DMx$`;;$N+8$vdOoIci$r&dVHNgj_hwwb(C8ZwIyUdq2J(K|x{GEXB}=k(A~OhCwhta3 zLVFQF-nHTDPJc_89r8R@q+ije=GZUC59LtOL}WBX*j|zf4aq!MA@J9Hdfx7Q%v+*> z1*e0G>UReFRk)l0@tpyaQ{ckK`I%d~&QHW_b*uxo79-*|pUAEPsK4ck%18D{g=F9C zW5q>|6!Y@x7C@+5u)A;{%8a&&bn)83`C#IEMfVEW3`6dO|MD;go(-(2uXA~vlWP0krO z;iPi#34O6$N?g?0{`|D=;U|ra-k12m-KMP}mK@VMV=XHca);d$ihXK{v6T#`-1=Xq z)k|t>%D!eDwjV%gx(wgLYq1<20Knejn&4|yp(IL9p`_^fXBsO0ewR&ol(^~+rL}35 zon!hEW0}ZFKXCkl3SMrYa#&#;21~m_Wc~S1b^O+u#3cvt%HdU0VKXjukbDiszhm&c zFYzR?67nqFFqQ2N*Qo&6*y8o+w{qCg3l$6LsM3c8bOS7DaP0JB9dYu+KYzyF?{dIp*uL6Vb%!HoXNP%VEiY%NbSz2)1F^~ zNKoYZjPF^ZUGj6W`VI(@2<#r6Yl5hKh0LdFk`qhF6dG ze11-ZFoiNLa?2Td`Y?qK5r&aZu&p})fW8!cMl_7r1w%ZtptujloizDhqd1x1j z|ElJbLRgO$-s(P+&8%3q zTVl3WQAtCsSuo3?MNb=b!F8g3Tpg|+*3ak5$ge^AXgt1ul`7+gAmx(+a}j{@WKsCB z14$=_z1ujDU$(ZD@V7PDvph@Emb*0Xku^Zoqke-xp0Gp}PA&uJad z^9g0cMofzB&N=S_h<4$Ef!ja_O0_mNDxHDmGc%J%5rCYCX-k|D*Rej}4}=qBIwe=v<}!PCpb}m9bDh+2pq1Sk+9+vse7$iK2vnvDEnNw2$bG z2-mx7x@8BnCB-10(sDFC#pd&x&UPIS1RzZgkFM#&Q~q8WYDu>)$uwVzF;d`O$$K^E zO`(VA!#>~mG3ETQ83HZ_1XZu_pC}IvXVY2@-Lcw6thL=KqrH{feDm%~X$XOG@z}ZX zS67*f7RyGVvQrb=tF`5Q68K7J9cg#)8?O-*R-2HWUm8}XPLJ%@3oakvJ+VqUfVV!J z7L7(8Kimb4;iS^4=W{(&(ZQ7D)e{=#*^?YL(2M@ae@FiM=JjaA1uKrg$<@Cp4X{u2 z8~Es5JKaGbon(qZPZYlu%4LY5%_^1``Yn1+o7&$nfZFRql8Fy^)6Y&|#6412tVqum z!SFtC+G%$8QhzmWQ9h*~{88|bQE^!FVbN6atvXPOQ1ShoeI|8x#!Ej&$a2?BMqZQ0 zmY4i#q}W12VtMD@=m)(vt-GivKQG_KGHx&~mkz~`1=5j;o1fE%Su4?&*Y+ysJSi${ z@1u=T=Pi}4iPfk_SZsb}ew#+pFjHj{OpTYRBJzFkVoJXk73#oU(+N_CNaP-9*eQ|c zopmjnzi|2lCc+KWSXxoYOV@Jq!(e_}f+Vb=<`Wt0eHBm{Tb)6^h?@XyDWj@fkS=lX z+SrP?podSHAI&;v>j-(PDU#y?NJ`Z2hU|H!1+!aO{|VAI5E*;~&Zn2}R4OX^Zo;|^ z^D6U?NRJI~8|JrWL!)AyRO7a)Mzz=^=|5^1RL!1D|KJ_Pe2KoftDl{S40jDbu2r%9 zmXcy^D)~D%hHr0{zgM zLs6f{!zK|61(Ubka6+nPr_RFU0TYz-n7vFAIj6Xz6$!gpqnp*{XtnkasZ&E<#IE+CePs%R2nSc9 zbfrx=58q@fgw8Q&-J1U3d?Z_(&%Fz65M?fgg@Y1jVEaUV)+@W~+qEdC8jP{Qpr_qn zsY7=UC40CoAgnxXkT@xKXMVJ1gh(c%z2=(Ef7=U4n2oQ}(|k5=e|ukgTuFC)r(3)H z*i6pB^7yP$H~8^QF>9EbY)w`GDF;E!KR>N$bm?}Kv6!chnf45~sE{h=475KifI3!K z^-YIE_m)?dXKT1mkB(Qeq*a3J>cQ5O)hg$a+>yw5JZqG$dgk#Ex0eru|+qV4x( z=LGgh;JZkjm8G^H%-e}N1+|7@nsLjKHXxAavih`E5clqC`K~~mz^uZ3Y$u$H++lu* z?m}$N_PjFz+HLxRJqgq#H)nlJs7#oBT+gJ3ZOzjJfjhKe|{lSbF1)d z*dTA=nFcAQ2Jw0sBeaNre24XSKXm%eQ8!K8MK8`Qc_mRQ;Ha~&46EH$Z5P{avB9W3 z`a06qXSwy1cwrrsz01^-W!lD5io&ti(8uoyaVMQSt>EtmN5)JibZ1j)UPs3U@ULn_TM%=` zl+xrGT&rI!RS%X+&vzfQ%Zs=49iN)dy6Uxox2w9sv(j}PBhKHSlsx6ijO&L~Pa)PjLn%P>OgMV8p);)?wX726o=*oI$ zkGJw!pXkh&u=COA#pDr%%%LDTMSjz3a{n;&FFb{z4mt5!_5u^by@j1|~cJXILs zYZWUbg0m6{?}Wh?!;E(fRz7O%V4ffQn=YuP>yI%eeRJp6E~~hARb=j@`g%|sYdrE& zwKUIivfI(Fz`sIi(}JlvmH9P61@>RI9wcZdBX57#`Fgu&%V(!Wh9lwat;f6uG6!bw zPP$@b9$^g01zal&P(a_Y?ctuwtBNmne%5TRTRzoyRcI(u*wVeOfs=lZ6oQfSl@BEZ z9Bv=JP;7O5&Hk=;`i?=K=*%yk=8F9Z4@|pk3gZhO(w2)6f7RoZy(C87r-T8r#RCF( z`43_z9;Dx29KQG1C!jsM=61WTZKKx%7zlX;_LfM*XUEjU)}>i9oPHBwv$uerW}~ZZYuhxRKs_nC+W?3{_l6P%mi>4j=m@|j+oWr=`Z@3hYbBsn4=t+WH~-vf33NY9dSh<7vh}`K&jijBy*R&q z6;Qw`LHX~-o7^XK=$}N;@q%aDwFw$@EogsPL8EQZ)|zp+p6uyvK++pE8NcRA40 zp`RLSo(a}Od)JE-KJY{PEw;rBpn!HZu(jH3N>&iFP3E8luXN6|#&X;Tmse)_91p%s z0KmJDTct_Ix_n6U**qX2McJ4(@6M(-TmNWKF`J#f(>uEz8)2MF|9b->I^B=qR39sa z!_Eq>y^S%*uT7{I*nF?PZdpY<#RI*7=`+aZs#fvpJ!!z>yHk>R16yb+MJX#uJFKdr zzMg8QJDLEb^Z0q7^dUC4gc3>pjkI@Y4ZjZUkDmL)48V)MSuOqFXZz^fu>U9L5-P(|U?N{Z zKf|&b+49GHg|07jN=iyOw_X+{$z~rtYggReeT)up>ry|1Xe;l(PEDKPAwT{Z}Z={1jyTEt`I??f$ZJB=@0yG?O$D!I!_jf*k z?-P9pxXLQq6HfmzWFiGn+V8N9U;UTP{fm67vNu(L6;=M>KW0W`0;c_cxACuY`tNQ0 zFNI1p7FGuc81MDn{zH2GU_$hED8d0jA)!?Yup_$zm0tqNUYPxGHw0t-jkJFhH#_NQ ze-(dGL$?e%zprcoMYFxt685Lsxcc8_g`5;$7@JSEIPjHYi3GOK0E3`p`^+N zBq6nR_k)pHR8+|*vjN&D@iRK7eS#OzpkHjx4Snz9?D{V0?k1snR)vm+b1o>k|KEK^ zU-=W2D6cq*7dqu;j$2UkYlqU<4qmhZlmCPsz+lvV=?R8UmTPs@P4!yTuKBw%h!roo zKN-0|3!KP7_fdz(|5L2|&!4{p$lc<$gRizDC|}v(Xt{@Wy;(s~QBh)r#kP{^n#RU< zfV;gSbj`f;HN68`Bhj>ZYmbP@IATWNcPp`oj%a%G(zsj;pJ<+$YO6!kxfJFkEymu~MTAqf$rH${PnB29|YR0LuH zl`g#(6{J_`Edf!nfJ#$oQBj&Sr3uoTQbUp6d+!h+lr!1ydp5fF`K~{1;DRU5WM<9G znzh#dH#E|BIQyY1-s|lC_hwFujs)s-d{kPdV%KK^@|Bs_qhR*PStL~40p zo8qEvuH36hxnWipFVPugN z-$dHg?gNMBi2)`ZNUopY z*qrWUryT*CG;ME1Ae5e71igmmbL5~p5Rws&zyqN$YZ}6l44nmw!v=^k*C7l7+K@VT zfrfrl&ubz0PW^kPF6+s2y&ZJN^)zzIfv`*7qgNe$U^6w`q5uvMBkd9IHs4dO#?+-( zr*grTcd66Vb-vRyfGlJoiyBk=YmU0;R&zt$yLqU={V{cizv=ZIL2RdM+3?1-R45QlGHUXU`Czs@S05@`JiXZs(=p2SIeA7# zKI3^={-Ej-OOZ+OjDLC%`6K6swi;N~W2jqDD>fV07)MPsTJpBpl7X^3FTJ|5ZqSzl zdAqm(RGT&u_=2hRQJUtfZt0cjP-fKmH8hf{VLFg`OCi6HlNw%i8(Q5dKo&a=VwexW z9(Yg0iuQ#w17eAHahQ?}H*R|Mal>$W6zV}thwT}9v;7>hKyG>F^xIlKrO#o{qO^5t z_Gpf|JJs0h*5mbLCbNRr+B48&4$LsA!Hx<=B^C%@ z(*iUHWyPG&5PUEf`4n)z+O$uX`}j1!U}Q7g-b-M8)~02rxIj{O^3%#q90UQqy?dN?|HdmDfuBD^XGyLdGL&_yPtv;Ake@|a7 zijRk0z0E>V{N*jxLS*|`wfBMbR8Wt7aM9cRiih8VuQ;bO0m#KB1YjY4NHtvw!C;(2 znJ`bWHD0E-Y!05`rYFA?r5eP2jh_5cT6k3r3NMd=?-Hr`N_v>Vef zXBWX@!t>jqu~7qEI=EI3!=tE49dw?64eppD|LPq$^K1jz+_pE~IUSf=^_dr8b>?Ri zxGa=V;6WzT4Nu8+4{#hd8LkoumNd&Mdu;ccSeFlvkrjB9%fGj?MLh?^L0^G@xp$)3 z)avP(*4CaJ{i-Mfn?r{8TjXuNrk#%TsEat-bT>mTiIyWOC(oX(p0qVSYQQ^l>2fFb zp)CW!ep~3Ou&`KHjF}Kv1cV_#o~ks+wP65-Cj!lnxI%MH19lq| z+EUXp%<6?Yg%&5H!))V{SH+Fc_&Z6A(o1;Ojv_T{gYa*zX>(im>gUI!>+H=>9?dX& zW1*OCk=8Y>yqBBGM{yJmYaMX-#dg}CKPME_c$|njm~6~3YWDyfsxRbn-cM@# zCqoI@qpvzZETxkJpDqMANnnvTXF9DMn$K+2nUM|<6#<%pxBw+Eop%*Q2J)&DVly*N zW|PeJe7}mwW@cq7=yp|wXm^ymF?2bNo-?$FyrzU>ixO^nfx7FR(NcK*&jfO31SJQ(s*ZoHX3a%A>Vdn>{q*Gj%MA~QZqE?v;y7Xv?`K&vx zz5b8Rl@?T_%Pze3S}>?Kuo4+DU=-g^a{g%~6^eDBtd1@u^5rTh;wzwb!)4*&V?6&G_FhJt*9DS}f4|e@ETEG^z0K&wGma(tR zCC)+=pElRoMa+PG#sSE_8Iq8n@Ro;FoG(rNBrnG&qkNWzLPyez#YG@v8 zpYHe;y^BBRDQDliLa*zCHWQ;lguJvKU_}im9;oic! zHbsSQe%q%Fj_{#GC(@{j7UP2fN@`kg+K&|36YnDhE^jiTN9({#YaL5da_+?o6MHFZ zQIt}F7Ui?|^Y>5iHdD)PcN*14LFf zzb2s?FzN=ATLG6?xwPP$&$FVrFL5LKpHyO|4GuqZhGJ*boPv}EGYUR~EBwSZt%fmW zEA=At6pUh)4No%Z2COax(n#v{Q!)oyc*mW0PW9WKE?9b>NTkA$Ghhxy9XIQ3dsKy} z#A&a1s$YXaZ$8K?e`w)8RGxi(i@Gm->jUk6uQ6%t(y&_UGm&{q7Iko|Lu(1=vHIh* z@Jq{GS9&-0-xdw2*ws6sF}?A!IUjA884RPhH7yFZ>$W7_m0eEkeZA^RY7U(ay4>@q z&bKi#Fe}pRWR`3}ydc0yW@{m?*c&mNBv7C$Mj_8ZMCja$c zVLK6kjk4CtVGmS-TTp}q%dp4b?(yalKpg3B8`ERjaYEyB#5Z!>yDg+iRQn>O%K2}^ zm@Y#R936Te)O_UxNTkJpab)~c8H9=Do6wAIqDIEgtxJP8Cp=p-qoA{ygL3okjc+3h zqfqsQC38w$-@T~kk`nyg)FSWP;kgeo_{hUkY=dB-jIAi`wkJ;H{gTY4+6a@=>3KXH z!b|*l;cEaDB}|K7w-ei9s?(L2kY=|RC_oxq9q;f@VU%{&Q|i2UYUBKVqg35|TbN*a ztFce+>8>Bouj0k~C5T+!g@uV#q1`_lEu98}(~XqE^ny*r*sKV0xfi?cww*J))2OHP z;EhPsZ(Ba=G!@Jjk;_~gKT32vLwI5P<~C1#vl`Ira|DTm zba}|nQD3bWmwED+KT{?1^0&Y-?jb{RGblcR>;MS;ZphU1)++jwIQp^6cz-9e?@ArpKIPiy zbz=iMUKeiw5~@CJ`#45(8*y{|meM1tP6s1ss8IfK=72&jyQFdUNlXwo@@D$c0e=!T zX_wgT|Iz?)=G)z4`+%K+XZDeqTVl;?D$IV8BQW97|FRc?1y(*75M%8A)0brKyP~;U zOtf~0v1dq|lOrjAli9Oc$!?zucv_ylPA8W`prq5P<8+9{{pz%`d^@m2S`?W7rORl{ z#_CFO+{9V?%nkf^UQVgz+#5IV3ng1;l^NA1-WeAJ2tmG^|MvvFoAxEWy`N_mOc$0tW) zY;7H4SW=QAfBAe$HHIL7*G$?diNw`#pz>^c-Ou*k4VS2l*(8qE?vE&!5EoepQ!O8! z1^~&)o0(FFI*j(0$o6KF#%a*LDvEl{mEf z6?FO^qz2~a7(XOToG?JvnK$PGyjrJ(S@FfVe1Tm6Vp&q#m+(w@J3T9L$pPc36X=9S z_hW*$NxLaY15cu@W9&QJc57ou6Qs8*>eirmAXi1oSTLTq_ZZEU^EO&`(&I`}oD~2@ zxQwHWHZ6&X*%t0-1#a(`Ie$v={O3|3GQs<6;Z#K%Gj9b4fBHQ319NMk)Z<<8ipxk! zv5S>x#jIoN97FcbsHOq6RmxMu76v!4KWBOLypNuXRB&EKYiW;7qmfbsL(GN-cw#x zXrm83x*C+i9ru>`E-DJtLEQ(3u?`dI7G6^lfoUiy-dn7s2sn7O==%$O19Ye(%@N}& zo<(Q6N74%KTQ6GP((4WYd7yjCj(HwIOY=+3Xy2I_xv|8tmbGx#dwa~Z@ID{n6`%QE zW2B^*W2c;|wsPOlw$4qRG~%L&Zhvw&VfQWREL?;A*=9CM{Pbl}QFBmb@5Zlb8Pbz^ zf}XzR+5b6;Yw&$QS6Ww@cdHoQBTYlZmj;Q0`*XU}H+@C@%sdH~)92b#;%0qH6aT6d zMmpRgfp0$Qx4X)K0%|6}l=vv}C^Wm)v(rQlI|BbX?}5q{Ogrkz~Go z-ct!40{Q`nnhYZ|KIi-_)#+(=5Uprywi~uAdF;lYqJqW?TPV7v)B`JJSO+Pt2i(UF z9L5$@`#m&%6{Z|h7m}Px*xpJjEo}wL-dTmd zgt8NDDScCd2S(CMPYW*e6-O(om-|;Sif7%=qDM%i<5=+O ze2nwYAbJxQeL=aCICt$B40dJG;Iw^A<~2}BbPDX6zXON(*l{4o+7K^OJK#Cm<|*ed zW6mXt&s_B3LN_Fo5>$#d;>Zer|Ch*#Hce0MPm$t?cLoSP>pB^gVzyJy`!X4JBwm$j z$ikpKVV?xsHz^d^2_ly?%YoBRtZnat+i;fr(h2I*dYC;uRMAUwyx^6!U7*wUMsEm+ zTrE1#U(nr}8|Yr=HLb`5Cav?NxHHF(#MO1FQ%vxDRVhgdzO)&Rln1i`-QMJHW z+owX_<)o(7e%T!J2uxWCNs8FE%fDYQ5(&VWJaozht#ysQQV11_^Al-`KC_K30sX&T z;Xm5u;Dt}yWQ*GBaAWb-uty0oRxK~sQRnYiDH*=gJ+tXVN~gAK@6Fah3Iu5gTRgFU zQ;g3e~VVoU3@eg<8iPLTE}u^kqzZahLi z%bW3JXM2`NN9#BSi+ z#XiwJ10+e0@{BIYo_jWEGonmPZa)wI4QB+1E94?oRxbdOxifBZ@Zj{3y^B zC!PNlD7-hTx2WJ&_dt=ab3bj#Aui$R;!mfJ0~Cj6eX!a1gG1r-;OsyntK*~nhNWSu z`>U-l2M&8)zBOhd<8s*^WnPwBrxGpll!XhIWpl=tUPogqQ~#GJK7O?bFhx>q%U-k@ z)FhGGzO=9H6|n%>e#lvP2WM9Ut=t#+OY{s)ndpkoa;YO`~unvj^=)_8 zW6s>pb2J&CBtLW@q!(NJwhJy({u;k}^W?soTR%;_zstK6+bcF2-!|ODD6L`x(bm3! zMGmG`Mf0~Tcl&b!$x2S4+1||d4LN+U+tiU58>e@(FY!kYi7%PGaN*a?vNtA|&@hul zj8A?GPRO4m09@!$qBbr@%CW?@uDDEhLQMNp(9W9 z{1wIlI5vdehXx>I9kEc_(XgTb`(F2tgLJt%2Is3qOReWiYfO#vHJZH^2QXSfQ^zcH z$b>G#k?1SOz#;R8!fy*7jEWrlD;sg0G9ZV>K-dZnv$;IT_Z6&=p52V4%ss&Kx+eKs zmoclOxgslJtO-{;ub}@LyA$;4)Y}SgA~Be%`l!v11SGlJemhIxv9PV=I_R~EK+5-HQ>2{Xi>{Usw0=JVj`WI_%>|%g#Y9%a02x zz`rkY?0Y_{vDBkJ{=+>M6pXA|P)9dM5(Y=VMdjWd`%!dTV$1Hjs(v)+!zW!620Hpj zNm6!Q<@|637n$XIW^z{Lw@ z)y#!R_nDvLlD0ZcMRzN?nXP&|?8ZKVZa01ly8R2NczU34`d}Ljq*8t>{)^1~0))@3 zYF1lg!WXBdZKh3-Q`-R85Pfp)Z2F`0xG(-%94`Z^U}c5s7||^~;lqRxQu1>EPS#Ip zZj&jdg&R%f2F&dnFz&M_=?#gtm>`40&U6Q@v9CqIsm}VU)p=M-%bC8;$ z68I|tIGtqbcXWzVouG8fk&>o<2a_;_*Hx8L;+a_#EJVd1=L`EvWQSJSW~1;@Qa5%lVdHmdt;`* zs54yxt15nh-b|QYeVPIq9*~~3s!*^lewc5D^zKtdWI;FVA+6YKs{{%jvF!uqKkEep z_}y}ImV-gKMcwdrJz6F1VrBG8Gt4d1)E~jrfsh{ZiIbd1e3{=EaTYke>KGxIz`iw$ zy18Siwl$p$eT=1W+r}9Y2V6h#^A{S)Gj4!YE_H=)v8EkaAn+Sb$d;DWHvj{T-0SA3`Ntl!4CKvxad}qpS?d z!ChhW%zPuWX?6P`PNUogM?xV)bmv9)1~nz@QVOrZ6<*}wXKoD1OXXM(1?}!TVG-4f z@0Rkui^xLzd8HQ(9A?wGs9{wG6je2p1T$Q=1C%vDC`t^}P@K^XbU6rwiywl5R3rcm z$zjdH&%X;8zG-DvwlUw^Vf_%RY!{*fWfv8dRK?g4%BTh};@`ioXgsBEEwY>W#&6l{ zt8$UK7Xxa|G`#}ps6C8)`OJ+{T@X9w0KE*s7Z^}H2EinTJ`6MT;EPTl;zQ$k8(b%w z#ENwhB07icyeE5JH{VdZukF>AgH1QgKbJd{T+fV?&sTw)1NP zDBs78(M^q*i|KC~x6&T?B%dDgHpnF1ZK+QEtXWGn`_1=bdZEonw;7|6B1lAJHIh=9 zmfQ(e(rmO#LC6lx7MC6&95%MA3-x!K$Y9PND(F5Lbe{nFwLIoB1Q8n8Y;zV*>=E7& zVZBCZVJiRF#XR>d@^LyNtYm^Svw$*ax7tKWd3XQUn4F}HSpg3=iqaTX@f872hcRB~ zdkC^JPlg55k$N!j%I-ncTSy z;uIMFY~aMPLSIj4qB{~zeV%ELRpPLE7IMpLa>wDQ6-4i>>)F#VXtk#{-yaxracdl2 z8>@N_WWG$o4N<2kp|`=M%Hj>_FOw^Iw@I~uknHARR>&{}^M1uNHXWLH9gR0%I1&0M zzV+0hyVOW9J1P=#nfy-wD#fU$glVtc+1=F?+)YWi^HE>`jjaPu?k#eJ{pUExg(W|O!*1(7`QtuJ zEao!&9D+jY_0Z3NC3eG!fEmh^0mLi8^$0a&nNTr~V}D{(0k4*l zBByp~(uo4=gh9()w-mVr4}@S>PKR;O4-`7Xp<1^AoqV>&=l4Oy0IvXahx#+n>&BEf zg6VHO+e-lW^>M39P%OR*4uc)~2Z)-R;fB^;$|l=So}2s%1-6*FRE4FN7|h9n8_d6L zk5KqtF$}cY4C91;VfDK6nk|GQ)B7p*A-}wASgREb(Eke)a;;h}B}_Jz9Bdu``D;`6 z5c$dt008J!R8rb0t=gmv5vBz-S=NeVC_u-F)G9n1kAvAW#Q<@kw9n6WrB{B$*{6Jr zdTc`F@@KDr6dvYP85z(=BXvnfh+bVoV`il~bp=5OPd@rA5L&cQ_-1{fUuGJ9aG}9Y zfDf_Fpqiz|dFQpf{mE<|Ed!$}2Sq!!vv9;qW?1WcWMA%dofMvW@S!x@Hf$zUQo39& z2ZclO^IbO1In*z%|A1A=il(PWzI7{(w^_z@;rX|l3w?dZRylsefor2C;N zZ4#-X`l+e?vd(nqK^p(Re|2UCuth~h*|x#7Sj?0j3BcCIsW$C7zSbJRWmb+Eph?o_)y|T35T%p_PM#ieVw-1mV*l%6REn zhM`5uljiLQt>-g{Y@zKXhJ|w zHuPyqagj1AQrlj7ioG-gJ~JhO6A#BOn(Akp(h(q$%&%W>avzuRuDZDNPkb~4CV}hj z-f~)}fE&nX;;?N%?a_C;ddI|8`yecbu4E zU%!^J+{AK?ga^oscbXQZLg6O2xX~s8CE{5|Ecgf5RA`RX6Kv@7FfkQ$;L<+^DQglT z&M~xMuR^)RyZ3G*9A~nf5UTGhBrcc7Q5MAr-LCNU#v;dYrKN&puOK~{*Rb1kbaW5J z?y0WW!g{yDoN51TQCS8XA(Nu7h^XngF&3FD+phK4H>D%;zYmzi+; z?L5#GeyI2B4E!K0z-LN0Hk218{y5@rSAIuc(!PHK6Re||5m9);o=7Y`rl5eVBoJzc zhsr4~1|$CU!HPrRUdG|+Hq*+61|vO#?V>117JeYmFB7(eG3}M_O5lO*=n0+|QlnWC zF%>zAhZ-`X>Gs@07m0Zt*F$}eAd$3>DjyBfJ)$jU+urtmBa1%5`sb|28K1;|*&iQ| z9`62HS}`(`U~X=HwxM~Svvv{py~9gdW;cH~6|y9&Lo>8%7;JTw8*^1L5<0MP?ecP3 zpgbdf^Rbd5y;U1YPuiVe;+S<%k@TN+$cznDb$v@7pYU+z@^`s)-Orz^2M?Ley9}8+ z)Mn&X;q2}Azka!feW*@5CIdCY`6?dXjDVQ-5>`{-{?hB6C;5lYeLg5T`)dOzRKno= zykE@YN^7REK?eg$i=j_K3( z-E=PUns3aU-qrip+%tx8t_kL8e+O{1u-2em&Rub=H?#AX4Sv;)k^x@1+I$03-FOt? z#Y&k>CX(=6pSuj^uXI?PdfP4bU!&&0rfz{Li3q2#=}p+ydvC@Y4p}xd+}$eM*=X(9 z{t4j_(WOkB?=lc%$#Ql5zT-X9_@{>fHYFk|5j$9$!ye>szm>h#KFIlsENncQ=kkC3B(wxS;tjuTDL#Z2yheQ{{EpJWmMtxhb!DE#rz= G;Qs(<6pD5L literal 0 HcmV?d00001 diff --git a/docs/connector-development/connector-builder-ui/assets/tutorial-schema.png b/docs/connector-development/connector-builder-ui/assets/tutorial-schema.png new file mode 100644 index 0000000000000000000000000000000000000000..649e42f819afd596ec3011a11cf876f22b851b91 GIT binary patch literal 211588 zcmeEthd-NL`#5TqqOGDeyU=P;wO3F@)m}AY*4}%DT2)na7&T+n9yMZ%(UP`yiA|^# zE3_g=h~Mpbp7;B{Z~OiUzxdp_PwxAi>zr#}=emwqZA}$A8de$-5)wMqM-O#LNXYRd zB$Nr%l)#hTCwjmGnkq*{MQv3@#jDz0?skqYwj?BvVv|#;^!3&*K3ko`DyzMCmNb-c zRq5)pr1K^u6l<0@ZjwHT6*{kf*T~4M6P9y5!dA&p>5|K(YMajbTR8aDxEIX=%r3>P zwCr6N`0kvv`#_p7DogsL?`Z$%MADn|^4(ms>{us~r(eA;y-^6wJcxQoU&7|mLBjf; zlv-)h%lzTP%a-@8PXxFyB=;TMr|4Gj`}-#bBHeFYE|6Rd_pFgHO^W_`K|NT>ONpMu zjdw*n>)j2mrMSzrmy9AW%dswvT46Yrmag?I##rawIJ~?;@_Ow-?scYT30ve6O?mov z8D_a`sM3u1K3xu`+%7LSwtiLJY#H7CMToO+P=lzJJ=(sk{$%+Qjh=x_YwERY1hv}b zw64ID)zt&k+vF1V607jrvKklIV~xuNm&|+0wV8U~^2Q{7)R(y=_u28={QC>cw!4ff zMt89c1{M98>|$NFzsra7X(e0@isGIm)wxmro~fiXId6Vf*{Jw(MOohqox_ovWCq06 zI&|ZOf#e=d&V|ia#Y4lF;oqvXl}qudUm}i_Hz-SS*~!PL$B!vWVUmu+ouzHGDumQ8 z0r`@(iw146+(goRA)(TMzyxS%ij43BCc&@gbPsF2^Yxv*Kc10n7JINqHxhmA!i{rQ z=gHY$gsXocrJ%lczToN^)r6;*`70E}yN5E-BBJ~;pFX*zMcsHEyNU43WY5ebrQF`! zc@u!(Y>uNQ{3>=gW_mV093CESlMjErK|=M8q}VqfRJKOKI!nTm7?<>N#tJp>OGc)x zz+sd_``nV|i6xchJWcjIE$Ml(h4XZ0@11%0n$p;4)!UNvZuo;+&qY6yezRiRd?x#m zi(cUjdyKFLX=R6RBOOC7NAo;4wu=g_ay}~R-g%z9xXag8Uhw~j^0?rBljN-8^*7`< z&#EdteR0wF*O?Il#6MP z-R{``(aw0891_9b8F}^UXGYz#-qg`ix?KVfI2L3U#B$?y!XMqNiA{MZZhcQE{JmzT zmYM3zgL3X{p85;Yv5=b=Ra2j;{kk6gE~< z)k9@^8>al1o+&@0eyYZo*j4dpGnOrv85ASSX0?MWG$@SDq;)wYXXn zGGZUny)^XH$1}t-aOqdlH13;PK5@l$WLgi1Y6+tp=B$asUEi+{ST`v}c6+OFsD;~R z+rpM_+eQ%iTfE4x)DL1MD; zo2UO4+E1p%ti`E?KDZw8{#chlNf=-3@8M0bkcQhH`BSmPsK;c{GjPDz71>jz#3bRq zHJ%qG4J2m0>?Ek9R;9(I+S4qh74BPYLY9{g44n9rsgI-GiS5lnZB8~Gh!{X z%QcM`W|C*(Fy#Jn`yu;_7^tk7td|UZ;L)1nYT826`0nAu-q^RX(!72_X#r>3>Vsjy z-mULi!*FidEz! zF_MaB@1Om8#v9HPUJ{NBZ&MIZ*p1YrVvJCX9H&GvU8a5*!KdK^;YIAlg0u0l1)nEA zgJU6jXA0fkPl@*1nk>{wkMI`_W`#OFpL^AJh1afh@X~-x=EFxX)uuAA2A2iOFX6ap z--`3@zdXo`&r7wo_!;Dx_*qT&`kLm?$G24jv)7ZG1z^1WycHr_$w`9zsc=;WO;id| z=!T4qe~-MKnVl=M}C%; zvlu(rz~pwAw%=0F>XW6=bVljb9kc$XnkK{5$v#t|Drv!c+o^{Khk1wnw69q18V^;! zZtx&nf2#8Zg&6@yc<-09qb+*unu6=fEK#ujzNoirj-7PQod^cGrngLHK zN=8-gloijGw+D8wB$|FUb#vL9HL2~lH2qmGD5n+%Z;*8ehI~-6U8DbzFvBtE*Mo66 zj3%fd1=_&fE%2?BEjJWn)2dmrsR7dbxUH;g*vZy+5bj8*+}=l_jBE^R+fu-$Atdy- z7+NLX`|J$l4k`A>G{rb4yyu!ULzLesRasv}?u!+O)`|0o)N{~DPR%S$>ihQ*CoqdW zh&!4NP$S6Opqlxmj*?bANYQeUMV6}U$fQi|;lkuWZNq?u$R!nGHiL3SWS2mFNzznuMa3N)W zEP48!d&6vOllL~Ju4QZg^L{pJu=Qj`0TW4#iQ~G!$s{`#V1|EqqPpxp){d-isfVI> zwj1#x>uaAhbyj;(wP7by20O2Qme)-ex2!jf>@LcN%Z^*9Lx%Tsi8Ut%3tZ`8E}^b_ z_%Bd+nE6)x_Eu1Sfbfprvh=Kf3rZ^hHN!Hzzoa-8LrheH`p9h^_8rgs;>M`?pJY}Q zRN11++eIM^$3%y#&X)25`qVMXr0j(bk7+ulXGva>lkkWsY8TNDjw(i+JE1yv;fR+r zyCvo`Qx2tYWd4N{kq%OIe&#d91hR7pO2hDHQqpBUPl+7qNUHAh1jF~GXQK`e_metz zw60_?o_ybz<1elu_7iDK4$m%rFRgzIM6fSyja2P4G)VY>HZ=)3DJuyD&>{sc5GmXL zwUtS4k(~MKIT;B_j3Wv8KYcWT`|0O3aGj3%`+nx_a}p}x*G1q8$RYbzZ*qLjnSZq@ z6M%Ol3VMpFs=!^(#>>{$&D+7F6wq|F^|87d;OgS$EfpYp{jVNUK>PHu;PtD2b@6eQ zy>6tTeO1xj%l4|6z&(L`*FiK_uU?h$dTJ-7`%w9x;lMB1>kd9X9#VpW{{H>~{=x$8 zUiN}Ql9G~w_wEbczt0c!;P(!6^RWuxck{mSH;{k9d1&ix`E4HTsXC_r*p2bLfA(`hBQ@x2>0=yDKoM59r?v`)BZfzWisP zjNmEm|3Qnt3H{eofYKlu8NvVK8i=O4(hmVJlHKv4mOgL?#O(BQMg{n~_4gfUla^y| zg`5CFAy1(+oM=^Yg?hiu$!YIc@s9Nsfc(9bKBby1IZjKLnH_m`!9F z>mL!AUn=Ix$Fb0Ka~lm&zb3hGy=*%Wv$Q$aBrP0_@KXt0-Bsn;Ba?lTev zuGRlBAJCWSs{D{4Db*YB|CsJP05j41&t(7;hSQwCiY|K=`9@B?5jvj5M8=i8X^`K`J=|EPl+d~LqCJ+b&u{)!XGepME z&oAch_O47x3Srmx9$9^0_38P~@X+lL_d#2B zwLO-0{`NHN5?&)qs_n)Oo0N}&X~06KZOxtw&z~~%I!j(567Hb^S7HHAFq?T;`k8(j zrM{#v-?D8tWoQ9myqlH|Q6jN>^9LcdFOpHv;zxN=yij!-zn8D8ZYJ=vUARac1Ibs8 zFBpWsrt`n>J9BdGlhZI`HL_(yF9#_0`^GSE>0XiAR8l&to_3$#p{I;gO8M1g6CFa& z!2ggFinI7G*kOvXoe+L$v6WAibZ=7Js_V1mbTQKKZOn`K2fvG6xC}YXMeHG|L~(yA z;*I4P=Y<^@{_^{Ll}6*Ue^3IOBd-tv7la>tw;RlMzM&#ueTEXd-Pvz%K>d{Wp7WSX zhRB-p2CBV^AAaz0)6UN6cLtxA&xxV{=F@n;6Ai1YW9|1-J9t#<82-#1Zfaq%Ixya? zqwxC*Ny+(?bFM0&2-{(-&&oe`=`x-9l%QWpvg*9dX^K1d8_UC;m;o(X$+!4G&>S-S zK$ShK{2RcWE($>Ik4S2R!9b%qedpXCcqX-zC|DeFDdMiGkw(DpcD`r-Z5C4UZw~#RR<3mAvSpl6dw!cJH$2ojV0V^3fYC#}B=Pm*XE}n&G=m0p z05l~ob3gjuPzo<)Dt?*czCOC`a&({-8CgzHj1fQ+>F7BVuLzeqF@(Y}5(*YD&OjX7 z?<2o47o&3qsY04H40~P~f1@URU(;XNC5I#jnoZvM9iLKgj&&p`I(QI72-;k18CEW% z5{l)eDdI-oLD?WuZv1XR<%7asp2OEv^sffKG$?bQs$0Wt zH3&x_&#^Z?qhqW8Xu;jk2AK14T6FnEU{$xSg^Qz(iWh?=XYG*4v8nTh(_s@Iqg`^N zDL-VqTKx~k+`4@V7}K_2lKIAe(sm?sRYQDn+Fk1-1L!~|ATXBu`Q(&yqN=##S2@(2 zn<|S+^Fc|;?ZbY}DftNaO?u8#-8SIe>9xqT(*hkn-aIz9isp7L$`Y$S#-WBO892`e zgLwV}`J5sOJ^^&E-}!`F0Ya3^#RWN4Fc^|EV1AOmp2L6U%li7d6ldxujtIDy#ABBm zfXHjhgu6t7+PO>LgiS6Zrh3?_7NC6Jwo)xZZC0~_y}#EOnnD7n!%ni^W-pTdhl=Qg zzof<2MUJB5I9Ix4dC+$Y&1u>StQ8S6$*;?+lGXFL_RUCbYMGKh_RR`%wSKd zJKAbMbyT)5j25g0{0AT8^>eOA!gV+D1;O!fzj6Bdk`hS?9#K))*n|+)H2I0LRT~XmW_Wk=snGdYKdwa1azWn?ZVu0ac6LBCd^F5~hz_$=68b8L!zq=yp zEAt_amC4oF+q+B_Hxb8Cc#PV3UaxJ=8r&|`ezEObYv8?F@( zx2CNP0mLt-jzX6LQdZfV$^TIvW%(&1!_=iKN>vqX5Vh|xTKoprS3BOcJ^2F*Rv2O# zTLJwaf#k)=n66-xr;1zFBH)1MYv9cekd!cA-*9`UF;)ji&k&CWerjbvgWMG`p0&gI zsrUD`SOge()a%6O4(Q%?SY&Kv*wxk62w_chZQAyW4(rvD39VP$j|a z^BCCw!%nY2l5=$oS7_y8Q&97jgAZdL0U)X9JoFcnMZD(3mWpo4MWcq^=q8LMuxm>5X zdzklni%QPut8xPSI@C*)P72WaXEb!}1h*%M4Pt`Rl}L)}WY1*{!;T}@ofD510|}eEg0A0|9K~D?y2R|T zx7cLuO0M>eqL@6t?V|=^`>2z?x!`Ta{cYh4{GPv9$iaD2mue-KE#D`b7hm-l^Njr4 zMPD)m>>k{OYWY^rRd(V~_gVbtkqQeVelZY;hs1o>eKPLbI_+epy0>LpJk=dq zJ+U08_?#Cfz#bI}ZIQ#Q_NB3?qpB>RIb#YoHi|nE<2l+%y?znF*obUo2eHAT9dY`Oc_0<^!r2CE%t9po-xn&*i%*A=wQrcCDpf#e0ssDyFTIB^01zvO(Cl zl_}HTIWmMMk7-VR#AS(6*H62hVR`RMw;}TBy-=+tI3nv)+U6DoeH{#tku<1*;>n61#n8wmMKgV|~56 z=-}0?L|14VV(N3OMUg2Ov5Q}D-<&wJH6FY@^fR+P-&GDbp{7A#FDe#XXg}IxAE*2B z&68&^F#YG^^k$pCbPL&6KLzQN0_U*LlLC=z|MDi`UgwJsa`>hCJ?W;y*U#c&R3i=QV6Z0muk39HvX)NDGD=Zg-HeA(k%G*n;=^=E$yk{M27*#t z2&{E%E?f3v!QP$^o)5Q|a=I>1+h?utY>f)LGd-5kKn`gu8EgjT4WDEAB8FCD>e#9q z;qluO<@MWqMT8r<&qDNYwk`7!XTbZc!qSC%{@At(I58BP4~r<$tw3n8!Q;o!dixxv zF2w1iYZgGz{%s1v`eFl`2)=;LU^Dk?b{%5y#%C-1J$^F z!~i;)p_e>}C|DEuzD*~dc~Pe5nTL8YblN7dsV@(LFX8IQPdI9-*o|bG?JyGFf+oT( zi=d%djt{LYMvtF6aX$~cW#-w(DQ45NANqFQZzdTrognST?t{#AZQY45Z7JWb=}m;q z`c2C?!XJPdx3igBw&zwdnVWV6=#=B(ndtXt{~_TwZ6Iu=qBqIR(du`oM}5X=b91p8!B4qa&OzyIgdN!Y3+QudQzmV2cs3$b$7o6FhScs z3y3l0*Qg6<@S)pXVivpLS?!P?ltV)#mm22qA2$eoe&2iUTn@$@vZ?3K5xl;3hj~U? zsGkkZ)H5ow)Fd@-R8PmkD%$5lIcA;Eq7;5wGM=^p_j~O|!O>o2RXDZr7&m+BLN3bf zgWgFnzVjF%N3@~Z4AcDH?AGF1?pl8+)#;52mHza^IB>9F9QonPqSh<5AkAak@k+;T zL^`CjU)*7bWO|4qj^<39vDaAw_2J9Fhel%m_^zZpc>{8Yljgh91D@6r^E*r4-Sl{7 z^8oF8HEuo`$ZH38s$MZ7*^`M9(VUrXsHT@5xYk%eCIEN`{b&@P-=e3Qz|$^xpq%U!&&Zl6LfN~v7ZM$l5+*Y=HW8e*RCS89+D|h8XDu+$WW{snE{@~!aX~Sd`Br2rMH_1rwA6&78 z@=BBt8r;Q`i;!QwRORPg&_kV_PgzIvhCWOvK%KsnB!WcW(50S6Cm_6o^-hv99Bi9x z8%cnM5tEO%!(w^bSZ5Sj&MeqTzvIz>oe=l85|ox%vA%aLi5y6&p<7X?FeuvIzT|`Q zM7ne3`K)qu;#vGl%|4pb#Kv3ZFMy1>Hk}Zrn^sh6v>NiAt`l-M1~E3`)X0b9$vrWZ zk{FxB;|4WGOJCccldB9j`FS#Ownz0U>rLGP?>Q3BFwArV8*lmV-o(x9&xDJbj& z_Ec{U>NY*j?xTvrrF=SvMxt}7in@)t0LEyWkTp?4c(bw2(%7Nd?_(}{@5Wj%_|)0Z z=^Hpq3$%cp{083}_o0T9(AAsBu0(EXVAghgs*b}i;9Gw^eViff|vjy9~IQk z440b1;~%Nh6HiPlSb{#-W9(=Efe%`_{E_)z2y2ADJd4+l)VgMo`}o?Kc55m~rGduz zR>zzKAcI1F4Fz~D-&aQs9c0H57moFJ2U7umDNy1#@PL-iD}Q;fp{kuIcCZMV8P}3P zj~oHJ5;^f8%e*Ufk9tl#$hIh=WHc&!M5%Q>Wf?ArQ4zoVIE)O7Z16Tcz8e?0yg;`jH5F zggR=wb+;PI-3a!Z?3NOE4f4=Pt{Y5yN%_ObyMMUyt4CqU%UxCl3r{m+zEj={kd;Kh zRXE#PZSK+2-GudzsrVcUNN;|e-CEMat<_|#d%I7&Cfq|hFt9`il(n#WmzCGNioYWJ zZR})$uTptFT5Jx9+vP^(XyxzDg`JFqdUkGIiy@BUv5x9N0<)2%7=*kA7eBsp+gLnj z{6=D{<;me-MrUzn3FXAET@KHs!OhQ%VOw0d30H~D8%rBPeovzQN#b$e)xMyBYTE}H zh*lQsIlR`dz;`HAp*zVzmLdTi1ATA(8NEdvo`3uz!_>nFpcc49lbmu(1vjKvA&<9#k}dYE-~G{;OG9K8K#3 zI)=hK$VdGhA>&v4L!(cF3}0~7Xirx3+TTV2Fjg;_ZV_^-j9`aH7ZNFrh=+4{R+*O0x3H=)w^N?W0G4iKG&o zC(=<9k>leOyJZAA7`=9}xZ26gyfNz+=Y?o0ZvK)Rp0O*dzl5@(H%aNHGQ=?Ze@TV*!@_i1`H@whg~d z=L3_`L~UhyyFCsPFc{hg zq-P57W62`37uC+y7D1cpdmY;G3a)#|&?}<@`@(2M0}vKx3Y@WSJNng9zoDi1h}B{7 zG|U>&oR)jPhnwcAW=v@B669$_=9r43yn?=aTQurKiO(+OB*35Tu1xhr1|W041cM#asf&PRrCjiwTT^yxR;XK&v;ZwA`%A)_^=gP-s3K z!#RBS2*g6fu5x8&6!}NWn z9p4V^v|9_;6rDH^+rfCF(*N-hEeRw7FOPkg2uWpy2+^CRt5V~?ckGCqsuefcBspaL z-IL?>66aSQhtsHmTDsXBFrW9T*yKwa+{c|4dkc=A_C+tYIek8SD}a{%8FeSZazKj( zjzo7P$^;oB^w#zK6J<5)Ph?K)5Z;~`hx7EJyL2p~3QzQwT)sun($^6%C;1zZ{y$yp zY)t-fJAg`Er%v)6+TX0L%1Ga4Zb`Bp+Ml%7n{jv+`^Fu}ZvRmJ2+o~2$5a~<0e>l( zv`Gyt_Vqh?F(6*|IPy%L=J1zEud4)-Ndufj#0L%y1FoPQW9c6+;@+m$^7PMh-ZIJ% zIu6!jG`9Fo0fB}}b>n93UA}j4gl6OMLF4MUfr2-_qQADQ5$3F;?AVbHEyx$GywI8k z4v&rjj%luJzs(7@&1UEAvvSEeV$eo~i=nyigH+PT-v>JWqcWnzbQK-<)%3-%zfI-K zuP^Tc>Bpy*%!z=_Olp*`S3o7*9&!0ZM~}YvFUNFqOAc6+*M@DGbSrR!uw>F7^Bmhd#tTv16hFO9=~VvuDSB@bCiGt>}0?ox{M zznvqqw$v8M)3Gp~w=X(B4jZ3wWoRZ5mO?+LJYp5LOLA>OHv4_KCfDzHuL_M1_;(>j z`*L^XHtBVLiYw%rB#;#$>~!3PVMgR$!Y!540kuD ziQnBUpdoc7`_Bxp7m(Gzvzm{nU%e?ml*-5^eC#2zo%;h-i#9v&-l?+fSzzt+WY?d-9N3N8$cpnwyW>)V^v_Ml$1a@9q|X4=!?K& zl5Y0iW&@zqNb0-X0z~$|*YormuuKZ(cTb)J7}>I`;K%^$`QMeEw*Wcb$_D6D023N` zyq^3w&Hm|Hdb(GmVF-e4-v=x(lyp<>_i2)EYroEM?}`#E|L_5MTJ$Nas;W}IjVrxQ zZen5r zJF6-7d!+?f<(DU?g&DviHI(SJ*D6F(PV6iw*342Cs^lQZ3)R!?gzfrjaur$XqFFd+ zY&L9_ekT(kgw?0@AW>1#>C+Nfeez06H|XhIIYUyEi{Wk}tLS%DHa0KtrQJXH4dg6& z0qnJcMFW57XGrb_JMAUUT(gU8eOA>k?lDg$X8l?FM5N(=%&0_t=`NafeBIP%ING(7 zg6awRd1;+1WGIOE2pqqjVQF97Z+Hcf)b`)(0=O6cG(3U=VzT*9fs(@c>ZaQB6`k#~ zQHtHb%mK5?cFacmyS6N?Gn+493|bAy<*g6as1E)IE>ZA>I2b?z@h)+@Y&@ zPbv|V1Wo<}Re1*5OETyYT#Pert(vSIa3aPiczjeSS?(nb`GvWeCJi73o|*7W>rOt8 z#qby7dw(n->4m&b1ZXP*znLNC8gx%yC3f>phE6mYYk&=qeSG!NG#Zf&{-aPfMgEc* z8~BJK6o^RbCu>(J7cA7&%EDqz$!P?%Ei71~f`BTpFYFP4afiw5J;iD2|1`5{l9+}-vspMu~hmd?SGH^Tc43MKv{b$*B&)zruf0*}s13R{;8o3N{{{sBC`u&%#c5G%fOuJxa{7n6tOxR=^ zdH7Xl*1iio15UPFE!7deda+W zq7%yoPby#vk>6wVkxOs;;R6}=eiPTc%aKCn0Xi0JQX(*`nY9{Y|7(S=?&2-PDV|{W zkc_RPca+mlN17kptw*H%98@vgd=q2p(hpnTGz=E^DNproiOgHyPFfEZ96z(Wey2jr zK4J2r+StTJwb7O4%PWdGD&#y`ZVidNb;gl|0AgqJ^4{@V`dhR1G~4|?)-rzuiba5J z3FH*7XALi9Il#2|Nw0iq3jd^9gso;$_8xw}rTVjH!_{xCd)H;yN)$(+B@|}KVtgD~ zv@fWUi{V=CT^bX_C?2HB5Z=AL3Fw!T-0x}@z-JK*Qj?G z;plxk9#Qktbo)0gz`PzMTrmX#O3fT?t1n=Gv1z>%H<*sv_(U~gU)7n=vr$orGxFZS zbEodZ@HCCe$Gsf=xc6lS^^+@ms-oZWs6C6~1`Ib5{QP$ISwe$6nl81j4OI=Z`{;5e z!%bfn>%*|-$*f?l`U$Vz@u{yxxa#ynCO%qUHx_F)W94m{Q(7A`bw!yi2f4!=QE%EB zqPtDKfeg*uM~(e7-M)Q0$)jU^`e~z9;VkYO&*ZsJ{lyO*Tj=>>vhWAd*YGg&us*>S zmx`>QAbiet@(FCJu@@X{Wmwr#ZJ|UCDav|F{gqxiZ+Of^8d6)(II=h9DDG_6LgyhW z@U6PfXS#Cg`hsq;w{)vICbdYuq#h2G5SegbK|fQTnCme~qc`ZLeW16y zL)=q7p|qAi#xL(-teh{%=QIETUJ!x$V<-?PsRBfNG$U7cXDd;D+i=4~#v;^KZUZH^ zXZ1oFyxtTj#zN{|8R(dj9cO9Vw>TJynaf|UYv?}5`0Z2!4tx3Z`VOl6&y>rj%{kI#Mt%(Nc?S_T|^Z8tO3F-(vs9rhi_ zGQ#MpA$>-9^z?M;&gJI$?t3zkBUz?dEb1nCxf-Z?*+8v40sZ15=XeHofH<%Y2;%A{ z#Yd)GbEBPHNN@8mMhj=d`2F8XH^6;Y$H>m~DaWsG+T5RQ z;+SQoQ~tG9ixCbN1WSSOk`ZOJILItig6b;iohw_#&SEk zXulkO?|TID*uIula<~3Ho0-+u&yrj+Z+^5Fr`21m;##)rC}6DOb2lLs-!H`pBbSc8 zxUTB&XOF)a&QI~%ju$!etsvck^BpgY3ZVvNoNa6Po>dENTn@n*XYemNQ8+(~MF*Q^ zp~BDuBZBQNwHIzUMXq5dhrqFfxe+fB%V!|ON}prH!Y3FRt^zNkW>6zbS<*$Gl>xBXN!ac^L8i3&O`NZ&It=475GHqmUE9KSuWohj zN6ta{LM5RRpB8o#wVDU{+u6g)SevBkM`l)Q2V}D%iQb>u+o|Zr2)AI+ly|+sw~;k_ z<{=yLWAhWlfFk_-0e)+=0yQWBWl0BN{0j=>Q+5KY<-;I6+@MsSf$rPg_&GJ0+X)=t znApbnIL9Yjr%0mi9w>ngYfIpGTjpB75sPsz98A*R?nfU59VKtrcz-YWyy|9Sqha}B zyBEEhUD&^}&8xvBAnQxNTpPczwS0QOLfZ+5>pu8BoZuus|APBGouUZeoPnWOS_ItV z3aD$Z&EJfR?c!MyO$k4@^XH?A=uqt|_)vvM-XnAxxJ}{MVaTT{0zrji1o6aF)^qRT zT%q^ChBJS~mfs<_Mqylv$FSIO$Y4*xVOP~5f#zDJCn105mKhd-ZQejm5~;)rT|h^D zdKEx!zM_7Td9OYsJ?H zAMdN^Aye6UT?p?UaD`^B9+eA1%iTL_ZQmxK*=nsTvOIL{e=*jdjhP4qfj_oyDrdq^ z;LI852TKk*6CVdd>FNt;=R(ppD32x9cO(@&^3Pk2Lks0rh(DgJPH_ohrY}6j+a7Pk zrdZAjn>kz*IG&|Au53Y4K|qDgXxfb1ms+rSJS>=-DY=OD-XR}QD`))0-#=J47$dr@c9CZD{2yf2$*o1~DqqkN{TK-F4^DNf1G-;GFm;gwnP*R~_+JTX_%<=EL1)Boe{Mu%4X3nPH5V-BiD
    5hXz9y3s$}{cK54RX&HE(=@E3lcGW*?6B-J9{Ez!!6@aH*({qNa6XLl*Ys$6z!Kj47nH-Keryjx zyF!uMgqm}9N3*=TREB5@>OM}uZj8DX?mj>T2Osn820}OX%>&qKnxF$=jx0Ei(5E&# zl4Y#%Ym|#$_M~r`PMeK0!oFbBE{3`nvffgWbC?O%iYpOpaTsRcZaFE>?X_1G3zIvv z#bG6rdd2Xr%gn$=;+8G2XVL{pxv&9&5EHe957$nHGGY2ebXuK-^)ALqv)C@0?7YSF zBhfZZA{d&G&TN8?A8&bW)jXNu?nfMMUN6mJX^m+y31;7Y|_Exxj(roVmw;{m}W&ji<# zF*Xes2#8}2tIl>E+ApT%C2m(`olWiHM;2?-Q6ue;f%zr@MU6IP=?QRji2hJDI?pX> zS+0Of;nz&$c3Y$`jaRmQktN5|9yl48WVRZq*(Y=G9 zS=P}9qrr->Vr;es%kzh+`TLc920o#^tpi!X(2%#qSw*`Z;^Oyu>!-P6^wP~mw=Y?) zK}t+aX_R~~RGDZ7X(++&X!+a-RB@h-9yF$S+Ax#kVPxe4)_ylY^<-V}*XRg-;^g?l zq?SwDwnUCS}sZ`1R zF;Pn}IiV0yveyaAcPcI1gZe9=3LpmeL~z)^@R-oML-r3v8voLtd4%*Bm1xhL|7uxi zl+LXRu7@CRQGHk_2ix(BynW@mr68iSmRNAyi@&EGkjgCZ|@KIosWdVk7o1!vLMSU@BU)XPnPW!-v1% z-uE(AP5|3f#Pto^6kJSrV^aZ>IzfL~*)ID0Hkio%&6e%B-YX8+%O}+UVft+@j(R#$ z^6xZJg3Z1Px%bo;GM#h|e=W6}ZjQ-`Qn6evoqb#STzQ5V^8<^zILC8*t(>+)kwML@ zeEqsQixkakecDGiy4S67E{4Llrk1dy?^Y-k-U$4_%?=`O(Si#$#(j_xIy!ob9{t>+ zFzK*Re)ecO7K`*CA4{-Lmfw2o)toE-2JLlLmi{A$ALR*$8xYpWbXPd;HEwSkL$z7V!)6d?CPb%7H+bjCO58-lNAbqzH{Q#Cz@K6um6a;JBM!we_?rt1Fm4V|eE4=gL0b^Iv8Mk{fa)i%(llGti?7wj? z52@4%on0-&S#3%}zya?=p8b-fB(e|Huo&g^B!DV~N>)lhpRi4N^OjN0%wd>A3>`Dy zVdja+D+atzC>lCogABqVjIElStl-Cf*M}uGGC>Lf%v0ne``@7Ms+p0}M~!p!GtD3g zsAznsj1HYW@}?ZNKNgEElu z5}rDEJC>s;kE_wGIajinu5fB!s%kV|sc{M4#$v8KLvV)=+ohT%9o!uahAokivs~JD{#@|M^P0THUkPpE@h+D?*LF zdp;T7FfoNQB8bX3xpQ{BX1JLH$*NNGb(XsD$%MJuNBu{l8S` zS`dC>$>esZ9ZKJJ&DKd{LAmbpp`z*T=ffNKS~b#D6rKzG%3G#2WL$Oee^be0L8EvH z`2W##%jS6|pw2YM`nBs_ad@6+lfRWiqX`Nr{kDCPVe&DL^qrH1c~P+9QVtO`Vce9gjy2^StG^&p_%c)|>=N0`2S25L^sukT%_51LiPf z_+tO<$>z{6rq)|Nng+l2zTaOAQQ^x$GMt;**T2@DlHZ}et+2=2^s-Dg>=kVwrp@k z<;JZAn|Ad2y;H#ghu#l+ao6%N7G8mbk1c4<6doB{_c!?3q}S@2N68j$P|gUNtPuOP6M8jtfn8;Fkg-7>%J+ zCywFOBPph&S1rvJD*TEX{zc9|DnVxrb{{C1iOkC^)&(jEFF8>E`axTvpurpMV^Ubv z%?xh9e~}3djqey4++-Aq-x~?2MJvI>+FDGvKal8&w&hJ@Rt;ZQrpF%7cDJ~vRNCbt zxP-;2ujBk72Opg7Z?76k6uwr!HZ@Tzofv$OY0&8x?Iq?iUzaFD@)-HT3 zq0sQ_>Sc$}F#6)Jbs@S;NTSsG&gVo98X=|^c6#@-P8M>u(KdvM(y|ZcxM+dbx+gKi z=Pe*Xb1Pjg6v?UP!{Q~BfdOm=wYUPti-hxZc$%N)zYw{J(vbVeZ}jeZ&4jd85v|Pa zM@SES4FuZW*e46`snq`jHfsnTsalksVMGOonqoio-sa^==(kd7EG(={^DWK0X9%@L zH4i2Lf>j!rH)xBeAFlIs$?sL)Yi!wb$X18m4w`Kj&sTt&Z&ZF+7bgs!CG+r|&KZ2? z5xcvu=MGi$tQTt4nmH{4JO%@Kw9&-#(=jAuw<)?Wa_gnaWS{|xi%!jjEAi9Kg|=+&x==6q7e2iM z*j6VpPQORi+LUy+<}>ant;R}&eLyEh%=l>Y{!0elLQ}8m&Ob3R1hMdjn&vk+y)58y zml7ZSEM?$*vwcn-R#Rt&w3b{F_m0r!o)S-PH%c^Tk8y3L_3D}yuy?IWSG!ZJ8!MJZ zKi(?wa|zV>r6cqTYdCK79V1J}@VFbi`YT=NFssPqcQIQ&6|OaWm=EGaejK|WlUvw6 zSKdNu`JJB-wP?00WSB2xLMt|lU08*5_es>F$ROUfukL>@}w> z;13>Vf3#Y{k; zw19J`rcpb;La2_1L;2c@l&7EYe^Fm}e{dS9#zeU6<-S*oUHq`zbC@7A z+$L@i>`??}bxDQ#&~+T+q800R2>BC$^c*+ui7NY^=KdUYWubA3E$y^f+qV%`P;IsQ}=iB!sLhXxVYU)IL2C7c;NH9{Y5 z0Y>PhO0??(l5n@b#HH&z9gPs~)x#V=_y(^ghf9nakVITOx^Q`}P#;ngJzi!)hG^!o z=2^MiX#~mRRJi3#+~~=Qz(ur<`wMvT%_Ok4>Lrm_niJ z2`1Op$2E_qqn-P}M+lx^XJUuw0&rw__YI+qnRwvDZhuYFYi#dmh0`mCCRP$9 zjl|m9P7y_g0j1%RnDsu=crqu{__EP>x%*ke77gwrqUL@YBRyWKn>50b%%mUn ze%(9TSAY&|vAM6Y);LY_t*aQ^h^=bWt>6f=F3NCPEv3v%|5p0dr7*9P7E63Z35gC6 z{6N@z)F9gwivVys zv<*VveaI%*3jH6}ke9B0S0GK1S2R%{ zWtY)7?7x3D9-e`*Zfo%-2#q6t%vO#BgIiPSgjo-XiIAo5i4Sp#NI+e{BF;?>+|_M-@ktUzW=)u zan8A~bDe9PbG=?Cd)-1&)FO07*WX-kr#~KBbx;W(HZj&t&i7G^NH%XVHZE|)NRIlH zRF9`kaUNXt18fC7ZS9NnG`9)#N|t1vST6h_Cg*l3Ys1sTkQi7ZKlS)m-qi^o23c@5 z*S}J8A7 zH2){u7|5D;RWvx+iz7Nc?~R+P-Atv!jI}hU<>hQwiRW9n@;-Jq`>n@A&;@R70QNA_ z=P6P))BP&mOkL>67-~4otmC-Hrt3d7f7X1>jsV`f)}EFFt4A0qXT< z!VmP~5h=O{Eh!mkCO7#K9XM#qADVr=UiXFf?9gFKt9ft|_;Yh6@ea$UBL#EL?b&y( z@kauRNeRug9yHNA&3gLTfdjAR?`hzw3cA$&ymHbO9pi-YgWfX67Fa*z`xO;Oa*99DCK4=@00Gia<-^xx~ z;N1U{3jhv7U9W*RI+>YE>6Q5?0M(*_v1aHo`Z?T;fLsH2VBA#Yh6CRz%FKK%e_>aE zyK^xgmMhmCPq5E}K^5FKYLQKEX~wNU0MYN&0rLfdKynyH2jS72Ym&^zMFs+cAEWj6{YvD(LL!B$@A_L@FVk6 z@S|B$qX*9`P9qr3(Pljrq=fOwes%s*he0je>_Xdt9k(>gc-Fnw2+Ah!riMe(+x+HJ z*y2q6Fmu!iZvIwI-M!JQ_eRHorHYO^jAfWtaGb>(y$>&R_8C}Q<*pP+pbn*|P;9!n z`aB(->mDy|p^HrJ#9TaQVl&MjtoVi|z9L5a@~}^Q;7Sjuc&fqFfE0q9PRh063Qf~7 zHs7sl9NvEfgH;2yI0O+so27r#jq+&DaSY;TocC)hrl@x{RUJnyUI=;l$=UNzsyGoU zyh!nL3(J~})I4so$1{@VHG{YX&Ke&hBztu7lWVErsK|%JvS;N>VU?90o*(82h`Bkb zqEg^s?oi7Bo+W46Nq-^AS2TOl=dV(?pVNxf;`Vj*aX|-HbM_-V?^c7i?Y%5$R2W!E zDCpL-=5E+`gW7*kg8`()L0%1KxYX13UP~(rOdpJ!84tlw(`Htow$q!wh?vk5T4(eX zC{mvTp7wU7xSi}hOqRbo_$UlIr}2p15Yhw4Vwp89bfaCAtPu#R}>?n`+Jg06T(?PB#M-FA#I8>%Wu% z@yqs?OsT2p$SkXZTvAoNRSz@B;648IfS}Y@RVo#V4q@FS_yCUDX~+kF%2+*J(IO!i zhyepPwd`|d1GMk+xUz7c+Hv`Q56^1$j1|W?I#Xs#(x1{)E4>Ng7|nFpl#|2-e4lea zJtlF&gB>0MiOu#c`@Wij#0;BqiJ0XtXe^9+tZA;NTRI5@*^}x8%B&aSb`#Qt*o)zN7k;dAXkRWYL7~nxFAZ}BFOhj8K#|tH{hy2xyJR}2*0Ecol_?2W@;trAb3nBA zg2_t;UG```ToVM*$6Cfzt3u^ZtbNFul#(1Z@s5y~+~FS<*GO>hgc0oB%7D%6p0s{2 z#A;C0W69IU6IKA~!1u^mhg^G;xA_L{V7QSZ?HrnIqVj2?qoVRr=URG6 zTe-XOQw=r3u~c2^_)T)eDHf*bPIY`FQOgeG9abyq^&$Bz1*husp*sY~E?2EpIa$Ow zpyrL}fk6FAV^=|EX9E>y^GW9ZIcdEZCP%4>u#6_>E)ZBq)8lS_rd z%Kf=Yqh5tdcP~GOV5}@Ix2_H59JJw9t?W9&#T6Pib&ExChGDiM$3=S&j|?rf*@4p* zOu58Zn7S4}8>NdcIi)Ho-)c7s@F*4v9oiIMG#D}GTz>H(m;Rof#3|+O^FH#1!q;!U zwp+9nF4|ZPwNwTgO7Xc;=56GaUidg=yWF`>I7Jrj$gRxQY7G(FAC9@51|Lr$(0}$oF^Dr5Gt& z>Fbd#l3hM!|8XFrbDi5EwWTjEl3sy_gXV9qgfFV#s4bu&DvSmYlqFm#o(*Gbp#~cb zzBTCL*5K$`z3n-98yZo_owh>PJhB$@AIpbkG%8L<$S1hTY#;`>0C`f^w(-Wbt zwaXybG9Eb6WV)IF1RB2*g!%)^|3HSsfdfznZ)D%ie@gLvx(Za#oHXD1EKXj&wfE(3 zXTq|2?YO0e*!d$lp9sT`vYU#sFvgNz_7Wl^^8B(HMdl5I8Bvo{g_Cve!3uq?S1L*|UFTp3yK<&kNpp(7JEig|V(ik3BztgKu$_;oou_Vc zIC!(ET7Zp1UxBAFH(PAKz62UM2_Y;ox(bczEO4vrIdf0ti9ke0epPrqul)YF!L)1j zoS>>q;`hZ?T!DX#pxmX=q^xg1JO<8mGYIhNPWf^yyNy$q(^8sGMP@GitevkU#key= z&SIO(Wl$b~gZQ&Z3Rc6Elm=_sb*rL6UtY|2aPB<3mLw5z*l>DW*TC=qbGKdola6%f zPBO%N>RtcBBUb(ky)1W&+l>llvILWFlAo2^h}m^!6Sio6psQsh1txEF8nt_Y$np{X z5+$s>7AK*_(rk@@e?Hr1VQ@4OCQ-dd(zaU&wW#2fs@cISel~=b4oS=tQL#-8%EP<+ zN95$>$jYSz3q)GecM1i$EJSC(p|ujS-iijF+He-~dM9&q&z_iKP3|Lcu_EWJy4E3g z617O(yvMP^ZuTD7VKtS%I(%)zBP(~7f2gx!6Ygu>Vd5FWG|GfrtUIxOvY;VLi!^k+ zrtsC{4s5XzkLAYP7UffU-6gt^(3d{Kp6=3I_ypPKud#RgtUb_3S<}Mf8jG^eoUOiIqfyJ&augehFy-0ku5c~}rkS^*E=^uSvl$6LvRa?%L zupv6#7^}@KHrnUr>?s0eOqHzG(~}Lh$EV)WKhS55&AdR%o5L$DUneaYv@Y$F39J zJw{@SoELhlizJ`Nl|7#KT9OjALXDf8Yx6lXuLM>*3)EO@tL##qd@{Kw2$a)AX}^nd zZ_Ci4G@%W)hQL}XI-T-6dSOGII*1N8}_Q6z8=Lm4wsjBZe5G#D89?#&Z;ZXNTS z3BVT@LAzISY5pyass<>=jJaq%zv8$>U7BBRPL>VS?q%)NrJ|d_v6H2>-ayphfYJ8? z$0SWSHK;U5fsQnDq_-r;wa0(ua=}BU$Bg(dfb&*!1Y5N zr+Qr6bROlBdvD2`_*^9$R6bCZ2}J`ajmiZRY~dY{?c4>HHc8d>Peisi1BQ`sNm@u> zz|Qx{S~OAv$3o;_$0;ULBPf(1ttJ4gw)ft>+#~NmRmUTI7p$(0;LeGhZUPBi?tx0Iyx!08N^1lH!B5=WsqhCV$xO6a}EvaPdrsOX!9h@vXYR z=NX~h3X-)!2fh#+KPN8lR^l5E>{g>dL;6$!V=T%;PO~Wiko7JC+b8K{Eyezp!l`Fq zsoZz|jtFF;)tCu+N8p*oj`{tY4lxM7#}~WYy07IBKseqW1=GNcG_BVbK6fgJGq?kF z@3k0wXYzD)HZGa29Pr^^7Fcti;f209>)a*s*MJij4GCApP||b_0@0|whXPcwLrw@6 zE*aai|Q@svRyQ5E{z!COgZY48X#fmwv z#z1Cu$f$FXYHxLkYq**9jBz^&T4CdJ+H-TRO6N+x)LxR6_EH_Rt^QgkLxq?(*~e`s z-9sGm;@;mG3ioYl#unPx1+NLZJBZ1dd=pVW(qM2?`4B2l>#(XlvQ*aNLHxDcg9&1t}tUXwH`+5rCUbr54r$Zgry`=oQ9Hg~}@+9AY z==Aq+$rK=LI(%wDLhGe_@XGP$)xRpDp6}{lpn0D-GY^Gt@Ai3A)L})z7fQsJ?y*dj zmde|w3bRtN&e!>wbNmU}g}q5t>euhS@K`@&=eYWz+-ab6U1ZkGZQt5TqNMh-_Ur-m zE`f`fu#e7IhpwP;L;e(_!Ocx4H{ewFRpD9lJmhJ0qxS_3EeA+O4hKW+sQAB3xA);y z#(|BU>);zgDZN^TekK{?nbxNAPL(SSiksb4Car0AtjgH20fX2#gYNjP*7BTkRQRY{ z1&W*I)#AvQl9^4N9^UUm+|0@a$uY|1Qr|XPBvxByz-~pMp(7AO7bi0OCx+!$s;r^=`%tY{C-gZTkQlB>w z9kl9X>M7+n9fKYfez|S$z?gfrNewfSeH{xsK4YIysnFT{XLJ1h-0aSTlF zL2__M%$awg*S{5=`6?W+wk0|LO_l|5l2(6tZ$T*X`r5wB4-zw;0DA+crRy{R*ER>t z^Mz`79k@z37JA%C@DtAG9|)-8ZWWK( zDOYZw-k?Amy_i=Ka4k$ucxkXohvbr74Sz0h=A;F%sh<~A0xdKz7@OD2L(0zAWL~hV z49h9$@H23e?+KSma4YPYqkN;I1t@No~QmgO@`asUcvE!gA1ftdqfCxnXZ(LNC(Ta~J@SGLq= z9cc?xCEb!;hqPH3rpYxR*T{9qI~*deKcxXn4Ov(lwolvvj`XJM={B>W1YbK*5ajc; z`BkFKke5wb5!!qoJOloO{PFNcHy+~wCx?D{e%pK{A0FBYly6TytADWT;3Id7b}2B2 z3IJU}X1SqQV@k3EYvyyN+%yOqH?(5wH!XW!?Ex?ixa?s`;hY|^Gw{dHZk5V+6P91h z)cbC-uYM1f#Yz{V~iu+5sf;0wI!MWp5VO6%K4WFjQ9Bn#ezW>Tj%=C`&wg_!r zD9Z@Pvxqwlhz2Dz0J=waSkc|O5m@{F#D{JOX325Wp)V+eeL1>2{%DX?3Vui)4ujq z&Q>_yonSwar(cz}=W5DBGgHp^>ICqb^JfB=a$d!n-OE((Gt(oC6Uq%4OxQ0+P#+Wt zg(W8L@x~lX0IeRf*r@CtA~a9&D36|&t#jRJt}7XPp$Z?-V7kdqR1Itxpn06(^6P!} z3xQ*Nkcop~?wpqFITH3`SQI-z>4w*w=Kc-6!p3_AII0qPagO;OU%VK-L z<0QATXNL#fCSUkNAW~n;OL%?>?azgE!w^~C>pFrI04T=<0Xu@R(~G=jrhMP%Q24GT8~l4I^Q`;vU(NKP|ZQ6%`YnWK(X(?{hEWvSbn&q zV+JCs%j+H+9nK7$n{y=C;U36h>gojfJX1gXf#Uut@I6c#BE`crzxCt@!GbL9+n`|` z#HHOpauz7mTdSKd`M)%ryW^D98yO-|y+oIKkDQ)uk)oJ=b?SBJcG(k+tuT+43;s7O z;v;QtwpkkP;owPtR8@STShfQxdyO`mrlruY=25X$SNQ+z>P}_?WUg;qFhVHrTM3s( zyAGnLEgPVWN_E0v_5Th{_|%&E+pzrcWNZto=j`pfnzZ^Blq`$2h6XW1pWP`Uib1jc zVJFh(j!@r}{JSK1J1Nx!Vh&RF{HZ6{HU}#oj$JZY-c_MW;eB4;!#mV}i|>yo+c2|J z6#WO#D#CP&JO!d08OjWO7yHK#evj?Dcq|*uHM9V8f}5tAJXcW|^Z^7MJ59Bm%HRa$v(Z_6JU#=&6Q9(#UX z=%;5i4q{5t0fla_PMD+{>42&MnkDe6#V~v0i60nWZS}n@AvUh~Lmp%9Sr5lPJY>SU zzX&|`Yp7RXS31eb^LYr&2?#n_o##n7CW3p`6>j>hZx%qp{YSDqe8z3H`?%r!P_#%4 z`_`Y1820gC<>W&}V!^jy?dap+)vFO0CH_^uNvqk9T~3#OtX5ZA6450uI+YXA@13>wx%Nt-Hfi$@3eA|I8eP?EW7)sP0k!~P^m1& zvof3RrJvOqTP$063ik`eJRuFlSHn#)1wU}HunR|?Dh*0s5lNC+l=}R!d#R|&WJ~`Wx@d@(dy&q{$>_(6C9~?SM*xM4YeGKjM}JJoL!CP1Y>Stgkx&f_(@1C}rO0FTjkV3gsf~!pjcw@4OQqzC zAKJ9O@0RNSrw8OCAVp*O{J`Ybs8#pkCs#5hAZsounh#cI2yU1%+WJONgj=;8H1O4j zd6MttI1TzuNWKfFVi$lfv_@c_Wg4XRxRb(2_BmHej{j;p1BknBOnVle|IxPbGo~(N zK{jOVo5FF0X)ny6v7ruW%4z+B$qEFZ{Pl{fWjyR)eYu?VYe{MV;`qt1xjWuGYY~Bu z?CC%gn_bXt*jHtWjq`f}L50djS(!?q3mJ_7VD5Y+Y0{dUs^M?nJ@Zh`4P4y@$CoHh z16<0-SyO+Cl>_kZsLp*Y?mso%g)L)R)W{~$qcd@CICCKS(vz2;o)G$i_)iafm87WM zA+=97PnB0RIz)1!J3U7uA+EI5brCk#n78{5*cUfGK48#Fol~Cc70AsY6otK1RCoiN zb1Yi`#YieSUD}syWQ0PsiXNv9Ae_YOyAr8ciRs}X;||iK<~H~>`t?p0{#25U>+n#ajx9D+aUH0ac3s0m-0JGu zHzzA^E|GS?ANJ2LyjwtC7H|Vj+)Y2;+(r`(FS@%o69RW>g8vc18LQp1Ukz_p}8e!G`Cr~@bPfJQ#&VkbCd9-av-<~ z(bsguPND6ldqV)pr9@u_?gYRonW6U4Ha~jFIRf+oR_UGvPMH6h)z#i3L#kiAA$$`<~3khhaV8H{^=nzC1SxM(G<%gXm&T>O@>!4 zGt?<%u;~b>rniTmB*w4UZ{y+bUzn}AW~g2jBVFQpYSyd(6QgCw?44bOSx-#WdN^+} z4hQ%hRmo<36{C;W*4rxP)`zPLltM$Co;KY%&iHHO=NgpUEyC-Lk)s1ec>l<#R+2}8 zBIVnLzNvPcn0iS`DB3K&$cQ9RJq^d`#1T6*AtmxgGpZLBc8kfj7hSX%A^Ig6n;wJ% zgaqKU;r@Ngo6L{$UIx$$+LXNRIU)IP#*b-*V|dS~NB-!6?<}Buubw2N{9ycsnI1gj zSe)o0Tn)J}OP-qoYV1>()IgfF9EdT2^fFQH9%GMC%y!8ahIg=!Tor4tF*bPgf`fOp z!JAIU1uVf4080UoK3}1_2&C+}M(EGUe*jGW4Ndec00#Qc`U$SyA`pS4w5rv(e#9;eQr_EcS*zPgz(05T zX}2x_IjrPL7(Y)Z9pU>A$@!Jx5!%aeQlyGJ4T<@aA$IRNB9T_{{pz!*FCri`P#t zk{|R%I|&_%EkXenX)zdJ zx1}P^(9;E!>d-kNFz7^LwYlGhzH_~6;?U{@d+Y4a!7Bk)*uf{K&-mx+)PvoN@f}S0 zmT03mc*I7GwdAScpdhdXI6AaKA9(sov3~MJbXO;AosLGU^NjTyXA*fb*`<-4B_+8m{etF0LeOUyon-Abk8|Y4*&h9{6f$-7DoV7w;;8ho*)~$;61Dd7h zj|NqIafsc8Qw&41@z!?2!H^;|Cjq~T-U;s&Tg!m4B_D&f0E^JDyC56iTc<=qs3}Tx za=Nrqkax25418h!BP2rl7pp<9K-4*s55R%rnH z(TIe_-BZVZGJWI5T>*wH_WcYU&v3(>J1r@gCA8T!J|%GKr30VePXL6p3UlHB?n;xM z>Cuo6Q*_6c^)u!!sel?^;utiz`|a_w;~FN z78}Wv;OW{`l4Ui0;hX3@t>4Nvw|9LwyX(m9Qt_PYIcr<%BPv+}k-v9$OaZqmIdScy z@K4!vGj-{le}1skf$3@Q^vo3UJg!`tLL=HZj|wEqXA>1-AA?u?tjtj!Ut_Ij20L7v zzpvjJo}cWRfzo<`t1BEy&_Qx{dLD8gIaDBDC|z5hE6g!KW_`62fW z&rfgl)u?X2TUREp=qwJcK+!AB2-Z{;ius+-{mBUM&yXC>#pbaW`De$rxj>P9xO95r z(%rkbpZ@@RzI&O;(@$Rwe}o#^D(t-Svr#hDN6T1RzQNsoahB!nGP%H`mFUlZ*iJD~ z97SvnDfCuBQ-I}*t4@Zaj6V?;H5Nx zf>{^>FmbuS%|}yHsbYhjogGcmKQ;N0_9lRqPavJYAN4Z;4rfMl(wF-!;B%AdO*KCx z{x82{V&OQpVG>ouWW?kDlTnxFDG);O?|XLrhuz!*OFd*fQn7l$?QHUt;{YqE)yg1b z_b~Iv>*04@LrPOh?GL&g*aaSAN_N_a(HHL0_r@Jb5+{t9gGb3*kfGmvI_61$_WKEW ztp9XrKl|F9J>;cbL%mw}(dKt2zn}18KzDXc$+f=({>T637z0Yfp;0`0}6W_VT5{*H(aRacOn`2cc(KNN*>s(AZ=TX~zmq9q7%^lt!qa`+^Idt=Kj>9)M)E5FX{ z%(Fu)6>e^GIxjU@pn3T0;)N=w!MTNiUf>plZyURmuRjul-%kJu3J~Q0sQ52RLuU>y zi-A|fXk^@-f35?4Tp6px5!!V*+#fOkR~c zAy(ETS@wLlJNJI*z@q1honqIT4k(Si2)rf+Uf*nbCXR8d4}n{)_{w}T>+B`yd;Z&6 zGM;97rsHyWuU(pM>O7sX4u%|V^X8kK!hjdWE@3|3S0vz9LQl*UcwmxSQpx7&Mp8Fc zu}N&RL+MB*M7Wyp#^zqt*AbeeA!V=RTL(t%W%fr0{a?WYuoS(z{l1#tac-x+>i2vH zHj{u#eniN#y%!Z;Mp46yi&m5>wwqNbxakJP!b1fk#7fWsyK| z%3YAc7VuZxOybY{;(sbd73W5$%<(a?d5KFk?evtG!}NDyU$ZB^3$41G{B{?#c=Pn4 z{@-EqJDWIK6a4?th69`LW9Wb|OJK_TRO~|XhWL7=+(}Tel2uEgNc!CjPI~DfEJs*! zpv(qn=hwN+USc6n{8Tz4n3rq1tB0f4@J|5y>O3 z)4HE`n;z;We%M*jn0Z^PrdFb+)_P9u6S>B|THc2|NpF9rLJctb!&tIs zC^hv#;T-{6i-%3qI~H{1`m$Z>3H6@$R7<#x~QlAK7 zFp&!_mZ1ysRF2rIsii@-JcPN9J$B;X>?2R#H>Un{vg3Z*mW-HY9ly2D1tw_dM1Q>o zQ}FQLdjB$!FgpX0K40aarqs@?>YzDC|IUt%tBW1_i$A^hpVJj9!_;54>3gLLvMRQ4 zkyE-espj&Xwm*OI+g@rTV>*7B%->%FPc9U@18{O0$m1%#Qr;-PdF#>|d-8tUK-r8z zl8oEUmjV{|>=TduZv${Gu`Y{6_{|}{!8b3S7sQpZ_f{WfW?P+O_Emao%_L=2=vR;a z=%Al$U#t3d>`N3sWzS@rjcenJx2|~>DAxlQ?;x0@TU!73E1kC1*1^2w)bd41n~}}U z(DN?OhM8vuuLEn!|4@i}^7d@W`>G>SmaT6%_?q8JT1di){;2QZWIo(yI}zzy#h+gY zD1H-~@@f)_FBN615wuzxB3oKD>7`F^C41nqq$ev#S%Pyhru6lKn-Q#vKC>N2o%^kD z#hF$HeZeiyD%%ot;JAH8Y28N$RO{mCVQ--brm+MmD>)04r9v5aZj#~M_8GV&@|ynM z<;YU?g5$hQYIY+@AcowI%4n7?-K5a=m|3==9}e8nI2j)o43DS|C{~^fcscXl_9#2N zIAjxy%ks1A%=REXxmmG2Anx3@R4}>$?u=b6nePC!vFws!KuJ_$1NRS}Ml9IsUA};{(AeQ-h~FlYGZgFfc!yyRr@8 zX6pyxW994~n@6bRH;qv}yds@Rm&k4VY3lC^En@?t@Hgjv1Y$e zX%T87{=P$vw#ZeMaQ;;=+&V-%LE zH3H^O$-58n@>6Dr^hcjP9x0wGj${7H?|(==`Km}8OE?U}t@TjEcb^G1J6+G{0+vC` z-t_8p&Mv0UueDW>H17ATwMS>kq;x2wtHK87$ZuO@)V%bp_zBBUtrHIlt0vj`DRjtW zwpT&A2ZNLQC#>nur6Ivv191|5Q!#`Sh*>Nl!ZCwt8Fx;c(F8WgH{Z-ft4 zcqrRcxGQJgaKPt9DRx$PjXPG5M$48O2*OiqR8q_Z;Ma1&vt4}*#pd%ZWCXWQFGpV9 zPHho}_N`X`L1?QbixV~jQ1d$eJ7RDb&{8|QeCt#7khHtwzDX7 z8=iIfi6x`JHilLx+3~bY*E=vZ781$+4(aCB|518U-GCG{;gESF;RW2|5Ji84{hr0u z8+V*0IVFoI;yK{j&+u}Oj?#&!f_b{Y%!PsI<|{076;>0+GjFxrVUhmCt5EcOE$}Tj zEKP*xuT?JEQlzbe&)m4YQP_hMLEqgfs>uk_;84Jhm`Q*gXJ7XsZ}Rr~nQKVd zUO(0VN!$^E#B;Y@z`gkb@7|3E>Fk4o6XIXJy4##28+Tu$%l_|$PtmNjBQ{nEQ#~*B z&s`^6n<04k5>2kcwXAV=RTf3|Djh5Qwjdq5t&eCIp)HY9(7I>EbO_*ZcPQ@bV_?e=q@SabuJ;Q<$tHdmnQ_s-vO~iFuRGndo?SXWUjo z*pZjd6j+rVPq50FEPBoHkp!ipf=@7F1ow`fsxiC@YiQ>;SK3(Vcw6XLiviu>Xvme7 zC<|vBrkK4HR;)Lxx}v<;7@Y!6l(uoflHQiTGp&aj0mdO-RCbZ9J#h+e+8deKY|61b zrHhbhUmH9T8rMM9NKvcs4;t*r^=WHPK-nF;$&W3tR*dcobJ1y$Tl#LncoTR!P` zq0Cb4ucB3Xi?X@RZF{d>ttfy}R=7gz!^}QDAmr3yA68Y9b@!9?WHZX}e0J)9l+}q$ z7DbYjY}mB*iQK=^)#t)FV-%g6i>-s?I+e$=t=fbFY954cgqA|^SzG1= zaLf(~e{f$Ei`QG%7Eg^}`%xvepysB@FZ^^tmfLI9@1bfqB_d{PInFi;ZQ~JC|CgZB zuw8oIBn4mzcPgxAys%aF=Cuu3e#U)shoOaD$xoO;uO79TuUTp=vE6y?9uc`JdvVVb zrQ4V<``laV88qN-+iMb{&yr7eCS4i2QiK+PVSxDK$pt;4hNaVH^MiQaJv~>881bj@ zAK5{=Wu^)S{OB9t&}_I${iTAUlr-wxT6tUD4M9H31oN*4lxA=W!W5M8`}{!(hX&2f zC||{w7L7%98KzU+nJ+j7ti$5O*K8L}aobxD3n#-xb+;y&LI$*0jw-wMQ9{*M85sKf z=moGwhg7aO0=#-QcPIZjU(3}LjYMrkkykE^9qsRS*w3y8rY*_-*;}WGb8!miv!AA* z-Bx_}@TH(vtVgV|p%K+1i7;?W9&iIgvy_qZaLxO-N^XV88gC>vqUOR`X^k<6N%srR zk$Kni>ry*#@g71Up7i69Dig5rCL=%P{pL1$EJiN}3X%_Tu&q+MhVhoYs__!^M}PM& zc(mrM7jwKm&1`xbDYwF6cV;@x61#naQDIGlpE)asUBE~aeYRI%nh8+AoQ#9#P%qL+ zUM#KgzWYk;s%IS(q-$(5kXY+u6nX)#%P|D?jAzcC_sz!5oLd(j4!5m~9my9vWOOVG z8I&-1mvJ&SoaqBA%~ziBRkYAcZ)3To;!S$+g0SiUV|#xxsxV}zwl@Hz%xr$_5-E%Y zqDkL6A6#;N=JA#WwZ@Tk;Lbbv94%whZ{I@o0%9%Bb&tflA1yMxB}e>?ByY~8N3WZ? zi>OsZJJ}o-9D5Tf9wMwj@*||&HB{Z?(eP8&H@e8s<*&p+CcK)BLWXm^yH;d}aw;xe zZ}M9;A)vJr#KG0*sXT#pep}D{pf=Xgcwh~m)%NecUV*O5ZPs>k&3v(0P8SV>QhUq@ zkJs@9J&cvTw`(m&P_F$K+=FU|KMk`5Ez|~IR=y5J8WE60H_q1qq+^ujU<3j3)?cZJ zfMHFB%mi|b9r|n4E^PblOmj0+kH!+p?)iyZLZjUpiigsWJNMf9~)1(&StdYk;Kb{zIS zI}G|?)QEyPzlwDC%`8lw;%QM9q2Tq|@8wfTF{?-OPX_gv&?j;Z@@R&ggK2U#zSmLV zZKd>=+~1H4e5rkd<9h(GOa`wR1o#mw`N=d*0?G=9@3zoHMy-E~bE*cwA7>=L&U3mh zO|moYRg1thS^lz+H==ju;!+Fu6xLi!mNXG6T7xl8SIC% z2APOj^DF8z?yIu#I$}m369YxbGx}DFZt<&j76zOXXX~vuf%gtF zkIKIMM8ghSmA73K1>H83Ds#cL_I9^Si(ds?$PvridJad|l=Hk_VMuxP7ecpqt^7F_ zCO?ritP$Z*un96mM_Sn2(qvP7YZCMy7cwAxh$;6B4+LqHzyw#O$Iuz5#vVN3-Shz~ zf@F3Ic)v(7EMIMYqez83lx}%nK-q~+{pD2+McAP)0sGS|76)IcBX+OCD+HJk3*yq(%#ly4i)v(aiwAqWP}0 zbtDH2GX@y#<`))fd@B00?Kr7w$llW&Bh8fePh^#y20L`_W?b9nd4+S;1XU#0er>s2 z2Pqp=&JHT!UOgK-$%&ABPiq&DOHN?vA1rPj5)Nu7Nk~vV{uaVY~}HgL6!${J!lr zk~uk(Wgk@FnNpyhO-mkYZ0I6y&P-SO{WID*RC7<^3lH*9N(F>^Z3MX4d8c7v45Dcv zN=V^nkz3K1Ttw9ssLeMW_t8!*X*xtPn=BFr?l#67Cy*C<7*7g4y)ILT=`D}H$Ez$7rEz42HELG z{B*7UOK8leS~uyv69=24_WyNsl*4tj?6JdpwRTB4$sF=wn5Jy~eKb3;QjmiC%(C0P zbkq`j!mkI#y3ez;Xaeix-gDOeWta~39TR(=iftMAYLc?c!(vApO%58q=_eEyAjqN$renfW6B@Iw+A`XTWy2i%H<3L~>+z_s&XnnFonle0X9 zcZMUl?I#bcof2%tQOY<9HC!X4>N7}F&~?pE#IJP9_4CvM{Kwog1v*|H^!yk-@k4{=Z`cP-{7Ig#%~n8*+j02oinqRCOJk;E&y2=eLs2 zPN~)J$}vf?Ey>%_z}K1i1?;Em!#&DC z-w-#D?%ZHvVP6&U9r;rDZL5lWVh(ISby3a#BEjOOaa;K{!qseqe>G%|cbIBt55olZ z_P^g&DSX{{ncL2>U6Y*i#!$x|ripi~o*&4bd)Xykc+7c&BkTj=p%VgH!CAVAVIh^5 zwYq;OYwL;k-TFJ=6TjEy^joK)sVrb|2d^b`v=Rfb)9&^;;;G?QT{IZtzRhjF8Go1! zHTJ#im!2>*_v#efZ(udF%Gx@`izZa4n_hSp6trepF&}6PY+ra_pyGPiY4B9n42ePC z-JwyKE>X&o;f>aml=1{(3uv1Er!?!wQAecZ;~4K8+-uiZt zzqLZjZiIfM#;i$L0%`3%jW~4q9i&nHc`-ci(slmNdC)`WhG>&Dp{X?|{B%$wsUY2B zSb)GX$^5<%f9(xgmw5qZ@q2P&j#3J|O>$EkRGjPOStT5Lbb_Y-)LgqagmLP2M+8ih z*mg|Sw?-;(MnjCR-QvEn&Slcj#hDb!P8`8kc~FGb8?+zR!^4I}#>6XM6?jH_BCK0I zxw$En37<7_6az83SHk1(j5aghu@=y+rHHB{78T4Xs;M)(YGH=T1+HG~J@b?tw|pD#*z0E<6V~GW(1=i) z1X|DGRo7-%xG~EGs+{;;{ zp(YDG@-IM>l)p!CV|*N1j^W5v;)9_o8b@>i{-Qn6BkL=>UQ#wELA8T@HM70S`)!iH z@-2DYIe;_8lEuu&=nw*rlXX}a0)4}hC%JV!4OYzYA&1=MiGzgJbQIfmam$wfQg zxJknAZs{@7ZizSZ^R}AJDZg~j-4c7FFr6>_;#5)1b;YqBUQ586oh*uSBVm(z7xai0 z!|y|k&lW*(^gNA>nr;c9xI`inD?))ZsQJB+Y*7F~Y^pGV~%bVVbqh7U`3X8Sc- zKkk23BU!nit|wx_e2;7OWd(MWL-lMeZNRPYdM&(J>P~jgM~BO}y7G-@iRk{&ud^w0P9%BwPrM)ba5FizMjNCq^X$NC z?RKwK`Q&g^p?c21Q@4RxclZDUL@h0oT??{ARXzZeL$MzpWMV2}nnLsFo0*`pNP3pCPP_dV~hZ!eWI8-7}{xbgMYg)Z>GRqH1geEmXD zujYEpmDD#MrNck^&A#y?OJcPV3)CW{LBOYq0#3J=`N~k>4w4NVz25rb=n9=+J^^o$hOIrtjPamT$P?!)3vz5|xFEc7r3>&BUNVdMep@Ts?#ZE2!AkZUROAFTL#5lwPi`06a>Ks-Gk5H z-4#*xg;;dV!_m!9nKzl#ZMLuAsZ34Yga$}k)w6?)FJ|eoCz7rJxil`zA?mOlHbw%` zjZnpH958hJHB1R}jRu%2%-RiaZR2wl44Qei8@nW=0Kh zzg10Nhu$c#t!iAe;t7RKDQBq3=2cl%d2e~f`>)Mhl2CSc?+lglji*Sh+#)FU@%2Yg&8=qrVat~pye+{~v6N~x|;1#ss-w%apR@ zU4_-iQ1HwKid6H?t`T78%_-oW`u#?dQk@bGpQy4i0=45g7r51YKfVW><8k1)Q7Y1J zqkT@4xY&sl5U{-r%>62Kdm44n9gFw!BcgAMzOH^dtHo!p_&O-_2H&Oau<4@-)CVt5 z*?#JnJ`tf?ua4hO`^ZXB=@j^W>jghsM!xobKq@{a>DeUft7r5sZ+Cn@F~OqP^~sdbfif#9B-9TB9vwU*04ajcBaw!H`-jFECa zCZ1Z;ydW6EmXQY32VtHFKWtH_&o<33%Ahv_eF%29q4h4|v|PalHiGX0>^;&$HyUs; z<^7>4s(1sRV1S5ELm`HH)g^X6*E-M5rF@)h`W9fF7ydu?-ZQMJty=>X6hsiPfGFJp z2neV&rDFk95b3=rNN>_x=uMHL(px}!?;R3A6s5P&LI{fVDhUJ<%AMKYc5lx)ocr_s zxX*bWf2W#Vg$aU44q4ZX zR#7H|R1_;lGct}`S9AaE(p)HhL(L~I3-&&05t8avlG9i)&Y&nok!`svjMBKIu$$iL zDwZ?NF5ij4O<>fu8v6+O&<0Jfl%FM|0hw0_tGH$Huhg)NttQ+7$PT6bKZm_JK9fNN$oFKG4 ze6wv0oC{&^=U5{Mz+3OR+ziXUHv_T?Hs>psr`Y~vSy+THT4V?V|BH8h`Rt!rg<%LNQq6u*K5m@1ccdA(d z4MtiUDjfwp+e>aYRdbttrU0x`pmN7~;f^Rl_T((fHUNG{i?2~O@XODJ`uXD?FErq- z1`SoOq9~`W&+t=Yv+0URiX`qq4hx#HTAQ&Djbh1{ER^^|aBOLbK-mT(fs7jaSuKRy z!f=)*611NubF)9UC5(r5fsl{hx#fBWu9A7+EQ)h>=fhc;mYzzZG{9LT;Rl<3{s`R~ z&J#ghGG}I`Ovs0eZRzC-wTR@SaOl?KTlgw9dpGzfBZn4JgX0ABhfZ#ZhEPSxwn1jE zA*3h2MEcd%ZthtRm*$UipQUMh2JF8W__BC)Z>?=Lu1}dXAlH(-2VMHkh8o!pho%I0 zP_p9v(sVDRc=bxk(F@1O!w6H&cDJhAm+a)1G@zc8cCh_k6hB(6e#Hd2H=<`T2i{?) zz3_{2p6CU@#h$mL02-S@KT7S=c~Fqi!a0PNw9{y~K(lxFvYvA56P8b}59`Mb8p%(p zzUJy@h=pG9>J*w6fiduVC z_$+^(Qc444ahgkgDf_9JM0#J2c@~pa-S$Dns;Krzy1ZBw&=%$!JMmPQ5@DWB`j&@c zxtcVjb;5s_3}4l|5t&o{lqGcSM85qE`p#G)oU)(lA~{N1jz6v6=n7fT7P=m~wn8|T zJ{KOhXW>(DHlNDb04x6({2H9sIg_+*iCp3h3zBJ|AYyLe=3B+N-U_X^XN9FKbr5wb z8;TyUVTGL^ykQyZjg;A~-khZpvMBPrKAvpjwDfhjl_X)W%ihQXYPB39ib4>0ym{Hv zlR6(4@MTeXlQBUKjlLVuzh&NSTwX!;mF{cx587*G+AYb2DNlru-`-pvI;gT99gG}F zu9QoMLc#QUNQ9`#cCje6dKr(0)mE|k9-rs0GQNGnpaQFpp~WKdR1mS$>Qq`J(vm!I z)i=ZO_L}wAz0w89@K|JN_)89h>&xVMom5ivLjAe3l)53Wxk@()9al;7IYBycwtAgM zTmrX8U2nBwmB?VUV7~^3N9pO0J}9=uUB=Aw-KsPfa2OKOT{*98IFm;3mHL`B+Hj$N z-J|Tajl{C|;%DV<2(EceB;)bLh7uJmHvH4VkDqx~vYW5ap*B*fvGP3d z=4m*tF^Z;)<`7$dW zZsY__g>(JKn1OrFwv9dmVkQu7YG^)VxV(hXf@Hiz_4m;7`0g+T-N@`ufi56Wwn zCAB?iF82i!VxkVvht1|86BqP(?7!)VKGL}RbD*Q7`&AE}JrFhH4SVttcwo7vtvCjK z=(~e2r6pttXYaioOR(vYdZe2!5Xb1*iaERNWVQ8~r`l;AaAchJ-8x4q*L3Zj7@+0k zP3qxK$;K2&S`|)aP#N-Nc8iVJKG0QmNV+ZmGOocQl7oA?-g1aj?;?7Iavc_8a-)lU z{ukuJ5^1`5-_s0nl~#{U&$Z;!yw}skMXrHE$Zn)3(=T~(j(BrQC~KD)KN^;SqCb*4 zP{LxbzpE@;L`QAsHE}IRy4Q!1_)R0+En+hn`GY# zH<2f&lV zqe>?Ypu;5wd{&7MM%kD|?QSnI@DE0WPlM>A`h!cRYG79I$)9cWJ6y z#yd&_7F|o^@9ah_2(S^ODi1ePPgw(3Q@z%g8og=}N(LPwR_a{&9SgO|Z;7Z*DViqg zp&F6-AR(}#arS(Fus^=;8DH9$h~@SsH=aCNR*5ezBFJj%W&LVK6T`EDSNvpPq+srE z8k`aY6$QFf4=AzOTO>{ne=)@xv;4?^Jo_;DfRlRSoysjQhvo+*$u1oK!Ju^hs(ovD zdXBxn_QUk}4N`892onf?dZF=mLCLFAXBNW4BZB{8Lcd7@1kaDIa${^K-lP#P-JXtJ z{hPC@Pz3(a?pYy1{Oq54EnVfuFz(GDtC!HkBd=C7ph0(?>Uz{O!wgxWrIBL87`Ir+ z-^FSqCw_qYGcYhw{ZrWWC&%qs72wE$tyt^Sku1+M@!-C7W7-t|5_JE)^8d&I5_=Y@ zwAz+sbc<6f zF*0ZXguIC(^$G+B7+ikV;QTFXjmtw#)kEhl>7%pkMhcX?ybq1z85CTnHpk8HyLp%# zBaWRj!=1IdK-bR8=N6FMD>igse9kJkW+a0xgL&}FGh_9nKdHn=p~Y9DOGv-<>QP{U zu7BtZu^Sa+uK6-X+s`pa95+rZAvkxrOw9_*@uEZL&f7V*CN1S*=&ujKL=DOYESRTvHSY8tz%^UWQ zsl2(~MoPI2_-7pXB=D>gc+Fy6Ymm!lEvVPZ zS0z)+xTm9*qsaZ?-MhVomuIDNR~V15_!fTlGM8n|NQYcE*Ts+_aS zah#=mbXLJV-F|mdql6Q>tw{n~LhzoSeA1b3^1JHrkI8Y2G@m^^9rU^I9*Hz!1!-H` zc?!K1M2=VgU_bEjr5zW2YLRO8i#E3e`hN@8{;>&Ah4qF=4}Mi_T)kdxrSZhQ2Npzz zALb$kd-_fW0p9sLDkjkXPB$jb`1gF%fe@=N$hudkpzZPaG8uGR@Do%ElU0dcqieNk zGVy%f|502-aza&g8tNNYZ`Q<^p7}I&>6Ca#&yfp$JX0bp)T+-a+v07pE|-Aj*%|%-?W`z z&Kz(9T}+6+4}PUAp8X(Q;PQM>>>sb{pSQk3O8Po7|Lg*iOiGCPs8T$cf%EMBTG-xG zUP1rVEd29p;86Vm$U>j+mh6v_`u9~`_XHmG&D7oJQAdAW2D~xphw`HuK1TXbnHXM( zbFG{`@=3`qfPNX@zVPqe{fTnnHwcLQScs;-R9}4`f0N^Jh2AY17Tlua0Z)=g^2Rjd# zA~FOaO3kNPRL8Bs^NFt!;+3OQX_lI=U7o^i*yLWaWeYf?He+Su%|;&|tl?^H#;t1X z(Q9#CU%!@B&sNNh*S)Gl8p`4+CYwA8i8E&a7RRggC5GSN_UM7dyPW3^; zPt}Zj^?5xZnTQ46yv*MD5Nak{=?Fc=-OZPojFb;B+DhhX4bHA=--WG5kh712rLNkA z_#SdQGcq408%~mJ2wo@*7J$(||tFhzV^mhd>F}MN2Ule24?@{Tb z0Ejzxf~ZCRMK|W9+%>=B+qVEOPne21c z9Gme$JKY^PJ?}`uqYq|@fOz}U-MSXVlc-sol)xxl@H2r`;sV(@T8XmMT~HX&LtJyt zls$` zc`FT%AG$kqjO{yjUC&fA?M*;N??zy13s zu8WA%Z)4QE9N_yC4aeU3N=x+TPLEI4AMVsDeI$i|oVX}p{l9US@G+tMxL6m+4L5l& z8%k5Ge{)cP;dH}dbGb?G1FU_2dYp=kumrb-xcSo>*&PC9jqCCVXUETJ5oGPC2-m#3 zkpNxY>flQO!58iJH95v37QL;BbY;sU#kLObsqX;(Ob7G%;{tSfE0Z3j%pGj*$+^E{ zO_^@slV0S!ko&z=dFT)LSCnb_aj{k&u>wY4x|3_i5ZaiILY&6=Qa~XW`C5&F!LO?e zmOOZUZf+qHM}^>_BFEFUsPqVuWzs3AQ;Qet36sZKAtrj9SCd$5bZhN0sW&5NiyP%4 z3hZ=*oe+)%ws~1DYw*JmdX9Kv~gUtrGpI;e0jJ+My-}hd$gxc56B@I`zvE#Lz`rUl1WF zfC}rCKiAN>ZisF!)pbuQfdINK2WHPtq2}W=qrBPGd zI-DWc%G0X3KqY@7{&B&#-I=J&`yzb0LS^&KNrcngN!9G&K*B~$*{6oOmpi}3Vkp{) zdj`Y1alds*V!+ws{kg|a(c-;vsL~9-Xi{5w=7Apao(g=K+O)jzp0}#B8|4|E;FEZD zLW$?rN=}UxDRU8b&UB=GTVYN*Of!Qtkn$o~a`wSy*8>KJLDyj$4Oy{lz@#Xp_fzGo zovuhKp<6d*rhMwN1&(tuj+Y34koTrF_ivx98(|3#@T2F6aY0hCez0O>b)S~Hi*6irT%QQpAsnl~QK$w9%x1JCn~HK-k_Abu zt7>pz(%&ex9P&(Bc^^<>^>j7)fYrx+G=U(7U7r4@+>`<=I#gC0%ztkx2cNP7{xj(d z%AFmVv@-{LPC3@Dh4Ym9E=w`=>O>Oav~n4-=Ny)&c2bIiJdKm(ln;;ML@*Q8z1aPsuInyh8N3vQ zN!}nkzLsi$GtF$1W*bcl&C{O3H$wv)w@uDJZgnYGtVp^!A3tpL zBV9K0eoqw+X}_+&FECe2Gxd*}Spb-`0gMvAb5=w40wTY0~G_RP5x5F0(EH5;<>_D9*r_#1W&_+?Gmmx>UI%M1H&I@GT8K;`=T=- z7Tzy0`&_V_Hxcl7YY9(QWtD3DUi!5qCS|37*Z`!&&uE$w zX(?RDel4h98$F>@sv-DmIuN&IU*D0glqCbL$>r>&v?*|fZp-#~(#vddYd`5%p83ZB zu7`p6Ex_WIz~6CHR!U3nY3ypHGSzuYx`}+X`2@h-6@P+ISBnrP^YhueWld*{xFLaG z*uScKxbf*a1N&gI)J?k6*oTz5HI<-#%R;FyXXXYIVRpTixS+9P(yn|A64kFh(t^re=zuj46CC z4P7HU{AV$_LxfTMzg+np)QORb3-;#@xC`^xyMsw#WudN*m;)MA+E#FG3qWb|7+rW` zmfpt}nsme3;mvH9Rz2s}rDTBw?-riD1a)gw0t4XkEac2)lHoa((_ZF0?O_bd1WWGO zIPA{t?b?oTw{Q~Zu~|8f-TmmoZ4E<**YO_$ydY(@j3j&rs1Rv z8P0!HpqeS?VgvQyo5W1tdPr$%S@!00xK^D9;#!SaPZ0_KCS`-=96*tUqxNUxr6=(L zgzua`F#@HwUzirCM1Dm&KMe#5h@0Qc<2{&u<3wLC1J8K!q`>d^6-Dfpa$KuSnqi^6 z)Ykl*S`|3$04uhTo|3s{m1PvMQ%Gk!jM}rp+M;17>Vogd@8*OZLecV){CYK=WTV5Q zDRPxtR}b(W0gz$K^hkjG*VpW_Vl<5u|?#B}EKNfP1%88Bwu_m|-y!z2k?Pw#;M`$taU zc)99MI-`fJ;FOF}@3f85(8q_z8Lk^NIL9tGD*HczQeZt!{VwolHw2rSU!CR5zvpTY zajpv6PqiS-kPX6xa$08;WyKI87=OOQw4~MobPbFj}N?HD6%n=G%V1n7aGS7VR+Fz4uNCaV@o^-QNGfSCr*h<|D5j0GA3@EZRQGY+fnNr|C z-DkCFeowbB_M2A2*D8%$&*36TAs}hy(kE&^WhG)iwL<#h?1k_5~ z(xToTOnFDeUux@e?y;;S#*QTQnP)wYu|kf;0g&=*zKR8jdDF%uBA2?BoO&|-prkfS zdS&`|5$Rn^Q39iHgKx?b*af#PU0h!H6kMifL;8CiR{;A&##BWb;_-IGJ+&)L228zP zwBYtXz?BThNr0^_;nLjB-*YJa84(EJ5oP)pDx(0x2UNxz02=zxUUXJQ5EG20pO#X3RMGk>5T7FhsnmvF7hB%73|m%yTdV zyr*B*_#Xvv$h;?eWBM1W!zm~@RAn)6{aa|?(oq1}83kGrGCUD%Od`TM$9c?-J12@a z3~CgvzDC%%3Amc@Xji+ITFf9V79WAq3q2YPZ9ru5~Gq-Ys* zlSgo1)%-(+KsNwI%USMxwT5(<{QB^@6iZe_J@I0 zF){mzRuaHJ6DFz)IZQkLH(ZKmqfff4dkJB!w6&zsZP%#r^y_oZYky&`g4QG6wfBY4 zN?$#mbNr9KgXgj2nND6^+DH=0H-8+bsHo+B3gj1aFYxPwl3yM9VyWlRe;eVy_DQ@7 zyE1K!Au=t%PD8R&pA4E(2I?%fdeWL(B4Bz%9OrTD8!|Lg+@Fv7+gN4TBgiyM^i7Dh zRdPt%$vV3>E6nQ~&p{++gD9vr1AwTf6~*>l@`FE2^xv_cKH(j$ECBqD8IM*;^s_{O zqE?yv7}H3OPBSA4wQ4?{;L1rYA9-{nJOv6(0c;9z*vV<8iS-9GEoYqpimS}4)gz@L z+uhymj8ttYy%$_T1cpxR2jG9lpa1lo`1C-@fD9*MH)%6cf;vOF0X$iEb%2tyk`!%1 zj0{w>M2Zl{Z?H(du)*|iK=7p;7-zhM-pJb{ z=8m6C1`%x&vJyEO0Nn(U8%JN9@R1YmnFY~jMI=!lX(a#mxPQFK|9iWC48}EOlp zTU0|&cPb%@TeB#^axlwo^TGdO-Qu$BtH&YMnx%qnle-nW*bkTGTBWkhp^Z~14)<`W zEj^q^uPTu;6DRRcrB`VLofqn&4eK3WcI(-rUN)?biU>t;{n4L)*UGF08Qqik9HnII z1~%_}ad{95-xftXMlK=>KX4ntYzm;F+r;y4{&XdOee`E0wPacFTJ9z_+(96_u^e<@qt7xz&?;)qT zR5$XZa~yAy>wRgzzM5|OAH5-Vi9Pkipjf{fA~q@+R4Shbu($G!j-ygBXH?jWk3)!+ zle<4Zv~p&ehJb|^6Lw7T!GHC6|G5i0%U{h}l=AjKeS3uv1sWo7Wp8PgUWShU=I;LU zQRabv6*U$_+np<@?b9IPXbGTWdt&|0m1F0Res3rJt4?E!b*o1vJvzE_jNojjyJDE` zPd!(o3=?VQ!%dEU+>bK4WB}9EwVU!<*8|}%gW2vTV$F|NlgD1_aPQVo#mmh9w`bz% zcU$7FO$1nKQ125^E76ncW?-yaWpOd-%lRYTH_3@XFl?j{TB(f?kAq#G42*h>jiu9U zELU=2>0ROf)xI)`y>t#BiVB6CX0<-<1L>Kp51+j2wYJOD{i}m*B@J`5E}b)-LZb{+ z`Vr8{y-#rJ1`Q}iv9ffFuTRaOfBb`4{5drKRp%9ufKfI~B!TYjVIB;n%kp8mz_Ea9 zKVQilY5wj+3p4Qkb$_mlwDGk*VbegKQyAkL6R{1TTU92Q7{-L34odSt7V#8%fD4Q~N0mwJ$YNk}B%j;R%C zmsd%?W4?IAPg+X&qDTB;^J&Z0tezW6ZXsOCyJPAF>OP}VNamxWUYUu%?(spHJejxD zeKNJlYpwaKzC&xdrPr0aH;;JR{swx)IbuC(cavoTY764B^&x@kvz2g2nXuxbxt z+a0x!`fXzz2ty2(y`8F#`qq*MASO!6H$s04h5z}V%B(>sfvoNol|M=w^8cgTX2rCG zP$zc-94*NXHIek5L(tU%Ehs41^A!qeHrEit>czURLPtKgfu6VY(h-GLh=HaV4z;}A zjWS05{Xoxv&I^`)@KK_qm;a?(d!it}29&7EPu9uX;tK`j6TsFWxp^gc9-L$zW({)k zI`(Egy2e2L=)&mcjTk9X_}*q{qLgh(zD8rxU63_cYZ)m<8k3*CXjfx5Zbq{-m~N~*H!9s8%W!TN_x2pRj-!wL|hUaS4Dy295ri)Dw z>Lb=Z=`ruy^Eo~xdS8yY4|qE!ry1(Lq%@#dRy);D*kY{>ko4WTWT+CL8!G`Pq4fIP zXR0QezjDd0>c&gMceh0kc+^U4ECqi>(JIQxy=F1s=*rD&LE1xJlGE&sH%-mE0*k)n zM#saI>NW+L%lbfjD>r43cj+DEVE1OFCqj3~b$!mvo{)>hp~JiTFV84`Q@xbqwtoEH z^4o@UQ-8Uk>+gxt;bPU~-z!!_@zye~Y;mGELdVuOOmFp7MRE>1s>MDn(%Sy-Rr=0Q zDcrz*R0OC@UB6KUNGh0E>ggMJ^Lk{em`h=@Nt9&S^%dRDl~4XB^=%ID)@gsa2g!LV zhOlSGKj8D|^+;L&b7YFDck_)s$FrmA?$>QM4D|p(jqho=C6C}l)8mlGYPnm2#0*5= zr^7{3OHhwth8$VVc_8=7Y3#Xy(x;H>HuD*mvu6@O?#^lFxmLZT2Vu3b=dwr{ll?@M zW#!`VFNsR$#m7$Hvbhq(*RJp2rrTtrWodqE0Z_5tH1d@kTx|oaWn-dXoV#1-tg3?X z&c-RT_n=CFH)tY!YH&`PYy0MGmwd00>O$EVg6_hd^+~TDH}w8efS?hrH_yw+AT+u? zjR&={(tlu6>HdpS&}OGAVRUEZ1lD7Q#!ImBiG}CJHzJIHF*|(q!TG$B=uiwR1j~W}MH3D4`G)>2EGLLC zyuX1u*rHud-C;0XFlVhhq^_+tl5ak1B~@=;sMgJ+XDe0OX!p+b7Y=P+X9lNS+QSan zn-R7ZD}lI3!q8Lc;i_6CKVN2{FNQ&^HawaE zw2OW7^WehgRI%mm#_lNT$Xmo1mD23GQkp~;R^lfmZZ9L0U(g)t6yudvaLD-oTlz;cVcsYisw?s++kXsScyie$Cp&Ijp=f`anY$J!C?uh zlGyTRofMNMzVR{Zd8G>3>Qp6Jr-j5BKeQYk;IejiGT9VAaJty?m1upO8h&H>GFU?G zwy!VM?z1=Tb0x5)Lq)icG$=uo?$dW22ZvY=$Mzi%3@i%N^DQ{{w(Zg&$h9e~JCQ-= zw8<^m^Fi4xw$RXbpUP>TMWE4z`V#)V1c5-wI zgmWfL8g(0H;~3uJSqrpELoVIj6#h_t{P?TuWnSMnXd4;*8yqZ0Zoqn%5xdP+tc6jq zp{L?8uyEH5+U$lni@}{cZtbN_o`uchWoUk9EVGr$S?xN9{KdgpcugOwcv_f`DMgW(pEF9pF{LX2t}AcW&`dHDPfM;0R2f$PeQOkI zdEmBc>Ek%uVI1ojQ8kh&@1^y@zLF2S|Et4ju3Af4l+jz3d#vcz5@q-_(+T_!X>Qo- zIv@}ez)hAMhCBRu*6UsWgpxACw{?yaRGH=F|AaH4wymx4+mP$%PfxxC%MEdMFl~{! z^))jjQt{srK|{V;lN))hYj=ZaQYVfO*eU4&aJ;^na_Rx6i{#geb2jy;krLPLJI(L+W=*x?GML$M>$Yp(tjnk6{En{u0bcg;{}EC%nX>301;PMeOd zOc<^Z%zo2nZy4mPBfD3Ie@!y$RrXM$u(eZrw>z*30yZt2m6ji7Cigl(ss3DCkDg)Hvr4yM|RHR|i%d z@;o`YZYEJ22kpN+Hpgi<@tHxIE-7yGJTf#Q`LIUMsN1@RwAtKxug(RAUot1t z(Ja&(-JM47Cv|Q3VI(|{OKt&>VeIjOK|w>u~K#24jpsUtQ3`NI=tTwxkffw z1tv<@q#XhKO(507Y(z{7zd`6P`oPuWxNL!(!}bgPC(6xAJ0^^$eWwebbPrPw=Q^+t;s&kE0ZRnku3!gpFmFA&rbU8ebN@pT7Czzv}lc4)w|y#4XaWb z7%ojn3bK&49-ZhBveNIMzNlJl#eo^my|2{qv{)al`L2c`C1)ZC?JM1>2+Bqk({3Y+ z%CAz1RzYH`Ee86T-6myAEdBA(Lto3xQ(dyS)i`me1qETekmHJgw6YLmaHVGi4>$}b zsev<|o;QxlPO5Ld;mO^p?Mfk(7!ZE-M*2P?8=73xD%6ZvU4Wf@I2jN066+3VL~SO2 zChY@lo)L>=fu?>mBHhM<&<6CB0u@UQQzNXru^te=N_`OdS)x4MoDhiII`Q=ZSDWxH zHamI0{oQ%#?(Rg4fo}wpZA2OQmUSX386im2&&yZK^{o2rq=Y-36hzyQ(OBa|H$0TXN^yq~mgZy-gce(CGC9AiB5f*y12K;%eON zy~~ry*;1gS75z>l{BZ;faJeSdzn7M{mL_c$j+g+x5wpLQJC6WS;FTq|K4_m`xSYjN zbSxvM{Ckb~rmlxV2hDuLdYkZ}c+aH6{gFJsUnLk~!DZ$Rx3#AD-Je797=wrg`JHW~ z5#Z#6V^V5u5(noliu1TZ4mj;;Q^32=^kUz=tO@d%Th%;p``0!OkJ)gGM*|bv$0T z$)bL@&F27-0(l3S0vEK41J83K>hccgq}Rm1ZWZRCb6(VFKAMqpnaq37BEGt~t)`T3 zUn#7j-pCElf*JYlZ_yHvLLK`DVCONgm6;E-ZA8xK1AbvKnPmSqRecnYbkgMeJ}q_? zv7iQrNS|h$6>Ao-Ld6gu7liA41OxIy}%`}=+(f(j>Zy!FB4AqZ(M;W86_7hEkSwa zaXz%aDfaFqG1DfXb@7HN-!pdqv{uoxULi}}QRmgcFI&9KuR187f0TkUp7IFkUV-*T z9PYU-RcXPLFtg9?VId9D1Gw~f79Dl;BdAZ!EVc0S6kCFL*VpUMC6Ni4QB!?FcKV}z z=YFX`_?7Waaa|_Xqxo~4Jb)tXjNw5ee2~Z9a@+dWV(Y2w1beaRXFl{PqlcltpYeyuT_sX;?U#dd(h-Bf1TF&p9no{Uh%3iqDoe1>+b9aN@L%# zdvfN;6jj7e%;Q$rw{rt2%E6Ic{E+rNOkYKl$nw;XR21XBSsI30#%(B~ui-%IN>AR> z;Yqg1skf|x<7CGWO{zUNKB)nf%de4D`NnxU!Cb2!G7W@6%-(K1Andjh&`E47 z7PXZ3QZ}G#{KqalAGw#D72aQMEm~(>fX<`*l(|w~Ygy@~7}&olHV0 zCDVsX9p;f@fM^!ut9GsNg)5Li>dCw=MfwE#>#F`btqU75DiuMtnnNO^^NN_o9~!;9 ztHCdFSoGyvZMRZ0`}9lGQrom%;yUWmI~GMQGN-vsI_wM1K^pm?rkh(WxdtBuw$PcJ z<*iwBMx%S{>RzpmswFOD^Hfq=8?!*S=oSh5|wwvR?hxn@&+k@v=+UqkSx zZ_e5Yi38cCYUY@h`3gpyPox)5Xw@;vz-jkxsqJV1o%TrH(?6b|{)Pglqz*B1S z`$m;&*0pBOet#60F7aI4lJ@Xza9@1hDE>g-4W*U?Uo|!iRGf|9Tn^V1O(vEB16fD= z%p^nwyi3W}L22I5fGICLa0Bp>^831_4-za5J$8rmm(_91v{LSg%ac;xEUly4uriN6 zA79ogC^cE=6%MlF0NlFiHgk_c^Gj?PlpCyf$cThyOXDJ+-x*yUQs@G1RRbvriin%owg_2$i+8sxeP<%f zAMUaAi|JO~`Q}o7X0ke*UutU7Wt2>AwuqPCw|i^?-dc;ofVz`0^r+O?(LyKpj#Ys~ zfMw6?KAlY=tTm5G;Pj0!i@EpjtuN1&*lm7!Kg>uz5x#Cw0M zuO~CA={y3iUw?beEYOERLj>RDs&PKw7x7^4fIP|wjRHL4-tL530(b6qV2D!Tp{xxO zqtqKB#mY{zV$zj%gHMx$1Uu%9_R-B&((4Qc*!1R8Rqa53<1b$F^e2LoB1XVDQ2w}H zUeh@~?lD3em1q(qbMof^MHdj3dtKwMIFt!N$IdU4$CSthz!?}9l#hR>zjlUYDDviC z2ciC*hg)JnNAsT^#)Slk@W>c=tuB_dKCF&12NK+u(TEsGPQ?$R7F)q zRJ`J$k5>P>G*%wV(w_B}&rg|>eoj4b_9WBk82PNM#@?Dmlj~&};dOyF-y6!Q(~7iV zUl0xp_SRx~8>MuH7YAWYxHTECTDSLwh;$Ei3rXX{W|WWRPfZSk=*7J}vtTQnB^%_} zI#7U8Ot-4WL3FJ*7~g0sDY`_7obcmumC?eeIahk7v<@wy9UNrDQpb4Gk?r^J>D?SQagRgKBl} z!TB-YwS6JPp4V2j-u+Zh!s7R+hH15QSz+~n#Wt#_YX8OXfDe>deZo-nG8sQS%*F3x zlSn$#rGnVX&|=H%^=Me`F2}4WWemS=Rd?R{kisM3dMrdsetu~~LU&M!luSpc)P`2P zDV&A+l|2rksw6@7ScA7G_r9mA5TydxKDs!9ghOz^s{-l@cu%PAgvpRpp=%G3joE5t zAhcxm*uB`2TJfWCyFiU=a)5C|V!Ccjg^KS}zzY>(Y>^j^@^(X7UC;3J$zFySug)1b#I#K@q&VfMe~BI_8Z6a z8V8LgL(w+}l_DC~JU=T|`AZ_6VjiKL5Eg2-hKNp;O}G+%Z*fe0<`Gg$#vMq(IYFeH zon%QkpjB^uM3G}MKQ><$8jQ>M%W;tT3tw@4evKt6V7QRl~Cq(ww@%Ha2w z1q)?T-`h!HtBbj=?AsM+PFfI{nk|Pe2=BGT}1vxAC$L;H-M)PXQKE|wGD+V~# zUU}rEjksQ*GMWjJW{acFNdAmR5&Fqzy;p_#umFEcZmr4wroeP#7^nXT{fQNYY)pc} zZp_1<;Q2Jt^+ac|<0@~k;zf&$ce;H!U8XdcbkHiut;jClz3Xe8eZpZ0H$HtJG#%)T zVAmJDN+BB0RH4EgsH)Mh#)9Ie4%P^i(EgCQ93RVeC7j_u`$YqV7DK;iRfU!dgMv&V z5?{8U8B)1ou6MZ9_I1V^qsYW4(eZj+7r4y$@#Z@1FKvg?yMZ>&N)4i7_R-n-fd@!B z(JEy&8Djb z6t3~LjuIu>1ZpO% z>vG*vXNOa>(Z%yq9)#uoUyJ%X(jHl!n~)QW3ERuAvN^@nA7-L$Fi=Hw?ep3ahM(?z z@P6~oNaqwwYri^a2ziwhWMsc;I^Bk0otB#2(npgO%cJiznf3zi4?0=WD?=}8WVCiY-Fsf(>uH#P97KBaG3@Z_ zEXnr0yQ4*&U1^Z*nQl*)N-0s-tXX}GMF4f(OV+Z(hnJaVci;6k+G@rv5?qI0%_9y? z9i$*%Y$`{Xk!ix#KGzScgbf{=;)@vYig>B7HcD$@$>qY&ZVS}!eD9wZ&^4;k9lh0D zO4VZ?NS9dS6~w$8vz%=2eQ7g(9Jboqc`M5I>`JCGW^r;tx9-3eXOY|yQWLMmn(tKN zvao(QE>7jnT_Exn4rR|~4`W9u@UZg@a--O}Q4xbER2X}N&~;QmmXHD!Mc7Bk=pX#2UpL-GHDp;VvBAEbcYe{ra%IR|1oUvqd;QIObERe?F2S1)amZ9beeTw{@?r zoYh3QBPfY`y3X~v*UR9aW16p9BW;JB?~R&mx$Vu-u!#s981L^z;`M< z$U67=z{lOPV;pjg!r|zF%lD;RSNb+*#m4csYwYq2M;1I0biOAAnT_gv5`vad3o2B{ z)i;iRnB6&nIrka4B<6r>dsUdTzr1A}yxj2XvkiWIQNm4qslw0X(x|2lx*2I2U!4ZW zFXIC*$eo7HPe;M(Sj8_cA3$=MPxolQVkv)eu(SWLdFiF5-!6(zv&!YzcC3M_+Qjj} z?BbjbKPUbA{8zkY7w5ZGq+50lKi4rfA<>pAOC0`F7dqJ2JZ@>G2)dpcJ+bxUy3A`l zUUanj^xiI`W>=i8lYuS4;B`FyVh5xc5z4oA>REgRb2Tb5@tO=N_%{%K>;`qhl}jYT z1~;cyuM{(jo}A+(p$%|f@Yq;a3afqYvL+#GZ&dz5%lL;7cz@pYV6vGtC1 z1t%0gvC-0x2)*odY^K=@NbWvvTVK)Za`tVIoqPL<2dl$os85Ir)sXN`f-ooeW$%&Q?M$-WxHPuaUTv`K z7ItwCpMK+4QDH#!WNu$&Jc;|I7YudRwPOz&-;MYAzq*HVKZr_WT#$7f3z| z*AUFY0F`Z5f+EF(x(kV$odx4Xj(DMaZ0)CJb9GPPH?pw4B6X{ z+EB1{ZYoPpvq@~k+WMMxYtQCU-3za+viQy^uVWM>wKw9~z|J|*U3i>L3~<+DEb9o}Bd z7|-q04m+XXcS3=^^IUpA!y`97pJA@2+KkVdw3#}n!|Koa)3X*iH*q*+`kkbi%$q6B z&JC(5y5KV6XysX&xnFL=pr3Pw<3j&1~f+xOq!yx?>|Ffppz{=72Z5+r4EDu5y^ z%yfZoT*oDGGt7rV#QhAl;>9+RFqob8_JW-~iD`-3l;M?@PQ>ucs;&+G(xCDl&G+Z@ zwrz~32m^X;U00R!o%3lLShZ&-bk^(aPKGmAQCaIZnpQ7-vM1L)V=*K+`=J&iI8_}{>x*Vl(=d=9_<5QIqE$0Q#8T(tu@BJcBkqo9Vl{wPf z_#PZp-V&(2p7gd~^yQ{wu11-w$Z8!WQZB4xs}nrqE#foGA_a}V2SkvZDSIU`Lw0+~ zexjXl%XCR=P2JhULF5$fZC<9P5+Qywhgtd&uq3||A8Gv$pXUu&DQ|b zD;0doxas}+hS4qkU58FvakB>n_pfQr1fG%#J;Qy*=g~PH=_?zu#}9c+o8xqMtGbrw zl)Kd_I}Sc@@(&r++NAzaD?9lh{viR-&1<)c&9?^J@P*0}Vg$QFQk@nw-A6h8UDLe9 z_Xp~6uBt^AOwFecpTbUL_@VhuXvyf7Iizn_=fd-RIqOKS=<*xgYBOC{=7_VBmU8$= z+p*2rN*kACm(}4ugWTdo{>o>KGp*Sa4L)}I3-rB7b{DDlnF+*q)f>aGwr_;_&Oqps97Xe4Tva@}L9`-SGXk6cV%V~!Jrso?Ub z>WTF}`dK>3vi*_lt_M2BS5n)!aij60*P#jJN*Xm#PSslhr-|otJvf_+P`+Ut!`EK z{+>Z#0#hKMfxNax^&$RA1mL=I>426cyOi{cj7Z*<{8xu?|Fje85b-1~inHA4UO4!W$<` z;WlhetPkZGpr^M;=Jbjsn0A_Ebjc|5$iX(#_BSbY;LW}=84yz`|N5fc@C{UzCdRJN zn$-Ss~_s*%)5F^Id|mnK zTHM{b)%)(XCaY6mpQVetsVywhvE(DrFzfC4;1>XtmUEU>YoP=pS(N#{Wy3f>hw8Sess7N7!9Z{W5j*72ad0cm=hzvmOm4DV;cw|Eo!X zPoau0-=ds{mdRxS;n_`WRr41!lL8CgYYbMV7Rrv=gGP zo^pgHes(~)(i?J#OTqmb^!~5#9}BU<|HRE^nebN|iWlU#QHVy%z<}<>VTbrY=vTG~ zlNK%ZWoMLUXZ{q_{LZ@)EDjJ+2p9;%D=yC-rrmI9l*iOQYBZntwXGrHi3T8j=m;Os zGR0JVhWy|&jEVY`vnsk;prHABK~LXL3iQe}?@ZWp=LwjzOXUS6=V$pc2)}?y0Bdcq zT2HFB?#kD3fMuu}OV!-HW*nY&`Hle&&rtdOKD2kaEvvc_-Qa*qXv23u0E@wS6UzIP z0^@rBSFkuo(A&4(SXVSkFL%V)d=6`7hfipnY`$DJwpG$y>OS(U4McCy2;ZOuH9}Kf z3$A!<&oK%3s8EpFM# z6Juur81V$>WIE)({T3!_=o}(EMbfNVO`Fh%z*2`lxfG?o3j;j!p5LU{vNDod*+qR- z!{D+=y=wNG4T6Dz{AOB1YH3F6>Iim7dnTNRftb_GB-BNp+r);_5y?_UwS;I{aIx{5lNGdQZJlJW@1vmv{YgD4V?2$*UUhHArI;9*&n z)(H-|@NzILQn#^l_gC1Lm-k8|hHYW_O$4>w>HL*UpvvEYDqEx*5_VFIsD8EOPDB{~ z%kpB|zAT?;?Lr7+SlsN2v4IQr)Nh8Y@nbB34fFM^dg;|}D|Rgi48@M;pfQu^4*zyK zb>!enqrwtl(zB{c`{b7e4`e(J<(XRD zHq*Owl-XlHX2)K8Qf-zKRm}=t{Li>bnWn`}m=}+CR`e%J^VJqT`qUj=mj?xI?wDXu z6wV&j6fs5^j%<@}48QF&pPLniCDD*qKBoKK=_4hZruA|kK}W}&#|mGXIQ$GdhDx`% zNsv2x>`wX7b19EMck76MVTHyzoPcd>KZyEk^iA2>3`|d!kHFwnSq1 zH{0LfxWBiu=X{ww*dP&HrCbO{US1X~tHBI7W4lM=<2rwyEIT4SGHpZhvh8yUrYJbG z#DR(aelrOSe~h^ZgVdG>+M}B|T@TAwBF|g2dfe^ij0^NRguR%#=j*hw5GAL4f7`x> z_C%0XYKFH~4;zojrQ>*P$;cWII>|NcW%Er9THRJ(eSCei$_T$22J<6 zy+XZzl_9snAw>t5EwGJUhV`av{CzmC&+wbLzI%kIzNRM6jZ{E=s`W2zKpN>?) z8C^II-tX6N*gMe$uEW`tbvrE5Qh0 zJG+yFfct44VK2yd3~5F){NQPY^5CSg@Sf+bka9_Z^mGyfos8GJ|~eDYz2CY zNABmK@p8rY+N2$Y8MS}$xS2FMwGoRmJ-bOCm(O`=e95##XZbKs1l@TqeA$1-;4Zw? z*tuSww)QOdIAtWg2lJ$z>}Wlv8dKobgE8#HRxiuoT$<8I*TYJ1*l_j6f-cnUQ>@*) z4@P4VkuRQV%Ls#vV^B}!J@fQ08%%T4H{7Hr*6Obt8sVEW=ntVioEdO+m?-+YhES6Z zCusO1p*a?uMm>fp00%LLGT+Vy)h|iDRA(n==@5XsAoIgqo#+7{fCC2zk8o9FE$p z*%AU}0t3Uu6D*!cmg^6G_0b@BmQVi>0FNQ;m-cA{2WtLsD2+s6F`M zo202z;B<61e`I4${YTf^5o(LrN3zhwwcg;F>^dodbz%Kz{-n-gcwWK_(W7sWr~G1V z%0?XIm)SZ4cgg~l-Nw$N;cwmI$*=OcV|eJ}TzL=)LoPo7WKCkbi>@~oh&&T+2uysv z2{tJ2Z!CwQcsK&R+b{Be&I+gHJgY>#D2w*_I z2NO@G*CKe_U-&_Maz0Om*s)gS`P8{JCSdf-^|zbYE)mKk%SkCw=`uDVwlr&jP$X{( zlVNGKg4zT$zuE3Vk{X{Px?)ZBLHa*KdrQEIgt3O(*w?2)YIvgc8%ZSFfz#54D=@Q+$Ip zV-0tp*NJX<1(c>;xE$dbG)55Vq!|XD$gVdv`aHW{e(hNpOdil};s!c^JOQd>`kC&U z2$CJ_FH)B-0A;P{t%ZB+f#Jz-JKD*G;0KIK%?@f9XsJwPQgQ^jK)EGh%VnWJR-tZ9 z@}w$Pst9IOP@5@Zd>XMa|IYRDbyZw70*b_PcYK~1;tr}y^riWw^J6RT%borDMfG@! zHF8z^D}A`#bLs@IcLD4Z@U_D&gfw4=g)hcH%B~dhdmz9^}UESLD3^tA?$0Y4&06X)&kh*k9@Br zT~ri=f4fNS{P~72!PrQW=|PdhuJFtaI;(CuD|LBK?F(po_l-QE2HmkW)8vt_NjT0I zmEZ-kmC{5is(r*mrKl~)PbZi>r;Swo_T)R96S7!KwJB4Me_lu|PK^5eiV(_C>KawQ zrS<7Tp|pbzG|FzzF*P3=Y--{8(B#`ocP5O(v>Z~w z&!u3JTyF*pb6^Zhton-t;&@KeTPBbCvT=W|`=CVnfs+>1(4(=>M&5!g6S=ib$g78u zFOt!t(o+|#sxP^K0#XX4gce6^#pt&&kX(?aCj6oIBsrPA5Dhnt>iLnw6Nj#gM-kS@^HxhVnhUOg}>SK;v%^*?%0Ss%3XP)}1%4-8ZPi z??$BKq>&7A?CX6CZLTq1_BfzmUU%3x%#Kksf3SlVj;b>J?bur|auHUE2=7MiZoJxH z`P!=71gamhUS8Ja=4PzfD=gDHL3D2Yd+2H{%o|7t{zC5-_#oxV>zZnQ)z-*PX0E3- zS8<{?!@>=v@OFa{nQtu^UEIv@{WP?sqoHrFN5_6*_w&$35UFgTFi6N^GQditKm2;R z+G+N)!<^^t89PPqVBJkcl-TcSGS|wb%*Zhe;(NK?yV=|5s=&QVYn1w4d^H%8aD5S` zhkB=!Bg|kQB&+k|k$V33*}67vN+X4kTjT8}YcKWTc4I#a^gLwi!k5Rl^5dhQL$2Q4 z8M7%@;`i6i;`uA?_q3JG*8OmS4|V%y)-son3u?9={lW63JgX4pY2?~znqtOVZ}27^ z3u%<4XBNX7HEFUUD6(^EWj)yj=9Uv16+FuQ7id!;?bN}I8oOS1W8Ne4~Q1vEuYxW<+n$_tr?8S|6m zx9@4Xdb_}ZCWL(hBGqh>c<%sZ@ntdtjyTJ*H0^TZlk;w1TWadhoFB~(li^iq2qg?~ z(6&$a{6J!*pQ~a9HGsAvN_XSGbJ}C6H{KF2Q-AK)KN`Qk z*cOdQe~0J&zH}_T3HE;dvGf6yFm_Fdp1 zvPpd`B78$4T<j=SjS@SQCCW;F4keH-^PPNEL3^;d2k9mInb7a#l- zRjcP;4-s&`f@D52XyG1FHyGTUmtR^6&gG0t_*c=5Q?4 zQy$s-%CahtOu$V+Ce}(71j0!koY%q4PpxAJ@=0O0Gd;<~L&Yka&-6AWcx9c`R;oge zI;z>`=8+wkvahPf9gF!8kjS`- z9UkK};f{j@^GF(qsGmgIV(po|MQ&_#c^H7M8C@Y}X%XAGqSIoG#xmk~4ok8sboR3I zyaw1NqnFL0#tR$hD*PD%MG%BE%BN_dv!u}9N|f3X4cBuX^&LBDr22svI&YCWxiptCg$|EN1bsvN@cMcz0PBk0HF6Ty9d6 z-r*9D00Wur(?fNk32ItQw)P6;WfBb8om(X54X;Crm+Z`BGAjR>{Psj8tdkz@+{e$X z+SPkQg;j?a(c>Loz-1e?+1#;Xshwu0Lm#wm&7Aj>#d5*n4sx~j$l%WC--rQ8Xw}E@CS|`61Kc45faK;IXur)5K_>9|62B)F6RxobiTBDo~7&D z0j%JB^LZwuO^$6Iv0AI0W&~x(&Ebt5ILjt&8LMuP&Wca6aFuu=|el-vM@Oj;& zwXw^0;pe``JDm7=37Yn4N#Xro$3mxU*M$<53p#npLa(um4!+oNj3(P1&aMlY97Fhn z<%T4Ag)NygKLQ+J!qYcdtHd;cuei(3&MdO%aSnN&8;VvpX=;7<3Dl@mX7%<`4|5F8 zg);Gs)psE=KCq54l~#5;W2MA}n6h40N3f1HW6OJ?*d>Ch=*9av>xkh7G3T9s!a0zs zOPViRlX~?zJ=FZ$PdM{UydhBD56KBWYhqw%2!=>~kj@c0quiuRnZ8|XKVEhco2lh` zt|Xw4GVdCO2nrsICcCXq(!(3mGkDG&Kgu~Ig6Vg(j=9-{oa_o|O`~a4glWbrw;PfZ z$~fEZbBcfaZpdxrElS`< zsXpTvg&CU_dvD~^R;6lTe#fg%xw7GT_JLoI6AY`hl%r(24? z{YYfDs|&@eQ6Ye0lj43hFU=KC;8*rHn~Urs7zW?Cl_?G*QXg7X={7mU-p>?i$6?So zQhv7&*mmvB&x_!z1|*Ae-~Mg#Vw4?vOTU^muBoDHp~ zN+dUqOj@-tlB4)o&ldOUgG28ml`=Cx302zXfo=&SNz-s(|C!nY(5h8x4x8gK+O5Tl z``N*Ep;?2|%~`Z2yY?mjHrV&^qX0|bzTc4_3!iiUf^|mVBUj6NwT_NPFTApHiy%wn zfO7b|2n-s`$vYQ+h4s?x#Ohsz{zq<#Dm4C0LWhokpt^fW<@gK^NVdb?5M+{>({(Sg zSd3QgaqH(^52A2vQgc{7f_e3VM@0wjt>y`!oO1MF%l}BOK#Jh`G4#ZGtwM{b@1k2v zb@dR-OvUN&8qFIbH1~-D@f5{+-KTIIm1y(nBa>@X4o%~p#cXr)HYe7rHu?j)I~+jp zm3ny8ba9kxN;9?C7Qt^qkhIY)Idq;O#o<;`H!P0BaCipF&b;PWap2M0D2wFVsHx(t z4J_q6%5ZjcP#re69K3a+sSV^rQ|OyWrJm$uis9m_O*yJ|^YT?hrbvUKyEPCT8VJ7 zH53){CqsXS*`LuHOa?j~7?j(CSRG^{+OO#0AxEs9GaWE&6q5|8+aUBF8ou)$tLbOA z2vYT1`yoi4ycjmLXiu2CfTMSyiHWu!`J%<|(#fmZJN~4}WPAv(~8|;V)%*;p> zX|*+0cfNEw)V)|5LT)6xo^SLo4Ncc)q9kRxJiqZ;VcK%~o0O+j zn+WY~+Y{hXZ8wiJ7`?N2GgXRMA&qgOh6pw$xZ|p1MmlWcbG}JCiGC#&6-aoq7^2T) zCDyy%v9BQq=EW(K_V=B}@YWK75+|_IL9yd>5B#cJy3}$a1kf8Cybrw5_*@@3RJr~8 z?muB5%2!9WN^T>E)vHnfzwI|EL`V(m?DI#h1wf$^40vZ{#tBlf`tEAJLv8h_ziFlp z&y<7vrd3BQmCZXQ@+TG+sD;T;0)wb8BtcrWX2wQkX$uBl>-Xm<;MySI{ZQT@cx?8p zT9p+SdMrVr$QvSH3>`GMs-nJr7X>KFzkNUi3uRNW!VtbonI6rPAOb&$;JZo0mt=>1$~9)6G(jZ zK?vw`Vx0m6Bvj>x2M@ufw_VIrR%JhgZQ~cpOcQ>&Jh#7DaY9v#)^(FD-KlWh1*NN#DVw2f8z!HfY7#9W%x={264aY zE*T!9QGh`TphE@)Id1|pIPX_22W+-}%|-q3L6==FZ!b)|yT2gdn4-yE5b`&!m$f0V zkst+4!VxaKg{1iEavAs&IW1I464e5>iU(N7*B3|#e*uhC*6ok2{eQmp?=Sza_enqC znHpE;uuHt&@4vjf3nhQ>YtO88;Ntz?@Bh!`@G=ttPbc}<82NAI^sin2zpp}s&=eie zQiUGxz&GmEUh5{oc%1PHWl9QO*$0w1cf%DO+>yBKi~}hyH370#3ljE();EVv)lO%k zgDI>jtrtT1luW+^Q9NV9QjiCL9^WJeL%$RB2honI@Hid$=u z|IZ@5{`E%%u#^vC)P6gzcggf2SXPsDrCMBS2pu=gUuAp*>q{LR@ck0$)C>G7F)XDZ z$Kjr?q<`p-Ye^IS?EQJu>h9rE_w|qa2&K2tYIECE`|1a-_*1TrA`$rSZfqAB@pf9# zz>)MGZE9NXpUbtvP5(ebLjLY2@QP}2A`qJ^J^0Os$&7O8NnK+)yOt=?eD9%NY_skA3G zYQ@9+qr|UGEi*;xY77nLpEUq-inOAzsHLC-Oe$a@@GGo9Qk^PCn9kn*UA#NNwJC8L z2UiV(M&u8+|F;)_W9bIuKWvbP zvR4%fHO3NZ`_6>w-?><$oaf$TgsBRPJQihtAa`G8rrv-bjo!~7cKTH{J9fMon1&#p zI3PUNrS^Q=NpLK_;&D;C?63VG|06!3UyO$xKSG2Fem_^7INgw^Wqb|1ys1o^X=2Wx`@I; z@(C`~n=e8lPeQu{BB!AWu(f%f#QzG#{&w^1VBn$j>*!i8hyn1v1eye^L(ihn@z*@lwT#H1xm`aH)a;Nu)!4e7C-C6B~@f8a`91 z+P(RBD!qecHJuN2`B0u?d$o%v8c$o*n&(prv>?$yBX#boN^|JS;3o+8g@Tnb^UQyD zKA6GNg8ZU;>2ryVW;o|)squ$TseFm-{%JEXW5;W#L!-HNkW8;nA-aRtk*oK^V}tge zU2aKXI?duXjh0(qjn-N@VGJSlKGS-=evYYvGq<^2lILocsq=!2usBEPDfgx3rV~EzD$3;6tt=HNgc;!KY?^v%E7^pL`*mWV?55# z7`=XawzB?&1T9xtWEz^{`!C(I^%mMgoo@&Rfi4{s0ZmFWt@kO6y84`CFHMixG?z*= zO`gy3dgv0;$7^lg*UCz2X7ld!pyg6{TH%OOLg3u4Hf*6=Z@kF4KD*0ue|h-a;6M(Q zy?MTQl53x2^s*+={_xfPK6R$_!u#RyUIR#DLlZ$9@_sJJv)hAT3QX49=|B`*8zZAp z4!760T58mm0tyPGGhV2Ge2zGvwaTHxD^ru8Eww>ugsJ8Hxg1Sp9ob&ZswnzoXDScJ zkg4D3^lJsxo696G5n)3@#21|a@|TxKf`duD>QdE{_CLqXpKRomi7w+B?qYxP%69Lz!WGPrPt(0MMyhho*I7e; zPY;C8+M-cgJl`iv34j0%m&;Kr*u!gRUJTdAc&gffrKr4ge9ht$FFy4fv~IoKk)k^P zg*ck^1IZ|--}{iPZ=k(}K-SRkbIyrsiJGeCWb(SW_5Q{|2g4#&x?BwM`Hl(2iXjJQ zyXzDg=5b}zrqq3ii0$1&KA`LzMYdWTqcSxzgRNiX^-7`I?l%0%tT?-%Z{KBAG*qSX z#S=76U%)bmmS(YydJ8v)s{-(jHxdcB8T-<&$#S3WLcS`d5-kyrrp;@g#dwN|_<`UF zLRG8t_zr) z-VT$fHaKF68Zd+TQ+|!bq!3tC%jOtGIM5CB_-s|(xsB);@(-DRWo>`&Wn|d!C%u7E z6Ipg-srryV2z^=k1p#peAY@c)x-GEzd7!;=9gg}#s`lSCAXk0=2Ws+$69pcO-wNGr z8soJ4=n__3-aKquvIsVY1G7W2zU|#96nkENKG5rB{re(}Sv3ZYkaOCWDWngtgiqdL zn;S|U+)T!4=XkBJ;B9et8#vUDuYSL1NN z&|5OkI335VB}Q2c&Q&kc%9{zu8OqRh2qAV9A!VaU;csde+T5gv3ZoG1wPnZX6XE;b z&@?QI;f7%`gu7qMS_%6p$+L1334Ag6Dx%Z-mdI}Qa8j-^bFV0>QcgUk`Db~y*lc#S zO^;`r<{te`u0zS;QZiCDf#2e&DYex*mbQ85&`u!&uU4scxm2iF@2!fCwFCg??>B?E zzGPJ=+Dj(NX_PopRZORAHgw&+JR1%^J>Xo|u8yjcFJssYUr{i98i=n8$BbI8tH`5e z$`Bl?`{D|ybO)HN#RuTO9`ZoA#48~F& zn)6oOxD_y)Ou91_zx*X0{?CR7T6{&^0&XMJ*WZ6q{K7#G>f}JW|7kYu8mmK1He@|tgp?@xi81ge)JQH;c&pMDA3(< z(|LnLuhB?;rm#<~6KK-=h%)kdwh^HGxJxBc@5vsVEjx4`B(Dl0xaY&)3hx6;bDYra zpC0VCcK;3J7YQQ^phHU_f$BWZm<7a5dL4ZA$8>%|o@;I_CO-NggZdQ&kAidTUJGrmbA?YLlZ9rX82F zT_&2stJeevNV8s9zIl)cRLqjk^6F5@i2~+A^7VzD-HM#H44v}6DJI8^`77^yo0 z0N>~9u-tc@a31G2PCJKc79M*R+w_{`#Rv5*wZ<1WJ1q4|HVbQT9-srlIT*4Vuud|q zYPF)())8|*Sx5ur8-wPxKIodtdK16)Y(cwWTb2{HN(I6{Zqy%7rI+rO1Ky$A+eom` zE7gW+1xT~q7a`JqU#htvF`j3rX;a)!VXOXuv%R)xo==?eK~@ClUN+S?bf}ZXlC}gR%0XM#3d!fy2ETqTg7myNyzy)@rC)ixf{O$}D%}ng0U^r1v zwAFs)7rAPEEn)osP>cT)WOl|u_;V{0qu#fmf=?$mhI1K{i(rWo3of+Cd zS3!%AK!JU;730WP#Bf4#b{NM}A7!P9v)Z&B#B9MKU=)G7xHd|Vi3)bF`&6pB4aE*% z2;}oO8K#Lo<`y}&aSb~+^H2@@-vV`M%m&|6X+QW3pfkrDtqN+g7*<6 z4bQz`kEVbQhX)&!iE=O32N~3fLnJ5blcCuBbJ5ZP$rY2g=r1hGb$B`1x;(Q;))LCa z8Upze2SjjV-2(p-m^lKtd{H(y(?w{%=NnJy9%PNX>Ft`#V*7Jtdb8WZkXi&JpNL=k zWDe#~t;sm;gX2l^=6j?b^u8kbxVou*qdBpoxrhY!hiY~V7XJ043ZvMv<$R7ZyJyG_ zTlVVt7+4g~X<3)~Kb#I&eEbNQ#`z&`KkpCK5-Qf8sjj~_Tjz^x}@j;jf>oOVWa!S=W{C~oL~^I!r4uCh9#Qf)Mj z>BJ(F>j}WnKW;Sgq5TSL51e$ani-1W#mw5S z>VI)l-@n|Hpp2g&+b0}{*;0Y;AT-iMfWIr$NeGOTI zZ#z)Iy8YpK&naDyCDxnsdHO}}(Vz9in(Q8x4Q}iNl`7WAKpT<8N_6A|V~0D;Vk&T& zO}2jpuY2EgyxCORTy0EN^8@5nRaV<>)jsm&YD>d=&JV?%kaqle5m2{aF_zJSUHFuZ z1Id{Ba`+QzpGRDsEGvD*MJvYPs81Z|W3W;T7?OJwm&>JsG*`J+o8Qmk6hUE=w%bv< z#g0F*$7>!dRVVwCc)2z)Kf}*dcw6GA9TIAcDh}OMhHuc;!P1oC(%y#ca@=T<)YS@m~^__t=@d)fZM)MhW!MR~=5d zXusFhz-Dc)iKS1|u8go+Yb|>wD1SUgWG{zICnN)K$ymC&<*EjQ9)S+Hn#JRO^W$Qr zXT~XFcAeU^-8fglmF9EXLrjw5{yn-qT*0~#K* z(Ehj1fHz_~hd`DC=G}1sL`a9>XtBr{w`5%evsn_oY0GR0PlKV0rVt1P`szIX_LPf? zpp{25L_S}`9V3|4BwE0Bdzqka-|#X7W0(Y;+;K8HZLr4k<7SCqNO3gBO$np!FZT!e zU`I!IPlVST>9CI-dJSsr54&y$6P~5+c>vbZrS`I+QtS)^NPy;Gy}}CN@qnpfMF)8e z!ou$LbzqFx?*T;fEQ^+8MjhUe&YuT2a0;>=T0D5U-R2P981cSy(CNOg4ez0;s`5qA z69$2Bw^Wszt^g1Tk#SSEmF5UWWQs~Aj6Onc19cH*Z|?k(b;C1pML;piH{JrZ%+3A*P8n?5vVjMW`{7rc`9v{9>7 z!x9zBoT@xILxMjd>%ot=b8(fH;ssCXz>FsWfWI@<+^IMB<7SG(mjw?ODKuMpb6-!$aO^BhE&q6+q)jSR3|R_aOrRE8_#UQ zsKUMOAQ9qeiP5OvnO&j%$574KL3QWi2*A8b{09o`c~6yGwJN)OPtiR2rNUaJ#1iSVJIW$RDvI3wr&n=euw;6@u0>?X2)Wr>p6~C-1?n zQCl4UH#7@c`|EglKBK;Fa>R=_YL~)tSe;v6Co0rb0!rG74iZ84j0R#mnD#yLDdqeb zbs8f5a5nGdt*utUqUt!ht~NhoMO%gZ>*@(Ghe2tc_nStd=}#DMX|QbGBWnEzOitd%ZTB^|S?D4O`mQzi3V?K|j@uGm{;Ezu9gibvbV4K3y zpZ_#QXkfkkA+%Ji#IhJlgKN0Zg4m!<=TGSZk<%yf_d`J&I@XvrA&~h!QS=ehkc)F3PyvpF8y@qAnQDm9B-K{U=T3f3U+}57+0J$9Tj1 z;eOje%T299OErnDsAQfI)x!WF>S0hF+w!R7o5fE!^4c&qInaWtp+N#~qv|WP9<&g* zf;hrNCMEuPB$Gk__dwib1571(V+-g%56^cL^=)D36!rQ56R6u4`n`p_S|2DXRv628 z6nc5tBUlESU)e$qCVq}P;V^vFGXMGFwFkI2hGv2{xIF*%-@p&>#=gdAV#h+rKL2|9iFn`_DnAuWofm@?)FgUo|8^NJD%5MDXeW-@h!yUyCE)1T1p)BWh+}hvll4 zi}jzV)+m~q-*R3eKz>#{!)FMc23&ymz6ij- z*smPLe_n60Q@;FdnQMoD<*BJufnAmW`!1F4m8W1}&|ni8ilx(8JnZOwrAGX(=1B>8 zNiA0vephscDPW7NN_ zJTW;SyP?{3_^DQS{&^18A5#!-P;Qp+RIN3x)WYXjgeC!mun(G$ww~s)K9J!(t+{H56x^ zo&PQ+jpUyz4yd@m{R^ydexGRw#Wo#?p^(nAY-1F2KFC*3<8*36!aa}DTD$6{9ZY4f zv#@%Ll1@S)tq~1yv|pDkwY-2K)s+^ihD+#h@LrD}Njy($O=t|R3;n~xyQ9y1wIl&z zp*j33{l7j)=r91iW?uY^&O^jBCSUh(5?-pSAbWmfo!9eQZ@fL}+uva_N*Ekwpg3o9 zEKyu)eSpe!f8fU-w)N-qj=XfL_^iA4bThy1^I30*KHtUZSV8!3o`FI%hWzIOp3&L= z1bqMT0iRbN=yH-#v9H+T)ZDo~7*_l3yAW6ljO;A}k~x0`U8HJsRIQbqF(Y^oEsGQF z5LD0gcpg=ByeNsq8yDc3cr=@?Fy^y zGZ-bBUek6kio};xuSpSD)mx`f39n)+>Knc1Dlq7lQ#JOX!qx)`R0*ZbP9(! z*PEf_3d@XF(*0r^bGX$72ijqo>^|*iu_lYzN>=f8*H->T#gO}yM*Vmy7o#>S>Th1y2 zjFBU_Knf#Z3ag|y)dX^D8_Uf|^zwH_VyX3`22gzRs`glVt%5J28MN!Ij}URl|7C|M z6aa2pVJT&k852Ok%`#0x%a>iSVPqcQShaod%{=UDv7$b(Y4}_MZOQ-W&lbx9O6&Y6 zxl{%vY)F%u*uZcyOW8EX?*@5PZ&r(yiYpZSCzTLODgPNP6)3}DHQ|u(xuEVj+q*NK z=(RS(0U#yM;dX^9N9Y~w(CKRb&7D?Tipb+_-74*^3_&Tj)5+K3;hWQG z1&@lOLK0d`5FNH|hFLO@odpPUQ!Jb#9VqzB>boPV1Rz9AC@1Wm-o`yi-C2pU%?fUTg1bf286p6k|E-Ee zN%CLL>&ZZ1|J|>t_-2u-l*M2)7Fz8xtRIZJ%^q>`z4>^f%kCO{z_ga|kwwgzHe>^v zwWEa&nC>Yk8SFvG(E34HnrAeftL;7Qg2oH@iUIrYow273S>?rGR8CkO6i=O|O)h;( z9*o}cTWL&RXUHO3;9^v{VEpYFawJ1LTbAG;ItA9z!GIKuM*B!&l^RfeS7B!a(93{c zx+_O~-OjI5s#I6-1Zcv-B(L(DcmlFr4X^!sIA8yc7qEIrkuNOQ@*Or~Zmh?nQ6S&2 z`M+VGY*^soOzQCj9#R4{Nq(*4sm8dO8_%=7wC$d0;qZcLKTIL0{`~50QaEGC2IC!T zCKg2VM(IQ&yF8Q@=1cJZ+Js}m z<4dVs-r91LDQ@#{5vZ+yH1~}IhnV!&K&1p|_BCcT8rM+lVnYzAH$Uj9b}6WTx!*1- z)u@ukq+KD!V$g6Z^|cbbSJD4h^E!Xc9(&pRP-a&37biNw#{dZx%_QuBSDURr*joKN zCQGWfKU9lUzM$Otx4~$<6r-U;UV-z=!!<*b!x05g8{_k;`p`pZ|IlonbBb-C@7zLp zc>?**sr$eX=l_vPURfPgLy5PsYF+DG-qo7F*`JhYzJq(Y)uM@jrYVq8CDQAowY`2H z@BS^Y4)xfL{2zPUt6Tg5njq})#81`(t$OxC;xOH}48|1X0TG@WgZh0uK#_4SSS;F# zsMUWc@7PnEwCN8&I>rozqWMh6`d8ue75R12&({a5+Gd(?n-aL+1c!VHu%WhRYa|aR z4gL9vm>C-W!uKn~mueQ8yYDa_8sv5w@OIkheubibLuVs{A$O$6L`6b`{J4I>mC=qw4&g{ zVSF55PJDKK`8RLDkhkIoj1PDQk^*zUM8W}p4a9pWN2G{7Yo}Ip-8YxU^te0aQfP<3 zfv1I11^_SJpvKYX_0M$;io>YjBcQQJuEZjwVcd&*#evLX)pjN32r@xB1&})Ks74Ug z&iiz{WZ(k~oL6{JkWWA-4`n!GDWMGtz+Ho%OO2y(h?y>6Fyjd}8mE2dgv!{ORO#_A zW^<19YTU%wVMl;*cm9B@ASf28aYVJmD*Ay0oZ&OIe}VBb{2kKH*`jG-b$24;zSC7E zGDq{fqBKx&avQ6{Cm5{3mS>#oRzO|PR89Z;v=)zk z=2rkD53iCnTehqWqJ)0ds=fy4Y@UDc}as>@&Wu2sMhx0`u zk~MB0d(EWVPg;M=FRvLVFk&P@p(r}QDPe*8Ut%!<_}9qfmnBjMU+38p42Ec(T(6~6 z8W5EN;yGO+nezcmll_7EV&nIW*PQ$WHz0I)O>hO0N)!uDN{JP{A=z`ao*CtU8A>PX zuXJCvMzB$kAtHeXIg5#!s9J3y^}!UmT{UtIf(Iqya2L@xwO4j-B!5YIBkP+{EX<04 zH(LU!C_lTWZdF;(e8)O%5|5Yf+84LmYsic9vIZ@upr{CfKUt;N(gOtI?4Al|YQ=+M^8bYzWTMx%i^sH z^x@fSDiz(sSbE#x{%qx@MV@R90ySa3`C@tY|HIv1MpfB%QNyqSiXdSC(k&pRARt}R zB_JIeq`SLOKm=*ngmj6N#NKoW(%sz+(%s*&@5}3X)XVSp`;PaIgW-UEp8KdZ*IaYW zBQI_hMia_?Lbuz+<(uJ{lzAhNS9TSl@FRQ67k#jP^0Yj&uV7!E>&;Ty z${`yA=dG!TFP^p~QRJDs6_2I*^Asy1U*{-ksH0TmV{U9=G5TY~(h)==Q{_G++x%9s zJL%Z&>(I|T7;-TLoc1)M1(Rf3e)^LA%BFiExgn&))Kc^hHEuXYl2j8+U(&=fXG8(vxRYcx+noK3vE`YdurI3TlD=Ke=!p}e*h9=vn?hb+}=aJ|z@SrU=D z56O>JfLYsaLXmbA705H_vLlaCJZ<0a65P9=$qsI8@4nY{dy0+f8oMQ%6op{u!(;Bh zhr*vos|6nA@}y$%Nm1DKTct@e0kXCj<`WCle?j5zcL~}fA+RQoaltf#p2+L zgsGQ$gd@n@LAvSoi?fh)z&^{@xRIs)mo)=_j)LG2z9BVt{^ezUX1?TzR|-44btd>1 zB=}D}{6-0$A2U;i_m}bbCjz~sM37s3Q`&#~);}K<0|p%V0U`TexQ2hQv-f*MKJapk z;K%<|>wk%D*Y5n3y3QN?B~t&SqQVeFlbGvU_rHz^VobfY5!twu)kM%=XqSIRiu^tp zxO>KyUzuc(@`c9al3Qm89FXd-+-jcNvzULF?*-auC zyEB&*&J@Z9tr?f07E@IWAekoXZvFr+rF|IXv@>^%Y4-5TY6xFqTUUbUVrxW}e7=T2 z012N~B%Y=n$7Nav#ytNYll2_D3O5!xz4uggX8T;Dy4{sh0WpK`w2LM&_px-5eqPQV zBGoh-<)o@VK3515Zn4v?+bwrnu@G13fweoZzd_|Z%4z$2xrzudwDpC z_v9k!qBo0Kucf(SGm(ctymWKRPl9V!&e-n7Wy4##@jqxW6iqP8f>0(?%z3kBcpMTEk`Y2^tgwRh9^>5eCvSC=Uh{D+z1nk?f90q7P_jz_ zBt08yZS0o>?AbJFqK;Nf55;X$8+J&<9nmZQ$Vz5>K~AaP1d#JwPWz${O{ek|9gSM7*@ku+; zr7lgTo44K4p+|1dB$*9mh?aRAMaUe0w!y~b63mHh_(Wg zA$r<=;DT%%zoONWbWXwC?t>f$6pWK$4jZQ8SC^gk%Cn^f?v>A6PC7>QcX!+G)VraC z&Bh?^+5tJRW}Gw-!%=}Ei%u7934Rb`v!~IHZuK7Hx@-NT&3XA0L7iBxg4*m4Nm?k!5w%c*dUwS}$BMSqekiQv zb|I$m)un=bfdwBT1uXZ_t>!+OxT>#8;x=d?ELV8jyLjw~|Gf5(?fTLMaUxtW236dA zVZUaY{kkw72z9b6AHz&I1lcTkY0^Ys(8tnrv1SEH52dT-3N=?{FX8AfLpz#2-fmy6 z3|=#?jHwB<+o`vw)vS11wJRaWaWP0e+owQWJnJ*rYXmk6(aohlq}>0q-A$i4-a|af znLx3b#us(@p=l5LJmu9-$*?=Vo7l?;f?-cY4@pZu-<4g-!GvwMc&1c#x|8+tA-E?n zSEI~I8teJ@^mK8EQuI4tN{1gR2tBI)`ViA%R|4cD=>*CXtzp%P3vCy1W+P9(El+`adt~5dyriWT7xXbhr+t!45`Z$G zG94-jXK-~Htym1@c0bL!i#NvE!zpCbk-7_b-dD|IWG9zrT)}XViKJx~KtsX7v%*ct z6wgM~Be>id??|ay^nEw_gN0_Ei?ujt(QkGzxb7~RP-@A?F2x94UY@b)ha zr+0pXz|;-3)VqfpTp1(h6otAxOjL>&0M?j{FRs{}k7FeMbkO}j3pXqpAzG+hPZezj zE=rW*5O-Di%=7M};kUPITSr-xGqh7axtL@S-9fq69&Hifx|YH>1NnB-W27%rl2O0? zq1E_;r-^|jXc6*a-DQ7Y z`5scKE(XCvXD(>221lRyIOuedTpvoC*bOUmYQ>_>cvoB(9_wP+HkhxVmK0I#B0YSg zw3R&xv^s|eJP||9lyjBDI=;1^1QyH>2f9P0Fm}C>9yVt8(5U3)k#Tj=l+QJN>GvKLZx&_D58j=twB4t% ztjP^$F%&_tJ^Vo|h_q;7C2Vgus;KSlHWsxEJ%aAt-x!usmlWv0V>R)1vp@X+h(aOD zTPeB+wb#)@@39!%JvrO*q$DM+drb$p`fxlJUMv(G2jkszeP)n(RipZdEw))o66=41 z0u;^J^S#EM8m35&`rVB;lODpW5p)oz>7EjH+q6-hYJ3%?bm(-sljI+fx9}Hz6-%Z3 z0qHK9os&k~`6q|M8BPJ*;bcM*BQYVb$h~)Lgl%`|p*+w&m`u16?`qK~{R5;^Fe5Xd>m`10dl%kPe%`Ypy>=khA43+!@BSIiI~_L1E1|UJj<{`!XoTWB*X$ zx#N#dn@Z4iw#)Mxy&W9y!Dv&HrQ&*4O=! zfFILSrhmOl$_O)_=iMlFKO5^S@GO31%tHS}v+#|--4>gwdb(y!k%(vj+!Qxj?-3vU zI>J=4@YCoJNpo&?`;&b#%x2)*f5vggG}G)A?*-Yuz$f)mi>d`@mO%A>v`7`qcA<2@ z!nWs_;Mbbs^LYe-7IZ1Y?!-yaC$y$YmG5j(mhayO&d-7!f8hD|sE9(8Z*|KvB#Amm zs<^5CJ^vZx?M1k2H$72k!&up1TmevuA&CCG9HMrmlmhE{N4@=+;9&cFw3vEz&=cg1 z$(tS_vF$Z2m_Gl+N?`B_&wf$qq22X^EhhboNS5VFAMFQ;nTByimzVFN-Y_g~VSU4q z^3k95`}m;bAgVRcEa{PKl;@EEfU^?K!S)A{=9Sjkkhw?S9`@CR*9NPW=whGFtXmJR z$%Sho-@aqK>)+!~yFCt9f_3MtcEb&T0|jy>~Ph397j72lYAkw&=>Gvv-v;(hun zz|K>|2+DwlTB@ap-z)Mj9T1r3j9Bl=oqUF=cOf-SMjbA7o2RqTpfjA=+(kC)kZ8!w zoN9N1z|==(BPw@yk5UN9G7k6n3pHJX!PczZm(qh-%-u_ zqS5V_bk@OlmR*kR&fK7=O<_#&AGS|Lk_B+iM;(j?kgsP;tzra|(rkOj(CSKFYN)=JncSS{rMk>%zG2W8inz+ z?Tp-ini{}Iyp5>4h=%w&0q+RB*yq{t7X8Pl4J927ZR{jB2%RL9QnpqKk-cR!dA?qi z3;>o;8DW}YJf5GaMa*fJ@Alj@PiwO$1x~rGBSAxdLb|&MGDB3HbEaeOtQzKN_8T$L zuKdXEqh&i@=YZ7UJZ=Y=rhUFy7Rl#PCS&|NnvN03R5)MA=x4Aq=d3e>SYg6Rir0?5 z!*u>Y>tA(W`yV zKDk;K<%piP!_9aGaObq+%Q1wVa{FF1a1{3Oy?GERW4X8t3W1=0pB6~3$tLvy*HeM1 zK&@P|!Xe=^lteU}MB!Es#IU^;8d zPlvrw5$SoJ{YCDO#lrfeX0zAWr*&Xm2AiOsvVtbu9Jfp#mpac(%?i(}u)|(|_eIQa z)A{I2e|G)x|F6w(%GGPb|Bg3so@pP-^S8U^0~#Cs%R1MGEopm`^XgJR3%uRkH7SDH zFUX>JK!_7bK9jHkwJO($$GFsZ4|^Z%gQe}0e)1=yCR zOo4;a@dly-4ZO8m_ny3}-+2&7X*~y>Kn2O2!YHUsZ~zDmO3Q;}ndR8$>}iG}v_)p4 z4g%Z0FA9^Oq9MeRNi|#9pL6WF&F5Nxwy(u(;Ij`v|4j^P>j-UVzUE^S)0dH^L%ARB zlJw#Pa_UsjWbPA#>lJXW>ui8)^oWbcHXbYjb|1Kjy62N0J-#n>6C+12!NbhFU)f;D zoV;%rn9ArcygyMZL%IU&!O=){mxP&Gu|er!tCJS8;J4={vaN{8#W~d`Q>)Q11hloE zh$>LjyI&f#hAUag%)2E%caGJlvYPac6HK~^{HM-7^$`Fka%TQEFAkA%>($C_koC7i zhkRBeP?EiAzJA>wEwiqLKNmu;dAa?P)T?ybg5fKUppTQ&N_)AF7n(PfsVDI8p^{DH zjsl&xVh8w*RO_`j8WD|Gpa*WOmS9a1^gR8TU=^Bc44i+>a|(){w-IF`H8Yc`)DIT(E%n|4xiZ+XxN?P_i*{9dtUV8F4T9o5FNqBNMg9&ZPG7^A1yPV0jBHi<#`{PBGe~V`^3DbLpj$NZ{F(YyJvNe%=z$>AuleGuLe$TvzS$| z>U#|+)AYc`MOr3?GLYq#KDE+Dqg@~usZV9LT^i8x6(xiy7kDteNR)Cp-eyM#O)fc| z#OPSvCr6ic>)-7hSev%Z?1i&SY;_e7d!e;|9(B81#!^oaCqi{<)p+1moH zh#3f`f~Dqz^J9e1Sk>+a!z5FK_^E2cmO0`017(QM^%ziu=mK8#8L~-uHlU<}SVu}O z2nQfg^{B`by0x}GYWraVP?LqkKHB$L8;{^|yJ%#+ailiEM8m2da5~L9F$NbONN8uv zXZWiVP>7U79K|U*w1?2+f#db+$0Tx0q~clgPP~N{5>>i@#7q82tcS)K1W{O_Sg!>` zgEIv91^LsXUtu9(N6S|bTn`Wyh{h10U3E%2n+Ym@*1pMH$+g2XOtse$vFw&OdSzc- zdv&LoGfNt(w!7GAFeRRhJvMfO83w7+dmU3PK~ylj@%hr=K(+A$8z@L!-F24Cnzr}G zHRR#8oG7F6MPp^IR!W$vYxQPovX35vwU30rO*mAd=|}ahEXF@8*M15jzMu&j(0-ki zRec~Bo!#%!8gChmQa+9}c{8`scu93n$)v@YF5o^@Bt9zy`t9wwM3$^bJa+McOEo6) zb;Kp`|NgVhcHM{9(lxDwTH`vpehGAuAPDb9O`$^+2gR9Y_@2G&Tb#2~!cxjP zBMWy#umP_aAOYhQp(2N&-@I*oUPR2`!Y)nf@5@HU2a_fPv_^je(hR5xRwIaaZK zsU3YReXe)#CE?JkcPEjo6lTHW%E}_tAVl21h5vr|^OWl0j}wO62ALz{keUF9JsJ)T zX0b;aL`DUR{(C>!!PtW$)6&OFS_rjXo2C6%4{BM|VASPXVxmb`Uy6dapCJ}YKLQ)0psP9= z_emg}3)BMlCkeBdDd1MO#O&bpHrn)Sx2RvAoPIyCMb~lGtw!(6K=pvj# zRK(RQi-*qsTeKuJUqX=Xds`$&9yVu2h!qy0lDo!EJo)y)e`J~7YAaQxV`jB?iSU0-f36uWj>OR(K}J3Z}QpqdA;l0yid(`{^Fw>C@;16 zU8`#Lq_OX8%IJpt=jn5m-y)3amk)aEYBIWcoOeN zvngg_yZWn^ht0`bp{$~iHY_1W3R|Ww;cMQaH=s8-K4L*F)hwVm-LW;%V-J7=5LbJ}NNj0Jb{0wNzZ4JXfNnJ89nsw4Z z0AKy$_~rlE=7^cppaoBnkltK`-DnO@upUd3CCH=ul39$i_+E^I*iMP@{KPRPt0|B` z*=D)*Noxf4oxK-a_xMTOu4^W!DBIWAuftC&2a-d4ejO*2;}6#ak_xJf#{z!)?|;7F z%-{_qcdZK-W5QpC_TNGFDnP;7KWU54O!)VIe*FY32Jp6n1<{|^R_@d_; zA@5^Rw}0OQKPMD=2W!7PsBh0=e|uIaTdunJ#~8Lzf!joxwcbWWKxzuf?}z+9$9rCds!*wuvB>@G zdTSJ2@#^4mA$rQ(e}CT#6BW$rjHKhxf-F}^)M&A1IB4~3@qRna$@TH#zrTO&h6N26 z2tOt&_?LmwZpv6@{gm$k4@7-@JR*J4m36pk{h5 zefRDsYFhcndrM1wY`+~G{~NTr9K`9dX3wjtdw%}7eLh#L-ps;SXT|c#KhUfccTs9hzf}064vgHaH@nLl4)VBRAop|%}rvz zUpK`+Z~0QuE1Btwjh2gMPV`&-)^O=e`-)SGjWJ8HNteZigJCpR<3MAa|GwW05qQ0+ z9b(O)58zV1R=cZ4X1kTUK#moBQ3GsHBS3fMcx|!we;-IXqXqtQ^MLnFHJi7;&q4zx zUqoHq{9y$!9aK}wB?MIRd3Q|+`hQ3L+V!LRVD%In-OGXXPPsJ(vO;Z_8Dm}aI-><# z4$U3|!@mfmJ9DC6EHH_=Bl#|0Fn~h98usS~uVU3B;Mr@PzS+?F-?_PVneFu>#+L$Hv;9zoq1@JgEU^FhU7C>ag?I15OaYC)_tKr+I$p3ADP+ zU96oWWyVE%-Ir#OadzO+n^tIP4cM0L9v5GANW{~cEJy$UjIbK`pkWu6{mJuFnef&K z+&DHuRIr{E9tX<1I&7dut_^aI77R9W!!6<;-+A!(>(<{_6bwvM{=xoACC4pyf6sU( zaEu4YyOt;?A7YeX^VLT86)8%OEA!s_=ScW1KBNkOWrhEW=ODV;MdqRB)wKZ2ysxh3 z$7zY~a>niB=q_!3=&l_Z*$P>az)C_goH8KQhAv;=x6k-zVZTqlCICT7ahoj(;ln4J z_N*1@%aWz2bhsL(U}83}bv;U4=v0ukn5@ucTpxo4l$cJFGMCP1{AKxg(|{Nue7%!^ z32``P%a^Bp;&GMJdII_yZit9v$Bx5^LdRegF{TPCw&xoon@p$Te|;gX>pnFr2li)` zmZRr69SNm^I1Ce{h^6MsZUmf`$8t>~*LWR*Sox;EidJ7AhnbRURX|ES$?k*1aN& z4GZzmr!}v04&x}L<6iig%)5qsn?9Q2U=aCZd`LM#ut*gee7os9TR$yd_KHGb{yr6I z%Q>=8r^7UFgkD>uuYqe*P>pA0)3Yel1TS2JuDl{co{?I|9g zPmUhWHu&3YPEdgolW90m6CrGtxRjw4e*&ACAuyK~7cQx_HtZG?;Tqk8&oG}TUt-5{ z^mm(i9*)xEv7D+G=glVhdC4(wIS@w1vGSrjIDdL!y)dxa`0emy4jQxVD5{L^SsQm; z9fZ#+dU>*(nLSszr4&9(F;=c?pZ&kP#eY5DiOE3hy;nf%LKn*-%76$31D3C*P_;PY z{G}5r#7_4w+sq0y*%6iG;h;8#e{!65Z%OMJ-af18 z7{ue!Ies8tQ>5n6@FNC<+@e}JCWm$=;HV2g()`@@ zI^#5Vm*T1P)=IQ24u*95rit(`$1SPTI|$6B6i*M$$@0{OZTwB-ZvVMGxwXK~oQKRt zuqRvV@&R$NKOQ`%!4ZZ;j2dpU$QzlJBtzwTn&e~_uw|HvTpg1&s+?5w zH7-QuDP^C4`!VRKKH!F$3_=2}sx>Clwzg;Ii*y=@Id;#)dx=ek<_g29WpP@gxB>z2 zlLsgNgV~DmF}`}t;EV@E{=Qe+^M>*zMwcpI?t}>cvG3|C5g={dT_l?ok+=!new(hc zgX@FdJ2+d#$qrfSSS7ccetSDaycr`+@9HuwrHe`BDKsdlM;NrBS-o3YS)X$EapN(~ zURlfSk|=z0qTjbboH?x1V%wE;B?-Dt#2F#wjF@?@^pKjy4xt!U^;_AmYK&U?8`Y3h zY?eAGx7ghJ?quOPTh~sc%6KBnvf=84agZ~w03^5i7IDz8TMvbF z#usdOtz&uJH1P+IJD@rZ2CdbVM?XSjp^Pw%8aGYgy{mheAr>}pw|{_GQ|%K&QwrMK zl{e_{@MrTZ@)M|JXet7O5NN(ypov)&z++2RlNI{<9V0Sug^eWO#~4|tyEIlSYNs1E z=vpWiR;81eKdTefMucD-mdgD6fI(O^p;CeHMlY_@3$Z1SN6c=F|q`iwoR#dsCF6=#TM-ZOC+= z`;*(*xJP%~CcEMos!J@d;FMxmd<$fIlWgb8wRRgrFUR0{1Yeq`uybzDHj{*eD$+T| zm{!<(cAsiZn>7#cRj3s)NZGq(=CkGIU^F}ItaFJ!men%)QfRON4Ijtfl==^<@TLZ5 zg{zHFQcVM^=~NZ7{#cxr1^#ZH3Wp5nz$VBP-_m-}8LB+~ZQF-;oTH03gph+O17c~8 zaVEP(ft@#-J&Ua_hC8U}NaUJgTsK@i?8$>6#H;LoRHK@mK*;6LgybEcOWGGJ-eRh` zQ!N^DhgtVD{8gz9)R(C(%G`7-tlV&meYb-pTW~On=+6Uy6w4U^o|brP-?w!gc#?DDu=(ch*qit6oCe=ch>FPSY9D2R=8_dEQ>pG!W-3qZ zbsIw8G{(iJ)VrU-LzVJOkv&!3Tgu|^SD(pPs+L-mf*`8maK$WX_sGUcAC&o+okD9l z^y{IT86qEt8@MJjnxAXug5(s4EgC(h5&XxG(VKz?{3S_PHwlh5C)opQjt>&d5~BfE zHTuF_A|@Rwq7iHk1E1 zt=6Cb0Tf>}sao>DBthyCl-C`96z005OGK!wVUM$qPGG{2{_L>U_xbKpyMfa8L9#^0 zt%(R0!^_A7F3eV#=koM=Uq)fc*0w`gw?}xgtZP%X%FLwI7Rl5%nFRbc>V#Aecc-Jn zce)ic9~gt*(2YeDTzL%*g>I3-6_&0Tme@m8E}7&eUiss#yQuK5t2Bw1?L*R&wHgWF4? z#+TJ3>axub?7FJC%h%&Hnbhd6l(N;@cE0v+9PiAvDr76X2bY-EUQs!^B$kpKuV&@- zExpw_9E8q)575Pnjs*AAiqCz&Q(b*hg84_J^?roN-=3LlxxMnoNNRW7Q;KccIJ1YR zi|^H15sVei)35|7$fDA%6i>>&ZRk|blmO|*rzzP6cJx_tX1h}Bw3;H90~sJ~4edx^ zZ&~F@AfmD8yzR8R;7t3Prj%Zlvu)Ja0tQjO#_O~lQ?+Zu8?dEEH5>Eg>yUoKDG#&m z(*4mY<0NOZ20u$Rfz9S;ipYs?e?OhQyoS-R_MI>2f~RhIu<9nS8hnnS`l}#=e|;pp?VlhA}XBO*akD}Xw1BGQn?eKEtiU%=XA=Fx2GdEE6{1B ztuBl~dU~CSPRWeLdlYWo|I+_SrD^YWvCvrbM2Y&lPoJjQ5-a?SxU zl&zML_G9v_GX1NP@sy=+Lm`o16DKP6pYW+p80-^9pZ&pcM68ymz4QhVL>iQ#=pwTA z9}*E06sv!^_L?xtT}%U6j^!N|MqsU_})=Y{A>%{!HB5@^fbO_d?=s#@_LT)jCQ}) z_)cijm{vlF)o>R-3ttk($;WJFx8q@Emw`{OLeNki(K4wvr07-#5uSW>i~flO=nzO?j#4i{JdVMsw&Fqu%qrnT=f~raI-0bBo$55BVBceK8nLD zFwJ(gu$`w-mx}bIw@MsGp5!>HM?Cge3jcr|7yzkN0#*&?SMkzTS) zwOe=3`9Tw`0o?p*e~m-#{NiSZ@&?{Wnjwqx!QhRiD#xm%x5}8HRa=LI>0aKO|fi4kp%X5Yj0ZC zkL7n0J=(AQQy5F@OE$(aM=;mFQ~{I4r`3l)xQN*7?qTJn<$Vt!k=>lEv^+Dp8gM>u zl0AN%=)oD~o@4jhWemH5Utz-#CQA1UwGUIan-kc5dFxIHbH(x!mBRC)nKPZt;p7c1GQQ@JBqrNhO)|iG z<0LS3DHW+zUx(qo`9GzthVuc3!(zdP27g&3v_muM^{11Z_U#fM@iT-QnqwH(dTXa& z-$5DCc6n`5mUXyQrSL2>=l;^(ezkj_bqR+^5ANf8fG7Wb0lyCi6iDPq84dS!qWntF zD-xUOH3sF+R+~?k8_>2~#-E{|+m&rbwGUHG?~PKr9tHvFHsSaz_36NrGoaWgbyATG zf?sHUB`*@*vR-JRrF+gzK^smTCZ%-zd9QQSg<9m$BcJyQ08^X8AHt>aH)WRv22Su{ zpm}$o!+B*5Zp-&49CMQca13{v(_DlU2boY=Dv>h}T6JO&ppuIo@@E2E=Ze^V%bI=n zk+=oL(UFe$kdlVz!m!j%f?y%u^VW%18Jonw= zaLepZVBp2S0A7)Nxp5SL1afagM9o&fZSAGVT5OA2-xY`-lh2m7#+^(U|MM?rToI7s zsLS}-pKk%es246^eVu0|GsORmslP^r8fvf?UAI2rQ2ZHr!EgP{x?ab<`}I$Le$4-) z59P^h6c8{3mS@%BG;)I3TJx-X*-?-pr!-(yp$M#-{i|M67BrVM_di*qy965^nxmZG z9*Ar!F0jtWKrNdHwKsK?^m(_Fp#~eKH17MJczF6Iy#^Q!hegpjw&bZhroU-?1A37A z9ywb`aer6#xO%43%JOUdk8}x4)|;+4YGL_g^=Ol+<8=h4k^!*HqCq8_vEm|o>JWg2`rwj@r= zK4m_!S`P)OcrHf^N+LezX4A1Pv|7&sXVvFOzaBh4z{ESCvQ0>9*Lh_#@3e18!=f1p z%w5zc0Z9P5S;zp}_WWDYEw9Lxd)vrY1nd^#`O9mM>TDJvVX-V19fyWVo#D^YYFWqe zFO5;e?l8))L)8zt9f zfBz@&sTE(i)!eda#5YmRJ2hptep8B~Xk%R`g2&~MZ?`e_@_A1Rw^m)$Wr(NRkAyJ5 z&#>&5c)ZQ?zAZpRNkeJv!%U_L$+l~^6uSf*gd z(*tIscd^<1*8_^w0WllR30Wfi+5qJC0k~zm6qYuP;B-3<*9&0LX`-^?{RWEqJ;`kM z$|A&yGcOjGlS;)m#`G5gtrIBhJ{BY`NO(HJ>HnZ=6bGHpex+*g=B2maP5&sjg#sOk z5?(x~eOpU$H}8Xancf3_$jOB$l;r4F62N=p9>9e}j*0l!y%mQjucYISW4&bG@~USm z76*b37JhOTMDxgR%nMw72QS!*?xMk2DwpKTxzg>?$|J`IyT&6~`twaZeaRlO0k};0 zNJJ1y;A#=D(b2NPq+Bgn!`<=0*-Et=n8@PgHY9ER zvRUEPXEgy)ap0lY4rfB{i$|80PYHfKTV}Aqs?^%SuP(j^Wz-DwVPcD%qte1^7G^h# zSnym!fip{Ds}B97de7rsX8eV=UuPW zYYiX4;5*#goOA`EFM}Km0h@)R2pa&WA4D#7MJQ@L`9v+B(_GPaRfrwZ_`v1h6V2u2 zb%RFD@l=B0{K?SsZuU^%h9b#d*Mc%^F%G|pphG!qmr_^04qaU^l>??s0HC8MCyCvR z?NIYDF2_xPQS*phyQxn)*E&hKos2Gq;4Q2DxIel9)GuUpyFdp$?S-RRwNNTaw%Fvo zg;un1kX$(rs!djiboPPDDl^Cz(DN#%_Rdd4Ya!#83#}1xXKR+{)>JerL1q(Ql`W3#GtI%`O!y>_jp|@xnrbfPCxNYPEi!kFh*he)0)f zAlUwLue-f(zuF^pBT#I#2v~u)-sje~S+rDIPfpR@P}3AtG&~LB1x;PgK&y5^i77kt zfTau*jp~==j(GML129P(%SeEO-;EV;8Msf%wyAv^o&R9IQoT_H8slPXTk|!WW4*@V z(}#dvP(7JYqZIa+^H+X8vp#8>3YsJy4;U9jyUE?!w`4%ze!lasLmnDeB*>>%PpyqI3>})E`CH^;&KDq znWLa;TTlie!7+MdNJk;+LBRzliF8*g;6^9DPc1{E_$4xum?u7VN*;gdE*`Vy;RX-6 zKPCw~)VSx_)ig4?o#^@T4uUG&1x5LBb1L((EWPt%##C=%6<|Nbfk=gxLT`~P=0u0r zD`D2$#Y<#ElQtXK4qT1;O#NLJ3sQ68kUZj2;A>yIGLlt|-5zbMt5jxRb@lve3V~&s zHHl$))$BP+t2DK0v$nen;`C?3>H7q}RHDH__w9b<0^5UEnX(Y_G1o375Z4%h$54?w zYf}Ds=NdXfSeC$xr+W}wsdpe!O^vT++{^ItW9C;RB#iX~# z^}u|wYgh|isxHl4ri=+nR#Letj)RMfJg?-8-=KeU_+cDFE-asOw7}CJs8rBj zi?*S2G7M4fG_+p7lIxk-KqbByw_W zl#dwHLo-ru<3jZpKWy|BEo!saz4kZCSK(kBs20?kZ`*=&t34hwrPFgBHrd<0w;{NB z7_$X0pD3v>HaHOj`0h^ai$Q}l| zIETZRI&)&NydO=EKHcb3Lhl7o7ZG(bZFAvy}RX+zQv3IuiNpH(dSw z`7Q^;i|qlL4Q|ngYiDi?X1&D1>ZQ_Xwk>(OJy~Sa`>XDs4*lYu>eSrDU$IP7Olw+K zBHf*~wePA0bm@mKiqASNMT@#WgaR7Ae9|2m>cP)EAKeaV;ABucG%g#cuwT(h`Uz!( z+gWtyGC^(^D$5zn#?$A)S5%jKpJ>PyMjZ=>xDH)Zcn0_HnGILWv71&x!PC$7OPTde zy0yQ>ZA`SdRgkarTUpH3-;+Pi;7%dtnM7TOEvH0J)^>#34L!XK)d%VheW3E_*c6Yb zki^bmH&qe7^4qr*M-zak2>$r3d}@ivT>VPL2#D!szVxI=4N}P90x{skP;P<|&VrR& znXY9GkbFclYT|Pd!!5aPxql?6r4sUY*W<$hokrV3Im4QE7`zO%D&GEG>Yw$YFe?GT z9dMZ|V8mtD&s`^M)V7q8J^lZg; zagI74<#bJjjw$4V+)3M_xTjG772C|H#t(Zxf!kRNbO%`ki>7OGrfW4g`S8X+{Y~^T zV-DtQ>QKa3Hs%Jr=R5Y*&8wC$1%m?>blEj_8m2T6`{&&yo!FTT%%!Tfd#g8YcYV<9 zDb-!xZ^qD^1i>6|PYo0Kj$22IZ`oj-;Qo1qMWC9A-@xR{rK6>IO8MG#*SH1B=ZQh9 z^rN;B^V49|#k~hTI_2@X!Vny$DN4{&_&l&yquNCXbR$#YzhCXqSMODfIdJz?);Nhj z7)q8^=JsGTH1ALAes;}q>9p6sVbPyt=>9&(%{P3%rc+K;ptjjuD~OME&%5d4Y1`T$ zSH|mXL1xFPK|8x@sf(&rwM0K1082C^mu#gu z9n{@+(_o+dyOQvf%54@aV$)=&qv&p2eNFtv`)icrCxrtb`Q{9L`~1;8r`i*K)f%@z zRWI$vHf!1Q4p56#GTQbw3Q2XG&ZAuI%VMMRG?^*2kH6Ag*0H^N3hr)X2)rS}nUJ#? z2Xks5uq+8f=&YhN?GNMcmAKErg_qI&?j|x88!$XT*S!B&N*no; zu<&wFKe1n;no|A<<5u;sET^5DDDOpyTv_J|0AEt^INDtt=i}#Ap40$NxY+h&(QTSo zsxfp4IwZ7jrGve9ABoaJ9Jts-_*Wd&MhrXaNtXLV=`G;)qx}Pf>ZDqw;&r z^s|-zgpc^uw19%dfT^u#NGhibopnoFzT_!TEjD2W@VCPF0|xFOS#>=71`Ap8;i2or zK|Q=7h4^$pc36ICQ8yrS|fQ3B&Jl*ehus+;}UqkHH z)eQ6lG1GY)ZWnIbGbso~2=D1O%P5TQRa>Dc&NX7Q~ab|Mudn9m$gn^PHoMf1P8_)Fpma}O~!L5K`VWF;WztV_dExLs=F11oe z_3M%_lLSE?UBI#Qm8cHBI^)sz*X>zWSuR5F#Mpky^>O`7G`@jCg;7*`(%#s$*x|o7oFUuQxfPL=2UX2 z@8r{#*1_Es>Y(moRQv|6RdAH@JB>Q^7%-vcmXU|==#o={4#T+|ew3`L>T#*MwpS~j zD1xe0rL7HJxzZMHF z$N`NkOz}pR`4#rl!DTc_oHP z`5K?PQ0q+wJ%n8Ljh5^@1eJNYDmGzn8rh6bwLJGW193gSsXZcZ>BxGt>wG%iLpEm4 zmwPm#GaEcCa=<>G9)MtO`iY-%PO&V&hw=;y3=E8%T69k}Z|>j^aEao05UGie`#$eRpc!Fh z+B#5`EDiN*+2D)4g#SBzC59P{ zBQ~pjisDATDzVI2Fu|<-dl)_qUqa|SighN3p@)jO+l8ze7ns?q#U+ELrGZSW3GiQQ z0A3*oL4QkNW^6w0SM>2gvN+I#j1CJGague@=)s+W5dwO@1;J3i;OvPdYONMqu;8<8wkh>dKoN84~d44VY(`Mhsi(Ir}1+KqV#;XnW7e=DH@H zs=t6K&=rs6{Lz)*6c12BX|>$g1Bx3-4#afDhF6rU{aIn4lKfugm?U-%fU}~d6-m4| zD;9d2jpZn$+hQ}ji>5_=YB7%kVBrV--Q4<1)ZEtRpXk*}w1#p=^=0~;&)Cd9nI)BC za{U&#>*5ixaMipo+UQ=-pjABE1`{rm7RKHs{w^p*s4jJrkdrNsp*ep`5o!h(kEIw~ zvS~gi)$4UWu}kq1k8pj*{oN4>%PEMz!O^uH(0d7qibbyl@VMX+cUBS-zyC^LWAWF$ zMbJ&hi*g4s_fS+y1bC0Njmj|ly(}7<#KU>cif0o`-A-_vYftK|x_gO5D}0y$!AVa2 z)MbDWPyZq-2WeblZGaYdKGGv71>@eL%yD`#-5iqNz@nEI9e9dHc58K&(#%L9i;U~O zahkpGpxsa^;XPUe3+c;ug|Ro_WId0#bd<_@mr{q=kopG7JEr8E2kT$DN-ZYYJfZme za=*goYu6!w+}(>}m;Q}F`?qdZr3PYS4ut9BZ`sz*k>17z900_*zvRL1!|}gAuFC;$ zTXlNS_u{vC`T4>BuYKs&JOO9}l?DzVL4Y3BlFyVnJVtx*8(#Q1e02=q3r_69zDs2g zb34&6;Tn@KcVFof#{kao#O%0P9yG>1Q@Eb^duPr+2lfmz7&)k%%hX3=UN;)nFOJcg zl{Yq`LVySrupDyF_tSnq*#ALqPQhURELY_i}sgOyJ5J!u>>Iu2eCvZOU1-1LvV#2=< ze4h?#v6SDcPV8!HBJ_3_d@}>Qz4s`E+w`U;G{*kYVBr)6zP)mF7qw|n(zISI5YE^} z2r2bI!;`mK`OESD{oMas@_i4!NX?_~4o9LNPu+rp9__%gmr}jLz%?LRjs?sIe_PSV z%3jGKNj{p|P5V@RARXMRmV`F-)ijJB>i)OZ2_i&UDR?K>+N4K$lK^vOn8m`EVpWUM zBX;I1TO{|_0(%|n8h+nxh|S>r8I&`H6}u!0Ob2bgf~((JOJtO%^EA)Uv(*beRb9I1 zFquE=6#RD&{@)L%5(2xCYbvc>%^GxU$8OfD_+ccFfqh*#?fC!W?k%IT>ehc@K@dd= zB_yOvY3U9LK{}*ExFyFFq`OP$?!1XJ@BR4v_m*eB=RF_KIA0tL$IZPK zYt4DhD}J$(_Yr7o+d=GE{{8uX|1>KGezS4@ZNUWjzI3Pyuo!uUOf6W*P`L9IAb^zQONMhxzobJ4Bgtf)8 zWZ7~9sy)G@u58%)Z3n{&Bn%Mm52tNgCN-mfWe@YlQVDijbvis&3S8zI$dg*$cq z?<-0Hyr{}#d{_Q0KN6YCb%^d6brKU=>LTZ_8HzUhjJ8gj7w~V}bJM%xk2oQMy3nzdu zk}mP|;4R5AWN!k1&W&^@c5j`Qg|c_-ftqN8)gCEyrTgG6LzmkA10-V-iG=q-vU8omrK@YWr@5>j>g|v+0dZKS z4(0h>KtJ@m1tkHg#!5rO_VgO~WYW(--|tKm*ge2du7*?$v(kqRRKUd75UH??w~{~d z#?S=U*8gir7HkGl>=?KH1kJ{F7QkNLjZ<#`T{5-d0;BikSe+3Hmw;yg<`jt(jYt!J zjzRwVGXF{8<@0aP4#|LgNnS$20{VvQ2m>+Pw@cJ;qO4Y9^CRJUJx6E_U1cp;|If!NoD zQ{($m0(@T}kLBI+y`Yf84bKZm7<_i?Z~jC4&R>YsdD~lG!7|@`#hp-SO9ucEdI8Oo zmkI>4;AM3-yt^TI05HFgw$IkWr`LLA!~pAy?0kY64g z?xo;x$8AoG&5Jjy$?|)wY1HR#vFLO+Z)(o=E4=719TaKR>xhBoeZ&UirGv`JSGv1V zofZIct+BJ#=5qldWr)4s25|is#y}rSq&o^C4Fv^m&z%LWvFt9yL*5OZt$4#TSS~Vs z{Y#AE^L68j`;A$x%SF6H8@;J>MnMqJf>0vTw{--an+h{kMW<8aRfkx!yBovh9axt+ z8upVxJ7d=A=MaQg412QxbG3RqfkWN}K13A(zWcDkzOFx;ouQ}&lfro```vkFXCT8u z;`4Yd49u*jiy=!PBMfIV7|$HeYt*WD3p;Jd7Se@|W(FSBK1H_?9xuEWvfD$B40ul0 z6P14}@?}|+%sJQ~OYi_z7T|7(=ssS~jqxvN<>TS9Y=@CFr$jEeacZ4JqXF(@z;c;_ zbD?ZjW~Nk1hmraV6tL5!FzKd9p@0i;yu>FPZH#0^LsOJ*pK6!C=E!!3@D@ZUep!vE zUMO03Fp8ZKD{uzFqe^dR>(UxoP+oA61FKRhfL(laq#`xD!A4#CJMT-Le6o3mAmZU6 z21-k{*7YgYp=1p|LTj=E$;GosV{|@@k?A)DpggPAtx{%Rjak~dt_)b@k+;+kCT&^{EPsFgQ~b`x|J(Dm5zMH5%bSA z>%j?f+u9}7gA$I7Ry>@%Ie=J|Ou3O`s&Trx*aicE4?xx?0qy}lE6s2VJxDu$G`Tj< z+;0FQ(kL8e4V3X;ayhjAw5ZxtI93}CR`3O(o5f;^g+k0#(|b?=0ybk+#Ev{7HoVY=2&NNb>aq2?i7Qo=x*_9u1iPa9_frAjD||xZk?=sht8AjWSj9 zDGFxt^llE!n5qI@J(U7#+$%Yiaz5dWVIPT*c7U=cNR~J+%-&5|^P$^VZP8j@9RE;;VhtgRpO;D*$7SsL_=eO*+(iSi5PEmZ!d+i>3KB#6-oeaS3yyH*Sz z$0-8XbnasfrvcE!QvSKx5Sk+hIV(1xi2!gAAE*A`^hKX(f)P%)OQU=y3zilxyZyzg zLyZy2*Xr=ees^*~j~S4h*7oJ^2Y;FT#G`6r^D#uLjVIju5!$3(?eY;Ad&yp&jIV0k zj6g)%zqGeD7Sm(~Z06OM7vcwiUXe-iL5&cBjl*6-)btOa;~ z?sg7Dem1}`VCX)OE-^!TXWQQ>9yihrz>Hpa0iWpt?y~@^Vu3f@n;##f(fViORb7ys zoN7vLQ;y{$?BU@^gsfEk?Zx2D>JIZzl0M%Rr^Jh(TdaRGFBG{Zzi6jDhb(9r%^ zaMz5|9dEFnrjqh|@SJK~%|^1W$yHS(f4s8Q^*dm?>@|(3ju+0D`3~;h=tUb!HSBkv z9~|lJ6S`Z!Q)-Lo41!34sgJo6$|jfBN_XQg8*@IqXNBAd>UhzLDfmfT>%cE`A{Z=C0h(y-B5p`XfaFE}A+^;ouk8eW-Ktw_@h4 zOs)#MvvFC+xI&4(9>HgU{boDLHBM2LSe-o=1?_Yifn%3fS4S)ts|hP*R_%7q5etqv z>48{N^EXNVP%HS2k9K0Jn!-F@8AuUu(>M@{OlC68tqkp$yu}>u0=;SFr)O~nvOnfH z&p=S*)m!TqumY?~>s$YVs!LM-lv6C{(w2G|;{c7(e+`1=*0&~#Z-u5^=z9x%ap(J( z_qXP9*xO`jGVwT(-}T|7OxH3I?hIwbF&SSe6!?PT>mQXdA2kSb?Zi#2JeQ(gO?o|5 zA^~RzI5_Ipr{zC)-T+P@f-QeAz~9kpY3hOr_bUa(z##D<_Orv~A`{vnA0gnGijf8c z{{n!Eo+J?m-QsP5hLcv*Of_($V@8?p2y!lHe{&Ok^!z3q2pA>^3DRmd=}&*1Xs^bk zjx#9KRx41tDKTGSgfK0;ZuKEs9sJUBPI!#o^$M+dQyprPrC?DbomnoMpC1i7P z``B>KeIowx$F*RA!`8>_z5BlmT_<(Si);bcrWs7S8rO+msn|>&T_S0654nVfI8yul zCny%$1F>`l31YRoQ1bh46iAnVXGi7f*_j21J?R1RY*ck@f?#6P`_un;-5CsM84Z$Y zf0b&luo+a_)-`W9U+cAhG0QfX1I(V@7fzB=!7ZLQ*E!v!CdjQ8YsgGLbsS z#rN5cM2+c1?7n1Bv`(F2SAlZRGQh0s^M@j0eCduYO=?Bb%E%(tnw1xjwjE8+f4)W8 z@h2(=+^Y)^0U1zSaAB&1fMwxyQr82h!K5ZtPk^owoM_}rt=#xski#pm!&uu56&G^RwQNG=4m$jZ73`L#p_wL zT=O1D%d%d*qOP}l5PxyOlxa;}#eTn%V!GNIL9`>VU$Mk>WhGl*qc!&lr=5$wd=>CR zGnvLaoCZ9pZorp%T+7+f4Aor#>Xm(5_Q&f|z)i;LwFUyd|J}%44~^VC3Hysq&}pB| zH$)mn1L`P?=If~^Sua>`nuX9z`+)IUBcMsOo-&WF?f=y5S(mZyy#eW-m{)a=*i>1u zzprJT>`t|ULltO*LuPHAv?I>)x*!VlF@1H_{d&(8lq;?Ln2dfIAipnAg3?jLsg;L+ z0JNrm(M#MCLoaHLhM{AXk%+&^KK<3#Bfpi;G%F20ge3PBU>H80Y!gXR1w6{R!!{I? zm7En-A-`DTM^xzL@UBi=ptH!3>TY7P+Z-MaI5~5A-3Lo+%RP^dBrG`QUW4iMaDnnZ z2R8@fEfN%SSoXr0Ts9DO_dG1%;`mYmaNLq&@S_ ze(datWY?TF-`@>RNHWy!uhIEz2aF0iLKe;+r9jckWjhQhP%(o3q>ipupRFATl-lR} zHx;OC}HXLs)P%3%kbmDpO%v=DRby$HiqljI8%)-wWLUz|nsTranORLR_ z`Si8#x*uN<@0`!_drgY~h&i5pd-v%B?^y_*ps5qF5Ch8}@x!ApbU?>)P{7J;B8Agl^zuR?Oeo;y@#wKqnXV{Q4M$Wn ze@y{eJN_p{NM12hegC?|@;Oi_c5CXrw(|j;TNThm^4n~-Mro*+jU(;qCVkD!YXO!s`UN{45o&ggNfFxul%UnB-(A;6Dy|rZenpcy7Br zi48oRKkJsYzHN+I0`2sPE$L;m8RRYi(6qp;9DHvJswpZ1NzKUSn>xy`$?s_67_%Y* z$FD04QaRC)#wuK2&*jrMRGF~Fvs$=Xzsr$C>T~h`nKbbFZUNT-l^97_pfwX{L4YeW z$TxDbtumBpdlGT#Nj@TY_tUN5V0awilLRO`uVBeE&0YaoilCp*)}UEZe%RgVg$Ert z_%42_=JY*u2y0m*G3e9pu?0| zB|b&YqW4E~jEcYqsZRTF-Zi9^cZTQgb4LBUIRLn-1gJGY2?Ov;C81tgQ22r;^! zN7?P*p7Zq>5#L>#w?Mbz+Th!r>g0E5!-w{2ON)cQ{I`xA;eHCZPj^hyKUxESfB#}B zXgcFVHgnnj{+~aZmH!uCwjV-;4+?J<^T~f{P;N47Fs4jzf>NSe(_KC4>cYAUbY-1* z;b;P1dlssm^;r0Yh}9knk%3ZCd%Je%I@Lt+Hmn_xxGCFI}T%^04&7t~bBsT)TJSU?W{aB;#6iM?@ zpzjsG1MrdIUJ8RbE5BRi`ZF^(wf1{WKz~IN+KvD%ur0H`4DLUYdk=N6JtV*R)<1fJ zMgN}M?V|DP_^@6^)`xFu>9=0os^d6NusGV4(LE9V77W;)7>ls81Qe!fr`=ldGV^Q2 zqMAb0S)H+NykUS+_zHkFdp!td#tAzr%=KNTI|#t-na%1-(Br};0I@#z*>psyeM<4N z-`+(0?MzzrwYHkUR{+TjNNzFvbBFvE<>EJc0Y@$#OXv0AGJ$)h3L=&*Zq#>rbb-?q zMKzJ7ax$R{xOd2kB^!@nq5RotSFShnWxnxMCKD}s65}mmUUW3T;v||(Ot^M?zSK2? zyZMUzeVz@|7#8;>8niVuWqxqOr(9(kz-5LsH&?%xFjrHwYgGt~V@XRxEmf9I=Uc5FKvoL4k*xf?MapER z@E$bhm%h8vkr{&bc3Ykv+*~>n2$~ zS6V)t?5O|e4@n}nKei+f8S2_>tr$vW`}Bxs$w1D0;|%LK%dGT$9;8dtc9z)^>owuw zg9v-m`itYIo**aaS>(TgGFjNs*#_RKTIfum9QmTYrWZflp3*^LEtnm8 zGBuV~Uo~9TPN-aGQ~m^dSRuYavArrmiU7*Fnht=%FKZo-s!ZotBr5z8qJi*9rhV~e z4fZE)zv0p1oFO*{UZj$VgQiC)e*~q)KG@S#Dcm?(bz=*2DzhVcParxf^6fe9yMt$R z{!8h&RYDw1aol|K4og||su)-fYE`CF2IPxS3q9Z$E?=hWh;DAUmwg}MCRAYDIAb7F zf@Xj>W$wjD$&50zhX`a(a-=j%Qb6^fZ6bTiDsG`P=Qx3LS*!bl94em!n)ctG(72AN zys820pzO1_>sD0U@qI_=9O^~sYVyd%8Wc1$u+mLkTW|{`f$8e#z01=lfXU4)wPgCq z*Z27qu7-dwA0wm~&JENst(JQYr@va43T2zl*1UBqUA2eI;XH5zU^USw%G%}bBq1Ob zK@L&?WLB;rjPMxMqh|G5r@5Q1CmSizd1LRUnr}f@9yE&IP1RCK_ovkB?y8pQ@P$f#T{e3RcSbEQ|zJ(LpzXc40D~$0!CYvc)0a2rs??3K^pD*Oa*_l3o#c?da$eOU^Hgj5KhLCAj`1UdL-{*FVV^o zAbpyyzMX~R|AwrhX)|9t@YWVJDT1cK>gt?*W9&#wxzQ)vN^!Bx`-xoeHKru>!Pl*0*1xXYc7{YBpZVVLnWr_MpFx$j&|e5d#)zV zd-Dr=oxxt@1;)dfR=Fm&eoX_HCp|rk18gWP%nxbgOJqty2kgqL%(hfuR2XL_9=e)? zddFsqMKbsW`^xdvGlhLl-7Y`!@3wZs&@)XgXQ=Fh+xmi$(!@H%bTIXelHaGDk!C-r zbm(KcD^~CKX4R_AW_aLuIK$ZfMc-t2o@Zu+yQw6nX8k`DuYejYPxN-n; z{;m1V;D<&C6paF=o>8s}`&m1q>D)gn-licBRbcE4<$4Ae8d}gIl>)G;)(pnBoZ>69 zdDE8LDbAzy+&s?U+q|k=3@$!?oT#krPw9l8e55gbO5mP8OD)KXE%6&G^Aij!5t#J$ zcm_{u>d7|=PfUoIYxzC3#sfx(@5_s!D$0{%H}{Q%rnp}5@Yde%aeLgIz0PNI_Is`= zXXkBu7uRl@7Zc4^@HM`|($^866AP3M&JO#cOeibNL>AUQusVs;Rqs|)NPJ(eFe>hT zk5-8gqbo?2u9qUtNc>BCs^+!WfLIhIQ52=mqYhQb?o@fDcoK_Jv6sLE?b1mNz59nI zdR-BN;%Y*(lbW9h(T4tq->uKK7G!=cL7W;V+=gh4-z1tD%(sz{e?pP*JYPkA!A7pE zT)SI*UNt;S{0>JrvUo+H<^8vSCXj` zTUwOj%8wQ4wK2TIoP^ot_5Q1eEh2&zRj^U8J#SE0o8(jYJ! zzce>|{yAtPHB1Ke4XSNbU*;jtT<+Ul7C3Ky zB@YiP)eIHp8uB-i;+>OUYdLCag7`PsZ$}<8K8;m)1>>K76h6V0P8OCI82SDo+YU)v z(s-#PAwG|eAVofA(pbs@-FK=?R{^#*d)d&_eog|Mp;KiHr!f8N!^6+<8e2|u$u#8p zU$XUMs1#M~nw$7aq@3IA<;sOCgy)g4CVvQ~u5zqQck(geF*>E0&Npb*qdn8?d{*id7f?H*-3k>)x=?&XUw#GD~GVBKfZ45 zTGfi^D#B^5?=3Sr(q>;W=fZl*WIb`A2v`OgKtg?YcaB8&GLT48VE>wXo?dbGsDt3s zht^DVDEUG3@c`8%hs35Anjm_*TegYwd6;pw^@&s*%&fQKzB2s&qc34F@a<$Jwql)`gh$^-?Dws`W6AWlq_<)V$)c zt4OVSHIHZzZNb*X_30k(d*FPRs*i?%oE;lENe?z_Qsu`CtRO=#Hv9EKhMWWN#D9?r zzMB};fgqLZ7lu!jTahGU(q1Om(CZT!qK4!tY~+5;r-zxUF{-;}sqW;i>+ETA-P^3x z=~Q%L@+o=jioz`~WP*uVMV?scnNE7#X!7Ls^xNRkLL|KL_a?7YAU0`<#P?tB~k=`P=nMvze|MwwU88+r}!_86t_Gar=v(@m%Csx$tq(RXwj!zR#8E zz1yrA&JugcDTu^krZQl1oT>v$fWNr#ZZ-P8vD% z#UhvdB|>ro-QKPVmyV^(hQCZ(|Ks0gdSIgDrbQPxL-PVgY~AZX@R#*P0^IRt6rr;Q zZ{DZ&uOSn)5??DHyXJO2X!HKWGMXkZ`XYUem>7TJcz|E z=cLIMZJB469YLz3#hK=|Q(E67pXxdN@*0!;I#Pos<9j*kW-vJ&bkVYL zxwNo4x2&4AoxnRB`kFv@%)gkgK|?w5Xc9}SfR!8*-pF!7y^KxWZ@0&3NVEYgUii=S zS3e$#f*Gj1Trj58XpEw!#Gs=V=1{$TI(~J4DK!dDth*q=gXfI2O_2X9F3_U0gFexdG3zyrP~z6NW<=ry7RRn zv{5`P+d-ZiU9X5#@EWy)RCh?x+LsGm_rDno=jkOPd!jPvn_6(+{0a~oUM%Ht+U^@{ zo0&~6niEg60Nw(Jt;;J`GiKG@YwXzO8MNFxB+WM<5^jy}h5;V>R)v3{pn4;&S?+85 zwWR8v;-LJJoChS4X&=kS-ec+nzmPyu!l4_kb~kuYuvcGPkh61HNU&fT{S_OuB{-PJ zzqLNbvcbkEGPW+#?Oi+X2dr*U6zH_zdGicnSqLB)kkbf(cPwVztJ=y(+tZ^17 zU5UQKS+`pc%G}j%Jy_C=99@ayu(vvV`1y3#%I=V`NlRDl3}t z;Thc(_@2Vbs!GL;eMYCjB}_cywfjz$x%X)h?!wzp zzaj@*kvhEbMqUIeCshu-Y0{4a`*-sVkpMADtF?;JvlQA+cz* zeY4wqi|+{8?}3>?cusz2QNg%_MYSe1t=6;mufw#MzO`m0T2s^ySt2Ok+!mv?KaqzH zHSILchBsd#i9-Z{eRPsG>EK$Vc-SdWFWgvem9@oPTr`c&&%GpdWN-_N#~_WuI%c!6 zWL^k;gAjUr^V*>#RYMLs4x-HMxuf9kopfPhF-=1sUzg&M5)lc9?6_|~bse`RE-My` zp;+-$iCQjNm?z4SOo}R0MTw8MV|UszBd4+H46c8^aA%?L6d1C&CHj7UrIr z6Eu2nDR@StVhlO0CUtGoC^RsXxEG^cbE1MYWaNMPM!<<8kZMpmX1{-7zNm9NWjJf^ z^kspHPJyO>iY@*ot%^xWw=08lzooT?kXzl2h3ngyY64lmUx|PvtvX$CkpcY6=Ihkm zi?=4r$$xFt$?=NQTWaP=_GK2owk)mIZgOQJPA&Ifthahk8TwswJh9=bl#&>j}-cu89M z%Hc}BY)58a6J#E-6Y}xN@lP1I`PIHd;RZ}H8Ke#d`q*#H@S`)jcN`Ld;XKsP9ev*F zA#VoR@yX7N28pu#gPH&?|kFdyMC2#-v^Ty)3ucu(d zzLM>8JDXMOdvd4`RpE_LEgv8yr?rxHw0U9@7npeQu~^KDP{2IXNzdpsMo->4zv{2I zH6dfvU(Mc}?ri<)IGU^L_cFjFw_LG9FifLi|BNflVx?z+WJCf^*P+JRCOd!7pb(}5 zRqueN!65zSL${~zp4Lv?EAtHbLTA^5$3Jmjb>tctS(wc*M@L4MLU&0gQry>8N@Mob z#JLy$KZR4vvrBF5eMO~yHg{Q#93{)$S?7y4?ogU7X;35rx)Q7 zZ&M%i?WEq?5x=px^5y|r$(hw!PCNO(&8NU3MKl zQmVdQE~{+6>!ND6$59aG=)WrP{Y7%Q+cg55FP{I^(f9}P@c8&wN8uyOTgAnz*k2l% zFXYree=(*lRAKIABuKv@mO#wI7>Y4~jX~Zi5k z?(>ssmS>+N60a82QUq#J1KG-vIzI(Xw`Tu!T$YCX@9nl9InlpP%JsPsmiE3@jcNJe|ve4#vzf*5F zam;F2q{{KOz2as?5bdW*k(v>t!~+k7`DutHP4?jP62%suI~KFBQ1i!osn(*mPc1Pn zx2Xgwj`Zz55NvJfJY*MvxgO0#xc!h`nHL*5${TCQc@eokSGoH3}N`j<2n1=(KUg1+Tn=T1jMjJhL}Ef8^17KnLm*sw0xcwP5(+Lnzm1R z)nLHv(K@S4WQ`@=UtWCw^Y1qa@F!R{FNC^tSiI3JY55_w{y2JV**cU@>mg9Okqpny z+@xWhNvfrXEGqqPs&rtIybxy1|Lo;6xZ#nrAE3UsrTaY4p2z<#Y!Zu=ANGGP_}33S zqciPIi{azUk-ghNzWQIA6GRc*7Bw-dS&dfB%i0_3im?uba&7yz9ExZOrlyG~D`G zSr1tB)O+wR`Ct&G|M>Bz2qEHq*PrV~A9Mfv2hbn#d3ZM6`=BIo_gDY=yyre?3!kQg zlgf*H^@m)}m#|yod!0a)Nv3G_OeBo>GyX)WPVzpNJ-lc*`J0t)WV_c2&e-3_@~cZN z_Kd!N!9W|!iy2hKp1HJz?5_{WE%#o~AfjLOYxwqj{PRwsmutC75 z%5*jESHHnRX93{!BC;1lHvzLIpDNXT@tEogwt-6jJ)8vrMmBWgFdZVJ3Db1ni*kYs;-4gJFT(-o*KZ{R?(0OqmSfZ7L#l+ zfCTRe*UXSvj7&g4fOj5o?}H!}17xK3mf(EEHKs|kw)uygQ>uR7@Y5XyN8Y&!BMREfSv%NVse|XS-e9m!5-J3hs)AroFO>upYRxJn_4;7e>#C{IrTKiDpxQll$mPR`J9V`GIkjQtg^Cm}a^1 zbK$_)5MVO9=%v!?bhazt;HWOp8~b`6FpgYzyTb4mk9(wGPD#Wx)F1SI$B0`0)xU#~ zy>}n;Rruploz5rwTo!u?HI7FFjV|)hVK^%(&LQ*~LGGQW8J9J1OQinTBu-4T?)zA* z?>&y9>w+(yd?#?HPVL|L0^Rg;O0zgUNm){lj7SJI=*qIINswKvE`OyNUT5T{-2ewPx^5G3Be(N(kwFg`GXs)e4N83*K6K2{=r3+MuUToi(?WY zBfK8@;?B(3Q0)<$Yg1SaaY=tG<)A^J0IXZa*pm*?i0F;H7FgTEx#k8(oHUUkHF~K! zEz%983J3akQIsES2#BgWWX&IWXf*$PO0@f#mH%$|Jf&&jOL65T2=14JFUngf1CIBH zQS<_3UHI%S3IpH8Lg_U^-y#zB ziFOL%FG0Zm%xrSHIC*fv(X;!glG4soxVk#u@^)D)A*vT*YtiKH@NG zaCC{B4?6aol34C+;<2$+jNYGaTtm_APZZu0YYik2s~UoMlC6XauX;A!N6;q%l8TpV z7i()N?q0pwkB#5>FT!2ob2|ZVTOP8Z^XoIs!CEob5nBQ4w+tumIy9Qwhwb67s~+Vq zV07DmpDK?b!j8PoQ-r11}t+;s0nUX1%vD{M$ssXwlqb z1eC-_va-lWd?}6utB`Pd5~<|g)%TcZUTEtP$W4$U+T^cfH85mnB@SV91um&&_j*`w zucBQp%C)bZ7J}VoyxT3761>B)l|NNK`>vPvkF(yp3LIf+G`%;kP(3`Td1+*8umKY+ zgh*f}UAa83NhKa(4_2&OYo0}~JJTPZJN|32^BMle-i?n!>OgF*Lh7RZ{yvsT9l!`Y zS?9f9Zcyw4HwyRH^k4UjfUv$+tTEkBVBB+d5u&ZvB~KI6n2hnnNQGHGwLx>%9S-rvZ;j0pv>==3L6hLZKklD+~s){HP3RVP)XfQhU-&&yK;n$?gx zO*XuTJfjb1hSQS=%cKNzeQU^-IGSeW%M!(`jooxh(ep&U6y5pj(;1xe{ht|Z* z5iNBgC7oLnTLF#EQgOS*HXEPTc~i;C^d$`PmXQCEgAp=;$n;o3{Zzv99$YfF^Jf=F z+@B{~)i4$Nnr1Yw{3`iUdY?47-)d&QI|bEhL~n)25-o+Y#Z$^2K(?6BsU(vcJTezZ4=dH!(di5- zO&+E1PCKf>Un#7w^bWI?A@CJ`Iv~9JSiEz=>LBX=(f<;a$#ZkeX>szk6aX2)3;0!) zI}L}EsS@^BWWhy7lCXL5#K17pTd(4b7AWHYuZ4a4ozw@Hv}!d)O+6D&%Ur76t`V^~ zi^`ju-ju)Db^N}6QDe7Lgv^BbG89Rt!>%eIt1R4Bv8nhR9LkZe7_XhgDct*b zDFzku6^z8=uN*y_%v3{w=yhC;(@9lwRE@#j6PIgSSobBw!Y=?-Pb9VLdlStQL;3z* z0454@Vb6p7h3QJCpNroZMG{!pk@1qz3aqDM|B=J*vx6hrH5g|gt;GOQM1TC_QcR24 zw+DdB^ziYlnoaiP6Kq*xpviON6m@Dp=DyTP(-BSMXFD@S8IVuv5PBLOc9zW10Rz8(>0=n9ea>zr;BiDP&LR80{t#uIhJ8r`mG z&2zWwX6#?IdtSS5?4}C`efk_xw>9M{e5+N;?S6yP9cjL|Cwq!6Z!)4^)BUgk<@84jm!hrq%-{GH5IJ1{jO9`7vh%F*#N4;|x-Xt(GIp=_`3*KG4;r+s{D{CNd28!!+E&-#c%(qa z__0-vxo4<>P2p8AHltI5;*@E#T<2@0O5+^lE{*!8as8!5pI3LvBf`Un;HDgtnfFFJ zU;#Yk%>*r)CFImqlO!z85gFOBM0W#K^Mp##^lb{y2vLuGpICv?>mlIrb9Dou%S~+x zvtQ{pJ8I*f4#DHh)_|p6*kA-ebPdDdN%-3vNN?_8We`3|okljGcVPl%0yj>s-uLlv z|8ov@bhqs}XGFBo?JknH{ls?LO1aW$^ofvazAxyaZ+;qo+bgqP`xt8Qav;XDX%TYp zioC%kHp8HHTsg&Sf z4|bo%@_3ycWE-tfJ=HeRzdXIB39VO|ns5)E|MS{#a3Gw+2-^K4;rm?yse*-Wutm|b zb*H%ayF4fSf9eaIpR(DkTc|Zy;{A{#<@Z7KIVk}dHatp5qr>g){dZBc{!B*UQ$3a> zvuwm(x8*r>CFa*|F6aACSGrw8&^Og1thQq*xCYeu!!tii*Om!*J6AQNwZId%K?rJK zRsS=`YN>*jE8{7OIeh+zk<>#EVrb_CM{{K?Po`A_128cXSnvb`Rt1i2fve%?n`>3? zb>^ulci6CR?tSsxh70DIO&jKOxarPk!cNUDwa9Eau&%QGno6HR^}K%Fbv|$n2`M#N zf@yF#z>!J6cX4PS@UxYjgiA=*;g;k|U>WH@S}fkq;HYT5CRs+3UgY)c=C%C>bk(1- znwzQ}YhL)nX#@t6gJcwF zhIAjP5t3ftZ;m%pN#t;Z2@Y02X{Qih_XUP5o7d4az8{u4yhQS%cav{S!pt5RP$))u ztPvEs1Dh#2KnrW`3L_x_4!PPC8IK#a1bxqVkB=uA|8tYP5e7MV=to^T^peM(wCWvN z?T0&EF?3Yp7Ffldq@KQ47m3F=f!K{dm9iW{JEjXZ2u-J~uz*uu$MP%gPd1Xe7U$Xa$r%*sV6b$wJ;G(huaaMdk zqeZu-DdB@dL2W|l)IIQws0{8h5Q6mi_WJYo9`atwe;(*5R4sf9YuyK2h?8k8$42?| zx?L|C6J?{{wkg5c4jR!W=yuYIo%^EY&@fdt$oZcXgH z-BM_?A(ubO#61kVDyJmbthE+7nUG%~Hx)O_$YshZyDAs_>{1t}OFvh4Qquk5@|_-iP`W`V24$o=LB!OT=d@~_ zag6hnZI(=xf(#k)X3>~KI)bdUPuEYsd38=UT%giwG50I^4!)T^gYg!Zcz&;%DZ zec8)z4BR@5Qq8U_ZkEiQY5#&TB5%LiOO_GeHVc-E!`3(!n8@p~Q0}?~3wHI6t z55l!B@^DO!*N3Dt4b6dCCy>R@EE~-#0);0sA>%5)F(x!ew4@DR9`7>)4bd5EPDk#)x$5tz!nM#MlB z^YRU%{OTbgKSI;s3PGMK8}~H5jy~RyTWt9@m2E8gf|y{xT3#~QMxbo@^MPuJs8T_P zUgT^oqgGqTXUZv0&W=E3e{eY*zhebhHubu3#cwejO&u%wVV6WOF+z`7wI)j(9nyEF zWW!ptGlVg07b!stBRc*(5Aw`i6EE&M)Z;5xj2Y#J_a%$=xytz!8j@z?q`mfJN@pNT z5Mfcy5E(r2cRE|XAQizH$UUuQE<3_OFrIjozfhdKiR;d=HEID^8BaQb_BQvFyR8SJ zE2}i(%@Y|x(#~Y6G<5#et0haUlJT0w4wD8yP&Nw@i#Lo@@jjQ+@#wMY?$&H=&w1_* za$q>+7;7whIf_a(zAsRtz#Ve}_;NSkeD_^3>53lZSaf{uM?{RyW+cXRe?zJ6kKN%) z7~q1rvB%Rl^Z6on$lU3488piKP~uL>LKiaLk}z4wNFc0>BiuBT>=`PYoL#I2?KLNi zn;C<`Av)B8-tOF%iBxH?S_Ji^L*}@*yIW)iecePSN3;Ig71o&AX<-%gO zf+3es!`z0bZ@pGPNbQw+!E63G*~k9!SV%nybW@%5)v{7vEH2Cc7(E8<3#@epG*CW|-xQE+;&09ra*Exx^};mVpu!=xjOA-Wx5GP(~^;IMlGTsX~F3wT2B z1uYOy7>y2MJD(=VsXsleb@*!~*alGI341-j z5Z}@7Q}IfoTz6S)!Itw-nfGEau1f25iQub6e{|J-!Ehv@e<(_?_Q^t)`Wg?*ljl*i zn6!&ue4{bC;{aKWAwKGWCSd|Hc{gOWT7+=E)Jk!-_K1%loX7p<;;l=*zCd>%Pw|mr zsp*Eo6=W~x!&f+lIZWg-HaW{>e|R>h?L@@W#y0qq;2!P@Q)TtD3BGIfF6*$xM(U%O zdqve}60QJzjGDVnU=VL~5%g z9uDtIo}P2`yUQo925YTdzn7HAD}16x7E)bL4Lbg~KWG}TleyqU*&!O=74$+7sBm;LIY-9_2u4R)aLF zSqF|2dBOr;%1~3R09BVQ8ii!8evsrK40jy+#CZ(NWaXB(Ik}i3t9iVKHzn%Jo^CO8 z3;0J$_S;I&8=Y8R*A1&S?-k5;w(u9qNcM$Fgc24Zr#m`njD0gFvBVqXG}#?1SJbJn zD2{%dPgc1qq@QiK%_dBj5$%K>64;~iT3@M~!S+#aPeHfw*t<<@y$3~+Vln30D_`)= zX`LU)7i$cw*mDX0JJ|vuc2b3}Px1q_5L%St>vK2~jVddXI@0&L#(Qks-W!*1OE5g} z>0;|XSD`{*a-I5#F*mF!qv0U6oMx@n_*t#nby0hjv2UbQdA66h*&L?n{#bv{R-V+Q z&Dik)4)5(M$xdOEo!Q&iODp>Yqe3Hp0=e=9@d-?UrDh_pwg1K3TZcuxc2UEMq=F&} zilhP}-BME09ny`YbR#jqfPy03AtfQ5(kX~^cMj6sIn;ZP$MZbabA8|Y-}}$GI5NyH z?%I3pwbp)hRMJo>IC~}$m+lt?r%!BZ?~b3(XX2;5`elzWk!vrXfy&$BgXMqr9>*VM2rW;*{XGM`LY?{})$?zU-UaaN^ zC}vn)f!nWgeYVG{^PmA35i`-XwbAUP6j>%;*~1We3nh}0+ru+#0d0xd7e*@@2~E`% ztNwz&6&=6Hd9uLGiC)a_Q|W$0`il8MBEs+a!F%^aHi_fw(N`1rQC{qYj-QY#y25E{({N15r*+4ru%&u)c)^ULuG>;^y%ouACJBA&E0ly zJ=~f*aftLI&&g2S?(b+)+8~op6{DBz#O`B(yJW?Di02w+(UJ^xZ|PvCvRm921^J6~ zGot7irW`KMA~`vsDYajuf8N#ge(+9&QfQE;A8lfUlXB#Ogl#Bf#j5Gik5X8$)p5KW zEH8Z2bEs_~lZHvE(>wxa1m?$-A{$8|8{LDu((m-T8Bx;c!p`vOR9ow?lPyFzu3Fr6fmgQO= zDQgW)O5clLW9S_%hhN_-PRk$>4*9|PtP6C{QO_(Mi?bHKD4tIWFX64-i#CXi*sQ`; z9Q7e0+(CBP)N!dP;DEiXo8z{7_7QUR!*NZXTNsnaxsH7a4Ef%Ig&=niCCpcm1-3^q zPv8L5EQgcL#FLaOYt^9?E}7~NEw%lflySa*tOs|=ZgtQst8J-Dpssk4A!h)}v&`VZ zOId@gUCXYPJmVoCvTGKz39H$a^Wc+P@h2x(Xzn}=;MX~W<1#vG8t)2DeEjbbho}T6 zgNXgxR1cXPVz zQX2FoYwPzEW%pu|tL|Z5|KvWWLY;f#OEKH)RH3hxYDJGY(=r4tb2K?;>}2LS-I4td zvm@IcJON%!e4>13;a1c0?c-t>1yTI4?OWH}C{h@Uo@!j%n+J94QuBE8ZQ@Rv#jbt+ zy4t)-)5%Jk;5kBOZZ-h#Ep&R7z-nB{>{p4mjzyC4zZWw`xKtsP_5+^S5LnUrn6GFWy@s^&oCH~$%k7IL*4(D%d( zwm<-;Jl^)XH|5Urh9lXxtmK7Hr>fQVIQf)TFk|i?4ytVTo)3>f56G|(a2@C&oFvqG z>Y`>CEc2W!8|mu_EC$XeGQV-0Rx?10;?MEXr&&ggqKm)6q1B@@58xu1hl9LMx=98Yl)~?GA$oFOWdGU zFBk7#pvg39rBmY~FX)$+bV}399^z|kN>lP&6hjJF8FZa)^bKkWrJ!?MKmSCiAQQda zoOqYRI+AyIu;fmbGR;k0z5{FBqXK8@)ExiKw@e54_N!Lc zSbYH4Mldoh^NFHS^1ZYdVFDu{L%V)T#QUUqxKA&obI}ri=|qz=;g@3C$!(B2@Frdp z6}}vIZEu4|nj%>>-}p`|Z92Jl?GF3H)~qV$-TUvkT~RtU6a|Y6bWY6l6~%g_i~O`} z-LC0)#9sncHFsmyYu08ROJS%*;mSp@$EJ#{IwzpBP?A!+9+xf|nsLY4 z718GB>5e;{EXOj5=JN@qnG~U|p_Gq_4y(ux%Z>JliT1(`!-@u2bK1@!ALYv|Nj#!} ztq&Eb;?CytK2dsQkd!ZQ<~~xqNFMr7IyKUv`{|RCjPB}8CV z;7b_}h27kHq?L{h94@h1dtBh3$|NESiHa0e{g9Q?s}A;t*Wvpoy_JKES`42-gQa`P zm2Ky-TNmxm=TG}TGBiv=K3?5fe~dx_lyR5DuijJ!rv45~<4%=z?Sr{0*JqoZ_EkuT zsSTFbI^!-f4s~xMNEi6~r>Hkxc!Sgq-sX8a(?kPAzQhRVs*GY&WiX3ktCRih>Er_9 zL<7YpEe2=-FEut?>j3j5D2Et~t`{WlS}*rW_dCZ|4fuvVqY%T>pxUVhZYA$39pKYl z@n|L!UvAcAZL+6}he?sJ>r~RfLQl_q3ArxOqXifc0*tLGM-37J(gsKu&pz*UB4)H~ z<@JHO0FSvi=Xsh_&m6VBZ;2-tGaWIK(L82Ypn8@W$NFOBjb7szL8r8ac;Ee2uGALV zab8GVCT2&)eUBRobJ|XuyqAv&#;cdH4JyiR*9qutA0E^ukGI>j-lP3&)9Ox(@6!1W znX=eO`lE4Z?6BQ0D9!Bx9f0kv9gbQX+%Bl_eAh13@xE}3HE;=7NO_s0OO!mTe#t8p ze-M`-Z>YWLq~nEY*#3##utuv++ptmTa%j@+@531n;@yuj`VQ9JeHF~Jpl3?f(qI(^ zfW0j;G03++1AdW1Pmf73ht1Q;^NmU0^NnXnV*1Sv@|QDji|oq566Bx-SxQwWRb4&F z>ph>;a6R_FB|k;V!7vh zweygIV`ZcE+U5nxr7(T)#UkLG)g?D!vSK(1%~dWMl3>hJXu60*mfSL1%#*!5a^B^k zd$3lL{wzLTV|ss;oeSSTQ(@hoa8TZGAl`C2AvL~Z&TQ<{RX8U*J4Ckc^c1wVTuqvY zWpkApw3PuE#sJR#jbO|soYTjCr@2G98rQF&l^pD|_o$ss=4e(ln&2%BZ8FdB%j#bF zB@C)hN1TS?iFZDFo?UA(&oq=Qn`w*C;0l2 z6z!*KG7vM%^V7@9<8dUcH})(>x$uLCc?K^>vKUu8kS=7xed67MWQ}Y&InQ1_eO(ln zXlZlN7BOzUvFKN0`ZmY;Qj5uZu6_0l`IOtB%$j2S7=K@{B0^1*xmdRLTcjo(6L3EX zk1ZVPSn2C5Ak?wWXS1C{l1eOXQ>mx%k>Kjh)1m|XBULBL;(qFj0pac^VbcZjbMbL` zwb>>Ha*tOGX+DqELef_$h8FgjPo#~$^L+p)%SZ={n4j&7q7AWtS&|QB;b$#CnK7_$ z$iblDF&;&GWtyWpgRpvw$&!w?FwYc_|H&j<#NFiLz^9a<^(TO#Si!2jX(3V5?{CMj zxy+;z1QPOQ*RfHtEcxR*F_STf%CHIMJ3Whss3+>qlc;@oB8M^!SSK51)nBQKq*SIr zdufkP949t?sfKp}Opt%6%q9<(3pQ%C!lJq8*T0|)=pI6oczwbuse97~qptcDfTvZk`l1}wY zK{Q#wyvo~@_Yycz$kVC&*i2rGtA>OZOi{2yB<8F`(SnFtu2`CpT=TxhGrNZ0mIvRNMgS??9%2P^%-wBS6Qd_6IWa&{_ST`5VL@ubBRGsaGC z&GcCYho0*1lH2Z-uBf7$p$DJUZzUrA!I)mPAZK+<9YIb!^m`o4LbhyK3IhF3GCYU(t&*0L>+i!AQ4 zwP87JJlRsRI(>uB;v?bKgPc1)z?fD3JCot^RUrw)bIj{6N8tNzEY(en{gYnZax=I03DC(2;GlqZyz1#{!4($IhI9z4_k z{}%vFLI?FsbPz;g0<>5N6coH|ua5uxUH@Jc1RVe@8hGmreM4@&J%bfaKX{#&m-h{@ z9FPca@$J>;x-T7TaC7;wGs9n=>XjgP;|<>gXM-&$trxqlDCYEF0M9KZtOtOEW<5P^ zE)+!Esn|^P%O3sX(%3_Yw^728e`f<_3b+NQG(TZ7*dj#K3t-(O9(y7YSxt>+HQT7a zGf=?aqt_w+7G~TWGOh~ptKpWI6yB*?i0@ZvLMFGDt^`4EqJCd4i1){g;0(kh@@}5J zL-FJM)Bsq;@)bo_jJj4%n$8M;JxPAt$;(XW+MHs z{+RR#a0fAlalN|@HwBWO9tU!`9x&T3oZ^9gV1ejmUtE6zUjO}(^gUu;%a9QIT96=x zLJv3V8191xu_Kiheh^H*lz%_=?}#BDL;>*^R3zM1T&c(_1IqzdPA;BKlox(muD}F! zksFzLqc{FGhtVU!1pYkpT>t73o=LwE2iSD`BRukmUz51EELUCjkpJl#|NaPNM9^;i zlbmDTP%&C`&UP~<-dVGPyOxt}T1U9No{L;~4! z?)@O#-|mqjf~C#(x$+UgUlumD9-_L+7!=C>{2EkGaPj%dKm@!GAVr7@Dxd4!1$?)( zFc1!YTPi#ji(Fgn-Uy@o%Lah$jQE---LX#ht|CdtVty&j6}9i?c9OnWLndS@;-q#M^blAk7+z)VnP;f(cqOpUX)%$tgTxyT!zV+B5!5}SdUl42M zurYy$Qaa$VRm>~R3g(#qF?7g?gHZSB6Pe32NFaLljT&YPe-v^}M4pQ(Tp6hlyME6bB+Afa4i{W@87L%!JPg;YWxS;og> zQ>VEWwE;lie>SC!M)BImj+Fhi7MtY;RD?_Ia>1*KXS~fig zA0nYNP}bSGEneVuTrmBH;an#iVvSZ>~FYepunuy(Zsn3}Z0krz#KTG~3@&4PA zD(%*-QLn#U{#6lJ)ybG08^2U6{xdlrVdEh-_Sek$|AP$!l|ztX!=aZ~-|~qr<-(hlte% z&_!@0K8+dv%f9{n0*?@fP+R@luVLqZKdpBkOdZunyZ3HNOpo^8Q7v=l<8?cFV>@3f z3i6`8Ga~KP*bVqo5pPq0&wc825j{t(7!CAd9r)R4@nJg+z-p=Y8u(1(0!hR?D>yq8qob^iIDWAsiYZ3Qv z5I-RR=&J*a;IRxp04Yg7=VLBsH#RqmqMegpy4&m5ac;kHfp%^WOWRc0u-XYH&QL41 z7phX4`r{}Zfr3fsxP{H}YKy{pWe$ad%W=>xXn?H{qO$q$ky8GkIT4kd-01q06w2{ORpuT5}evI8#SUMb(^f(H7+T#vWdJXfLt>;%M1^rDEGa7 z7695FeOr>31!OOYL$Lp00sxCW_IL~kYAEU{p}Z+~+v8pLte*~BV)?J27sm5h@xb?v zZ*NV0a>lV;yzb^>^s3xu3iq)l2ih%eps7 z03~G%b}&FyGErfxQe&V381!jM?a8LCTmMr=11P7_H)m>J-ui9a9_bjN`qpxf*yDZsls@Q7_;_Uw9M1Tk_lBs}lx=)fo z3W=YzBs!@@pvzfzg+HD>Q~b( zvr5cb?PSpHSc>CXcj`Erm3_|(xmmIr-t^_|WJlcc8DN>G7W&_hxr)~Yxi_B)Ux2}k z>65KPG=n`=t=r7Wcm2XhZ)v9*Zq z_gUhW2ez|Bn&#a{*iR9HngLk#>Odwj@N~#=b--u5!eX4)`<6iFz5O*-D&P0F<&rjE zsiSHtQJe?Y&fil&#flARr*7QH8HL>BabeXmKGjEt1Atg4OA(gjQbHUoL_kceA5zEv zI3;EZm9l4X^$Wx4eb|F=Gs%W)yM0+o4&|8U7TSiz5OK=~;xZqa-vpWs4~>`;Rx|#7 zqe8?8V4=HsA$}~mz9idedb&p;$ow#YFPPKrUd`q@{7k=?u+ry!Ix5&49C$@sPg3Y`2|zQNkQ2D5?K>oYVXcy4Ly z=GA%bnYGdOV9Yj;cs27drmYXZPfY9zL_Dq89p_|bj0CK$zJQ3#enGo++DzMYc;mG< zS{E`WmG8|Zmd!@DI)Jy{W&V`w9MJ@+gYvebYkqiXc7`ROR!h_VGT?bOKg=5~XrKMU z-{$W4zY3eLg#{D$VB~x9RDl#PX#_NXE!TdJ1WXW-z*xgtBA~Fh?DRi)9rtZ0_k`;b zC6r^g$Z?(clNq;y3JL|{E+jK*ZyW(&OIl03CUFx&n z)hplat`SxJWWuu0p_Y9m+xCTc8}P$7F=&tE#T0Fj{5>P(H^2oew}{tys;m>m-vCPh z|4m2IHCifBerRpoMeQp;T&~Zf6)0n++4xKIr}UF-G9v}wE~%Fg`b9J8>keD0fVMyl z=`3)6o6+`C_nO*~s>ARX9BGnwgf1@Ag|L}%JtO)<@#2Y;Oa($Rla(T?tH`8VYon5L z?c?a6DuI>s`eLO%)D{`29uf>5CK&Vt;L&AW1fC5b{>8{)W$!DZo~-bl`AKpGV&vH9 z)71p3AJS|#9R&R34g7F;jUG zU$j@QIxSmzQX*T|tAl>!yVTT*OK$)W^L)7|*&1vC+SCUW;Zi3Q8x1FhG@ z;L;CL#lvXr8E(It0yZFMRgT0em+NrL-Omzu_1gwuaw#I2r0+W){=RVdp$q`#+H604 z`51*)60t>aICk6uUG_eM+Ct6&AgSJ+Fi_T zc7mlfgI-h9>yZA3P~PK%X^N>HRzu$@cmO^1D9Wr{e6li@wXrr&`$bV z2$J%DG&YY{hXMrMag&Oa!BOpfdhGETki>fm^o0G1`&*yy7F^vsJK1Cb7Q$BnD8Ujy zmSemp{_xwA3IezWTr*4YGOhZP5mtJQje)#Dps`C3_(6o$xc++hcgPnihRE{BoqMXK zPq2eKa%R6WK*znX#9~=*;+0n{NfiQer4Zm+o?@@Wpa8eai)L00K~BGfJ;3E0khP{j`&rmJ48#mj^gN%KuZDjVz-W9OyByMR#$?T zsl^zk3O@Ak1z-Ly&1pac?w?~DjK~O5g-1zHkg!4ZoS@Q?$ZFff1$Sw@&Ldsh%ak>m z)dpWAP*eAGuY@hq``%}A9kjDkvCui1_`+cY(%$M!J3f_;m{~n-!!h3x;b*S z-silD1Fs#v?+Mf~Z*L`JsRb@H6-wB2ME8zYw;7!P!=}$!O56_o2V?ssj|tEir2d-| z{sXRth=RPUWjDw9<72#$vd!C-jxnB~CCbUYx5(3kggd&eefMiufK6dutuH%KkIf8@Uea^*AMC?p|yd&2SGrdr{@(*&WB%EK8Qzl zivi(~&O&qX@ArZ@bHS$pO9n)wP5RTMf4-paAJ{SkAArP=bpO8Ie~hT77Jvwh?*u`; z|C_Y`vXJVdz|9{Txu{ zN4MT!o&%0;edYei_P0h+gal0?!$}%gR{!kSac-`9bNjpEW;^l0=1-L&(rUzhJ(Wn> zEPI&+3IvhUeQ9xT?y+6X)7E&07}oxDZCdn)I8Chca4BzSd#Sc#nMPg*K4<1v=Xe$Dqdkb2PW^aevrAh+01I za!>sv{o?gH_A7WbcKF*LDc`^8S_Iv=rpgt?5zg_>I8#oOMl+xnYfaW2NP)Kp|!EtC&01h&-|rI75G4nJR3 z6%^>YD{llTkZNM&=+u$qYGC!p$aRKUwutU@XZdF=cF_q}zZ7Wqfm1+h^_!pAtPG&= zyz9B-kIRC36_P0Ek>8Qw3R;4L=I(xR>=#TW0U!Fp+jhEfD0Y^OLOxN8^rp%3xWV$L8Z^C zCFXMneODC7B!}#ewwsY!!YJ*MAa}8z_Q96=iOT>Q-yA{XH0|Kd`8;cpx=F0BH(8Kq zZ=+vvSPj1T1GLnxaZgE9Tkb;%VbZ5QwcEToLm<3VwjQ<8bi(?=@jXp)ml zT*r7*Iv&oePC%zQlA&J0Q46Q8%|BqyYge(1S*bneO18X1qb&7oGKM9}{y_+c?;aTW z-#yAKx>7xOQUKyoh$R3Hx7r!_?z(YD1?+Y?XK^48FfT+skTZ2e{~-a0xUDNo#a<4dax|-ajycXhf0B*X)-P?ezxss zu5~xPj`Mh&D*t^zQto@Zt!aEQpZRRloZb{s!H^FX@@W!Gz`~?WA*zxd4E1HCtzS;B zHQ=1Y%l#6a5DDd}#B|No_n_ASp7WqBXbX68ZAq)nUAB9v81GZ)bX#as-1bqc-I3eg z=X7Z_hfDMjpYTUIT^u(S4S(_*8pC1&?{)haaj~L zZ`|r(3Y^Y;Sb!w=)r#k#Ug5ncdE3RVSD^b}mI2zvU7*(osF)dHp9aRX{j$0aiq6W> zy{LSV6<=gcJi3WjdW{R;-c}k*3M0J(qS^syHVEETO=q$NP8U#EL7$#ep3|kB%)q4W4rlFQDGr|n5k2&sjE?HKm ztvS!?(m)U2yX>{ub;eZPpzF$*%Zo~zt|g{;L?l1^@j6lz{b1ML_=wsM`;=3m4NWYB zA5_0pMLuX`I-3ILW|ROBhVDWKugRp#UEp0|rMPO*8hTua5Mev)G(PE}RCA(~)eg*j zrfkB!`!$rJN^%(0WV|%J?u6BfazS6DYI!t_gx8Ig&tNQy-#v&ppr=}xjVOtQ=;$J_ zIz?>|wiw4=dts?wmI=LlMg3{*=aFy2y}`OQum=JIjnu8O{N3!VQyz8t(^fyPXSw=H zaCi?vUWOxui0IC>pn!;4tzgqBw^^0QlbO%vw4A~PZwd%N9UMZ*b(UjnBHV2~L2~e{ z-?&@*c~ZNSX04lKcW`LEUx!F&jM^1V^<{iFaDwMvAz=2FFoL83Zd~`1P<&C55PUZr z14f3O_41fvI6o4r`#a5#@`A=|qjm};q4mNU^UuW7G%8Y>?&^$hT+~+dJ4}S}8wUW7LWl z?m6iq!^u_Y1-6My53=Ovc%r61IP*X8fSPkfKiZ6gJ%GM!Zqu>>gan8f{PcK{WIHz& zi;4wa-KEo1l%}!0S(oUQhSOrN!O=1!^*MwLZ+fZFj(X(q`keu8`oo?gLx)M7EBj9O zyM?_Di#l|W%BQB-_u0}mT6&$KU3d4m9nXIa4I5+-MW^D0h)24^NJYrj8xsyM^MEqw zV4W}biW!dmqpZkvHR@%SRDMA9zS-EIpoUSzaoZx<`*C0MXTf5+(lGZMS(hZ&#}aE- zOJBC?)))+J?)xXbm1khV^Vl4{JFhqs@@ZKi<5Kf8F;e5Do{IEKT7@&th32DjL`h6t zVe7ZqvQ5ilTPcMjxdQJ^-gGx!6Zh0_ctsJMly+O~`AVsEQeExdXF0fWa@%tnmdR7R zn39LZ!wq&!kv{D_EhkJC@Xe!dzVFjDLe;$4%=QM_UsA}O4#za5>$^J@8D-{1IUa7p zkSqpr%01i4@XeND%-yd*L{6Sx&m|p}e$SB{%f=;uwr8-QIje)JJDhi`GKN-bvit=S zP8NR>Ee(TwH7>dCWTC#+-pb^cB?+su+G1N0K%=BhW(Rx(v0~Cx5#njnKG@0EI_~i-+ ze~kzl$LXpye7PDIakI(oyT4$Mx@MQzxSkaY3KTl*dYl^j6vdZMG!+zPnVXJByYEX21n#;CgFj`0DEQfI}LKSZdyt zDmOd^KBqw6<%G>Ch)H39Vis+EW&G-%(&f^SEBGv@IpdjW(|F^Yw=FV*f{2P+hHco( z0@7{D%RBZQasXfjkB;SB%GP#|t}8y?;XIzGyU4G5tdLxbwbY-xirmk3dY((G{;AcT zw!k>wE0DK|katqF@{4lNGW2MkTbKGJ5^id*q~+me;xfYv=&?DljQ0KTa$8oM<5auH&2iw< zGEZ(7t;^9ChQ!&3GDE=W!T7*Pm6cB>_p!_vzDLnqSYz1cuo`t}!3TvVS(ZC0|LCe| z*#yP9msT^4{2W&_yY1=3;rCf!sU7jdB%opXV&i=}B5Kgg`ZO=10~p2lB0@AMQ>rC@YLo#xrcyf2Jw#Yz&o9yDM5 zdDSAH=si_wVZZfjLJi#lHB6l&h$A5<%2TC!^e=AWNwTOM9#bxR%Pi7CgH}bznK`*g zYDMPqUK}_b7#Vj3Znf^LKw2kF`;eAXfE|Zv#W%;ZfTC-6RPF=ciApmvMlu+IodT2_ z!&;SQ<)Z$x*D=9f*(iDMm-Nm^Z-pWFQJ;ROnsV)?vYa7-qjk%zr5car{e~I0*|X5i z4(a#dMB-|nm{Ghd5xJCR z8dL7fG^HkvZP)9nl+>N8lAlSPvWa@ul~7lpfOe2thtSsJygZ&Vc*tbs}^)UQ7nsPBSj8HO|Go@@41Js07to%EQi&v0-<&-YXboPi)Fty_7YU%X%DGvMhPtb|`<-8ZPLGm2&kzh6kM37w9{>_?7kamKgIZ0yE;YmIg8A1$g(S2saMDy~U5Tzmtci2(nx;pZ%ZjAN?nO>i~+o%{@;d z?!aZMh1RmQ+Eg*r@lXo&*|Cx;F1b?IZW4|hB)6~TwR|c;I}tX6eI@?LdNRFxw%ueK0Yh22@ zWY%*d;UX6vk5@r~M37>zr&z(z(Nqi%B&iBvke>?#^#=%K=N#V}`F4RM6tB~FY10kG zA=6x!z3}<5V@5}6!bRfe@Q)N_SA&qf*%wl=3&i;;%=X`sl6viQek>+<}c85Q*Oe>*K>BF!xS_;pf{2wQm8o!H-kWvi2|G^!rR(73jojwq`TYCmlhZ8q?LR=Jc`ktyo)`(ZnYZA1`i=#nNzYP{mp1lFAj;uGzLS})OfFSfX?NNL$ZGA4#8s2MBP;Yeyme3R)>)n9( zs7&X(>={7#o~if-A zeR3EtGFb^Z)ye~<-ld-8z&iMr;>}QKE$aS>UUxzmK+8kahj^}S4=|hUJ}5rU;&Ai^ z5Qvt=JN`s+j~M2CcF-H6&&|Z;;$ZzGxW1B>Dr(dN=P1(Z9ACKBkZKc3?n9-{${tBa zV#HS14C-(WUcs}?)q97>2CY{7K$hicpep+l77N`%6myQ;ED70Ao@(iyl%|+Wj0o#| zeEPZpE_k-wN6`%AFZTQm2wAyCnQS*}n25LUC*j=%C5IEw^W)uat);D1lm2ggY1f{A z`yh}G8*&7z!hkVCO;)5Q#Xja~OE?u9x!~$@{}i>_SH~6wJt`c?zw>nRm@|NdtpSWf?uuJeH6$_+x%QRPZ-rdQ!-kEboKv%HHY8|EQNYF)$ ze8(vcaiSF@+d0%AH^4Lamz+jfrU4l)*su)LqZ-pB*`*g9HWWx?WFkn_%+p$SYk^nS z%Fwbm=--)Sb4&Czs}>dwyjvj?Zp(RYk~=3Pwo8}F30XsJ0LF$}Y_u;7(uRG`!+{eH z`xZik7XRY$d5G0QME=&5A|r8MkBy6WEXMSD2RUpn57yEw`%*K>e6Y-{SlKNo#C^$E zgC7)|pX^zrGczvwobrf;xK4t$*K=0pyXk_#^HU0^sIQw~<0n3r49yf~1<1`5Cxr$} zYz#Q>J7U@56U0rmyCJ`(SMC7YD~1_2hR6e@0Z=M4*?l$b=lCERWOVgI4E3PQ_RKM( z!x??HJ^+r& z8v^#yw1>f8&}P5V4+#jS2ml)!hZ7*3hF8gAkOmM93!|he-0c*ExIRT`$WmV4*yI8R zbb_F3^68+j?^TQfiKIcR5M;X03}L^HgO0@R*4sJER@|;KeDS&s)iOp}k&mX-jU6B7 zgN{ej8C56r)fXO@qyoVg zXz_5YjDw>k6l|?a28=*l#A2%`8X@mg+2k7P$Q+jcqMv$cabjYRM|^izr`9dk+tzGo zjY+AU6JQwfk^_AF%(o@C#vkpJsh3%DViFFF4a4}2_nnGu=dY)zC27>Pzq!H##rhRC zj{{U><7e*L?~x7|NQ=`V=_dVXR4kW;P`|#RnBE8FffDi}j-5L#Mv5Af5~M&)80dmw z$hn_ealDJBYGLKx^Q5QDaMb{C)fCZGyWVdPL8Cve5IFAe@W!;x&+Xj;EubvjE1S;1 zmo`=;(i~(_6fImPO#vtuEJ-9lAw#LkKVj5hz;|BR$fmV}_t;0nw&V+FDXC!kRh=bU zlD*N^?Q_jgOUN~Z*`Utl{JYf4LRF3>h&tM2e1}Z->9adLyHZ|_A|XzemGHa|Ap)Zr zQMt&*CkHWkQL1sn?Q85YSgJtf4M5q?pWIX;gCuo|gi0Y*A*$I%8L?<>4lMWDN8zx1GnyZiwsiM99H; z0!uf^>gWkAR^JllM`NmcbKLrd$h_{S)ffrDoze$C1=V{Z4fsc9RqXM52 z$jZY$Csb=X@{J3g8{Wj4%mivEhNki;MrAdi3f*M`^7 zyN~#j7*Kf?eO`HTUp+OTC^;&c*JW9?99-%B02{j|c^_~?=~f>6(nJ>h<%dg9URk#l ze|)GI9xz^d3#!Wv2E25}kYTG25%H`!uK}U6DI@4dhv^^vhNoX3A;X`nzh%)zejuO= z|1{rMbx0oeg*0Ql=IHrzD)|Tb5t)Z^Nirwgk3FW;@t=%{((BZ2Y?jyDVwk$7JmU@T z`=n-gf?fAZ`(kj3m#N@xg51_H??K<-_V}l;q%$}BoMV-TK!5@Lg8jt&4H-VA9$bt7^i03?U;E>ag#<4nL3+26d*?H5mAf5Rx@o2dOq6d2rQEWrJF7Gw~{xifjuD`B4Fw|QH;7$`x_wY~bt^w~xp|1B8 zhB*H ziUA*gl(P7hNgzpTdB}EanyNK)UJG=NmXf-QqtAcox9JBpLCm~ZUXIFjVx(B;VGy5; z#6rgl!_Kk7jb17j=pWOOn2JBCn~a3p`#J;gpsi|&?5vXnl99QsZ_YS}ugkv;vaWx> zkzfC#hXeMihxF8B(>h6N#g~gZoWeK(d(eBn@ka4cem(JD21Xn)Fc`7pU!YMV~4rX8C{Q*|D#2{r^Yp~%2t~N7bmo)7dpokrm|}QMX}W$u#sLV z)YV2Q=F2NE8@y}={Njt>7cf65Dp;fM1a5>S3kB4dn6Vp<6sXOx%o>ZLX}fb~59O^~fs(SQ+ezoUjU%<|K+3Y-gKQ6Ekk1kenp<{h@#Q4f@uO0mF8xt@UZqiAe zFsV=XB=_%#kCyH%_3E>9dA%-@EX%{95bfH-p;69Z3^)Tdz#*LJcRO=$6DvS_0uG~N ztF;k5GfFA;H0D3v+?TuHdzlvGnS(R1mta;|pnLpNyVb`QW)dG|_7f@yy71jfLV!Vf zOP5wZh4YR|LWMN_uT7Q_@1^@DY0n~OcWj7=C;u6|#$Y{`D1CmvF3@!WnUIT&5ioT@ zErmyv0pOGOf&Y>9TJfJ#1-%@M`l5ud9r`O$xyC}LPXMzEPR`|R6_o-ye! zwAWwmCpyvAer?e3B`*;2_>Zx@1Pw+;-+N8|#Ti)>eFRzyIw`caDWzx)*h5x|)nRQu zSgu47%DKdJYQ^bxe|?%)Jd>V*Ny{KeiHnQdThSo~8&9f$tkBUB8j3o)*U056G&^eI=j^ z?^9k@+b@Lp%m(S1s!9Bh)yhqDTkgpJWg?=Jg6Fz~UIm70Yj-ycW!K}T4lJO^a*|$j z&|$SM3P@hK4;qW)vyIqC%WV=X47w(26+W5d6==$6{drgQ=-5lM!u+I|NUn|~Ay;v^ zj;cN==Q1;!ztr$(ZYbKF4XX3&T5%;4W{%;j^H8NvqyJ+DlTL&8vzVlN1saU9F;&B$ zQ$j?~Zh1=fqQ91+DfbIL80Dw6!T0{ykv;j5!Rmjfs~ao&=R3#dCuIf`K-h=*@Q+Op zu{cS+5ZgH;W9QE?)_-OqHa=pB3&yzqx~=`V1?H&&}mxXkC7$qY3BCizl#z{J4#BYfyt~=vMHwli+0nWl92zvW$umW+^rkf1ZcO05#ifZ% zl|E7SC!)L}`0K#EQ3o$aezkitCApr#%t@lgg-5!(riMUr7f-3fabC7AgoyjP#M(&V z+#09OE&-PBo%>oF{l-P0^~K1ivt7TCP%=@M-f5NCfd~*xbR(a$Ub@@w*LA+PaqfLu zex$;pO$3WBBm$k4W|%B8{Ly~hrR%Z4gsJ!}m~^dIQWrL*KQlkrW$!ZAa-dKnB3^tZ zJX>4zyh+))Q@yh4;!uqqEv?<%Se<1e@BBFGiOW%o&Lp`wj`-V9X9}|+`}07w2}E=N zdVVMXh8OWxcpYS2Honr3!shuf3ucr?dx!_jV*+{Vlx_M`7^5Cirb0=1s!V*tvPnxE z%%e^Yz8`N&Z3$yi0)1&LOIeJws4h--^A$5xg}w%D650y(=7_9!SI?Kh4me!mfqXQE zx5oE2ZTO^({~udNgQO?Wh>Q0HHlx4i^HADZG&A_RI@{lWwGEoM3qja z)eczeCGNyw8pp}YQP9^$eEYd^psQGDWuga;Ik(fsMA*jEtvOjU<>@d=*&NSN;a*aMi90hA-!3}uz9Zr;tu{r$ z0@E)h#^>{6qxic_Zh>p#9vvNw)u7)9r}cDd=J{u|nA~Yaq+Ljb&`?gjQ75%z0^`H3 zf+%h?Pgy``D~#d>rhF=(gK`HiA({I}Sq*xvDqgIkJWV$BB11bKK^76rSb^U*8KF!> zOgF!{(5p0EW3MzfRdZo5en9o1xa5;m%nZ#GEYKs}FoSDc+PG#gM@=0B2n<}avR4G} zkzTbZtn)rx$!2JS@-4hNC?W+`^qf4I#kU+HXLf;CM$UZK{8$V{Ri*tfy>#soCErE0 zFe;`A)&7d>sIUH)&7Ncy=`BSxyPbicP*Q>FyG-<`za8__wP5R;I2`R^VaI!<_8|=f zTWW!X@m5CPUZ|{3t7aCqz(U# z!sVvH&bG5zcX&$C(L-CrT}r~rvK?9*%`s3@T&Ht*FrNRe%dtPLs>0UYGE{K@P$Gbl z4^dX>T2c&m*HZuGwMje0(7NrcC60C5_BM$V-x47Xo%5UzmkSHR+m&%}q(zG6KElXB z$dsy(7L*D&AC@e3dD5%NMJBy2Ec8eaJ?EkU;a@kfm&#xR>!xmYKz|j+KS&*KFkZ@+ zDjgTwmubh-Z`w_K%V6dU#Y3CMgc@G@Fx!zy>qGv;$?mNq$j%p8d*!r;)zS*eb}i{KMS?nm0ti`iC3 z5=}$_nNI)xA{5{v#R=>w4lL07f<|pEH|?Yrv^%F)HM5jfX*J3S(H#`7%U<0BY@U9% z-R@DzGP{K~()OqmCrnjJ=7V)B9Qg5Z%ycfQ4b^Yoj4t#EO!YT-=@4YEn?3U%k9XO^ z0pcqT3I}O=jaSc2K^0s;ot4BO@byC~UrH4C?KIIt3})vYg@%*t%Iy{_)L8KZM0Pt1nG9U6bgbf>4fmG%JqIKiC~Rue^vAnMbI^uzFSMDBq}Dm^ z4EQ`8e944~A?9T|s}}eo*gj@cBy284D#mRg&ZoOi=B4KD;$WS@P>vF_VVlD7YQ9Fg zxO7{QL2EGfS;Or4r{5NrCrJCJE+c;stCtzVjvWV-FuA7^Z8szNbwD;`0N@m6huE@k z`gjJpI}JEX{V~2erG&IVrGRI(`4u|06Mm({)G-Wj6ghn~s$UW>Pt9Iy4gN;d%=AZe z{6-8Bgk(yNqa%}nW)51dF)4wd>`oee4|>BFG!&r)q9mo<%?k@2(s-`HFpx~3R;sBY zK^lEJL%%f|NrpV&G~B3m|9;K06X}S}T8*Wvz~rI;=K}gXQj>Nu}_yv+c#b*`*NBTA#-7so9>Hkg ztZq3n9QDRQh&jNA$uoXQ`=t zKcc|xTem=>F~2rS15z{E)_Cp|OroJ7y2v)uA+5988E>>3X+m$SXIP4(+KoHJe~+OW z1Q7@Cqdrt5J!}r=9k1JTeI1&B;bPrt_!>K#wtZOA#9}MbC@rOQhYCn5J=Cbc z(A_y8ia~d$ba%smN_P#-pmYx1@w;X}?q{oezw7sX>s#wv?;m?DS-8FLx#zmC>pYM1 z2)qofFqgg45Uon#h%wdAKBJ`~;Q;f%g-nECyI~Hdl@a6f8i!gr>gG{g)e3>aL2f-d z6mj6JEHXO^ZK)I5`>k|Z7X@D_#eNU5^}t0#81ftS-1~0dgxS&|op54dA-S|+PNT_C z&<5fzMIsTePIzAJn?h=xt22*6!WvZw1r1L?mYXKT=`08cs#<2GWb{CScyg4^{M+?h z!MMAQ3q3|~83(S*`LM!4Q$$rxxk12(G?D2hhv0!s)Rh6Aqk7*(k@oS*Y-+p3wcbw# zsZTb-?TN?`YasdrY3dPn!!ZOTvOM)C)1F$OCjG}Y5Q^Cbf>X6|u`hHaV2CHAH>MW) zCk9j#Ew<)9z%FKKzueAnVmIu$;xdHFXFb2VZ>P<;*Q$2v|IRL5$$*JiGA5d?B7#Fw zyV7aPUOmQgfK7ulq9bZ-sE{&<^z3A>UK*yTW)3MPi}O)C_{{$D5z+kP=VcRVJI@Fm z2R#6NOy*M#<@lZ73J)7lcsO+x!&06zWA+K7y}_rIwu{k-ctfg;7Y!?(uk|hy9p3|) zdxY9)OIm=mO~11g5rR)p^CZL=aI{ce>5pqq+L)yDn|$Mg1-g&E&(G7(wwDvhnQk!C z>eLXWxCAtTY~r^DmB&$em}bkj1SYw(@&)(ecbO>mgRj*tx>7;+MmS1|CW%VT1hlq^ zZ!TQ6fQ&%j!O!Azk;oZdc7`sYq@GeedA%t9H13wT(JjGPZ<4#a`G1o-a zCtLhqKP6QYXyJSw1_XOjd3Xq11g0dS_}dAvD%<@QSEt@f5{kdQK-d4?J*cJ%vB7>F z0nVxDjlHD_<+}ak;AV{nmcPCUo-F`fAmZy9$HT%El$}Ds(NdFwJ2Shh)v%d^P5mGR zfQa$iwMhe9Nl@17+i$z|Pd(985Vi0EbH5Wz01J73YufnN2k_&8k3RxikES3#|3CJ9Oi%p3|H5wq>dVaF zEgQP?Gk$-x0;3$)v|dm}f5=BmIBl;N{=pP43Az;uVV+N6qS*0M@ZWn>b#!z%*lydu zJx-?`F=3Obw8q03v80;2?D+YJax38;_20PE`!#S{Bp(r`oB=Qh?3=Rk@ikPyA|#l@ zAVM0P7y7epxqTJSp-S11t^0koF1qPV!&elr6xN|ddR`@_4_gZU=XSM>{?ul5R1Q-4 z%4fXN2KuV;W@{AFrb}@HyLalf1!ZAX$QlTywq@er>f$o10 zpZl67ca#G2GlywObe~!V^Bnk`=kymf%he5=c13=8ETC zJ1xF4RKv3;s{BF#(8=`j@xy%3ejR6{W-E4I7xv@Y~+rGW53#XgN>sf!RQ!IQ^z zngavCOC!?Jsg#30oyLQwJfY|%BC|0mtC?T zk+Wk>b_01P6QsXg$fURyk04N;@Cs@C^kPuCg4f|~0Cg_a)NO328<*DYjx%xVxehAO zoxMCv@$}Z>TaI1@hQ05>uA8)E@&&(Ee`jg+FZ3%TZ)02f+afwI97y`Yjt@wp)(-Z! zLvPY1;Cl)j|>!3W|K{$Dq zVL2QB(+l}V9Bhc{B^f>*F_(uu@d)Y+uS>Llk_@1gTaw1?!9Z6Ze0)$GJ$?5?sa)Ox zf^aVnWziI+Q#jyGS&A*k{oIez76TqTY>TLDeW&H@yXh!PB zp9Y)=J4z>ZQ&>12qXW_r0=|@g@2s8%x2Ssda;&x9d5~W6J#r5MCR2^f=>z&<_N~E{ z;o~(T$i+dv zMQ?YSv&66)J3UF2!Ms)rMM=U6i55e7U;Z3@`1IiWQljx%kHlbGwd_a3z?^p`0&3s( z_A;D*si~+hbZN8up15_iadd-iXY{Hne!mO&PaTF2nXHNG;ET(31bH){BYqS1lGh)^ zndEYfF^7G1yPN0ca~%$3#f;giW+Btf-R)M{xj?WHX1h2UzD+zC6d>HjGE$5ndPQpg zc73~i%(fW?$XacS{SmV*y$3hDo%1wSXvlLlR3cclNh5W|PHaH%$ViD5V!Zk+!3oyr zGapo9gbEhPKc$s%<7tbZketaXjcaf|FCE^(lqwCsqs%cE>3$i#hf;`ipnv%pR}rYR zofcDRPM1s&@^N(wyt{2oY|+je)6F(y0-&Rpq5=6Tgdg@kU*43ed~N;NnG%S&&GI^f zsB2wM59os#l{7FFz(3hml9IBhCi> zX>J0ttup=;LQJGQYaDI^dnn^R-~`=VQw%^&8u5>M{)Kp@g=6fK)q5G!7V>BI(wbfN zJ*xR5RXZMr-m@I4(CH>WOrIRGIeS?un$rSrFokc95e+Xm7yA>e`8RTP;Y~z6HIrqT z+mTr7OO|xm;F&WV=lL#eE{;Pjyj;!-c7xsfl?UC3?|WYrRP)A-u`M(EYZy~y@UE7r zKfJ_56|M+ELQL>XUkP}xPc=MljZCUq0R1Ar-K7ygG@LG=yV`qg|GdiX+D_1nMa_Mv z0~t$kuKNhBW|{5g*2m|nMP7~UwhOYA@H0=hwqxUS^V#;LIa4xr@RLoo*3n*%_M9lD zRQQ?EW&qb*;z#`3%L50)xOrgQV)RVqnB0W|4kzGSHLO=oXxCtR5k}vAq?l@KRUA8- zDV<_rT(Aa8hYzrjQXhP62X%D3a6$?jUD>tsho!|^qx4xSY(|s$@<^UjTclCFVy?zT zV&P=%M1#z3Azg1{m{FBmXJC?9iv4Q9sx~1mt4_{aUDRYGS9QQ2OyOgbVSscP0zlE( z;UOz>ep~5yb@+LEr{&xs{qJA%`bv!8m5v+HZo|ia&3Mp}YrN+VIhWTWA8yT77hd*_ zv(fJiK2fRePI210@7c7drO^5A>c+!jdP))Z@2+iyxt_=V#7`<^0NYs@`Pwlx21W{m!#%{x{L4)GZ8NaBpf27bpRTEX zDleN}i)Ojl0ToVB!h!|2rGedW0@B@RC6bB^bG%Snx+L=iey8WIxg+}gHqz}e7Ikz? zYJTj*`kkIn59dMaq?qjJBihixs8l;U9k3;-$o6@UyH19uEm?dyS04dyS=DstxT54z zHg_HgEJLHxF6!AfMY~^nCWCNiNfG<9>B-OTI&4ZfJXxfVxY*|OpF@>*X>s$F-1V2| z=Qwo>@EzY>HDO9{Q*C-~(U(G7GnkcbSIwp7}%275?9R z*zQN|3KyTUZdV$v>qH!woZAC{%v`*)DTwsG+jZy4u*2@p69lSFaF~k6b2&V!&&9L7 zI5m*jJ_BXiPt)(8JE1E`6MKh^EUHbEUgBg-F&op^d~{t#pQ}Z&Kvb8oq?a26j*;mJ znK@+NdXcHRy67+g>t56i@4&A~Am=O$SoUqS0FAt&>h~aJbV>m>S@{zjzLP^aJKTj! zx4Q0b&FyetksR@#keh&*lNX&c{mC-q=dT&DU>U3!dFalx@Fk1MuvC2=Fo5NYnneK{ z?rvEopWH6n%j&ks=q??fu0|b_Jl&qX=_4yt%R5S#)fFiN0@cj%R_5tJ(GB!@m_Qfa zcuQbiG-PxF6l+GX&X1S#YGTTYqFQeQuGJ8ma>0iMH>lf=xCwIMDPd24RMo`Z$zNUo zHao)TyWrhyR_;&DW>WPJCCU{|WMyJgtoUG9Uxk4j0DfG}xJ9}iH)sV)du3?|hh7Ms zoZf3gkni-c!Cb(Sd|Y68We}inMk9S1tfnlPcC7pyrFP3nFyc~*p;JSI)-4zBR92;- z`kJmRP!wfUsv1lg^MR(FS*t*PvO81)C*#;feQfYdne8oop2IS&|OYo;$5czTtC*VNaQiZ(2 zi0~$G7Fas$*dKw`f~?E^RQL2`KIlPz{z*w)c3<*=sH7(7vK&;n#=9ZKD6&1($43ZY zp8V#h_FlEv(TQ|eQBA^*b{&<4h~3A0-43AiyHMm$QBrg+#u>z&UMlmCe;PBVq|~i( zi9)aTHD29=`F8|yv*? zIo1h?`&g`ytVe`FidFf$-fpktCVqk@y;f-6kk7j0j#M0{LK{&Ym-G$!m+e4gW2!oY z8`*v;NiG1w25eg#$S{tmr_!)@uOt`gUv8OULSjm^U)>W}Aj?YK)mc0jHTA|?EqsmfIq1<{VqZk6JOz?tkbPom0!W`v^G z;$XF~PCK(0OB;igF`VQ^*ID)H^TfEf$Frd^dbRU-9a^9B2FThY%laI+h;p(K2## z7M|lq*H0_M8{)waUb^;|kVp2S{RT_19Z04uRdUX7Bw?~=Bd#%WgmO7rw``xasgQQN z$aAzW?M-Z|k9c3c-9hnvIAPB{$g1|lebHgA?&#F$I?I&XPKqJxtMn7UHjIJ>|e`q{-pZbe; zxt(w$_it?~<_Sl(tO zxwBG!uJkoIXKO4UcmYZGtL?DlK!&qvUhgz!niL)T*a!A<5Pd^fhVj{h7-lWrbqMQh z^f~O^Bb7lAf8s3Le9jpyp>@krza2F4Kq#69`e0t?b~%8 zP%pwPs{MH0g|m>df`8W_9oDTnR;dwLCSaREy()kUuO(kF=}QR)Ch45AW=g-1_Qn+e zOmHMb=={b*6HpiKbgpGVbQ03lQBMd7-WwAC*}iSqIwkIy3HRny{pd$3YTlAB^uPE9 z6zAH=!H~z^9ic(g@pOGXUoY`lr|=B9DwgFgT&axEk-o=*$hrMWK;tfm)D5Pwdc>&6 z839ox&hp8aQLJ}I2m(Ifr~}doQi)&8m60ps%mH&ejE8lf#yf_wt@I5F6Z6QEIn55H zBzro$4S6x)9=;Cw#{1JZ)2oD8x~}HiB%T+D_G`?qLCVb|4q)-_?Q2dSVFfH2DVecC zE{(Wt?qlm-rsdeKyQX!NaFP|aY2#;mML2F%1H0=%2Y21mJEU9gf&dR5u`1x?D)Sn5 zL$-Kz)GrW>7o(@&1u$RloLpWLHxLI&+Ui9xH??4m5gpw}AKr_ihM+@X`J-;PX+U7< zHJTF_m9K3sckk*?5bXO2&!<**19mBDgj({k`%s-JpSt_uB2P%%;hWL{p0%?g$b9$E z)0`9%m}*v+JVE!PL^eS#qsu?_bs0ne%i8JoprD!x$Mz%L;X)l;T2&kg#4mht%Jxd1 zj%%>Vca@7d)Z9TJSfVu_ zA*6jZlSp>|o8;o4NpPk8@qU+L(yO2sV^;47aSj!Vg9UQ}LCBig_R*VE88`!mfa7Y@ zLw>l=>~^7B6e?z7v_HZT0rbTI;s_jKmR3PE+rd)k;v4Y+0ENzkjGz)-gc{~xTW9j>v{H8-rNa&AY*56ou zMLL*K?76aTU-D!iTIic~VY=98%~Ac-;32Kdu41CFk?Mp>c3EqZS95svJ2TYzz z!{<2{(jeks`puAE6RZr%rZT?L0f$H+Ew9sN8HTz@B&hbJmPDVF$;TCWE>ZH^YDByC zqHs;OXWo3!ZfwsE{1orLC5z}!NARbWB5$^W&SQy}((-Y0#Y{Q@-9lzNon5ApURY<$ zu8bdvHqJyI7(oITw;j>uPyL?j!1zRUS#zY|Wq!@>XgjiKO)7X;1GcJV%MEqP-?iRf zH?rZqkL?zHtiR#_l>w6AxN2A#n|2i)iTV)jEdP-L4(hN|qjU8D6ymgX zR4uz=1q!GTD!sit>bWD=su`XNuvmDB{eL2qTo=NSOuFYK@^8Gi^n@bULY;S_%TFwTkM z%P!YN4SIvO{7M@Ca_d#+KiGoQ`chpqIUg^dp3vv$5hLES-a;meg;`At;2GQhX#Q=q zydIMaAcLe;cZZ11%9&O3QHZk&W}TYJOPeQi7o=}9g==y$KG6&N!Mekq$OBAs_E%4; z!Q=aarOog1?Q;Us<$=0ATKFDq&iqii1&37Jp&Xnz5ItT=@3Kb`7R^-^^>Xn@CF#)( zr<0us9D=QC^lj-gcco4%f;V=h*hy#uX=;FH&{wUL!4XE*n=^RLc4mkyTD#@&Tb-}6 z#S`|x)Fwq@Cl6C>10YMLt_0{a*!8V#CY=`Z++{Ysu5rYitB5ZNv6|@!6Qh$`qO+(w zh_0N=+7aGe77)M9qG7SS3g3=#N^N&#Anrp@!*z}{uafaHhS0MF0ZXOm`#YqLQfH?u zt4sb+xxS=U{*ndevAhWq4dTe+52r$gy@jWka~e^o!c_i&bq{&-0YlCy7{KxD?9{*r zkW&>f5#*KHE^)6AV)hzcSTH}O0qNhH0v7H#IIk0qgh`#fMME!dukbymlizRc4FCfd z-q(iyUPuXGEHqnCIBwv;4g#HpJ~s3DtFaF}BQ=pc zE88xv{2|%q6ACmIld@eA=PTU~w`n&{?Q2X+!dv*yd#to!XvSc?C<}tBUc$IXnyI(c z46GJAgipN3NRcu-S*AH;1^ZCCWfgalR*bbZ-+ez-y3CpxH8?vx z8qOMIHu5TvxfGVcf4+@Vbo|TV)s(K|{!~P&w7by>ffl>ma*iMYuklEUQ39t0cMmQ- zA)PPV7fDyzYo{&@RomKLHX63b1wcY5(mfK}%9V-}Gw819Cw7V|R_EBR;(RcY-igP0 z+DqG3n{)0Mn28+k4Anh}SX?^N$n298>vAU(a*p@CBis!27^~x+$_H!;NMY4XF@Sf+9j-ewtg~Rkn5Mw58FaJ8gVl2ooO4H6Vs)UX zx#>E~!2e0C4zy1iGOwmJ+PjoKcGX=r>D@3|SMv&x%I)Z7JlpHS=kemoSylQ8rv>A7 zaHQ2O9E>k;VfV_58o(BFGJrK#TQlW+1b{5QaC!#z}Sa_Rm z%ZP8e+MO_WCFLax?&0VA62G850O(U71Pnz51WouEmcB805P#v{RH3(xiQh4)foa2U0!A;76h_uf8WAFBVW2=bPQ)BLCM%SR{ z!jl{i7+Ksyx61aInjPeFk?#D!bwWendI)w~jqgRd(Ofbyrs=FqRyTj%_Q3n-d50BD z+Ppz5p~&!!#2;9f@MMI{jl9l}NyF|K+pv6Y_o<3ebylLzGYA_EGYnn3L1& z4zA?P*yZ*9Z2%`~3y^an?F6!up9T&8orj3lOM#u15I^Skuj9|}&%QkN?Xr`$l4FX%I1kMp(#XB)i?$dFI%*Z9GhRyN4( z$Ukc1c>OUEBQ(jfgpw5Jzu(1QSNB|C0_*2cSiqU05gT|;M=(d3v|@-AI&N&l4-)nN z*n2HT$#N&SvTVJ|7-0Qr8R5&xbZHY_w)#t!F zI6w6}|5=DnlrSrAyP?-??|RRb8u+o5;$O3~0Qug_|G2_BhJr(JFidRgcu_fjQoPLc zRQo2aG}XIn-60ihUkUQl{v2KZ_P8zpWl-G%DpYpnhFUM+0b{m?_;O8{v4n ze?8Q{AAsjmj1)tvXPgdp2_Q4FRd%EX_-ZLn<%u5_#nl|lnLM;9@V)f+-~aKaaShC< zT7-gsehr()VlsSFXLWXaQ6?=LOwU6PcWP6d{epw;~r0X5oJ@M*#Hp1VaKhd^sA>3rzpw!WG)e!Z7MCtJ}<>+EsRD41CsU5$c7n-Wsg{ zH@$-JbI?%09q6zFcC`=N;kwONH3eQ)F^2sN#Qymv{Y{H_@>UeovY>jq9j#ezq^ZPj zm$lb1Vc9j6?f2D>RMLJenzc0qvDsl}efJ;B!qFe}OWjULUqIep8bZ^W46Qt1$v?9j z=b)eJA@+>o7z_mybUtSYW?aEl<@K-3|N1cSkErp-KBmI;l)fd!+cj z0W1IRMJoy{B5Ycjl2CADOaCC0u^QvUmw*dn@Zt%HHF^@BrU;IP%Exv<@qX+Qg>VKV_fRl;pXS}|55BtzsJi4w|DdIT z{Uiy)P9dRP0{MF3TboHi)N?I?cRA!5vGIypKa1l$u6zG) zYJ_v(b76@Ni`R#FBqSs-N1plYADV~SE!*>D=%}jvN#hr(f`&&m7!Y&|R=$vxiom|JUE%ULHh_kD&fjFE|Jn0J^)Ni8EBb5y%AWcEK@0Mg!E>y9t)*x-W_DwmUNLLnd@yKU zIO=|*wCD~*COAAW=+X+7Bi)k$2X)G;)O&MkV_J2lA)t_E!RYf^PWB(QLj>AbP6R7hxLcOQS% zzuV0uA?;7LDDDL{QdGMsA|gV#-+%6fEEE4xfA!I|&FSyZPDeXe-6s1`@OCzrB(YQc zwl(o!1VH%LJXxQxdAhj-e27pJ=wAe|xXca-ZRakL-%;DgTbi?6CW~vQD1%C}P}ZY3 zqfX1}!+GfD!Z&KTT?ma74XyNC7|7l_5TLM}Z}57@?lx*&X}@Y=v(y+7tbTHT#=2=3 zymc5t_DqspZn&TmM=L1tdB*s^n0KwHSWh>Jz(l4*KyqWCFFHM_BdV`OAX6!F#0YB{ zw;T`%FQ-CLnRDB_8Jou#BBoWQR%lI#q|JO*Pu;d7BF<$q3M2P7VzoJnAgqu z8lyTx_4J*899eH7z^=6(oI)OOgBO09HPb!R;ycuwo_;IzsNQs}U5NuG%d(7wqx*FC zz`kDi=-rED8kyZ-AZs0&-Gs&oWfWhCYZpM*+$H6a4+N!xov>-y-l_oIt+w(A3@dJ4 z$B8!c*vc|*BtgU?x5R|!vsKriL|@8>6s39RzC^KuXL!f4W5QO}g*38vP@K?`ryQ6$ z7pI}R&f$*9x25pjwQ*o(3L2AiUFonTg2nOFx=_}WBpUgS;5Ea&2a6AWdGD{wVJfAN z^Wr=clK)j_JpLcl87u4mkJTBYO#_T|MK2oI{4H>d_2;KPZ8gT#5mN(eGh4FF`_N&H zM;fwi;VduwLF5h_@yi|f1e?I@=eHtq59GZf*}nQw59OgkFROZNeNSCJg;BY0KQ~{F zw%=?b&F3E_F#e*mmV+fs08Ep0FrQZ2Xy}yV$kKOza0D>a{=Wz`3SXQ5CC~_w|EEAB z({}ARZogw6VrxH%f}^-m@P2eXAJGYgP8XR%h_@j*3$URL4OT@?dCZQPPwOu!L#0CI zSVn5}lM(&=q|YLfm)OU@yi1^?==H6Peo75oLr<6Z(F>-J@~u}pg0;1)Od{x@+aU?? z$$LPR4DiOvA^0U;|LE)cMk>h(#H2z4=?=o7Vd$*Yrd}AJHE0|6rfX} z-fOp>S#agJtWa&-tzj~lRb{(4N;Oc6u$hm)^(LE%U+I|vwoa9;9A?~&-VzV?>TIF&Dj==RY*h($+#CTQW7Hg-?22*SB2j^vnx}Ae9{#bn zI>#Ll0AXalcE72atb?VS7QZ8m-4Vo8LoS7|ZcRyW{r!Zs@+c z{#ygMhT%liCS0qvQSt=VEUk#M$*qV7j}1CkhuwQRzRDcF`u=Qh{M3D7%mTp*#4{0V zb8QEeQi{*hOK#kLdeSUcZ}mg()NDt>t7XWtp)qYA6EtjA3Vs7MA+x_)o#(8sD?0OMK|g9Zc6twMK|! zw-bBXyUn8j%{nHvMaKP5E|?xJeqZJAsWI~YDmTacXbHuApWC@S)AxGjk7tH|>wVud zfa2l?txWZWH;ReIVe)i@<}ut{a<4Df<`@KAWViZ$Go<2Ww+>~56dwuK3N@fxaSSc7 ze^-TGeHdk%F1y1m)KmX**R-^=Z!&i*?dd3ILiCI81>ek4fmYMgnRrw*LC3KBj{&pJ z=Q4*4kK$A^FS5nTgwTbh804pQy-PN&w#!ZeBwFW?JAe>R`y6@A-1pbYe+t7@ z6r6`}DDwQl>oQjaY?t0Hj#!Yo2kuSE7?ml2kptx|Gg#SU>9*$>vj5>S#lh~F1kz!x zEsC~?zxr7Ox^7$XCZy6jo6~$iO`|;TB|8Gv@vO5$Vg-dr9k95*U+oA)0VkMKGvDSun-*Fdc? z-*7DF#@?q-S5+4U~aVc6HDj$D;VRA6&F1NG~e#%s+|V=H2zCiu-j zQNMTnp3ADYU!2TA>w`Je@F8{M2wiZeg%XYK{`l<{aqodH4Ep49zc6;g zg@w(2K#*)}^chOAK+FNwI3Ap9r`m<2r2qSUM#+QCRdED-C?9$`#8ekBEc*(?EEtt} z-^s=xCz!|NqSz~s562w)RoAo<+6S}YQK@xRTD&hVnk06|SB7Jl>B|6sv$;`*`gDYg zL30l#6DOY(kIF~(aJ9&OzJdHeMRGcy08g#nyQbO~WH)CzQKhfn^I`}ExsptL^=DE9 zW=UL!fz|qwZWSJ(;MpQ5uSGiS>i~`ioIs=`SbL^Z32M6=ot;7kklEnJ z@8n}r$Tbx5`$x>nEl@WAnB12=M6)l^Op~+)7Rc` z^{7$7srek%vVbZ^Ax#cVkx~0zFj1^ezm8NcIDlP$Gs=QQV&+7v^d$Y3U>ui8m~2#$ zvTak!?LSpG*IOeWmS)TF{ocTeR)9+LGLZy{7}W~4eUW#MRuo7fzsSn?&OKWm0pWS| zL?9EyUmLA0`+w5kT~WCy;x2fAMx4h`5}fuX$~!B8ty^2B5>cvnd)8dFI~JNUTr>eT z>9#k~wzVa(2@a$N zd&%M@Fy;HNlINL_c3O733w%GxCp7=ru$B84?^;+|f?DMxm{GRd_mCnpIhO{O^WfFV z2R8NWYe(W3xQgl9S4XLcH6!GUBb}g)Y76v3r`4SZam3?0gW@=OKjc1fL5`JwsCXV1G)U-c3u8 zF2bQqY>=(83Y2#gftPOiwCr!hos^~uBwgIj)h>SQydB8^nh*Bkn>?nmRAAuB3GUNw zsw>WgF2=GxwHxRx!y&~-PX^4s4CJlG{!kP>(3a8vefNn6ENWD7h7|#JH$!3+hhZ1h&7;8TG0^#YqV`tq^9YD|q z(+7;T##~H(>$ua&69iW}L=V{Y-J8!{sY2w8F=}$3nXeHG*fV25lj$*!xfe9YHoy*v z@%iy$MV!UFyjUr$6JMR!lSc|vzB4VocwG~EzkdUs7ciaw-5k!3qAxsusFtx43j9;b zu-#&K6l`(FOZot{Qm-eGSPVJjoA)mF4GD%^Wh)Hmu0_^iXBG!wGAnoKwjpx>h0s-H zR6K2k@gTR+z=Q4LZ$$=h1$+W?mP67JagK}g9nb$=egr8oti3oDFI3LicG%$eTMsWN z2~fCsK@$m*M(h~w)ew8AUnoE&4wgT3%`mAysKyAKP#bSAy9WWE$`7nccC3KN9OAsw z-ipN})(o%=-h^OK>`C!49eBg0>{u~Ko&u8_3%$J7gDA&U8)tMr;y_EIG|RkhObwx< zaBzek+cknCtf22r!WZXS;&m|I0>Z`NH>#!YeMf)4F#MNDX>Hi5hs41ZLy2;9u)sje zJ|5L?Yg^0A-uVbW=A!E%vKPtw4OzHQ4H}<<7%Mz%3hG3Tb6iPJfG$bydN29;y!M!o zy2xSXhxX~GJ1Y;x=;XCtjWh<^%)6a*B5l*%`-pyBo1T&2-C>&(l#u`3DEaOL#}p766;dZ(>{5X>k!Xudr{T$oYq+0pk9uRPK1i7W>zh|Hrss9!!?@T-~+)-H1vP z9E3JL&7$?^JzWdu?4D%x;@+?yg4A@X{I9O(@V?R{g`v(XHyL-(yL!xu@oH7bWfG^-u(T@ zd$qxWv4y|hro^K6OcsxBZ4Du!0Te6ixfMl>bqL`|yM*LQ>Hn5}71GY4DEv~z<`3HV?^!F@EHOsBo z&6e0DC5vHl^kB+qztTKFfVuoqv98wNmw$+Pb2^;DeQ~i4ez3nV#(1VOYEaTJ=47>tu`my{KxHDov$?_PeB4sUVri6%MPr66R>x1XD%mMn`{ z;*ySDWh2=OyTw%2W`gXSI6-uOjP9yz)#jQy__9x_-yKiA2`W@z!1Sk^m3d$F`(VHk??Vqf@J$rOe0*0IVy6T=6=Lf+rJ$o1hjA7J*Xt3jrFaV)9HsmF2v=Zez2- zTY&Rw0Ezgdb~R<@$sq_BbPR#PnHy7-OXVr~z#{`p*hc=M^q)k4zH;oSkfJJG|TY34mPB0o_}? zivRL;%g3HpD7N4_xAe%_(5jq1RtWo0a14({dp^Q10ua_l-f5rST(D^+oM~O(zP5>P zZoU4)r=nxiQkyPMzwHkwhA;8Mtz?Bx$Zynq*pm%h+Nte`vee?1!%vPq^`&5g8WN5b zr_#8{46TDib1z!3C-Kuy^aRXMmar#N@N=r&q`#`oJurW9dv(-K9avDpU^hlRHl}N- zoJ3ko>(pSBF8k|2$D8f)m6qQWBq!8WqZPGJAz;d-B*zh%2PvLtd*R&O_JX7xDAQti zLio~)ZvmbvJ>Yy4uwQ8|41bzd3X4e%254HT#f|Uion;>V!7MZD<9#PS^HRI5IYcn) z#8|NK7lF-Q$x2#aY4gbROWyVPQ~Q{;ea)gLGJI}_MPz*Z(C?6L6`#12Pb%3-KKX=QUz!Psrw9{>ne>1N7Pb;Cx7W^=jd#$62X>gKQV!ZB$;Y=vT->sfv>PC?5vCoY_#R;A6NbAeLprBoeX{!|>JSI&^4x&JNU$ zy?cmtme@8~D;#|6r#6de*~$jlszDm3yt~fBHfj3;b?>WjjF{P=LKKu>%5^X={FZCx zT0ZpjK16`TGK$M4bsH@rcUss)rrcZqDvqBrrhc%Ujh-OuBSN=(8l8VPotz+Y$p&JA zmjkSdp;^i-=HW^LDj&Ax2#_F{QK;9n$i6pm`RejS|9r@HRG^A?Tci|8@Q#)MvZp}_7O|k_Y%93 z=vlHJu2uk##gF)g*tcsH;zlQnUVhQBk;Wk!%=HNFq8V6KqG$V<&s8mJAaCTf)j6a$ zoAsRTQx4yCsWZS$7MK3R;s!$`pMF-k>#^18(3uE640}woY=uXR@5iAkDWt8FbMf9veJtz> z@*KM7rP*w8cN_1LTy)73q^8(Bi{@2c?14jy&;l6gQU?z~s7Y^qzD_;|%9btx{|ncC z8f^vw2e1SitO-8m7sK*L#Zfi{to-M{+RSztzW#7nhsR9ve((N}Jn&RCmp6(@a6b&H zG3oRkAa;}Vj}HRY+bt-#2tl|pRlflYO=WQDDhcmnz|+vfJECZNxJ*9u&~-zcwtvz9 ziFzwcL@>F`4kwt3=e24WR|;4i=41Iv?1gpICHyn^|0Et9rY*&D@)s&fJy@|~`R$^P zP4G}9rlU0|TqNhhvwDp(B4w#Ky0;}}nld^UUS;OsLqNM^`kH&R327GMm6N_|UW&~; zm?dJ%;~ASxwKQhLIjq+WPFmGhMD3Kk%z#PFN4K~{q<>-k$&M| zlsT49mq!1HNpIz_%on>WhwiQ-YorJ3Uzq*xF6K1c4-<&euOVSLJ*hWsuJj-!?o;EC zsjdbMPG=6psv*pwUzM9<1RMWwY-fI(yvcc?nIY(2q;Zw4 zU1M9&X7a5I1NyV#mw0XvsF#~-KjwGHwBXTq$Ehpk_Xp*?G^2^PDQHe*udl9u%v@-I`4e(_lyWs9`&DDeVxtjTYZkOI0W0}}v1M7wB7ieB|I&QfvcUrsqk?dZy zWi2^RCx6^plC;_pStmH$o~62|x1^Fa{BW2bgo0U@gmKBR0I)v~7cvxmcXkLsijvxZ z#&MJl?2CyJ188N=c_#Q_X#&zg1z_h3h9(=|ck;5lkN8Y>W2PsK4bO(kyF)DzYI;0| z2xz8a_+D{cJJHN)y8MQn?*TAD6hroU0Z3HI;Z#%JJ%m_Cqj?xsmb>) z?3c3xM5?(mFuwMd?KYG0`XcY7luARl#z)c_p;fO0)x*)=GGQMuh!{!#g%Iay$WZTF zm*HPx4aXfIk zOWc~It(6RPvz;|x@dDsWr3_1UcJ{S6pxiXM&7-FbfIy2Ok=iWr(o7Y%+ZQkjt2#JsRlA|U_x zWu&3?RhH)s_iHpsPJq@QbKUjsBx z7H3zWe`=oAu-%9`>VRm(-}>NB&674TxAWzBrh_h3>5(R{Ydunz|pi{tZW^Daf&e7g?{@2RzBu~MNg;{*WjnCn1EXmVLUFEa7+0YWiz1@Z60t3hTDJ5jK8l7==lo5km7U3+8HhjgSl= z8EY5&gpcHlLC@ye_J`%Nae^-eOLWbyvtX}it@|?8Ex_|>wIur+PXPfO0FQF5<8k)$ zXvP!H9(;_P9}m+WCZndC{n;>*r&V!D@wEvXS$2JA z&F_#A9qLCLPe61zn~79RSwhuJr32bC#i=}5-HDB+Ag9`WXu&4F>gXQz;dYFW`@MCG zT&H4BU_eF(6i+2wgFJ`uk({lWJT_HD0*?DClIh-hK>igRUGnxX_z1j{!+>CS`N%=^ z+Vyp5Py8L17`wW7hb+?<*MQIfPn<@IElqOWX^)ri2Zh8!B`(i&r`onjYCqTl!phW)GIHJm~F1*yl zA*vpgr>*2FM_#sEv%uzAM}+a-{u}P90cy4chdLtXx1y1kZI?Ka(vJ%Jd|CUR%U-uDJ{o^>^eYw|@-U^inI8ba0W11P~Dt0^Aq)hg- zi&M<|bjG=!YjQdwK2$V-7A5>L(-{Mq>qIYe7dG!K!((vo0$7G;d22Bg~ZcfLfFe88E3iWlc4}bi1GNksjsQm_%Roj5~X^W z=0KPUMdV~s_J{!A)90X&nBmn1oqH75kx6r1HNl^{7`uTG@@)nnRIJ&OXYaj|3y7X& z!TQHE{3_}`_$p0)=&AgXFs5>;Pu^}ob9A-T0;<%eIRb?qSZL(vz!!QLAvKO(w`Rs> zfZmBU_A$^q83MhN+S3Tu>Enq!pF7e(wn*n;jr;q z7pU#18A`Z+rXvbUK2&P1qz$C3w9$>KK6PlI=avRM!`Zg5WyNa$0M2rxg>1ZF5Fc95 zPHiaI^~~!E-MKvaRXwtiqVzDSkgBH`pIxq@9CV=qnh_XK;ul+-eKG;*j0c`6a$DiY zr_E5HWFw9eG|C*WvTIh(R2q^z+%yuPJu7)yG1%(PBQr%fPru z{H#eef0U7bLemG8Sa6sCjME2(wxYSzy{4m2fD(kCh(I3vwQypoCD&N9pI(aV>pB2( zo;)&NAjW>l+EYCLB#QUthfkCs6V?W|m+XA5ABHIzSqP23q0-fSVr~+cq}~hj&nah8 z(-^VLJ=ePRAGuStods2{2EoGyA+@2U_Xy{mHtA-0JAj%-=4HL76TZVgBY=@R1so+5 z{^bQwb9%^>b_$|?j)l_k1HG@9>Efl_92*omtwvpX6UH*ug#v0Fqx*KtVH*yDf@D4C zvhg)eZp-x~f6ypdFzg1ldVH@{y6or`7L9Mp@>2Fc2WCE;>``%X0Rk2#mbM$;{Wcd6 z=OW`t*-J{5^K}$ga9O%`>@E)*e@eR z*Cwhhf*W|RYLMdKmzA(D`P&@GYA8r<4(4h~RM}^v)fM^<4gq=_l{gL}!pYz5M1TE2 zsID|X=>uaxPL*qKTa+3Pe(zgemZ&?$*U*IXTqepZ&&E4kb|A4zBzlJR_i2NL`&k*3 z0g;b<$#voE*_ldZuV^*e<4zfR0*y<(ZecMgrYOHwF_!;@W)Y&}U z+#7cG+BqK!2Zl*Yb;YaEDGHY7G}Dmcx6Lt&?(a296*1S9h&QqvWz6!)e`KFJz9(!Lkp}w{z@<-fZUIQNszp?F^ zXH=2P(2Zhbihp9UC6JL`I zOnN#yzv;4df+{oWJ}~Lz7&@siep8_-&|xtRl1JS!!Y4`I+NVJH%bw1 zr<23@L5n7a_aU2LTXK)~1y&q(_A(Io0^!sC#x%YbpKq68AbNk}GBR{{0a>y&ll%$& zT4Vcwb3ePG*->?FVdl)O7|ZVkf$`D6Pq6E`pNbaI|HIx{hgFreVP6mtgD`-RRzhi| z8w|Px1f)gjl+HsKDB+>IyFt1+2rAv32ccP-1;%!ZJL$FbS=@E@s>6ic{TJiY1IYMvX)Sd_0>?4A?lNPh z=%&Hx_Kd22Q!$^s65%)YfIljXm)Qcygj~5 z4jV59xIi>_?ZzgY_GiL#KAyEpQJ6ZvbKUK?=^nw`5a@DdOy?3Wt^II5rH)3^$fCWL zCfGT-C=R&?E-0i21{&(Fpv^`G(mOxk`_r2q0kI-oniIV46!;Hi|(A_=}hGYh@xz&3N0 z{_*YTizH)GK{w^EHigFgrk;att^lwZbr#hYQ+&Y6)2v{j3^k(#fg)3mpctMA0P&{QJsqaskAQGBY z&z5x-ozp+bdyo>Cl zk`BYG$NG8S_1}!id7Hj$ed;z} zg}hCOLu)ZMJqc#h!FN0GfAco|{c_!xN{|YbD};@9Ugo!#;k7r5d*Dv*EWs(u|BsLD zAp!wA&UpK_;Or3@jg`meJg)60J9KLn*`IvrSIhYRca;|S_^*P%3-j>BEY~HaCnJ4? zJ*llco6pZ&FbIZx%b;SSo^9B8^pC$Z*$-}4HF~>?*OGYeU{yo$^V|iXAuC)k0l|_f za^#dCi$4MgRl>>~;*WoqwgKn_WT^7grt`ndh3S5{UUu;sn}$Kh-iK~aRh@S?#o-0?5o?w2|Fw5^+QP)_dGRmYU@%}RLikA(xjyVk=Iu;tP+DeAZmk?V7 zU-*3u6`|SyQ%hfg)u@}>9wM=PHG1PC<7qRvq>VMtG4aSRMO=q*R)CT@IXsk+IP?!K&NGs-oT56dFhr;Ud__Di_GPla#RO9oj57>b?LjS{4Dyd$HE!uy>^3^ zf7~?gNx|8>(ec-+`1j-ebA6=B_{&%Ht?5zOeYa*z!M!hIzXyS|ZLIZ|cZ; z=hP2#jM#bI4qselijbY{Kux6?)TL7hxzd18Nd{na$@_N=zGAVtyCD-arT&dP18hj0 zcRyfbdR_oAuJVw68cK-DRJs{@L*?s5%J@T19f^OyFbG8I8o=u>@Sg}QuOI?T*MB0g zI6~p!Z~l|HsSB$7NdAMl2?HNg3!DEDI70$1>fV0>&P?iphe&~)=Jc=o_dUpIZ*F)joBr_I zMqIA~ZqN|gX7~B6wcbiW#VULG-c5^f5{ck6!gl-DAkufd%3q={Lt(o9)66V4nUJ=J zmK%C2^YO{t?7%J(hQLoDKnIRL8+>k?ww4L8FxB;7Yz*WwX7At5#(Yu376k z9wm18_~~cA>z|}usrdLhD#ogIMTl4@sEAoLLqViFkDRD4k*trJlE2N2)GE)c!?WcP ztwPuVkT&fV1L1^Ph09!AWLA!nx%9zwc(}F?3wv6Ah)QmD^Bc<9HJ6HK?n^_jd(w9w z6(LM_A4!5%#c&6R^MjxZilv%&uYvwuvfG28$wD&JN|eoE=va%)7~7XtFKgGPv%7 z8X#vM2Z6h?@MkMrt~m+FSKhIwbJ*M`_yCY3g4Z40_7vcVyoOmGy)TI2-OTRGRTTs6 z1Cq(@FY6zHfGbtvi(zNTjZe`%1xn=fx@VqFebkk5aCD8|`gKdi!3VEzeS=1lzc%gj zMw0%p*>R~fc}Dj?=!OeZIY&>Q?Fa#>oKfBC7l^iOM(5rP+^Ri3N^b>+yy*hY*UI8^ z5i=-?wWBzC(DlQ+|IJ8}g9NHn~i`PTXb0kH{dQX^TuQ1&Ok*j|*)BTInm?kL;w`^m8m0Es#QzifK|`%jLLj zNvsNL_V@FZ|WH(oB;7McXAORquYvNcn@kgOVBeo>zV?9IPmjZ>ah!b zo(YHhoz;&MK+g&SR`I$$t-ba-U8_Vqx5P+66wGH2#%d6tu+eK(m$pqwfMZp=?&BMe zJ7++In=g5H=0tSB&ZoaQdzxQU3Qx~_z(hU&)=u`30>FDkp*V3}^@t%ed z!?0qW)&YChB^b1MsTK8w0B54NO%E==WaH9mZD9TD)7n#=wT6!9l5}fvUm|4|ZFP#c zN;#e1s4pHJk-!0%)iEw#CtM zcHMKut+I@a%d7)e0c(KG8~fu6K)$MA zDKf|nN*&;P;eEM=Zl=}!R)1FbT2!D-t~y?rs4rK<+>I{c5N_$;_IFQWC_Os~q-TrZ zoHKf2G1sA!qMQwi)2Sl*a>4IZgQ$=ltEZ= z(nnw7(QYLN5b+viw`UTP$^TT3KU1?JV~Wp#6sUb}_qvYvpIfkzj}ssy|L%2a02mO% ze6fx<^=4K2z8~mDt!x?DfxKF};h$`XpK9NGo)_lwC2C#cqvOm+4s)vyEUb%iO{Zax zGYW?BnCRaiMRdRjDrN1BtPI;b5X2%mn72(XzrxaGc$T@&^23SIRMOWTBQe!3PF`Fx!5Nu+Y6?6oTj!AHYVB` zY`wPpK3x^@x&^Q!G}5457_r+CCYYO}xiH#o8QV2fHb~psT=YNvh zu!~0J?>WDEgHI`$7i0H8JikJ^<J{gdd>h+8pp}qs6ljn%XvAyh9QYAV z-mB_PA?$X;H+T9npL)Bpw`uN~$GPfO>^@!nPV!{ER0}>c8ZtrtfDjwai7RLoKWDt@ zz!=%QG@Py95~2@Os@(0gBph0mwgE=gSI+;s0G-18^T;Pobqa%D?f$8B7&-jP%`hy$ z`9T-Eu5dIv=fIG&5?;(SWt>g=trw~I$3lp7_hX}W^+ zgnV1eoax8>sXr6Py^Z3ov9J-yTu62C@1!*!DOurx0i)iG-f zM1eqt(}RSXWVpBJ-&Bdj%Tc#m(jIgLy4KWM(1bD&;@UZkpFjh$R2jdekTh@Mq2H5| znq)e&P(0OuXgl{l?xs9cqg_@%CjpvD)6Js-s-u;kzkJ3$$nij8LTTU?23rxVsrO#j zciIVt{<^{`gch5d4#MGad|y8pq#d*D9`+*uZj;I9C5r^gBM zg98T{dW^h)WxcmIT~-J*Go{7xc*Qc`SGSf6zW|FWfl7r;>w99wSM8Iyv@4a1H@1|VMIGPLc} zv}Y8V$%6(}g@z|GQ2ozo;!5)pyKF;Q@V!X9%0%t5VWwhga6ak~8@)CCrNQuHx-DsU zf)0pp(vRVM&F$`)Q=4ZqaV}c~36jNWrDsWw(}ajwVj5^DtX7^qHivd;5F7yPA=UK! z4zlO6EuQQAT0eM7K$O+XHD(l?OJ_LPQC+$=db56%G`jVw`k&k4=#JhSR!%h#-P6ved$v*R_Ww~um1hBdQ??Q~q2<3Oqn3Lp+Jb(T3z zh6e9M$;$)nxdL#;ErQZvYei7>^E)j)xcEB~QT5^sh7wdr7>(p*zQsjn7%7*!(j#%! z5J4BX7rIZY9WO`i#SxL^`7BP0vCbBpYGp8Rf9oIrc(N>e>G$>|!B^-67ZZYg={fW5 z9|dM>aMY3gXsLJYz(-Qvr*RkmxZR)+bKx@rHO)+UC_#gA_cUp|yY_??q!u1PyUI=< z9~qt#!92gUaE4E-93-_TN#0*dLan7rhbvmBQ(s`!EWdGb>@p~%KhQW@;*#|Y*-MJP zI9xcu2D7RS2W1|c?u*qx-;TNaHdV^4AD}_um4KS(R%%8QQ7*r=vK}acS1EAo)8w9QmGHOt+S$p^y%I4To`kTndeZRyG;GL)!>y@XB=*-aWF=b zY5zVmpO4ww675**+L+d+K$W%kCqW~tjA1?U$Mi*NMKH4H* zJfQ8G!+d-Hw{P`zD0l3mq%i@;Dxu@XbY`g8R7i8(!Om!NTz0baJNP8O!8@{Q+x0A( z_i1D|OVZZqB%>aJ?5i7mHQY?Ta+YvI{i|?7MzP2C4agdood~KcH(5A^h*_C;In{f0 z^znW!3%_k5n9u`06-WoY>Ilqaan=AgSbAhbBfOLQgEGQy=;z@IR3=l=fDQ3=3Y|H0 z<4?{3*U??|(m%|04)elsF8^cIhaxb}DUUoj3kv{%4t-oY(Lm%rp zG*$U{%NPe-<{ImJ!%hV-A5V_qKZt$+DokhC_~Qu}cg2Yh**|<#5#X=AIM+1u+q3xo zkB%?F`PS0$!qzXt%0E{|&nHkboQ^8|_c!O;=a|F=zq$GgbJy8l7lCc;DW zw~hV#&G6ucnp0k7B9wprtzS+lIB8%heu8Pu`};lrcGVLAhuldzfeHKNSo7yaQ2j4{ zU{8X}Llv9EymlK&)sZ}&Axx2@#m<1Nr&jCg3(oG3&l5M(HwWK5pIFuHr{mc)>5iH; zS1YiNhWNcc#O^wmHIPwZH7@?m1<7+Xck5MCZ5LeKjEDTOFay6F_+#Y|%F>zbAiz8Ti3{ zp{KnkXW>-xj%XE0Po9=+kyeu91zwXg=;9cjiig0;sb5MxB@8vSbI?{*W3@2(qz9Lp z!vtfeJ7VwDD?RX96|P4-pdk3`_EL>O+MwP1fU_c#CzxQSOAVA6K|=-4T7Z73&HG2G z)mDnF&%twl-A_bs?ZkMTB2%j>9b;)A*OS9oz1vK6Z<=wq=HTr)Hl6bFu|sFE;RB83 z9{m`QR#xBL{bMKR+o4_*)7v|yUaXp``1>i}fOgrpn=DS3v8IdE1@!>BJP4fD0f*r# zwKYJ}K(piFmG5W3O-)6{Fw4+D>N&|bcqOS3oT9;(%S9y6XWh!)XIib*Nv^LOn_39D z?hym#$ep4iraZDqdl8A4+cNs8G2j^h`Aga0#V_^1niv%2Of=n z+5hS6;s_O(tPm>IF|iJ41X3JU=?(Z&<+6*VKVR&h0YQh&pJk_LWuva{=$0V>bata$ z;9Afzi{&KkStKky36w2J8T>)xuj*+sYAoZG@bJQ!^DTSpv1p+Wj*)EC~rAeffibbae%(IG?Szek4b|d%J#eV*o zzD#NB78BGe;w02zLXyt7rN3wu6K46w8GLL4%XL3e^hqu4r-|aN!F*{W9MTwcLdetEpq*1c&vnoa{-RT3u2v8EtAcnB7k{^95iV zk5qC;bTOaPE71mC{&aL!Bj=CTgapzooF-v~m|P0v{tzHZGQ8AhJ|782z)y#3pM3`; zojKGBJ$=?dDv4VsoORScWHko>lE5Ts`VFP{<7Paf*2xb=0P1{phki2~BZkX7TjN7G zLoIqHJE$ZXBYe0>MG{%tJ57m-)FQ-X8pzoXJf~TMHW5%&b|t?6N923O*mFF|TGfvw zeBTneDVX^<^KGQu@*~(DoU6b96K^?6iC(H2W$$ zQuVCqJ7IFW#WIjz{0JyxP^(&tF7n}k#1dtp!*2APF;iiR+GP;S)Ay>y;!qj4f&1>e ztDvHv2yKfL3I)LEg`vSYKIg3*fr4Yar67(4QZ}onhQ@sv`2ci5xud(Ok@3(zlD(`f z|5@b}*?ezKRkB!n_?=|pKltZbqG+pRN99u`gME(UdMo0h@F_TY{o-5?_q;dh8%wb_ zM$7W)w@E|TG58w2Pq?;7WlfJ@6NuG=)ij{u=t*vzOESG(Y9u7V@p!ci*p0%0-6&xf z<-Llur2Mt|+64>T*uirmPYLSVPwFmS<9(_f5brR&ah>kejO!Pu33#g-c%~v7fQXZu zdP)iwBM-EBGa1gHVZ6|9lN2L(5Pj`>swW}&yA>Co|WW%E3YsLW|D&|M5uH3XE!tL5)c8&*e=*_e3XWQs;H6ImVO7R6fEbENhmkrZM zZnd5McGzgi>Zg_wQ?sE8IR=KsEWkJH)46Q}L^qK5=3XZ8b(iRw*3zaVQPLb^1fnT7 zx~v^X$)$MqVBoDh`8Pn)$Edus8L9H|X^Lgq*WAgkK}xxyiQ1!pb1im2j26X_I}Zk? zzMOYokw^6UeIS`62N6fEXk$t78lY-v!DgJV2F-tQ4|T-LqyeM*n(qNJhR(d2%}uOob&>Q_ zz!Y}xxa5VUdZ`7!9;PXYZIh|&sEsn{9W&)>sD_7Y%7pe)N!M26%5;g10u4@KtMkYT z9%G$i#YU0ccy09NyGS&LDYTIXg0*jMP2yf^-b{mxj5w*vuvKS9>FiocB#zW45}4 zi*lGs`Fh$dyA@3NoS6lPT};Y_Ub;~}YlP8)+}ZAR2|knePhaC1kmO_gxCyj2s8ugF#98r{o^ySyFI8=AodQA8$*zsSM{KXqR?u} zO-VLA@3`Egy!z=GOgnX_516>3rw5odR6^mgi$k)JItXNrka&JRsic+ZE3;}xkhris zRIvHYZ*&@M0Q^R_In3=*YQ3*>>4D!!JgwA>cSz=k->B-T|NA~;$Zw<&I@3bPHn@nR z$qaQ6E)eI0@Ajkz0W4jGDct7g;{d?`=D<7_)Yh7muOnIC;V=&Bkw*<4d`4ExK~$v6 zy9@t0J;IL{rql+ zhrJ<|q3m;vt{XE-xvO~`<~_*nfv=xP$CPo`Z3gDK8*BQzj`Mf9mF^vCCypl^!BQo( zXERG!;#)`MV++UD+f?%>o~w!DtE+j))_@}E%wuu+6uE8hOhef-4r;7A6P@k**IybQ z@Cn<@`orBohJW{91?W&l*bFq?)oHYA+>dS#%N^(iUHeuYa=|CLxO-c^r48h}YX@a) zE;|g36?GH9apW2$j4YaSWE34vA9$o0zFUm%rg$tZK8j{Zlhx9V|N2WFczxn2YIHqc zPs`DzHAM^;EQL%(ClExF$J!^Y^{3-V$)e0WdY%|54AB3g zQ|+fo5#O?VFXmHfqSbE2DvM5}Mi$G&4rob*wJq}uf@4K+aZ(0nq3vwjcPvsnz#@rC zX-EoTGVsAv5Nfdy7O7Mn!Xo{c63(l;9psiU+HoXQu^F`8TQGfR)_-{j=>zof>9qKi z6Dqdt4}NKnzS03TZW}BCh9_sAzW6~!Qsi@>FhwtNtG%GeF*{ReJCcNL#SwAk zVZlqfsG04p$WIo*L`J0GG*XgAdaO5ai{Hs4@S_i51Bdxp1KXMcb(KlE(_||?+rpDg z0An3dGR)EaF{?lCrQ*s6&I)fkQ#Pt~YHF{<;U=qdOGR2*r&&RR*q~7Z69!~EYoUJi z9p{%>y28J!%5H^s&bvNe?3?K+X?3(Q`s9&wWbhqKrfyw61;8kqFJ| zOgpP?y6J7u-ww1&Fi|fN+=`t8)c{_l(n*^L5jaP8{P-PSkfrBRCV&hLo9h`XRz&_`aJc#3{Ir-z9 zYS1pA)yl#n%05KIFeJgES#E-N%>BvZDd+k0 zRqo+I&Chc^Kx_r3{jS3tfZBLFQrI#UM4aqlb}!XTXxl!To)ByV5`i+>xX@+J8&~DA z(6xt!Va3J=nbL9KKqC?5z~~dYdk?d<66FAZNSRfvY)SHn;i;RLCj(L3q_;pI3EOa{ zyoM4i`6RrZPksgcl(zqNvZ9@>i3AadZqAg{_~~2sssZw(sBy(6LY&O5!31uR096e&cirlO1MP=?UuI{j&oXTv~)sSTI4#^|z z85)J8!NdLne4{SeBA+-=Vpi{{3+$uvHD>z?XYSJ&cI+;hU>uK7ql;h2rS>nCahis0 zsGiJs+w`n$*3vymzIjt-iAhLkpM2Z4on0$k-hDfAKuw9}O3i-dR5cP8_BmCWD>@-v zF1jx>Em67DT#yFXN_QNpx26j?|wx zthKn}qKP;zlO!m#T(v3^ikI8R%>bPt39qT2zbf+3^1WHpZHgtp@~0BVCLWrTy+$LQ zQL+_Io2BO@AbF%p&X9>%lyR!1Gj||*yEO`pakP1~OPVUWc^BRboodyJ5cW$|qo6>I z`tV3xaQLqO4Uludze;nZy~}yN%a~E^vwV`$>k^}f`eS=|$5C1p*3leb96&ZW`S4(e zGqpPOXgl;I?bG5m)Uo>H%l-Intt>o24{&-O1mAn563J!v+IE4h1Gx+!FDwmSCEMTZ zB$-8sV|3Lv`Na@GHjq|89l?653IGZHqbl|^2#0F%Jbg1oy`N>aVC#TEqcov<{d4v) zg-u(;>z=aCM>d+Lbz^fy=3M~u3uLv3rjPF|v&(|+UB8tUimM-FaVjRMnU%~R)H<$b zJ<9D-gXZTYs67cA)1%J-OB}h`q2yr4+`KE?^aOL#xkv7EAhU~lBuAz%jbu=lrcFDV z;$SQ8hA)x%?SmcRN&{{0AW9JRY1zE$en<=OWGmVpW8tG(pp$s6|P zyq|B=J*fxsLLviGIvR(6QCzP=NwPJoUUAn6W-$d_J+}&uBV;x{L0^tIa#)c53fMsDp=x z_scg+vBim5CvN#4LolT4_cZ`YkoMEBFr-ZXV`19IFLg+{gf7(CukPf^#8tOh8JAh$ zf;0ZX4;a#uC(;0h#1q~LU`RANAUiX~vsRO?W*j0+EX(?V13 zH;$z7lEzV?3r>qWmulVVdroJfo?bJnWxF_RHaJz1<#88+t)sKdJMi ztuAg^nM!d;kQCWP+Y zLG+{^u!ZZ*zvtSRJigzZxk?h#o0KfJOBq356f$#gI*4%86{z9f0^Pm3YX zel1(^p>=Ocuv;3dUQ^^HQKNrsc=)qwy)=$mv`ID9uJNah+@5kPVViOPY_YdhB@KsM zE8JakyVcmnwy%19ui|dRma$>R^Vv0H$t$Kf_6j6pzpPHxtafbQk`!lD#3bsXe_x50 z;+9V`?Mo?aQ5V`U?}xn)r$juF^?qj|%P-Huhi1tTjhBCkAaV6G)Q8I*Be_Yta0U`e z<$oa!{Zy#D;>RG5OifOLIDwR~5b-pbWug>A9HuVfl+PKz<^BRqJmmYt&|&a@<-vWP zsUS!l!cO^BYSb8{%&WWHrT@`x{=0Dxe)4R(1!g*IwRUmWJRcG{f+o;a2tp>rY@Una z?rxDI=>tZhjHkbNmcZcQtr;k$Zj6%7IbFgz;|bJhErUApY?2o>$5%pCze;o`RpiLj z=v446qlONhP z&)wI0RV!=2pwhBwMNsLqY(h5_jmu%2Ia&&mdUOk8D|0_e{y8T4(=T$P927%1$1j`& zu_@7Sf#6QwxGX zEYK^W0Z}ZWU@MRcxuuZu zvP;A5(CQ6MaoP$6+NpH(O^-36DCd&JpxcQOg`n$nw#8U^0Z@%-2GRHO*TRK6J0LlL z)8=6Fmw5Ts#QW*fStao-%Nlg=!%#)#?R>XCX^hHW2g!TRO;$b zwt`2wiZV%vtK&k4nuuqOEFnTQ=~0!yQ56a`D3&iSWH&>)Z2eZk5YV*~Qq}m9srXL5 zsu|>nkZXaeH%%sf;{L`==U1N3*uU$suG4}FJcY*iW)F@gz{&umn`N8>7$>MaT!9st z%gf7#v!v!AZx7@)*1{T7HHYmn1|$QhYR!;$cqMw>%Pa(MwMXLyp$1Rz-fP9O@!Ol7 zg{-TmP{U z<5*Q;J5t+kxZNDaoI6ax^E?gUatHke)ZZt>j~)vZi>+_33Tr_%sedkg4wy^@Of|AL zwXz~;@F@g12J!yrx@Q90DHye13Wjpi0F=R7uKyjSaNeU5v1YX!urPY1FzK?q zDIFt{EVzBIf@ObJXh3f|t2cbFw=MwtEhZzM=wQ07279~86~VUmV%KVq?AhGInSnZT z1a_w$>vGA&=XX<>u`gVJDx*2P%+ojTHO%(s z(^q}@%HDX-iE{tTn{S#&V6JZzBD?N(7C(*_WOdx>1PR=`m)U1qFMX|W{GEC9SEtIU zK%^k4eR`~d(faVCD|?S@m5IN)>35&(ZiS0G(DF5hm4vBXkr&6*1_Bo#P3_aPyqWiW zFhY<)?zAL-&O)vCgsWiPBGBgC`5=_rRb+VIcxXQO6l&4?`hA1euIor}*of2vk!(T2 z$T>*I4SWo+$UDjDqo%R)6XomvdhLoz8`C8tR#KI^Hy0v~#<>;CpX1F**B_M%hH8il zX;&8uj0xl8e^)(1n$+*o$s=$gu0A2}zR!9U5XA})4_38w&ard&F0E*Zw@Fkx=6`fr z(H=z&E^ug&FQ+Lv6d4}0(PU--P3c9lKDN42TaFmGPp@Knp8wYJC{taf^Sy%%>Mh8; z;q+;73LYCg)2}*JQTmsXKHCbE z4sAA<=8KR#h@bk!(8r4dorO6`tr4+FUMvRXB`SW0;~Tl^%E5T#rqPVfKUBNkq&t)m z*PbZCfvUbKhS#)>6J-BB=hYvyBnDb<8W3iA=S@1uMx>RljC)Z9d~`qze)9?szoStp za0zMH>H+#ziRj=TeVp62<~8qcRT3q_v-(~UcckhzZ1fbVQqSGjEgdiX^rU;CCn|BT z{&lMEKj}vVPLRnY&Y?ZnIkE2brYcQ5C%H;%T063(YL$+A6et@QD2YtWO2=tuG9G_n z9M*q#!?pQ5T`WK1LDB>7r+HSponE*HDJtzNX;Q!;lxkdL=q-Av-CNmDU>ddTOs`WL z;730A!KzZN7o*U2!N4gng$yqCq9QTUne!QtAOZ2ya49Sa*`Qmf14U9>Pv-#oQ9Qmo zF&%6&?YG++C=HYp)6PhN-0*W3NjRiIUhOlsT@!4bIk5hV4;LK0A59^vTp0(_H0hQ{ zl6nU_l7NI>o*U_Q!F}js%-}*fAM>DPw{bJjo^zZNH&AaD^dWLVD(E-D8x$)P#fvEW zeq3E=PUlLQUTd6+O5WD;e3_il(x~a>#VteJ|1}R$XHNKFmHd@V(EQDhY7H|FOOwTp zc$ODrZFJcml1pqlZ5nVjv$=8-)WNaWds6M(W97~c7=N&=Ue8(@=f0mL?mwH&Np7Bz zjQ27sq(PPX!`MPM>;=@M)gv89RhaB{EK1R_bew6;mD=TvfW6+JOec2*`7S9 zLos2a3^adlczFO0uh7klT$gZU|MU~JkyxC~vD?#jKO)pA8?;*k0`6yGOTgig=vfar zBZ1{C0CGojnu_mN3MIs5t6E0b?QFR&^z7?>O<_6C8i{n}WXw01+tvX1iyOe?=9-v7 z<~Dl1qn3_Pt-#e+awE|c_p|pEMxORFs1aoT5q*(iKD6341LHM^xv^qcs`Ob&pa*@~ z&qe(6^b}es)&#&B5hw1=hvO(xCpWMrAZvQ6Rap`K^ix#p`m;G&;G+e!f$BM9sht%; z;L|JNw$muhVF0_{y4`q%O?aw^+sOw(ozNKjdN%quO5F9XMb0HGh5D^`#f5#YHq(#0 zxUv}c*3SIPuKw2>Om)grqiiLDb8ThZg+K)N5UinPi@w>3aAPGx*xzNocJ< zlUku9m_r)j;r*~itG?$- zi>;_pmbvmjxr*T;)n-*4INP^Ci8(F_6@aJO2MS22J}Pu>m(XE05s^D>qYm&bw7?NF zjjGO${h`f`RN@;~O+OkDO+W3v<_3mJGnG(~g1O6RDMb))UPVho>kOYA7gNiJ(>G}o zOTwN23{L&mo!S*J=tH!MF=nqv+_^CQ^^@uB*!&$Gsn_RU!}_0{{Yz2(qmw8PDcWB# znBO3H>me80PhSiI%>spBQI)yoH$QhtxdmH~RXb^H%$QR_wpp;8F+`WSqPUD4zkWPJ zuToqg`2_gkExL0mIv^YB2AKGz;mXzr-s(2(NQar5KD=!ihfeyC`(C0Yu~`a8MOcVg zG(&+8N&;{^Ww3QEBN(#P9PD79&f-%@ftIS?Y>syA($MdAfVwN-TP2Vv6^&DViN|JE zl^)orGeJG|u-W2F##m^T!>aVoQhYNrV@5jlj_q`uO(aNgvRx4vATt4#*fsBTPgaCz z(T9P|aq!>qnq2lU8@jDB;l>}CZ^D%1?j+W)YayKI65W4=FYleAE$l)K1px@dOOk$aZ@# zA{uj2DB?p-di2)K`zxbD1Gy2Acn2e<>tx$Yxa67kJ4^ce+dZ6_N^`?TC1B<$HOgwT z*Ggfgb0rAD$5sFwh{sV|X$es^Zcl-VOLS2Fm*iaNC7(0~bA~vgG#J+Ll?WgTC^qMB zOBI)5>?$)KeZYREKktcuSkZ2*`;pw){!13iqwlW9c9?_%Kv1+uEcU0RK+A3&9~Q0L zQ#uV|@k9M>mT_a-GeLyKHp*gtd-oVr_ucE^Aiz!%+AGs>s~8wn@q*2Udn@?}pEj-_ z-Jj61XU^o~3+bP40!!+>C7}<-8NYato=1IE|Gi-z2lgSP%^ihvo|6~M#+@IIlwM;2 z!{#s9cgQ2dS#^lMDM_a;5FhHjYa_i$^3jIn&eLip$g>qENXkdaHQJk&7jTJs&Kr(p z%fc7BTeGX!?BU4_&C+A!BbOn!E14< zOwlrrt~nsAdbLF(RRK3((RGL#B)5}=d>NQ;f`TES20dGV#W-mMQyoQxE&-{z`MZQZ zhm6&55gmf{jNdFNYxlrAq5bxqFTt9HC$z{fR3eUc-lTxOGn=8CDll2hjK{itm@t0G z9!D79N67g3Lg{2=>yJ`~Pz$m4HFc&|%+z@nUhMN%jrXn4BNzrlKG7Xkk2zp9^2hO` zs1ZSL#~O?X*}K-x&rAF=bNZ!r0>cf)_m1n>#=}qFI~{B5a0hh?vr-x}J3jyQd3bg~ zh6TQkG0+ab5m^TinxUG!rmbLP+!j375vw2sD0?OYOtb(5?59T}!18AW`n@0(`7=xe zq&);GPL8horUFg>#&ok%(oCpYJeac{7uE6;+NpVmIK=LTn2DTDRjgh z$tH>VGJxqP(`s$>n5gVODT4yw>;7SL%H-D%@nb2iz6TD?s@2$hzh_T;yQd;+pjbQ8 z>7V_ROy_R{5D*z*!nD^(=6_2E`0+SCKp8&*!g;^Uy#Kt2I!5rDoj#c+{EWN!UZ_L2 z2@8_2t{s+>{J!FU`~UMH7Z_o_r`+HF!%sgE{PlsWrJevw{IvVhxPv3%Cz8hX@QF*J zmr{H^9^GZKU7%84z*I~%JE8EUw~x%> zQt!O+j=2F}cZRVx9NHo>74xN~HuH>!OHcu1e2$7i!qGA<;jDjzQZVjrL|}G*IdYdd zpY@Xgkw6y{3wBAY^YtYh7(`2I^}b>V@{a$oUffcIYzR5(C0bD&D~7BC)uPG^{n?W9 zIuY#Zp7WCky=DXBe(Qi5Bpx|Rq7iPlYz=TpGYRL=#bmsdA|N^HNqF*zMG?i9J7X_e20R zvJRYF$H>8Kyb?&mmn_0LL%N@Pfyl4!4<}W2{Hbn76GXr`N7s|2uUvJw!XMw{FMRy; z{%o&d*f8?F0{qZ$c>-1~6JI*k-xb5l-n__}tcg;vyUtgAqOd(|rSo?^t|0D_z`7_P zy@G||gqTP#bUR`Jgm$NW-Nr|Z*7IGG^vZ=LS`<9*LqWjsmx2^<+GhZg`p}M8l(Z!K zgW${6B1Y)5?j>(C3oKU^G9M<^)a*3{lBbBZ2ifnxq&w1^X<6RLxmH0v0^<|t|@d*yx z>8?>ULW`@kBHgNJ_K{|0(Q{M18d4#yS1}zH1jJljRip-T7J!GzDzIe#%Sc|QQ1p!} zpIL**c(p@7t^5X6LjCnA_yYOksOEY9_0T*-B(QMM_aG0`jS7z|Oh$W2*Zsl{b}1#i zwv;~(4yqEdkkIUJ&J~ZoJV@6b*9QC#3lI(IArm=5UB0-)jhVPWsdm?LyplRnC(9r@ zUANGyMI9S|Cy-Uljrq)lnXvuMvm@r+N0f80w=8$#Z4im;2;uId@h`_eEf|i97%ysX zhEDNd-AJt4vjT{4M5aAYDqgm&6nv>Aw1YKXDv6(IIn5A+*hkh}=Ue3;OB&bal zWCqZA%1}5OIYnN>#}b*?N*QPe0I{lp=dM&f2nrK3V~?3+ti*zK&m8#=mHA}@%$)VZqUT^NByObm~V$HL$bxW1Q!0Y^=HkJJ)RL98^^fy+!wJb*vq1O1q# zbz2Mypof47Ur~CNX<<6IOgnU}Lg)MrncVBHEr*V4*W9JUjA$WjMT7XPq~@k(2@miv z0YXNly{S=|6MC*Ma}#)&+$vymc`$=dzH`BT*K`7qtVh?S!_5N)tMFTCi()=ipQe?r zrc0GVd|BYIk9NDTnjQ}yb+~!=#hzlOqOQ|o=0~?h(<(PXr;d{4h4kPNAT0l6XU_k8 z@>Q$^@Up)FN>4JUD%ZQb787rHZ3c#(={V6ARi7M>1~F@hK@nGbZJNNfPEov@SG3@^ zr)%fG8k3$N?=k@Tf)mw6H)+zG;)|jkxSoCPyB<|N-4xghjzdDDVz85T`gWuY-$92; z#zP5UI9{pbmcLN-ZhfLgT+`hKU8Xd`!=IQ-Q3N}{=)M*vA6fbtPA(0A*R&uuD(K=h z?KNAeD(1@S6Hmkn(^{ju?ooUz-<8KRt-FPfa#hCg((SV^ulSM-93AbNcMt2uCMBZ$XCYn^ zjqwdb8xI{rdu>DUZ4%n$gZ^RHDS4MzG;4o$c)%Cxk+Y6r=&>S$Op7;Z{EZi{p+N|k z(tujY_2=tPnYB_-34v= z_BVLz1vNJ*1svyVTT628x~0q6rCJ5Ia3$C*@14A;O;&3|&W%^OomfP1x~mEuZJqA6 zyj^m}}R}>w5)4gTKk8#)jE@+X&WG}uWElZJKmE1t(&za%Viyf3kU#`BPbSwSfwUf}Jtphgl_k#Y#je$zVXXCvtu81PYxs9#4yFEU;ccc1p zdzH8>CrllTpDQ$ANsRzNwY#8|Tv+6U{)ml~bk?IzU|`Z2x~9ME^&CC7wcx9mXzaZR=PdNALy9hVR*XY+%a6V(M0m@XXU!mbt}BSqGVT< z)8}3Cz9hL&#qIXzaLM%Tw!3#z)!y6R0gYI~D(TMs4t~pK-!$%&oq2xO>5#S~=Ufm< zdyA1Riub-9nK{qjuLu29Wi5H`(wC6Yqab={*kjX4}4yO*Yq+C4CTpO$zZgWarC zNizO=Du5+ve0BVTA^W=Y2TWNrqvW}v2zuv&fc1+jD z;XFYi;RQ_{sYq|}o-}D=OgJj(uH4CSuOlLPM`!=&PM+l=s-@&U}xTuY(bfg#DA#KwUm-c91b`H(eyGVbl zDd9lwiKZ`=w9A~2x5qo||H#MwBuu{7Qqp;HFRZP9xobtcCQ8DlmyzZD#?#LZ=JH%8 zcjJ{14?mz4Q_=?KB}nIuJ1fwu?hK^dD+T?w^NTIY)U=uBFzp^Yfv6hM(8k2Hy#&$h*DT<$sf5I<_Azd{;j+~0DMnCrgD zxbKdPd9OhRxmfOKiQq_Hf=_RQ;+ss<+xa!%pvq$6-%nAlE*HbYcwsg_JiJIhfI-;@ z+m3JNr<&A5qqEGp^|H2 zsF5!ls;zwVhjTHd-3Eu_tI47iV8S;lxebiG0x4L`SV|I8`4OXSQnY zx&lX(znyJzNpD62YhJD;M9XF6DZ3DB;)aAv-nxLcBOP@F30Jdfa80Fj_l zO51TvQdxAUlX1L3mr`)w0&(J|=plJw%w@AZc2MU$u^Y#^HzyY=ci|-5wKf5QzIob5 z(mpl)^?2`G*FW_Y>Z2YEE^P4|$K%K74!*36v#Fa96mO%!B45gqYg*e+80g5mebTQR z+n;4uaODvXaqso`)-e1{9-86IDO^Oy4^om71D~#FMWMel3yUU)#Kv6bLT1z}d;i*w zwDfs#bJL3d!QNYkMb*XsqKbeZ5{in7q|&9N#1Mi~0!lXq-O?~Hhzf|Pl$3Nyhjb5$ zNOv>9fOO1I!_aWnyveKno^$>>&%O7#|M;LXd-hs;?X|w~iM+Hhn0coVSMR4Sz}X#l zLRo=aBCa_3)q>9AR4<~$fNB&uEFV^-=+4(H`{=HJ=b~t~w4<{_Xzr|C1Do^s5*zSg zK6em-q}@O%phz#P0}pDSvo|4nCHPxqKQQyXkDGy8Db;}~<9`rk)mqOJJD~|QT(b1{ z31aDIL0C3Y2LOh0Wwuk+dIu^IiPYIK^ossmmakJDD?e%=R&t6MoMO2|AZ+0ipJIcU zG%cTW#ZsHd2624=^_pQd(Jyadb~*9HX#NSJtf-??vOs}&02ZUf@=?2F#F6!4pYY+5 zc$|(Vd?li@O;Eq!5&F@}0o;&B?7iza&q2rN(6gXB{6~ZRcD%Fgd$nWB-gu;2m5*sK z3tJ3IokCFggL?*xeMhjZ&uWc4%gfawikLyusB-ADah*8&*`YPxFXCm~2H!tk@q(AE zEQh3!SQn(vwZ^2!)8OSJV>s2Y$l&e+U34o@pDaO=_t|vZphoYFMaCuOyP$Y^t=;st z3^sS3F19EXN1jPm@Vo1Z@sgU80_MF0^m8|M&tk)!%gDVwvwvD)lGpB*BWBnEpXt z@+VyYdG!t8Q(ls8gM__mi>d0cm2h&aonNjAsWH!QG7u$~?}+75IM0W$QfGa94&$}| z3}P{O2niB%MepO%HFnc+5@Oo{gCpd;BVFa*4ahDg4&r%Z+Z9!>`O;+VhmwoS;*@EI z-SSbVY1~o!_b1H#1vRQAu9oJPUetE=O&{|rCX%TJsnj=#Q$Ue>!}moJ9Z6` z=9j0*0nNX-@L6xlWUxowHy${s*fS%ZvfQ6%1c@CnMl9rUW8KN#_8a6J0K9s5=|KGP zLXTY&Rf8P+bKKr-wKqRA#Tbn!j<`?nKad(w0-R2{1ID@E?gWh6NIaGfxxPYTC9nqim z7G`@FqaJaAEuQQ_<8We9Ob0uV&6}GBX;o8+mC$k?2u$T`J$Xd?@eZ6lFct(f3fV=- zfm}Uq$pavtq0mcCI8=Af6%ay|fO*JtRytCwcLlSMKi(_CC&SyY(OHh&GwOos7rGUZ zLY#+E$plFA*AE5`REtc@PDCz^}RP(Zvp7GoOOnE>a!nzIz_fI3M3QU=@TWZUIZ z^dfh95`{P76(R7uDr$FFi+>hn&RY=&hVt7ZbRk(R-Z!X48 zP+^JOzubk2Ctk(09lfMWZuy0H*NIRKwK@HYwgDuw(Y$Gw;*y+!5vpn7+Z7rAGgjRX zO!i-OoK&uQ(y)b-?x`}UPg0IsRJh2uXVr5=9@swx`ijgr#t#FMS&LOCXDB-v(3iA8 zqou-WMO?gY#&Uq2>H585@`5pH!TGM?A~SEHl`oHg;7-AZo1H5~uy!V|U3HkLBp?@; z0_}AfT(Qee5t*+L{-(*XlZnJW2B3U`PadQXqprSk=98Ll9p-HUYHxS_$H?XZh9&m) zl1QFS)re}op>Q{jy|f_?;vnEKt^_!ZjGNTz!Q|~*)V)COYpaTUtlv()_VAty_46fV zGv4=N?nO=0&0|3D(hPMgvTbh&j#Sqvw|{Bidf06@8_vDqXWSgC41;?rfwBXG8Z%D_ zwUF&FJLy%;;FG6xh5HTQBJ%#qz}yHr?6Nf8)K(X(h%+}D2j)gl8JxM%u9Q=G*`=eT zf?Ya^!awlr*TPxHRiXYnG{73VSQer#~s4yDcnKw#kf+GWI`lUF1a!u zX590wAr~KIN-5rdQd3CF$m0!G^2*?l_b}1H{hOX zZ+y+iCRsYtqRII5rzMR>Dfhxt6$c4JZ$9=^(U4&gzbwAYL48%^V!S(ZX0G?z50Fu2 zp6n@@MBS$k@5!W{g+uRCXlAN5o)}y}!qfPz)o+3IKa_Yfn=tneb9i*>=9myTbb;>D+uM}I<%5GJ zak-jix&1fu^oPCu@vU%vMkyyswK{o#KxJB@S`!x4qu(VKpkrzYFK%x|%$$q&n3@`t-X-@zU zs+0%KJ=8+6tL{!2VmRLHDw*hAWX0NS)tip9Egdcg{r08MvNf02C3`NYgHJUlH|9Fo z(iBQvNRj=MQy$zjjEJlmdL2uTjLOp{S1G(LYfoiDj-2N0GDGP;!hJTdeIpzyr*PyY zbl9bKiLyy!puA|j{n}-{a}1g+jT8XnrJ8$N%bOu|uKQ2m0-2EcSX$SS>pW1hUg>-* zY0oksr`Ha2ly!8%4&OoHMA|7TuQp#Jt9s`1)>OtrN0V=>!Z1ABIqf6(NQw%y zVKMl>+@$nQtsgSf-VaMiDc_`p6QFSpC z?9#}283{~7LCMZX>wO~R>N<_M=g8TBcQ$@;>E}>hR6WUC>67_>LGo>F-4=&O9fSif z1ybkI|KmmMmX5nmaUtDz&j*RkJ2_Doou`{D*z^S9K%{_AW{X0SVmGX7(M4P^)6_$9HyV zqy?0s%sMx3@I`uv&>@b$(l{8ys^-ZT;&xsR#neB2)t`SA0{<&?_7B~{W8vnX7y19{ zN8PUZC`KLzTMgREeSez?RJqH89EqHNo;W~8yGaFVMUGFnDZ=sJ)9fj|p|WDDt*t$O z{oYwN)f+*$GH0rM7$f@_^VZKY%qQ>+!HS;qC4a{(8(Zf~qLpeL9W=ez57&Pu7q=@6 zAYyNDCt1lmf?sA`lD-;j#9#Gdm)vXW4xn2mb9vG|D@B=wcF2cN2_x9B2D>Kv^5)ie z(qm1@KYPD8-E@rmN>R$pIZk^ZqSPExQwkXRkW6Iai?i2;*k9;p4w`LoqZFG50r zxjUEMS#xCO^H*e>=DG8N*TP}z$WvVT&rAQ?^8r7JWuA~ihP6DqhIcQ~DRaPKbwb|# zU~{?9t(oHfZ>Et5l-vSudT?L6h!4=Q*Wvr?+0#vH$vHZrBJ88*w|@NsLv}ECY2@!s zWywy)`E1Q4sK{ZLL7}tqR!GXjV!U4#a&j8j2#P(IN1e=x`!c#UO1+N4aJ@q^nvWcx zr@oQpsyWjBW}an0%aP$nGA|yC;G+;7Yip!U2{l|tOncnzxl;&TZ*)?t ze!g>B7@UDNmcTP8RqEv#)f7|t=1?XBV>@xw&*Z}sKCHMe^`&JlJAVrg*HNwaYrm8b zjjX&H%&BvJXJ%qB&-v1CX1(ANSiDw`JLqNzBDlsFAs+XGIkXO)#sHkw-2^01`b(U@ zET9v3kGa5?4SbE2P#^);TB^7V7l$fYDSDJN+Eb%<-JMCrG~nFzd#}+49dX`m6cdi? zt4a9~Zp|ERmu7@Jg*xyW+Ef|ySWlly4RUh6oL=z8upB;quA4-NZ1G@wif0`( z*~?4040&Y?y&+YgDVai2JpwR#_b=+OK3xV zL6x;Nf@^P?0rZPl?gq}1Hc$TSdx+cVa!yFm@!;Vx0B{TL`Sx{po-4763;`x(yTg}4 z!|iH^Sx2&0c0M$lj8~sz5dKj4n+Z|`RhYY9@bJEn0Do86krEnit^7kK;J;1Z(EjZT za0NMYC~5hdh4PpaJmc?mu|K=<{IQeytWtnCmE0un_ZXSWV0-qxbu;~V7vrBDkX{VT z^;hX=tKWPn2z9=L1^W1G+rlrKJ}xpKA_og+^}+1bUk3^{tyiDHo_hI|qsK3=GHx=z zN&`HC*oTT=*du>j>;G)H=hEe?fRcVD?75OigUMqOcnL0a%!(uTwsk-%!{exN3;r{NW+VPzoWQq8hG2=3QgUuMXAW-){-7 zeY3s0J2IhisxCvbc+0HQ(5OWyP;g|ge~%jSDNH?AS1fCceG7-;I<_Jxh`}mh{34x5 zJkC_`7e2)X^FQHJq{hMC7-!;9Zm@emUg5n`n@|}*$@1YmlTjGJ(CiGOy=UTuZNI<0 zxW1PrvAW1!lw4buu;#Re-xu(2~n}=C^k7!|AF84{Qeoe>nn)xWMx63Y`|~zBf^ZuvVEis%>!Hykvuf!wiE&|d7jjoG{~ z?5wBm`vmP9K-jXV^==@4Bqd9SLjApqY2HT>E_&)abMxJNs?|d&Pz8W7>b_a*v>=2F z?H|rus`$x2%twwHETm>yqV|A&yfWLdkTxETB2ohY`vF4Mfd;f7J*mCCQ-aDB@II`g zx08XkdL8bZ1uh0c?vMNm46EHVfL<)uv#IYP-iH-tK{WgsC4JB%lw@ZLqR$H?ShK zKaJX5sFg*uh;uZk9!v)KC0W`Dp*Dd$iv=+F6Y8e*zIxU|5_3CkE1eS9NHB#m)RU|q zl**qZ>n9Swb>OLdG66WBB`Ss`&5Z@gsX3O)t9S=hXCD_AjEZ z3VJSL&Vw~y3cV=Nx`&OP?3h6y7^*~^2HBJ(=6L{yN{NunnhBKE>;+{5jA#bLo@`%( z^02@TzQd3=6-F-${j`-+Sm0_asFb9~Av%f10e>J~g*}bqQNHOm&K|iXf{+P-y4fCT zhlA*4+C44aTtx~+>;^nX0s5~TG9F#dSRO_|g;`h=S@89HM)K5Z>AI*T|V>*1)naSHH_J{a_A0Kcw z`V*8vx@@06iat97WcWYD?$|_Yjh}k=6R2{P8$<>x9)`t&p+vDF&f{bT&IvcA%|Z^I zHS(0Q#FHg?jsEb2bAvjL476&YYpmLRyiD3=X@HC6rGGIoRy~Lkvmo!`ltAD6334V5 zi%Q@U;UBD79&wh-Qb!vLDJ68bda9w7w#Hx)&hz$-$|*8%mW-rF_9ppP#B*x!H^t)| z#@ZD2Hhd`8O%G#}eYE9TKu%>mkfTv(yv8h=Q?3wRma2*B3HdZPDr@7{^3|7m+3Os} zce+{iKT?krk`waaNyMwapQ0dQ^0CwqMc6HSVIFcVjHcB>vMEOwzL7$)yZFLv{ufp+4idR4 z>`L=#I`xqBc!g!S?yJ0|`!ym@^N-H!cP+qS+If*|WA^}=R0}b+mVU~}cP8!jFWMlQ z&l7{FPWljC=pyF5_de>W+1LIno?}36$-sE8^i+@ln?HDt-{_H?w96vzl)pY(_(50b z-fFlOy#rtxF7;>E3ytMjc%tnebSAK=U2V4W8!>I$ez7Dn zSz`~NYS!~7T)yGuHszvibLiA;V*dxkxL2WCv>`jz7V0JtdSpFh6pf{-J}S6Bki zhiHDaci&Dh)Nzg*amC)5S$_*h#R9nM;IRu}u9UmxVAbg}<GczgH(0&>uMNfMl zY?j5P0x|W?Qp*~T8ROtv>BmmiKe7v;wF<&4uC|?XL^6+-2E0_WOjD(0noED&9u=q{h>{fe8Hr^2LviIKi^rzjUgP&)ua%o1$5RTQHg*<* z^9N8Eien*LRr5Elq0=6xyukr=wv;AIa~KxDf?U2q2hhQ6yGr%1+2KaJ(x#n;T)>Yx zT;j0YHYN!vsb6UP8idH=$sZejDV&9X*pA<0Xw-80ygjp(TdXF55boJlc&8|vr5S+M z31&&CpRB$=sT6egBhwR<*KbE+v}OG_4vUYX?kCia;%mp;t(W66>O}F(b_O6%oRH|2 zmyuEjns94w_nn5dt2AAQ3r!N1Tmq>&S!%=&>d2rjHpV|YQuy4w03u&$edTwOkMM+S zM?=N(`@#XYkT^%-IZ8^YWs+^)QTgUts~y1YH@j@2%1D}~*&wk7wB7>r_rn);g7!v* zD#^LtHyL`NZQeA^fc{AH&}R~TCAnbw_+kq+wUN?n)W~Qh-`m-3t*DcU^1$?w zOeARhM82bTiK(-z#Z_Mg&Dw^7W}C43arP1Y_jD2*f8})qIzq*+mO)=TPj}$x!EazOtNmIG|NIoNmT;)ZK^}yV)6mlNt|Z zu&AogK}>Abvx83n5~%5S_JCD#bK-?Ka$&kR>~QDR2d<3_F0Wm|FmmyXADOyQ*1dJSu6ZIS{luv_uvu+~i$ympOyyJ- zUwyLZ73Yyyj=I`YpZQbO_qpV2u<_ry|NSJ9SjF>>HWANn*Kqq5N=K+Sy)2GRP})x& zxMSy>U>Vq@YWKeG=gnj_uw39w6{DkHWGrvCw6vTzqNf6{FLPUC-m|I6?DZHy&b8TV zZY4{*S*fpBLYEh?IK%6;ANf1czFVLPj&hHk`Y4#onBbJhLrnSIRdCoS?p8TUwtnVE zL$=FzM1Qud{F@6Zdzq9G9J23YBhEMI5tPdqpXmq1D05T%ad!F88y^5R_p~_&^}pNT zpFa`V;DXyrGoD2Fj5k4<+5$B38*3Jny0#9s!j>u2)4yi$%(j3=Nt}iRT;v)M@$*y7 zGPaUHjA;>)TU>Wuif}~UNLMik?ny%oF;sT|0Gg=WyN^sL%gBzW-x|%*idqjBw@&fJ zJi6tIj+B8?(TW1pF`c;0R)e54l#25*Yd$=Ftn=368bCUiFy#&Na2UflIPn1Zc|-tZ zRi)jVf|;O^v*ErZLPL^ROmy100W$8N_?r}7xI%nq(X8@yZAs{t5<4N)js*B}I@3s4 z{-ZCWymL!1SSe4`QQQ?v(Qy^l^ou_l0y%&%edH%4WQf8=(I%$esZMWPron4$PtB&W zOL|mgJoO#&Nof2gpaiPmbo@MpKgY}mYjKI3^H*+4;`^=%^!95FD%#1eV7<>DFvly; zudOw10-aX=Ls$RST~J0aPFU_H zHkbB(%Bq0_a3T-?1>w_p4`n1-LN4F(d~e(t(hVbjz!KKgEL_ZzNX9S_Al8$v$fi^H ziIRqy`pO$JJLORR5K@-w($HAJ+eoFiSNQyJF<8R*M`fD-z`g#+*p+Zk{ZH&f-4Vg} zx6wSOPTw!H`Xk6=e)|g*jUobfFlDw@oRg#ffUfi40N|4Ez$L716u`VE5!~fN z%>`?mkVc>VRF(C>mu_+6w~XWVgs z)8ARK3l))hC2BBlk^n6xJBDlKdt%q?;np*lJmhV zV7#!SzjHZ~yZ{Cpc!xYp?`H-l?%BSs1<$H`YuIt_r*Z!A*Z;%8%1ZfwWKQQeduU~K zwjEJuJ$wmd@;(`lOerZ~hG{0MZM#g_jLSL%l^076e0+gpM0Ze4in0*-Z6d8s&bBI{D}34qC)E5r&9hSH6R6YGGCacOxdh5scq2SzWvO{Dpf(_WFmp+F;1w+7j zGcx0f+>wFpuTfF+CWsfc9s0dLvvBbZl&X2VByfRjWlcT z8at3^e;@VzZfLgU#LmnsJHQ&MU*B69{1bgQ7A4nHSzvX~$?d3KIf(Dr!l%I9UeZ*P z4#n#Wc&HK5$eoSaFfsSSrZ;x7LxL7v!9psKDzRrzv;Z1y^=V1T!}{7n({{2<-IDUR zw7m!3`Gb9%2zp%}1tB5n^-+@mdjLuwhj-liVn@>8vY$d@TQ&TT4bbXCWw6`RZm6wxES<2C3#cx89}41 z(7v0#IYAFy6G14#r^#NYD zf*{XZ>sCNL90%d+vJFHZ-CmJ)BHoSNBYk&t5P)7G+d38-)P;eK0+M;Hk%5Ak;CqlB z>%p#4Nj;mhcAA=laXy##p}Vx8?MHgh18^2Ry#x0B8$pe6Nee4$cp=79pfG_etD{!! zX_)g&7W+(kiW>1V)hk}#kLqFyE#`j`Gl_51%`_j#z2g0?RzsiW-@W2rZh;|F!C$Z< zQOc~nRO;Q3eWSLw8K=o%Tmk1H`FjXzCfzXYnk{+j9ccSIUA-gyxgR0F*xC5E8V9KJ;gM2S06ug*~0s_deVyGj92y%WEdjVpp@7 zHQjNbS}2Q58!P;7wg3}abA@lALp_fqEl0xm#+4d=t)<#_e!KI$3^Dq zVOvq6t|&eZL$L&7kooPy7RYrftpk^by|lTbXEkiqx-9kft?BX1d zdcF@6+iXUGI^gS$0?(FW0heX%P`D&_ruOGx1u$uHgiCJ;W^E*{agkQ96WNX z6y|t%Nlf-gd^1s(ea8H#Ng&O9L_Hq|G6L*8343vmy-9~w_Dm;0CnEi83oZLysO!=? zgB27a&s;8zdixdsiAAdNm;-Y`z(S=jsOzx+$7+g$O{1Q46*d4?eP%NdAdNY77~e8p zBOdx=$835^Ic1uompgsBC0xGNV8=Il`BBJO8WBbG=uYFXiMK$V#b9kIv61DrMP!14 z>D^N}|D)#TCwpgj96RIR5C(#HvE&P=waANUtQDc)+k3(xh&P0vcJ&9M>)4HIBhxHP zez@E&(F?aX>MKA4*Ra42=A{dy2HyND@!|yFiA0{7GDPLrI3P=aFc9`zz6`LDIZ#YXxAe;U-4mO-8g>AI+M76-stmY$5W zYCNLC(6m1}6ki$N+;i>C*{NDzNT+)Zd--|OUs|T#BRriEe&|tjX zNSI2!Jt?x-ZCBL(g*a)ezy%{ak9?84NJmntu~Tc+`KBe0lWXk`0}0nIwv8>0uUW=2Y6A7>Iqix=&BEVJF7--rffdMQfmSXjy|%^-Ap z;w3xQb0r#1;>CS+eCeh)seKTggjIef0yZiP8KQl8i0JswGkpbml1AG)j!gKBCC|xl zzF`&nHeZFf^x#Olmja|TXQCcM;}v$#vZdJ|M$R|ZKhPo7IdjSUi8M8&5li>UEhl|$ z%oZJI=`7;+` zcV|0LcBih+-9Dgs>Y+i(57{Z6f6(|vdgS#HE%d7WTTplBFYZg0zVBtaNo>zu#rO6w z+Qjs8f4uEsAXc|`+-h7uHfhp>d>8hX`Y51!?H<`6mqq@UtQD8idN%>q!-YDnJg-Bl zLgPGJf0wPrewmLkhR=M$srYKGpoKf+yRo}Kn(bl@ny>SQK+Qeb5lIzjN5A)x+Hm=^ zpxjT=T3UHm+2oZdGU{6Z?veefb{VL>R65yA#I_vndYf&E?_zA2)9#ZG1L?C73RG8; zn&7g_i>1189oPI0gGI$`P1Ev%E2>L|#b%Z1Io@39IL6Ljk^%89rV-AVlWK|)9>)$lEw z(fOhid$g|gsq%p+VT>4`Sq>4V09XC>0ELw^#mWEyW-!+hol?3I%|`_p5P+n5QVT3E zWi9b-=t*pXymux>+`y#jXv|d{+rKLn9>FE<8V7(Bq*5BBn_i!`VwOfM=l2HzN+$`H zyDFZv0ZUU->mKxs?3|iOS2CEboC~DN_sB`1Zs)8k9e=e(aw<1Pl-Ja)aezV; zC3>7mkGwg6{*VKT1U($n)m`@Bi|keiw+)jK--W>`fw*@o>N`WuwqBQd)45z-)&l>@ zV!-SGd{R*DYh~REal8=qx&L=}F@^eg2phIcd$d!U+tcVBm6JjM=P zeW+T#nj(LD->9p`wXb|F?&Y$M)8?X)>T>QS7xU>ro=@QHWT{k6N6PPcPMocx?c0n! zg+&WLVP=?rq~(0auk&doWv3@9hjnom3L)kpJsG3&dGi#GP3FaE$Neb1I!i$is zq8`>sH{>Wf<41^1G0>-*_w9i){)2{ny4$>t-^;KFYZ097QM`0!V#k`%){(Pm7`6M$!FCYum#uI@9&`(l6T;Fu&`Tp<69`xBTDn~LDHo}6*#$tNA0lU zqR^sh`r%epP@D+tvDsX|PBL7u{@YmKM#m!lt;Y8}XR#H|3%mnu^Lx2oW zjK;+_mnqy1#*L#3kNn=E2OW%R-6pdRV2QSl%)|D`mD*)|ufJdul`BvFgX64z0MHR6 zbXS$`0aOBxUPb7&)pp~GDQi+3g%o_J#JyE!u&e=x%>o#${_&0%z6qyyxg>KZUNQfP zn!$sWb-YIz=wUjZi1#ZJQBZoaES8vFDC` zH>k$ATB7xxN3(s+E1ou1_9Q)>XcUz)>iwjV>Y8B6AR-igyuLxdP7JCEwPtq$aS4<% zMM_cCB4_?lT9jRK03oC9y+2Yl@vF4vwe2h-*|uNqRG1v@`$!pnCEn%d94+-y2zGX! z3uY)Xo_;M$X)*up4Cv+$({8v_lqN%_<2~3v7w;B$6wGy>0iE>VZvp4!LXzE41ucyt zuN9=u++NXg0(hFOIA=P|yvL<}BO<9nRuQr*7U)qPdEYm_FP)rSzQ4by7!P9(Fn^H0 z;_=8gk>}=>(qsAGL>zAE?u?oX;63JEh1IB-9PAokW88PSs*Y5h2oXT~qj{m1%H~0- z#YSXdJ-(;1U9H_EaxC9eR=Sn2R03HE#L3OD0LjKj=>S}tM6Kmqm$w-MfD$IeW)FMa zczo2^WiP3I436!Mb8z9I9nh>_h6xaUwiPfaq7DSCYj&2IcR$ z8#J@MR-{^~Zq-e!4eS`PcbpaK3B62EBQ%2Bh|f>65|Zkb<5&)u=Ao*>?~j25=^b#D zu8z4o*%Ytseew(%qvcsOhsN)Y1hToWr{fjNoAn#i?4B0hZk4wfO)Ui7dZ*_i9fYJ~ zPMX~yz+?ewl}w&N)nivK1Ht?2GtlA8OY`}?DJmTE4|L-WN^Qp+PA&p!z3NBU%{oHC zO2;3mwyH^Y7_=Y(zEEHuJ`S4B~@-~p1f8rMuQ#?NC3T^FUm5Xg$2WE2*gr9u$9c8%>^xb zp)eCq77=yrKtJ{=7AG?Mk&8g5$5iR`5b7$K^P;*|R@AUj*rB&}4lUgK=$1~g`Agy* z!HPT0Kquj1+y%z!7K}wJFb-ck$*onS$#&&dve$Fec!89E2QaOwawjKjMUVNXy>f>E zdK33TZ~8jlsrB}lGLx0@>$nCaRBsoik)Q5!Y}8*?Ea}+d=xA7~(rd9T8Ht z$XX7OWf#e#1zboq_{;{;AK|gt643D^`)ER$I<4=` zSb?$waWt=cz-aliR!xhpf){5mceP}qcl+fmJhtL*gfVlwlw1c{dLBi4NjE2O)0O@Hes2hy;ebSY>qz^BGU-;B));*L z+U9447uv}7$5X{F_sfXynn#gtiP2<34uSac4TDO-;8(;`&@4ugwJ)oWjfT6rGFRL9 zhzBxC(qKPQJ2Sk@56YW2kH((9C{PF&AuI<%09?2hE?EEdgrwR6=9@-NFD}Ia z?;|X>4KQ{&avbtSO)SYpzr5NLL^rXwh*@qn?Zed2Vc83AB3u-WFto&64md-m$+ z_qGht@hOM}1l2rP@c8aRchTo1Xehc7S?S#9=K$>HTx1aE+Er$X zG6%hvCBa9+_7ml#Px4~yh8DKAi&?a4JnUMn@=Y8iMyJ+sFeI}e;=+crAn%3&wi))ov;!z|EC4{6O*?=TC zhSII!R+w_JwT_aAYo?t_dQEQ&e5?a2)@wh+w%hSe2&v&@`oN`hDc`SXtm<8vbk10r z)rt^`GztWyI5jA%?L0ENLB|D(VW6GctlBHx4`J?M>yrCEN^e)$yDUamY!Y7SH0 zOY1)D7)9%0Ks_>?jyfr|pCbKXFY3f$QwSeyWa(ORz0;;wuIda|Pz{~zyN?{#{W{ku z?L`}RkNRo7MmRM6uc;kxPt=KmrbYFXaJK?JqrRkcV72qe&7rT#l>qWR z9Kc*grZn?*@4VP`i8>0~Bj4R$84SJ$y$zA?4qo{XeQtZ`Gt$~ER1md+r4=~)hI6JZ zTCr4VL@(rg`ExR#{uRl^y(|VKDA|!!JK&?hXI3YBP35eu`Ig1rnXgm@U#gKH^%n5F z|HSmY^2U*?U;%9o14Lr;c$|eZ^4qQ6sOYxDuU3|Xnp)&%0LY8taN&;0VsSh}rT@f> zT8g;0E&r~%KYx;u!u4~uA5?&}Jf-dlUuJ`UE+N9uHGA;w`GWyNxif$VRGjgj^ap@r zX>k3nDYd!yb3|r7IQ=xBRfB3vpJ{hJV2&P^m(~USV)lFgv1S6Cka-*)Z!G@yR-oi< zqBaoz?_%SuS#GU5Riw&O;!uLo(H;_O#fZ*QcgMlzi7(=~EmQY^VkQ32#v<%(uk zL}Ir8D_jn=E_89ncxz*a(shbbJdvsSwksSjs+&l7#8@QIv6q(duO?tWvWBtn5U=Z( zScaDt#S!WR#Qic6&u|lQ_`Cvw&v<9z@Zhvd4{6+$KDF-QXGJEh^a1CYR>7SK#(kT@ zQFJe9NQfT7&r86>pm{9O6@9%sLw?6!X>j%DW#G2lm%>uUe*UUIKrrPXF0Oc7@UM*9 zu`S{M#UDM#Y`@S$=Kwk-%~7|)fjG6$*O4#2$5-lKogY^Ki*qH7I7f7E0=ylmZl5E5 zEG==|dh#up@$PyPfQ!n1zm7C7W4!U$i9XYnuv!2nzzH4&SGCD z4upCGcUIZ_j-xS&D=d!x(C=I#KqISoL|th@VF^m%IC-(Xo%Pl{)z7Mr^Wj3a|Foz6 z!BAEIqk!@2|4~TR0bayh@}r-dw0~AtfJXcL#<-bm>u;t3pTZuu5LmVU`J(^qK2Y3S zy*1qJaIE$7?=R?s+=TngFYw(zF12ci!yS6L6kj`D;`!&Zk$@l&_~JL52r#<;f2e;= z)Bmlfx~l2}c;U^UAJ#B9IHJg^K=d*i+mCtLia+tHnRxsRI5XUj5hxhx2RkN=j-H{(Cw3G+uZ#kA8aRA?ZJh zjs6?>9R}v96MwJV2{`f1D~;Y8Q|5pF%ZZbnxGNhB{Uj6n=T7)s3%nTa{Zq-Gf4hIW z0gl$j@>k7&FLvywY6VbF$)=@x_w!lt$Gcls1Qx#;RVm}KE%%?zdqM-;li_B$Ip^OK z{GZ>72QQ>pRl&u7#(8`<$OkBejjYDIPyd;^WA{X{%1Oa4g#^B-VhM4%za0}jMXF@A z+p`y=N9Cf#yR=$wJbwFYuY5oy{c@s%!ttyBvwwWm0}G_Op@R0e_x~6t!bg}9`}b=2 z`w9Lr9-mbl@y+g8p8r47acuCCmx;i(dy+j}=J=TZzK4IPmp`N2{>0$#8AKEVKnZ##g_#sDI|y zHAqC~V@`>IxUEWxTk_r4%p1LwV-0dfW9)Km=t_z8mw~jea6D?k-h!V%uupFIdvL_UO$7VkU@G+g@X%Mr>xQxwXpv3|lobE(8? z(4>CXpr>Nva+L&-`mlMB#R2x^^C~>La%XWJN7t3Zr=4+t0^e;I3BVWY0BnE0RjhG& zm~X@@{*YKcNPNz4^U4Ar>2k$3{C(-&gfzl$Y^q{5u1MhQ0nCjoBB!G5PB8-yhUmOt+SiNBm9DHg+OC-cQ%)?Y=HBaV;?? zn!7;y4EV>h(Rr&%NM_7{_RS8aH=xuK7;n$K{G>4*79`tBF0s#vW6}VKlEV9I(Z&;V zbP9l5AFDQk^xRo&Es@AW%t-ss;p|Y17eAyiU-rOoiIFak=jyf*hJx5`)iEc}915@k z*Nxf@XBKla5D8GU#ZHC|7fvk5O+pL9?Ubo;NQeDSsw}%m2bZ8Oyk#8gMZba0a zxXZGq#MV^~O-?qoS*3-Z5}#D1z3QXhkxhVsZ|zDdGH#vq%G+W9Y&6h`5orlYNuL2t zf9o0tJF4JkQzCmnFYEa=%+7u4b&L6h3pBjrNzycI59lL{0*wCN{Qlh#>9u{#&tWdI zZ~LG^K3%2r)>qLj&7x&}OK1lQ3eKo}pkRXQV3g!R24*|;=5)8<53>5Gd0}_VD8~;F zdR>rtD^P0O$MoLnPWpNn=;yLQb(SBpZ)lHlAm0U57a0IU{INJWmt}kjQw{v6U696+ zFRkow#N-i-;mNP!q!$EI&v3%~4PS?)V+x8c`t#3|+QAJ9_ja*1+?(Ux2<{~bYN2I8hW-=1)Ty<&3RC%H-fs-+BwEGKHI+@wD2(G%ZJw=E#-Jatg_`4BJN}-f945bEc?XS zEI1Q-MUmmj69<%HGJ`RP6*VDB&4S%SM(0jo^he|#R0Lkz0corm?dW$lLN?Z~i6S@l z;xn8u;6PP5agh_EG$o!@sMy{d1Ec&ShmEtOd1ymT6k>XUN& z-d0>6fh@HgMr!7dPaA3#xT;O4LvHR2e%i7|kA|1pA${yC%IPp{i8--7J(#l0ZmyDO z0b9>BNA)H#6NhgP!hKpJBo;a*f0NrZ-Jf_xzAJv{=5Jt7ip|t_R}>cE;rpc{l<9h|Q?%pg609pd0MmRb=ia+FlO;jo>%~e@ ztJP3L=5o_#_BKx2Qpg!C^#X7Fe%J1r6D6r-x+SHL>4hvYFTWVR5*ST`VwcN4C~%E_ z#=eERpeaQ6mJ_H0J$DzV1~MkSxZkpCuks_x*&sQ0s`I3T%8;?#wqun^zzirIN(V7l zx#OO-{_snbSjk!K>qVy5hHqhBijS?NVh&vv(x@ss+m|Qhq>NtfZjC@CG^R^d>{B+; zV}hQd1kN6iO0yKY*Dd)2;WYJ*372=C3s|c2dDhyFU9uWZw$t`nIPG;t6;T2#xbxs0%=soR_-oAzM%^Qkk9-GyR+Sl%u!*dfE#B#zIJnF$Wj#TO?GO zKZvNifi9-&FkdNVQ@bwp&fB33>OZp4neU(`?dRmI0rmKC+AHgaUhR{&-qAKgt9b$y zCH^tJ5Zhr9h(7o7X|L<|M(u<~wU-L4^vV|PvNi8!wTL*^_E)+Fy$a#U9erejIBbYR zn>c&HL;-o;%hJwTjy%Q}thBFG_o5<#cb^V*W#&Eho7F9`yv*PH zS{-R|RK^k?buL~vQ+0Utwnu^2UWa|f+EBVj#dpf30ozg_Jz1%S(b;XwdEfS;cKPzI zlo1j}lcN-KPp5{f%-`@Jkyj-}uKUgx)g^iK&{5vv$X+Kw2s0O6pmzl;WYECXH#5^u!YL^2Xmx|uG2n$b*IJ*diud+pG#zGVYbhaNUi+f=nVT$1 zx{nU_-nph*SQJLEnmL0rXlKi*7;I5Ok0fQSh8K5p#x=htb{^%8ytE(P_UEmhqcU19 zZOxK>@k9ezvw^l&OL^PZ_c)K^Gxr0>U~U83PJ2}GBjopS^1IlfjhEta8Nnsct&mce z_Sv(87C&B)C{$)OyTVIY5AE#-Z&)D@0h2ljbt5vMorXa!omLXND{C&CaNEY((v8VT*Gy5v+< z2&(Rvv=l>1D48OOC^C%*K@w>~-E0h<{)&QDe&aL1Wd^;h4h zTS-TQV4Qkt6|$!XSK>+!=5h`+^^`i#jTgNU1~)R|4go~kz7-Z?;qlqB=tv$m{BR43 zmU9(ORI>X#0`ou3x`bz&DKc0&3eO@ZT8T{}R;pAyqz<^6LB~aPcK52a&*k=lybJAI zo2q`|_18tRs@+j*%Os6T=eg|*-rI}htm8%YtHu%1a}P%E*-2YjHR?AjE17qkGeP|s}#&#Ywo zO8XqZ)Au_TXcW8^6pxkAYi!mC{)eD)9KDoujw%q6VYCQ_3No^wG&P=)5K5UX>Pa8y zqui1Za$Bk{U6gX+(u3YvkT;|K;V+lSlA2xd#@!qH+_r2enl;>k1d6FTIs>rcruF2pK zVhJ0xUz>mbfrgbA$hY|H&Way@MR4w^E7NmGP_w*o0xW@s82{!{!uB6}mdaSep@=Hm zdHd(Zla=UnjT5@eqtq4@5%1$Z`mck&=!R4IM0}7>V^#6l@@6ESxoi;_0gfNuuE!9rnI8#IOlt*fBu)KIc|0`n`1T!k+d zU#_MegH6scP<-zMm4U~$qXVaE&;P@4jp$lfV;QnsvKY^YJhh^`gDcoTK10$y8q1iJ zySL>aNEJ^JiJ;`KvSY`bFEap6ZnA3`=9A(tShZ<+Hp7pL2`aCT=Sg{?T5A<^7Pp zAS}nb`Q_)9jit(U=sS}43#W(c%H6K$!inoz&izLNdm0!?QRvh~#K(@h*u}|)1?I@= zg1q_@b46F%!=1sq(9Ja>o`3xiE;P*vYms;QR+1O}L#-DA{OL)pIVK=%4__myH4>3} z4OG>(f>kz1Z1y0y8Ha^M7xbfJ(+oyN7J*}4rR%HqmH{0+OM_9RWgeM0lB*#Gw>GYc zN(pb34Ri0h@J??Wc=3Y%H$5$o1>GnI<~m4q?1DF#&? zT$_zK0e$D5CO~L4!_glKz``A*II_HOn$#yTyz`zo6)G9Hmv@IVoi~Q;Lkr?fFP~J6 zT2ogP*rGV2Av;~blnYp!VTEr`T1-@ihA(iZKS6!Q9Z&?uZ=FPM7qK({QQBUWeR5q> zH@Nmv&CIR!PI86(%xn?J2=XKqa%#IrA;G6^=x@6}O#B=kF4R0cXz&^__Oh@NRyzjM z_NAzDZ69sgfbv(_`0^NJFi*>t&|fR3ASMv#27a-=l|JzZdTB96!4ORO95OT|s5kZ= zz!&SjHuB7@aeH=;2?e$Pw+d||uO5d3;Gd{Fv15;6k*&z))h%-tHo@eh)d?Sd!CGq}xFgS@w=e*eg^D@Ydf3HIWL5pO_#5c3H9&pm z;b@7QwNYPwmAwa#u$(fDxH9o!NG8AnF~7Ic`I>n9Ge1D00e5ny`&zav8#c_@IG~%> zef{Y&!OCn+0FIn#Tqb0~Tc`B@)m>tF5y+8f zEjw7-+4!C8SmS|_h^COc z`em9AY|Pm9y|prk#ViEMxV cH+R>SV53P_W(rWxw*k+O=Uf~JXRoIG8~;)f_CE}YfG8p=B8?y-Ee%6U*MM|~bl1=g0t$k3hjfQ@gQ7GHFm#PdcQX<* zJa6v(sGslma(`>x-+I>b&vR$3nR#>i?6c24ul?F*c&iAO#Kj@TK|@2sm6j4yLPNs= zp`l&Z!^Q+sGLyu;frN4kQBg%{QBg`oM>|ssYZEjyskdNIf#opCIyRl|K{RI8RTh_ZOj2ap`pK3l(1(=Adi$Ab_@X_c~?X%-n%CI+$%nz*# zns1SQ-flgZ=d&A3Vuz>kUG$$L&M$bK&>t~o>ZHH5L^JMjd=Mq#llt?u*quTW`*t+q zM09NNDMvjqu}21MuP&G=w$a$k?WS>;PZ5XbNQiiG)Nq?@aq)5ILddHu>XSzsXpw6#GN}msBDOGi8nRRv z@#ZLuu#zIpOi+Guf)8 zq|fdbD=ROg@*og0`mBzZ#7F;7WFzy6bbsGX+z#usPI1!`eM=hEfN2r$-#X| z4aP$})zX1fQm)T*Bf|dl3K5hZuW6>xUs9JO5)>B2Wqmu4&?tCRTHOEU2b&eq|A+?8eWUxPem=aB+nAM z-LiSB7F1i_(xA|@Sy_wR+#@oI;`!NM5U}*zRywJ2%2u&*s<_VE$o1j~7Z&swpZd1p zT@2DU{&L;uH?SYy&7r(59bvrvjpzo7@q|B!gOe$wqr*1oHFf0M%`S&j($rLR%$?2M zD7P;1#xU%&{Q^5p0>6o2e}8|Y?AFK)G^`l30_SYO;x#nlIW)reVX>jJhVXCB*RCmw zkZF9l6>NZ`W`G6$hLis77W&<5-|ynye12Ul5>r!S#mNAj(f`G>V9pBkUPF>iKYDnjKkR#bL3(c-<4;8{sfB>5uK{*AAhkk}yN4-Z$}V#D@_ z6gh~~BJ#4ThWV?}bc5nE<5mT$$pr%SMC`J+R%NU4uy}|g!r42gzSr{zGLt5}k^Mwx zA7(FJucSj$hB@)t>eJkpngzY@f(vimo~8%Zb$I>=++%ga_u=xv_n~PeZNt)kFBH=D zcBdWjqwW494DSG@Pl1$_U+yd2bixjLt@N4s1=)B0?_8N-yZ%y7D&NM7ald-b>YoTs zRnU>1eNjS_{9|lSvuK}m#2lvDzZg{oXN>x-4{&R zGdbDW0+VKu8<5J7KZU1@!BxV(^jn}Tnb!E?q( zt?$Gn?idkdhdRXXz21`!FElNGs(8P6saUmOtawh*vlRT2TYaSv3N+24DpcYlkBq|< z?|2bd{&-X)=VhjY%0ih$##3e3OLiT0S*P4(y#d)|XpNNCLoIZzSEbiV$+XOBKuJ7# zbTQBetO=~HY*6+l4Y7C{*>)K-f~w;xEzOo`t?B#KMl~yz>gE|kwq^^H53SMpVp@{D z-*|^0P2PQaH2)}aJBZ}4RQ?Apf(}N?|RsFFY_U9bfY>_0^Y&=%Gy^%Jn zR*AOt^Se2Q@9|;XGg6k-^Q*DLw<5Sgx_TC49R?jd!jHlO!{a(rbFx2L`u) zB;BNDiJBoe?){i`u}rb{xR_O$bMVo_jSa4X@G$vg`Je$#?a}cuHOr>2wKk-Nsb@S> z^}P|B5&C?sCg-kLgduVvX?O6*YDh&%6F^+N zt;|?_4u=Kvtip9u0jYe#KLxlfR2D8{~h=9HH(#`?+p_NCt`hXqu=t;x_BhH-E67# ztnqYej%oHiwneZWdANV-?P@IsT2c5%EJQtJ~ zR2SoDrGANi`+l_kPyGx1$NXDFm_-f(!C3bLL<1)<;RKJc#RBL>?A~a1e~xs@JRB+* z+8@d{fBsC=ZBY3!icxYb9e2q1Wiio;J zrJa@dl0Exa!u!o}m>wDOc_+OD5sb8$oR6uN{@5thS4UdM^Ze(}pgr|_hxc-BhQH1E zGWkXKt+(>^Jln)+&H)px@6~)TrhI6ck45nOyM7{C(<11DLH<-RsZiPJlta}=%q0(w zX>LVx(;`BDW`$=ZywczEaCrYkR*7m2yeC5^?Vi3K*T`H$J3w2?u@x7~!j#Y|jR%Iu zqgbi=ja)m0O?6Cd9`Z8KZ4}7K#y{rc?z11C)wFTccF%0~uI<{yt@0$u4Aq^IIzHU& zBz?$5s;jC+=d0+l=&_=<=#zY(Z)I0!prNusePya&o3)&e<@rv+$X>rbbDwy)R`*RkzmKYmw4{G)!jJSO46Q8Sd>9;zg+(!`h2tRZEL?)$Mde zb*QzS%u1ot0yN1q?lfr|PfLsSp_=;DC}eOF33D9y*<5W@z!D(l^x@imX1(6PiHeW1@YzLx3!YJ^`2?WO7bWX)Cq?hc*+s0~} zYBN@Mcj`|$*4H|~FIW2DRlXO~s=M#@N~&iHn${a&2MYrJ0u%aj-or;qsLBh~?-a?t z);=~zr`;K?zIt2XJ6j&vZtS}*OMG*#O>hM__$=WtVo`KF1od7#10u9_(vO_or`eWu zy+|$3DK~+av~halAyMX(RtCb%D%c?s=%jh(GC1usb7=1{(4KOMD(2sTj*14{zQDST ze@;uD-W2kM-~%RmU^e~*M?1P4)5GfpXV-2=h!3~=f%u9c#wfDnF|4n5&(sr(ZoWP_ zLBxLARUk@VxEMhQF%?vz22i&OPi`)Z6xBup2sYG2L)uhc9*rJ&#zwN>MvU6G|@T=giNk1aT-SDfu0ZO+iXx5`R?({t}=vhd}H>EG(|BuFS6N z%yy1uEUdh|ye!YzSlHN@fD%kj?zRv^Hzr#r>VG!!s~s^DCnHA-dx(XdE#+mqhOg|L zAp%rXmmU3n{d1fqZWe!fvUU1vTEGNZE^}B|nV+-#ZX2k|f0+tWv~V-A))cd_0b~aB zA;`nU#{ZA<|B~~k$G_Fo_*0XOi^FLAnK?~yWv;1B(K^$1<=mM~gq!wZdD!@0OWtT7Xa^U0HKfi%zbXrf> zaS0AIG+{JpF%cCv^vyXew+CayoqH@nLn5I81(cyJgo+=B#VS5X;nM|VQ7PS6qZD6z z;|GbPQUwLP!om>wNIemHgKp%3h=uq>urQWD(ysVBv} z7wz)o$1e{uAN!$Q!>0TXK3+b%D>}rAvxAfW`ai50k0v51i2WaRhD~|5<{AcB_VKv= ztN*Z~@K6-=KO7*oSSgxFS3wJB>ZAWmCfIi&i|qe_4F55emkh!~td@4Tw88)3FfqtZ zZvQ7M2J|L8igOq8Zd$wJ?SH!7z>;164<-NKCHt2J{qK_fO^5z}y310FuF=s^VWBuK zjI{RdvF5LvEG8a|pMA8Sm!3LTtyC!|qE#*KT1vE9cyU)44ISfue{|ylme8p~cbORf zitI`q%DwvT=`rd3&fX^{?pBqlJW(Fq*KUXnf@sx>RKnssx5EFTjgO7Ul zz2IWS++1plOPcPvDi+rYeB>CZuCihO=k1&y+HN%ztj5%<5g46Qu%gf7n5r?AvWBe<{HMz+sJ>DN^5PniDr?22*f7B+?ZIAT_-C6 zzi_4$C!SD{B;S7#pyOUsUJBN2ar-2Fatbdjwk!TTI!1J4D)cY%z8pZMsNV-8mjWlb zD{}owAKPyhNTtw5^zAf_F!0XXE0@fwae~WQnAJibgh#b_Dj9#ReBy4iCe7>4c2pTg z@IGo!`CiVdg$hCcCf4KF4@Rc%KcW7%G5%)MBU^yQuA0cmroLiHQa@i~*At|>wTw#9 z(AHb<DnHBf5A?23-2Vt&Vb6`wfxNoXv;=;ExC zk$ADlG-v74h8gQ(ror2qwK}IaHz(6y$rpO>(XguRvN0SZC=Pbol*OPI?HP3A4~9+p zzRI+Ep|p8fJj-;+Sn8j5a@|dieKO9e# zc+W?`(Dc*%v25k$9K$^d7NuS}2i@b@QHSQbgXRgV^NsS++!sM&U?J);L0-+pkez6n z;neA`2|REW_fFJ^SGQbs3K=0ePl$J$MNk7DcGnyFt9V zF-|v}EU1aqvYxC##Q(Y9W@}=+R6cr&9o%~iN6Cw!npzdVKPvQgP35p7V)@w0&fb@w z61_A|Gppj`?a zleQRRa84sXi=SD@8B^X zNpWYI!#;!%UKE8A`C3bM(A|!DYcWRM(nV(&5ZuxAL~3nh&A+36yL^FyJE%sFP;-%yTFm*yYV!+gea>m^Zv4U)XS3b!k4FpU6j|2*_3j zKy+2jo%KJ8G#b8=UUWx2Cmx3u&TQBt0c#-0(5*#EWZs3 zb-U^XX%L;h2zbC4+gOK*J;U##<6^BqrXTp41u7#n1*lWp-5RQ_+Rvt;TZY;9N-Qds z-!nU|DuzPVA`>6hdNn&YkCtW-kB(Z|ndW^!ZNS&EoRiIQUo5kHo6cy~CyOO+C@S@b+L znrhI^^19HqoMdZD^6=RH;T4U5EAQR`tqW@HeaxQH&)*oYJwrUOnA&vHk{a_pA1(c< zf5q7W9C!BjDOXqXIzU(El45j*3qCGyizja7%T{^UpO`}4>NNTF<5|pmdCso%HNz(S z?E8x&ecl}&Z%vPk@F*@#UPq`FfnxD>%LBaqqwNIBIJ=`cIA3DnS#u*}If2Z(FQ_!R zySq)k`6agFRC?r=@p?8&T@!g~mU*T7Ob&T$uhtuUkKYz9PYNKX^`FBm^&OLT8g^z< zsIn!_wYP^i;ic;2#jkQB;--L8y9Y2q#f9i2RN}9Ur&F7i+8K-syC#oiL#url1>~km zUCA5fR3b)~DIlqB9ObJ#^YZyT2suqX6#xCv)aX5ED5Abu@+$L0SqC^%{Yv zzbR;EfPs6@c?;2b)95{VHcq_gp9ecVFTK5%7yaz>@4 zpMyTKnFdTva$I~^U^qCC>4AB7xWIi=7!~T|@g9Ivj3jY^g<*JG`EHYP7W7};E|n?E;hr4CipHVurJ0eW>GHY)N|4;xlI~x zx$b)|;Vl1EUO7o=<~r_=rH{1A9jWsok{2>b>8uY2h3H`UIeMNi*-H`4Uopr8xUN3o z?uG&`sAB9S=9P#@$Um+x#`rw(kUo$_UMBKjAa!n4W{Nvp`1UDg2#^vFK&(fC@G3=oab9DP!4|2 znQ{GMS)hhnMADZm{z^-M%?xDnxEPORSE%!`dl7*`1 zE&1u=^x;~iFH>d?2d6Ii=LbQF$(jXF;_gP=Jr)OJdWmm=@@m*gh_ulU=Rh_+_ z;UTAR(0Z()d{;RiZDOrS)FufRbj)Em#v*U7Iuobf6{_~S+6s4_G^Qg&d1BP+5et*{ z4Y01fxFjF%>Hqc>{^1~WHv_8FPr`QX3Nk~OnIMtp`1NY_mvptWbRG*twYPXXi=b@0 z;M{#0UQT6NCi1X^V7%PmB@Xj^e?A3ITd4pY^7one9_1v2Ak&p66DtTAm zTi$(n(_-N#78%xisS0`%55_><3sacz5xVj8}g|ps7|&`sO5}CYDrre z8WkEbKk{!3hZO*8Ov4$nuL6#X*Zf68lyaQ=#CUhjELA02jB)wq^*F)IE&Ss}gKnFN z-9-d>uNL0LJY7u)RT{-u>y!sa{xChYu+bve`!3P7^d4Ebkm@7xPR@jHp4!QW3>L0Q1>1KON4xRquVUTvkkbXT=nO? zS~Z*fZg0GwYO#DTyMDdIiAL~T z`iE@#p{tcb3vj74H~LnuI=OjuzEvqi=lbr5@g{)|Ak$;ZeY9Eroq#7Z@&eMRl%F?F zSLR$~wR4Pg%_~}9f9rT?Zds1GZrjYO7Mk)69(*L7<LLAQz;0T zD*0d3zJ=|}OgR=BegIXu65V|G%0uzxgvAHQaHyBsF6)DghAMEcwX!p; z@N2TQ5evJ?k^EDy^*L;iht)3m6$3@{FTtl=P2?7Q$tRNvw{2HV*p+3vN9-oMbg-Bs=Q3IF_rneWvhsgTfJ3r4uE>(7QC@#p=GkyjPr3{qu9+##!jK_qBxjr1_K8%`tyiK&ZiPnXCS4|B3cY1%Yb#|) zLVaR}@Z>MDxg_4A5siTT{=d=j2E}g~ZC^3AqiLRUNeqJcI*aHZF$ZGOA~wNMV#)=( zhcKhXL-tqK=!t^)mVIklzzZ#QcA@7Vg~Y2vbHO)C{h^8}dQE1%JNr);3&w~@%QA?s@03-*)>An}0R{10Q!i<6{D2U9C7M zf}si{)VcfK-{eQBeF>6p@nMPoJ~uKD zKY7G{H3+ow6AFwEWj0ER{i{jgcIpptq!%YE*pDUgu*+=(!Ba8_E(mpw42B1$q?G1a~V%%{@q`DA+V-kWfYz0_BsFkjjI=w$N9#+ zd;3!U*G|B5x4!lN!5-k7m*JK#Hb0*HO7mCNr=+0~ze9e$GTL^x?6=bVO{IV|FO1NK zOix%@Sp~fr|K{i4l?IxN8Z~D8GYm=e(!~M-GK)Vl{QFa66-ISdwwg=M-`ws<)yqJL zOuWOdAzgNtSUVjOc=hZY-=V?OR}!^*f_{(WUjyxnjQ(vGf{fDAJ-i!P^~8V1_xGpB z`g#pIoqEc9e;cB45};6w*(L^m3flPxVqHYV#y;3#p1&$s0|eji+8?=(>{|C?RSe=R>vZSo*q{m%$6s4h8{A33+* z{6_Z%w8BHf;2^=j75dYyV=yp@R0oO%oL||LS~svk5*umXn}3z^Cw&UE88WB%Z^pp_ zEUn(7=09fSO+C=)n;16AU+V1Vmj;At_z3C%TebW9tK>s(l0P2W`?)q;dggpt6N!7}k zc>kl~UtRjAJ_h7$HY-_n?N|02H9)q*9%ei&zZ#_s0b1xcM`{8u6VDc=7o#9vDF|Di&3i(Dh&vW|Cmg2!*oAf%GmXqH;fY!mpb<`M(TB4sZ% zxDp5+8I6-TVf{%HyDPymcmv`YC$B_eAmz zMck{ep;B+7#dF0R4l>+x|2i*(k8kDV=4bgQi^3E(vrbk`klzOD8l)AL&I1Py3 zBOzI+XJTMuuJAZAV>AB-nL!6LsA)W8Cbe$bZd*M^o!N}k4(u}Wsa&8dNG8EE+I=NWe);|VJ3QO!tzJZhdf8dC4w5tt-vTNlW=_iAEUz^CNH!qS!KnPy+&<2C z`gOK=W^1gDz27_$(Ih^{O#KcEQ7wZRx-Vd*1W?l#6(Jg*yvWEwjm3|o- zf9tydpMbkcdheIGy2CHaEaGvmbwD8#2o`Yw;RMU`6uY3MS;tZhj^SISK=i%ZvoHR z$Wz=RzB02Lmxr0~C5VLFn*Rez#4h!BQJx6@*R+M(B>)qQi=zwNSFCO4hM!Xjc)m-3 z`^=CXx6bpKi+6<(!|BpMoDWM!@0Zxj?$(^wJ2!2auB5rf&pP(0)^0dz(~5L$I1Vt; zt|nU9auRxk-ZFL_a`+nR%m(RZa9r&Ecw6=%vySlTk>_kt?^;aRbUaIZ z=S;78LTRp1RZK|KcB_xYH&T+qeb6BWpBf}pvp(^EIgfZhu=LdW+fR2)U_QVITQ`evv%>HfbC=U^OURf%}a8X^6Dq-?$saaA`2& zIJ$nHk&X?(!s(#UzwP69=d?$Vc`ki7MLuCjr`ehjdd5WF&~wwewN%~4NJw%-I*65;-SE4%vJAytZjjZX z>UFiMA4L|*M4)^wy%}C7EUBr=T%@{YA22^nY*3!ZYhaO>>g?dubB(P};NEpixRp8$ zBW&jOBn^wvPOwwAz)R5f4M1?ib0IZz?#EA_p-7e_L-i_@#cv#0Muz$1yA;Ax=D&9-p&Yh1H4_Yxeag^_CvPMUEtcs z@xf=cVd~u_LZR+W-eTi{b*NY|o==5swAB$;>GN~N?D^=(yDT-9>hVwIw_|THKO+$! zTy%aqMF6penI>8TsymT{(JFAzAMJR=Nhq_XM6;M;=M&GQ?GxV-@*dN6b}T>P2T)N9B+5=p&?TeVLK)u1XOr~7h&X5?MVWV%Xa8&d z(q?%QI|6Ze&^_a?O`$la~F zwx6lG1tO9=X%LyEJbB9=raC<)zz3Qyt~_ed9@^_nDT@TB5u5!yKg7GSnVvFJyA_YM z?h+UK;Eb-A6OGl@i%^-SycznD(-`Eu&X&Yu_*S6}@xse1wM2tgNhXedd(Nf>?;)gr zaHUyq1}e03o5!pv;%K8ameokFM%x6Lp2S*Jz6H7%q!P#JB{F+(uruh;7nRru>dLei zxwKncmwQCQ>rVJD;VoVRWY_TRsngqEdM3;PK;U=5P3^pt_LeyB$OZIG2i@lO7D)s( zL>nO%^bQUV5i^_9HTuciJG8`ul~%+UZU?2TF2yB+0TB@#f(+oL4-22gMHhjicE5rA zVJhH9fMzP5Hs0VsYjfMPbazJaRocPPXJQ7VhKAWA!Omxj3w+`Xc$TZ&O)1(#A0@(N z*sR@}-emj;qh9GL(X^Y4DE58#++7B50w+GOOFh>kGu2$FC670NiHx z!E&t{5s#zPyY}AGFAEgWi+>bs_3BJZ53wf9yDK17zoc04J1G&*sx&m~sOX~J>2xhq{pE;^0!aQxx`1zY z`kZg?d<#~N@F%ZvNO~@m(NML2q*pG=miXt?N2Bu1d1S~Y3W>+-xR|&)3eQjAmmd_& zkBw!~e_A4H%C+jYI%L?_zV_kcM+c%i)TjycM5C^ICTGWU-~=kOG-rwFl>v+FoSY{U zI0m`039+ApZt-kw!*)*OHoWI;@|-7d@&R{IN+#K}G;Wx=rMme`XXokWLTw~q55R~f z?=$ifBm(L9Lo7N~v+;GR^YNPF$r3^TM`~qsyZjS=-wULj3iY*<=kttF1O;0S3!>7Fb|HD=Flnqo^pO;Uvt9!dyvUMjcN0% z0>sVpLm2qPW@e|-XhpB*J_SpHo|+zWV?kdkPC*YR>_sPJk5)AqqpuZpfi)6U{cbUw~kI`A2o21KMg93|-@ z{OL!!G4^GWpdKzYo7kXQAICRd=X)2{EDa`oppiVA>od;tX|7}2=1AN9?Sp2!k?MHJ z_UxCc#N$(ap%vI2((l|CCPObX;!Xv=xgPYN&hb})f#A3gcaBd;!}|IyuOef!W45D{ zOoUVh8P=V1CM-Opk+&}le&bX(zuKKitwc&HWY}!;dxvC+jcdw|JlS;Hw|e*+e6q#V z%2p`+04g-I;;L5xuUqO(v&bt#q%oP$Q8)GW|; zMSpJ8w@oqO2r;OT=U6ZgqYioBBfgwe(gtrSPV?-XZgdXe4KjviK{uw%5<){i)Iy~{ z0{0>F-vK9|^0Jyk)~}7;P6seWd$G+nsT{wotNl9QRq`Kg6PdjeuEyqg4pXzL=qgh! zf+WeMj?USt3TJ?owU&-)OP}kv%fML8w*9Jo&Bra|QaF6ZZL1|rY{h1YIw(!E&}MZ=L! zZ<=RbQhI&#XsPyBoKW7hjC>(>kuKmAkqKKylI_%xXCJW3=e$iK=AzzeyVIWf+%U=m z4^s6R(`BVNPO8b(&bE%eRDod-m+Vw#x)MQx`;y7m=CzI6C(kAd-}8al4aCyXgb?I> zbK{s;rC6;cYgT=QYq;=RV2yo1MDhHjfvW4-c9TtQ$9gr~nWBJRK4qNCPykN(cI%E$ z+L`?1cAWZrWX;pNr6MwQE)h3(xwyuT*JoX|r5@j@gC2_Fjm0wSrf7!1BDeYPXK9=J zlyQiy!w=1lPeT*BJMiE%+;FeBi}eqEr|upH1L170gW6BKiB=09tK#wVA5Bv%-jbFaY++mOSXyoF@IKWlonm5s)2-H_<>ak-`s^3PpKfRA< z&0YLT&2)wlvy~}*1_F-^6B5t zxugr?KD4CaZBok;i>eMa*Cd0C`X2hM<=$ZP98bw2@c(SFqRyiojB7>cQX?)996aCX zLdG!TgA_;=)$)H{+CEnBQhvhM&-GSN+_RS|^X{%CTMlE{-c5uhl+jz5dCJ$(<~-}M zuBRQ3p*FGGOZ1RQkZq3M7!&4iWn0BE_&jxZTU)|l+4OMSoE$x^HI zU`jB?IPIpuYZyl)Lb#=9}BMv%zZs z9ZYqNOjC1sFNC5W;m6Fvi}^AQtY7@&cmq*?=|sSuq9e6^XMx~7G?Jz5=VJriiaW@` z-ANxECXN?YO@;deY;N`>H)}%cQ26h`2ip&Djw$qgxgl#K zqeWopp<(?H6O6lWVgb`BCCzr{mzlhR$NbHv2$$j8r!;EeON6gKshjhW7Za#tTP;AZ z-k$3Ofj5YHgC0DGeHTRNFcfNSohowG)n39!c`3utOMiIL`<%N(=R}5xvoXd`Fn?7fg=MGCW)chKgxRR;#OK%(M{Rn-2HCSWNcS^k&XY5)+T#HK@oN zv!1CT+vW)>hoPXy-g4Dh8dZ7THrzL9Rtum->Tz7Gwf1OhkP@oI5D0V)zyolF@x?dc0Z#t^oAcOmCP;YqpDHF6A ztdzzX@j2UCtA51=KsJ+*bV`1358O8&%tB`EnSTU0-tl<@mRKc%fJWHD>alc2+sFv@ z9m{U+BAm|4mZlUK3|-mUHqu&++-eVeTl!R-y-+8#g{!N09YBOgOb&pOU!D>DEhP2Z z+yC|3gD6651Vsw9FXlUdgU>H&|8i5-cz-cBBEOuVU#qT+cA!7D;`IG)l({AWWHi!n zq0{?C+4-^y6LBvQPeILSk#o$9={TtLF#B!v*a zm@;eMvE)*0yfIETa{k>X38&fvb9_A$CO`R6G4on_S@nd0NSAbshm;dLLBrgGWQ#za z=DpX?N!7IHTI9MN#)`siQ(iZhiH2b1HY8b2l{I+hajqts=f#d!XxGd8`gDcw&~wk5 z`%*YJfBAAhZ{4{3wg3wbAu}ZstNI>p=uC})h$QX{PMiIb^Ya66(_F_oEW@z$M}C}O zRnc1Ys#eP$6L5?9?kk>Bv7W5)*e#HEqjHdH-5!TV^CZT;p8iSZ`GJC4CbM_h7%S|n z&}e<$YW2G2FnH`kwp!3^qjM8e&uD^YPtAlLX$5mr`T;s^bWcPHHfVjc2YCt}TujQ{ zE_=-D4d&xan{VAl>WT-tCE1*oj0$1zraNkO@e>3@ycg7x^f-K!@HikoFWDr8>qr-| zb+&1&`SDfS1{at?pZM$@#NG6r5vOrpnM-swa9#8TaF^;)=)IZW@g;0y6+lBImL~r& z{FID2$8MFQtprTJ)G%$L!f)mGrBtYMJ!Z zE5+y>r9Sy%pHipquy46i-;a018Q|So8HcY-#Vgg>#`($5zA$tV=?W)l;~HC+m<&d9 z-i@YFh|#P%70)5oaltgeypy{9D7e@(uY!yi(n4JNHqgb)hQyQASGTk$= zd<4XjI46m%Cf~-scZ-%_uKVK~O>(OL*AE))j`xhUk z!|gjv#vj1z;664(y%zq|7{}&3Dh$g^TIa3SC#U)CxH=w(KC>PhoN95OH_F?-nDp(c zr-h10mQtOnY-H9F7OPQ|q*#;qKmn(DtH-p0eFVtcF3wytfL|ZwQb^}_Ja^05NLm?4 zF+ke7cu3%porX4pF32WW4~e|TR0$IozV@*Iq(T}Wg4edZ%X0_mAc)|f4vaWG9~1gA z)r9a{0GO_!(1D%ivuK{6pu@8mwf=r{2CeGI!dmyqbCk?SvVafSOt;biCNRqnR>kmT zZtAxS3Irw80lg^WFZpw~{Y|VNOsHDY(yLPh%|Dgtt~FrhiYIV%C-j`6bc|5N#-ABc z1PAAJ2>tQreh5eoa^OL;r_06nwxk*zfQoYWF|f*T&XpxdaOz9gTRSt@A{_a+AeAAw zbE8zk-FI%L6fHCO3#75Dy!Bk9Q$b@BbYstXLYFZn|FAmEl#`cNliYieH^XXAFt2sO zcXQnGl@?jC`EbDgMtRfH05^9d_@>wRlv(%wQpa_A^Twdh=YbK#*5)XC-!2?;;s7^y zExY?#Ogp~4L|S(q`W5Q8B?JE26Hy~>JBK<2v<~0M>sWV^LLGET%bkx?(H+-v3nvQw zV}YGJjd{Sq@zHHh@uhDQm&c)367Pa@ld4(<=G~nZgql^a6K>ZwSH_xr3X1k%rNzdR ze@76SNxIMwrAO$+9pUeZb9D&!k@pirrB#%$WR#0knoJ)!3sMNoD={93;4 zWSQ_n{#raC3laSiGM%6?3NyBbN=qr)Nmx1XxhveM>Zn9{LAU9+PutG-iN4RCXuHEX z-{>+7s<*dO8_#V$$!IfkyG}PhjhKGogHx_dLJz=7#|fc+_Tdn>?wy8YeS+k30nXGL zB)=8SBoK(u1cSS(HYQe_)6Q(!l_k`1f6C3+WDE-;z4Wy|Q~&y30G7E>?)k~PE~%%_B$qel9A!-B=A=c?&VuPYA>ueojuAZA~w{;cA& zbrD?I8l=tkj=Bx9j4WNshW4m0H&{(@9C~J)B-Nk97mJD30u&}Uv@Bx@rqC8c1XBm0 z<{OV{t&9&>!RVrv1?TZ86zl{RTMWhP)%|mg0*nc|F6j#GZUBJLipx*SYb0mO2_J1f z=&WAwzCd#E+JCdN(iCDi6&NTyTAiZ$@Ty3!7zIA8HfV#zCz{nH065MEwp7^5lK5-AOtU54-h>a1V)~JTmyR`ViTPGwf2`cjCPIaAwaJh zf?R-&Nc{nNH?31CU$kEeW)Km~Tclq8j8I>PdGqlh#ZUr^wpEjUL0m7ScYUW7Ip%VE zYjbP^zqm2+0+YD0M8CX=K;}SyMKhhFAw;Fbt=ae;lVyzdDUZESV_IfVWfFU$0#q4_glwF$JY6ujMKn6 z3{oC-W5q%-=*v?MKnQGpPH=~_zc3Sgkrzi=la;NktetjedfT1L`xM9B;@v?jC=Z}S z4G*dsOv1dyKLb2SA6xCM8&+<43K?%JdtaYzCI|n}BQ?04VL{+p(@BlkAw6jlaYFi3y&;3GJLhrXo@$P4%gXAm_UsI94^9TqI|lryGFq1v+4v!UK`uKJ%fM7v@H>H(y(>4mBYG@@vf^uLiZ(wRI^e zyXG|o#v1c=<* z_umctio2m>dwUkWB9kNw(42L7`upy&37tp#&w*c* zpe&0f1$KokBL}uW5PweMDQvP)m6#LM2&y^TY12*LI@4$$vd!d8!*QIdG%SO?K&*3q zVyzwp9No3)(j+MB+zZ2W$|P`ki3nz0k<(w$`s`iWRM6&~cJnv}+!ECBjO~oZ8k#Wmz5}R2mA1(dF1x>IU9XMpr*RyD!H;=T2y%Xn zXJYx(-iF4K4PRAmR#}DMQN)1|F5u$srMB>3Q7-G-x2G*9-4E2Y2YffOvxPc(fx;1;w+lalqH9>+_2x%R(x@^LJfkWB7I=16*4;1Hs*j|7r&n!Q9cW^>;5e#@h5>1EglgGs>NK>>He52bLmNqF>1)M z42!1m91Etk*@m~!qW41cuY#z(K^MA1@LP5*0-X*Z(>d#(6`EP--vPci8UFU9bVd9- z)s51X2-HhI-LUZw*_cj};oFSh73A5@S!r*}+qblv%(A_43^qPHSZWhvLdioy>GqbY z#d>B)l(UwQ$v#_>K~Yc>C*U7}N<`884FD4wc=O|*9}`fr11ap;U9Epi=wl#Memf}? z7hkwtT=-&7n<1{{be*r(@Ogr+x0*$PbO#F=h~GS@&r5BZ(U@zM$LE~tG88<}O+~z_ zRc~Lh0Qr)h=7C6m2I4FM;OT7BPB=m7{;~yePT|Xza8kbb)wO+hoB4CwwV{tu3K